%歐拉法解壹階常微分方程
%例子dy/h=-y+x+1
%f=inline('-y+x+1','x','y'); ? %微分方程的右邊項
f = inline('x-2*y','x','y');
y0 = 2; %初始條件
h = 0.025; ?%步長
xleft = 0; ?%區域的左邊界
xright = 1; %區域的右邊界
x = xleft:h:xright;
n = length(x);
%前向歐拉法
y = y0;
for i=2:n
y(i)=y(i-1)+h*f(x(i-1),y(i-1)); ?
end
plot(x,y,'ro');
hold on;
%改進歐拉法
y = y0;
for i=2:n
y(i)=y(i-1)+h/2*( f(x(i-1),y(i-1))+f(x(i),y(i-1))+h*(f(x(i-1),x(i-1)))); ?
end
plot(x,y,'g+');
%精確解用作圖
xx = x;
f = dsolve('Dy=x-2*y','y(0)=2','x');%求出解析解
y = subs(f,xx); %將xx代入解析解,得到解析解對應的數值
plot(xx,y);
legend('前向歐拉法','改進歐拉法','解析解');