微分方程.docx

上传人:b****6 文档编号:4301699 上传时间:2022-11-29 格式:DOCX 页数:13 大小:188.53KB
下载 相关 举报
微分方程.docx_第1页
第1页 / 共13页
微分方程.docx_第2页
第2页 / 共13页
微分方程.docx_第3页
第3页 / 共13页
微分方程.docx_第4页
第4页 / 共13页
微分方程.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

微分方程.docx

《微分方程.docx》由会员分享,可在线阅读,更多相关《微分方程.docx(13页珍藏版)》请在冰豆网上搜索。

微分方程.docx

微分方程

微分方程数值方法上机报告

BasicTheoryofOrdinaryDifferentialEquationsExperimentReport

 

教务处

2014年6月

上机作业

题目一:

对于初值问题u’=u,u(0)=1,在单区间【0,1】上,用Euler法,梯形法及RK方法进行计算,取步长h=0.1,0.2,0.5.

试比较,

(1)用同样的步长,三种方法中哪一个精度最好;

(2)对同一种方法以不同步长进行计算,哪一个结果最好.

所用公式:

Euler法公式:

梯形法公式:

RK法公式:

编写matlab程序:

1.Euler.m

functionUn=Euler(h)

%Un=Euler(h)

symsu

f=u;

U=zeros(1,1/h);

U

(1)=1;

fork=1:

1/h

U(k+1)=U(k)+h*subs(f,u,U(k));

end

Un=U;

End

2.tixingfa.m

functionUn=tixingfa(h)

%Un=tixingfa(h)

symsu

f=u;

U=zeros(1,1/h);

U

(1)=1;

fork=1:

1/h

U(k+1)=U(k)+h*subs(f,u,U(k));

U(k+1)=U(k)+h/2*(subs(f,u,U(k))+subs(f,u,U(k+1)));

end

Un=U;

end

3.RK.m

functionUn=RK(h)

%Un=RK(h)

symsu

f=u;

U=zeros(1,1/h);

U

(1)=1;

fork=1:

1/h

K1=subs(f,u,U(k));

K2=subs(f,u,U(k)+1/2*h*K1);

K3=subs(f,u,U(k)+1/2*h*K2);

K4=subs(f,u,U(k)+h*K3);

U(k+1)=U(k)+1/6*h*(K1+2*K2+2*K3+K4);

end

Un=U;

end

图像结果显示:

编写a1.m用于画图显示Euler法不同步长计算结果比较,

t0=0:

0.001:

1;

t1=0:

0.1:

1;

t2=0:

0.2:

1;

t3=0:

0.5:

1;

U0=exp(t0);

U1=Euler(0.1);

U2=Euler(0.2);

U3=Euler(0.5);

holdon

plot(t0,U0,'k')

plot(t1,U1,'b','Marker','x')

plot(t2,U2,'--r','Marker','+')

