用MATLAB解常微分方程y'=-2xy,0
<STRONG>用MATLAB解常微分方程y'=-2xy,0<x<3.y(0)=1计算解析解和数值解</STRONG><BR><BR><BR> matlab上有微分方程的解法吧<BR> 老兄,这个不用问吧,,随便学了点微积分和matlab的人都会做。 原方程的精确解为: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=;
xn=;
=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万能的同学们,应该清醒一下了。 本来只知道od45的看了才知道还有这么多问题 原帖由 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阶龙格库塔法
当然不是说龙格库塔法已经很完美,恰恰相反,他还存在很多的问题,不过楼上说的有点问题而已,如果有兴趣大家可以继续讨论
页:
[1]