回 帖 发 新 帖 刷新版面

主题:求教:老师说很简单的程序就15,6行,可是我怎么也编不出来,高手帮帮忙吧!

(1)编一个用欧拉方法解u'=f(t,u),t0<t≤T,
u(t0)=a 的程序,使之使用于任意右端函数f,任意步长h任意区间[t0,T]。用h=1/4,1/8,1/16分别计算初值问题
u'=u+u^2,t ∈(0,4)
u(0)=1/15=0.0666666……
在结点i/4(i=0,1,…,16)上打印出问题的精确解(真解为u(t)=e^t/16-e^t),计算近似解、绝对误差、先验误差界,分析出结果。 
(2)编一个与上题同样要求的改进欧拉发的计算程序,um+1的初值用欧拉方法提供,爹带步数s为输入参数。用它求解上题的问题,并将两个结果加以比较。(m+1是脚标)
(3)分别绘制出精确函数的图象和由数值接构成的离散点经过拟合的曲线图象,并比较两者。
(4)哪位仁兄会的话给我发EMAIL:minghui198585@163.com或Q我:57619843再次谢谢了

回复列表 (共2个回复)

沙发


这是用matlab写的,稍微改一下就行了,当然画图就算了。。
t=[0:0.1:10];
Y=inline('1./(1+9*exp(-t))','t');
y=t;
y(1)=0.1;
for n=1:100
    y(n+1)=y(n)+0.1*y(n)*(1-y(n));
end
err=y-Y(t);
vpa(y,8)
vpa(Y(t),8)
vpa(err,8)
plot(t,y);
hold on;
t=[0:0.01:10];
plot(t,Y(t));


这是改进的euler算法,也是用的matlab:
t=[0:0.1:10];
Y=inline('1./(1+9*exp(-t))','t');
y=t;
y(1)=0.1;
e=.1e-8;
for n=1:100
    y(n+1)=y(n)+0.1*y(n)*(1-y(n));
    yx=[1:50];
    m=1;
    yx(1)=y(n);
    yx(2)=y(n)+e+1;
    while(yx(m+1)-yx(m)>e||yx(m+1)-yx(m)<-e)
        m=m+1;
        yx(m)=y(n)+0.05*(y(n)*(1-y(n))+yx(m-1)*(1-yx(m-1)));
        yx(m+1)=y(n)+0.05*(y(n)*(1-y(n))+yx(m)*(1-yx(m)));
    end
    y(n+1)=yx(m);
end
err=y-Y(t);
vpa(y,8)
vpa(Y(t),8)
vpa(err,8)
plot(t,y);
hold on;
t=[0:0.01:10];
plot(t,Y(t));

写的不好,初学时编的。。。

板凳

一个非常好的CRM技术交流群: 34205108  欢迎大家加入 ,限50人 那你还等什么?

我来回复

您尚未登录,请登录后再回复。点此登录或注册