plot(t3,U3,':

r','Marker','*')

legend('Un=e^t','buchang0.1','buchang0.2','buchang0.5','Location','NorthWest')

title(''Euler法不同步长计算结果比较')

gridon

xlable('t')

ylable('Un')

holdoff

运行结果如下;图

由图可知对于Euler法步长取0.1计算结果最好。

编写a2.m用于画图显示梯形法不同步长计算结果比较,

t0=0:

0.001:

1;

t1=0:

0.1:

1;

t2=0:

0.2:

1;

t3=0:

0.5:

1;

U0=exp(t0);

U1=tixingfa(0.1);

U2=tixingfa(0.2);

U3=tixingfa(0.5);

holdon

plot(t0,U0,'k')

plot(t1,U1,'b','Marker','x')

plot(t2,U2,'--r','Marker','+')

plot(t3,U3,':

r','Marker','*')

legend('Un=e^t','buchang0.1','buchang0.2','buchang0.5','Location','NorthWest')

title('梯形法不同步长计算结果比较')

gridon

xlable('t')

ylable('Un')

holdoff

运行结果如下:

图2

图上四条线比较接近,但还是可以看到红色虚线有所偏离,为更好的比较将其早末端放大得下图3

由图可知对于梯形法步长取0.1计算结果最好。

编写a3.m用于画图显示RK法不同步长计算结果比较,

t0=0:

0.001:

1;

t1=0:

0.1:

1;

t2=0:

0.2:

1;

t3=0:

0.5:

1;

U0=exp(t0);

U1=RK(0.1);

U2=RK(0.2);

U3=RK(0.5);

holdon

plot(t0,U0,'k')

plot(t1,U1,'b','Marker','x')

plot(t2,U2,'--r','Marker','+')

plot(t3,U3,':

r','Marker','*')

legend('Un=e^t','buchang0.1','buchang0.2','buchang0.5','Location','NorthWest')

title('RK法不同步长计算结果比较')

gridon

xlable('t')

ylable('Un')

holdoff

运行结果如下:

图4

图上四条线比较接近,但还是可以看到红色虚线有所偏离,为更好的比较将其早末端放大得下图图5

由图可知对于RK法步长取0.1计算结果最好。

编写a4.m用于画图显示三种方法同一步长的精度比较,不妨取步长0.1

t0=0:

0.001:

1;

t1=0:

0.1:

1;

U0=exp(t0);

U1=Euler(0.1);

U2=tixingfa(0.1);

U3=RK(0.1);

holdon

plot(t0,U0,'k')

plot(t1,U1,'b','Marker','x')

plot(t1,U2,'--r','Marker','+')

plot(t1,U3,':

r','Marker','*')

legend('Un=e^t','Euler','tixingfa','RK','Location','NorthWest')

title('取步长0.1比较三种方法的精度')

gridon

xlable('t')

ylable('Un')

holdoff

运行结果如下:

图6

很明显,Euler法精度不及另外两种方法,但梯形法与RK法都与真实结果比较接近,先做放大处理

选择一个节点如t=0.8放大图像如下图7

由图可知还是RK法的精度较好。

结论:

综上图形结果显示,同样的步长Eluer法精度不及RK法和梯形法,RK法与梯形法比较接近但还是RK法精度好一些。

同一种方法取不同步长计算,步长越小计算结果越好。

 

题目二:

对于初值问题u’=u-2t/u,u(0)=1,在单区间【0,1】上,用Adams四阶预估-校正算法的PECE模式求其数值解,取步长h=0.1利用计算结果估计数值解的局部误差主项。

(真解u(t)=sqrt(1+2t))

所用公式:

Adams四阶预估-校正(PECE)公式:

编写matlab程序:

function[Un,e]=di13ti()

%[Un,e]=di13ti()

f0=u-2*t/u;

v=[t,u];

U=zeros(1,11);

T=0:

0.1:

1;

f=zeros(1,11);

h=0.1;

U

(1)=1;

f

(1)=1;

fork=1:

3

K1=subs(f0,v,[(k-1)*h,U(k)]);

K2=subs(f0,v,[(k-1)*h+1/2*h,U(k)+1/2*h*K1]);

K3=subs(f0,v,[(k-1)*h+1/2*h,U(k)+1/2*h*K2]);

K4=subs(f0,v,[(k-1)*h+h,U(k)+h*K3]);

U(k+1)=U(k)+1/6*h*(K1+2*K2+2*K3+K4);

f(k+1)=U(k+1)-2*T(k+1)/U(k+1);

end

fork=5:

11

U(k)=U(k-1)+h/24*(55*f(k-1)-59*f(k-2)+37*f(k-3)-9*f(k-4));

f(k)=U(k)-2*T(k)/U(k);

U(k)=U(k-1)+h/24*(9*f(k)+19*f(k-1)-5*f(k-2)+f(k-3));

f(k)=U(k)-2*T(k)/U(k);

end

Un=U;

fork=1:

11

zz(k)=sqrt(1+2*T(k));

end

e=U-zz;

end

运行结果及图形显示:

运行得:

>>[Un,e]=di13ti()

Un=

Columns1through8

1.00001.09541.18321.26491.34161.41421.48321.5492

Columns9through11

1.61251.67331.7321

e=

1.0e-05*

Columns1through8

00.04170.07890.11640.05710.02710.01270.0042

Columns9through11

-0.0013-0.0054-0.0088

编写a5.m用于画图显示计算结果,

t0=0:

0.001:

1;

t1=0:

0.1:

1;

U0=sqrt(1+2*t0);

U1=di13ti();

holdon

plot(t0,U0,'k')

plot(t1,U1,'--r','Marker','x')

legend('U=sqrt(1+2*t)','U1','Location','NorthWest')

gridon

xlable('t')

ylable('Un')

holdoff

运行结果如下:

图8

放大如下图9

由图可知Adams四阶预估-校正算法的PECE模式求其数值解精度相当好

结果:

表格一Adams四阶预估-校正算法的PECE模式数值解及其局部误差项

数值解

T0

T1

T2

T3

T4

T5

T6

T7

T8

T9

T10

数值解

1.0000

1.1094

1.1832

1.2649

1.3416

1.4142

1.4832

1.5492

1.6125

1.6733

1.7321

误差项

0

0.000000417

0.000000789

0.000001161

0.000000571

0.000000271

0.000000127

0.000000042

-0.000000013

-0.000000054

-0.000000088

综上图形结果及表格显示,Adams四阶预估-校正算法的PECE模式数值解与精确解相当接近。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1