您可以使用ode45
或者你可以使用一個數值方法。 0.5 * X * Y + 0.5 -
要將方程分裂成兩個一階方法
U(X)= Y '(x)的
U'(x)= X
無論哪種方式* U /(X + 1)
Y(1.3)= 0.5
U(1.3)= 2
這樣做時,自己...
function StackOverflow
close all
set(groot,'defaultLineLineWidth',3)
dx=0.01;
x = (0:dx:1.3)';
N = length(x);
Y = nan(size(x,1),2);
Y(N,:) = [0.5, 2];
F [email protected](x,y) [y(2) , x-0.5*x.*y(1)+0.5*y(2)./(x+1)];
for i=N:-1:2 % calculation loop
k_1 = F(x(i), Y(i, :));
k_2 = F(x(i) + 0.5*dx, Y(i,:) + 0.5*dx*k_1);
k_3 = F(x(i) + 0.5*dx, Y(i,:) + 0.5*dx*k_2);
k_4 = F(x(i) + dx, Y(i,:) + dx*k_3);
Y(i-1,:) = Y(i,:) + (dx/6)*(k_1+2*k_2+2*k_3+k_4); % main equation
end
y = Y(:,1);
u = Y(:,2);
figure(1)
set(gcf, 'units', 'normalized')
subplot(2,1,1)
plot(x , y)
set(gca,'fontsize',14, 'Position',[0.12 0.57 0.85 0.40])
xlim([min(x), max(x)])
xticks(linspace(min(x), max(x), 5))
xticklabels({})
ylabel('$y(x)$', 'Interpreter', 'latex')
subplot(2,1,2)
plot(x , u)
set(gca,'fontsize',14, 'Position',[0.12 0.125 0.85 0.40])
xlim([min(x), max(x)])
xticks(linspace(min(x), max(x), 5))
xlabel('$x$', 'Interpreter', 'latex')
ylabel('$y''(x)$', 'Interpreter', 'latex')
end
,或者讓Matlab的爲你做...
function StackOverflow2
%Note: t = xMax - x
[t,Y] = ode45(@F ,[0 1.3],[0.5; 2]);
z = flipud([t,Y]);
x = max(t) - z(:,1);
y = z(:,2);
u = z(:,3);
figure(2)
subplot(2,1,1)
plot(x , y)
set(gca,'fontsize',14, 'Position',[0.12 0.57 0.85 0.40])
xlim([min(x), max(x)])
xticks(linspace(min(x), max(x), 5))
xticklabels({})
ylabel('$y(x)$', 'Interpreter', 'latex')
subplot(2,1,2)
plot(x , u)
set(gca,'fontsize',14, 'Position',[0.12 0.125 0.85 0.40])
xlim([min(x), max(x)])
xticks(linspace(min(x), max(x), 5))
end
function dydt = F(t,y)
dydt = [y(2); (1.3-t)-0.5*(1.3-t).*y(1)+0.5*y(2)./((1.3-t)+1)];
end
對於這類問題,你爲什麼不使用['鎢alpha'](http://www.wolframalpha.com/)? – qbzenker