请教微分方程里的euler法编程问题
请问EULER法,改进的EULER法以及线性二步法求解微分方程初值问题U'+2U=expt,U(0)=1该怎么用matlab编程啊?那位高手帮一下忙?谢谢了! euler法:function=Euler_f(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;
y(n+1)=y(n)+h*feval(ydot_fun,x(n),y(n));
end
主程序:
ydot_fun=inline('-2*y+exp(x)');
=Euler_f(ydot_fun,0,1,0.02,10)
运行结果:
x =
Columns 1 through 10
0 0.0200 0.0400 0.0600 0.0800 0.1000 0.1200 0.1400 0.1600 0.1800
Column 11
0.2000
y =
Columns 1 through 10
1.0000 0.9800 0.9612 0.9436 0.9271 0.9116 0.8973 0.8839 0.8716 0.8602
Column 11
0.8497 多谢了! 学了一手 改进的EULER法
m函数:
function=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)');
>> =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法的计算结果进行比较...
页:
[1]