声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3190|回复: 5

[应用数学] 用MATLAB解常微分方程y'=-2xy,0

[复制链接]
发表于 2006-6-27 14:37 | 显示全部楼层 |阅读模式

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

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

x
<STRONG>用MATLAB解常微分方程y'=-2xy,0&lt;x&lt;3.y(0)=1计算解析解和数值解</STRONG><BR><BR><BR>
回复
分享到:

使用道具 举报

发表于 2006-6-30 11:00 | 显示全部楼层
matlab上有微分方程的解法吧<BR>
发表于 2006-7-5 23:42 | 显示全部楼层
老兄,这个不用问吧,,随便学了点微积分和matlab的人都会做。
发表于 2006-7-6 12:52 | 显示全部楼层
原方程的精确解为:y=exp(-x^2)

matlab文件1:one_ya.m
function dydx=one_ya(x,y)
dydx=[-2*x*y(1)];
matlab文件2:solu_one_ya.m
x0=[1];
xn=[0:0.01:3];
[x,y]=ode45(@one_ya,xn,x0);
plot(x,y,'b-')
hold on;
a=0:0.01:3;
b=exp(-a.^2);
plot(a,b,'r.')

matlab积分解 :步长0.05时0.000123946766;步长0.01时0.000123951410;步长0.005时0.000123999220;
精确解0.00012340980409

可以看出,步长越小结果误差越大,所以已经习惯了ode45万能的同学们,应该清醒一下了。
发表于 2006-8-21 00:28 | 显示全部楼层
本来只知道od45的看了才知道还有这么多问题
发表于 2006-8-21 06:19 | 显示全部楼层
原帖由 flybaly 于 2006-7-6 12:52 发表
原方程的精确解为:y=exp(-x^2)

matlab文件1:one_ya.m
function dydx=one_ya(x,y)
dydx=;
matlab文件2:solu_one_ya.m
x0=;
xn=;
=ode45(@one_ya,xn,x0);
plot(x,y,'b-')
hold on;
a=0:0.01:3;
b=e ...



首先就正一个问题,ode45本身就是一种变步长,你这里改变xn并不是真正意义上的改变步长
而仅仅是强制要求ode45在你所给定的参数输出结果

另外关于龙格库塔法步长对其进度的影响早就有定论:单从一步计算来说,步长越小,则截断误差就越小,但随着步长的减小,在一定的求解范围内所要完成的步数就增加了,步数的增加不但会引起计算量的增加,而且有可能导致舍入误差的严重积累。

另外有些问题在一定要求下,它的求解区间的不同部分,对步长的要求可能相差很大。如果选用相同步长计算,为满足精度要求,则必须取最小步长,从而增加计算量。自适应步长的引入目的就是为了解决这一问题,而且效果可以说是相当不错,ode45就是这样一种自适应4/5阶龙格库塔法

当然不是说龙格库塔法已经很完美,恰恰相反,他还存在很多的问题,不过楼上说的有点问题而已,如果有兴趣大家可以继续讨论
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-16 09:40 , Processed in 0.053790 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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