|
改进的EULER法
m函数:
function[x,y]=Euler_r(ydot_fun,x0,y0,h,N)
% ydot_fun 为一阶微分方程的函数
% x0,y0为初始条件;
% h为区间步长
% N为区间个数
x=zeros(1,N+1);y=zeros(1,N+1);
x(1)=x0;y(1)=y0;
for n=1:N
x(n+1)=x(n)+h;
ybar=y(n)+h*feval(ydot_fun,x(n),y(n));
y(n+1)=y(n)+h/2*(feval(ydot_fun,x(n),y(n))...
+feval(ydot_fun,x(n+1),ybar));
end
主程序:
ydot_fun=inline('-2*y+exp(x)');
>> [x,y]=Euler_r(ydot_fun,0,1,0.02,10)
运行结果:
x =
Columns 1 through 8
0 0.0200 0.0400 0.0600 0.0800 0.1000 0.1200 0.1400
Columns 9 through 11
0.1600 0.1800 0.2000
y =
Columns 1 through 8
1.0000 0.9806 0.9624 0.9452 0.9292 0.9142 0.9003 0.8873
Columns 9 through 11
0.8753 0.8642 0.8541
可以和上面EULER法的计算结果进行比较... |
|