声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1724|回复: 4

[编程技巧] 请教微分方程里的euler法编程问题

[复制链接]
发表于 2006-10-18 07:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2006-10-18 08:41 | 显示全部楼层
euler法:
function[x,y]=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)');
[x,y]=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

评分

1

查看全部评分

 楼主| 发表于 2006-10-18 18:09 | 显示全部楼层
多谢了!
发表于 2006-10-20 10:41 | 显示全部楼层
学了一手
发表于 2006-10-20 12:44 | 显示全部楼层
改进的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法的计算结果进行比较...
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-25 03:29 , Processed in 0.055055 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表