lengyuese 发表于 2006-10-18 07:51

请教微分方程里的euler法编程问题

请问EULER法,改进的EULER法以及线性二步法求解微分方程初值问题U'+2U=expt,U(0)=1该怎么用matlab编程啊?那位高手帮一下忙?谢谢了!

fanghuikeer 发表于 2006-10-18 08:41

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

lengyuese 发表于 2006-10-18 18:09

多谢了!

ak47kill 发表于 2006-10-20 10:41

学了一手

fanghuikeer 发表于 2006-10-20 12:44

改进的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]
查看完整版本: 请教微分方程里的euler法编程问题