数值分析课程设计.docx

上传人:b****2 文档编号:3135706 上传时间:2023-05-05 格式:DOCX 页数:8 大小:22.30KB
下载 相关 举报
数值分析课程设计.docx_第1页
第1页 / 共8页
数值分析课程设计.docx_第2页
第2页 / 共8页
数值分析课程设计.docx_第3页
第3页 / 共8页
数值分析课程设计.docx_第4页
第4页 / 共8页
数值分析课程设计.docx_第5页
第5页 / 共8页
数值分析课程设计.docx_第6页
第6页 / 共8页
数值分析课程设计.docx_第7页
第7页 / 共8页
数值分析课程设计.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值分析课程设计.docx

《数值分析课程设计.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计.docx(8页珍藏版)》请在冰点文库上搜索。

数值分析课程设计.docx

数值分析课程设计

吉林农业大学

教学实习报告

 

学院信息技术学院

专级年级信息与计算科学2班

姓名乔松强

学号12101213

指教教师张红芹

 

2012年6月15日

实习名称

数值分析课程设计第九题

实习地点

信院六楼实验室

实习起止时间

2012.06.14~19

实习报告

一、实验目的:

利用MATLAB软件实现分别利用Euler方法、改进Euler方法、二阶Euler-Kutta方法、四阶Euler-Kutta方法求解给定初值问题。

二、实验原理:

1、Euler方法:

已知一阶微分方程:

y’=f(x,y)y(x0)=y0

(1)

将微分方程离散化,用向前差商(y(x(n+1)-y(x(n))/h代替积分

(1)中的微分方程可得

(y(x(n+1)-y(x(n)))/h=f(x(n),y(x(n)))(n=1,2,…)

化简得

y(x(n+1))=y(x(n))+f(x(n),y(x(n)))h(n=1,2,…)

若用y(n)≈y(x(n))代入上式可得到y(x(n+1))≈y(n+1)计算式为:

y(n+1)=y(n)+f(x(n),y(n))hn=1,2,…y0=y(a)

上式即为

(1)问题的近似解,利用逐次求解可得y1,y2,…等等。

 

2、改进的欧拉方法

用数值积分方法离散化问题

(1),两端积分有

y(x(n+1))-y(x(n))=∫xnxn+1(f(x,y(x))dx)(n=0,1,2…)

对右端积分使用梯形公式有:

∫xnxn+1(f(x,y(x))dx≈h/2[f(x(n),y(x(n)))+f(x(n+1),y(x(n+1)))]

再用yn,yn+1代替y(x(n)),y(x(n+1))得到计算公式

yn+1=yn+h/2[f(xn,yn)+f(x(n+1),y(n+1))]

很明显注意到上式为隐式形式。

改进欧拉方法先用欧拉公式求y(x(n+1))的一个近似值yn+1 ̄,称为预测值,然后用梯形公式进行矫正求得近似值y+1即

Yn+1 ̄=yn+f(xn,yn)h

Yn+1=yn+h/2[f(xn,yn)+f(x(n+1),Yn+1 ̄)]

3、二阶Runge-Kutta方法

对于

(1)式,使用差分概念。

(Yn+1-Yn)/h=f(Xn,Yn)推出

Yn+1=Yn+hf(Xn,Yn)

 

另外根据微分中值定理,存在0

Yn+1=Yn+hf(Xn+th,Y(Xn+th))

令K=f(Xn+th,Y(Xn+th))为平均斜率。

从而有:

K1=f(Xn,Yn);

K2=f(Xn+h/2,Yn+(1/2)hK1);

Yn+1=Yn+h*(c1K1+c2K2);

上式即为二阶Runge-Kutta方法,其中对c1,c2进行一定的取值,可得到更加简单的结果。

4、四阶Runge-Kutta方法

如果我们将上述方法加以推广,考虑初值问题

(1)的如下离散变量法:

Yn+1=Yn+hm(Xn,Yn,h),

其中

m(Xn,Yn,h)=∑cr*Kr,

K1=f(Xn,Yn)

Kr=f(Xn+arh,Yn+∑(j=1,…,n-1)brj*Kj)

生活中常用4级四阶Runge-Kutta方法:

 

Yn=1=Yn+(h/6)*(K1+2K2+2K3+K4)

其中

K1=f(Xn,Yn)

K2=f(Xn+(1/2)*h,Yn+(1/2)*h*K1)

K3=f(Xn+(1/2)*h,Yn+(1/2)*h*K2)

K4=f(Xn+h,Yn+h*K3)

X0=a,Xn=a+nh,h=(b-a)/N,n=1,2,…,N.

此方法应用最广泛,最早。

 

三、实验程序:

1、euler方法:

建立m文件

function[x,y]=euler(fun,x0,xfinal,y0,N);

h=(xfinal-x0)/N;

x

(1)=x0;

y

(1)=y0;

fori=1:

N

y(i+1)=y(i)+h*feval(fun,x(i),y(i));

x(i+1)=x(i)+i*h;

 

end

2、改进euler方法

function[x,y]=eulerchange(fun,x0,xfinal,y0,N);

h=(xfinal-x0)/N;

x

(1)=x0;y

(1)=y0;

fori=1:

N

x(i+1)=x(i)+i*h;

y1=y(i)+h*feval(fun,x(i),y(i));

y2=y(i)+h*feval(fun,x(i+1),y1)

y(i+1)=(y1+y2)/2;

end

3、Runge-Kutta方法

function[x,y]=rk2(fun,x0,xfinal,y0,N);

h=(xfinal-x0)/N;

a=1/2;

fori=1:

N

K1=feval(fun,x(i),y(i));

K2=feval(fun,(x(i)+a*h),(y(i)+a*h*K1));

c1=(2*a-1)/(2*a);c2=1/(2*a);

y(i+1)=y(i)+h*(c1*K1+c2*K2);

end

4、四阶Runge-Kutta方法

function[x,y]=Euler1(a,b,n,w,)

h=(b-a)/n;

x=a;

y=w;

fori=1:

n

k1=-y(i)^2+x(i)^2+1;

k2=-(y(i)+(h*K1)/2)^2+(x(i)+h/2)^2+1;

K3=-(y(i)+(h*k2)/2)^2+(x(i)+h/2)^2+1;

k4=-(y(i)+h*k3)^2+(x(i)+h)^2+1;

y(i+1)=y(i)+(k1+2*k2+2*k3+k4)*h/6;

x(i+1)=x(i)+i*h;

end

四、实验题目:

对初值问题

 

(1)取

,分别用Euler方法、改进Euler方法、二阶Runge-Kutta方法、四阶Runge-Kutta方法求解,并与精确解进行比较。

(2)分析上述方法的计算量和计算精度,体会四阶Runge-Kutta方法的优点

解:

(1)建立m文件’doty’:

functionf=doty(x,y)

f=-(y^2)+x^2+1;

>>[x,y]=euler('doty',0,1,1,20)

x=

Columns1through10

00.05000.15000.30000.50000.75001.05001.40001.80002.2500

Columns11through20

2.75003.30003.90004.55005.25006.00006.80007.65008.55009.5000

Column21

10.5000

 

y=

Columns1through10

1.00001.00001.00011.00121.00561.01761.04391.09451.18261.3247

Columns11through20

1.54011.84962.27312.82523.51134.32295.23856.22847.26498.3311

Column21

9.4232

[x,y]=eulerchange('doty',0,1,1,20)

y2=1.0001y2=1.0012y2=1.0050y2=1.0151y2=1.0372y2=1.0794y2=1.1530y2=1.2720y2=1.4529y2=1.7133y2=2.0695y2=2.5339y2=3.1118y2=3.7997y2=4.5861y2=5.4553y2=6.3914y2=7.3822y2=8.4198y2=9.5004

x=

Columns1through10

00.05000.15000.30000.50000.75001.05001.40001.80002.2500

Columns11through20

2.75003.30003.90004.55005.25006.00006.80007.65008.55009.5000

Column21

10.5000

 

y=

Columns1through10

1.00001.00011.00071.00341.01131.02991.06721.13421.24491.4162

Columns11through20

1.66612.01252.46923.04333.73254.52515.40336.34857.34588.3863

Column21

9.4664

>>[x,y]=rk2(‘doty’,0,1,1,20)

[x,y]=rk2('doty',0,1,1,20)

?

?

?

Undefinedfunctionorvariable"x".

Errorin==>rk2at5

K1=feval(fun,x(i),y(i));

(程序存在问题,无法运行)

>>[x,y]=Euler1(0,1,20,1)

?

?

?

Error:

File:

Euler1.mLine:

2Column:

31

Unbalancedorunexpectedparenthesisorbracket.

(2)Euler方法是一阶方法,计算比较简单,精确度不高;改进的Euler方法为二阶方法,精确度较原方法高;二阶

Runge-Kutta方法计算量较大,精确度更高,四阶的最

 

为有效精确,应用更广泛,但计算更复杂。

 

五、实验分析及心得:

结果分析

Eluer方法的总误差是O(h),称其为一阶方法。

改进的Euler方法的总体截断误差是O(h),这是二r阶方法。

一个方法的总体截断误差若为O(h),则,称其为r阶方法。

一般来说,方法的总体截断误差阶数越高,其精度越高。

龙格库塔法是通过计算不同点上的函数值,并对这些函数值作线性组合,构造近似公式,再把近似公式与解的泰勒展开式进行比较,使前面的若干项相同,从而使近似公式达到一定阶数。

二阶Runge-Kutta法是用k1和k2的加权平均值来近似k经推导得到二阶Runge-Kutta法最近本的形式

四阶Runge-Kutta法是用Runge-Kutta法有k1和k2k3和k4的加权平均值来近似k

在计算精度上,四阶经典龙格-库塔方法的误差最小,改进欧拉方法其次,欧拉方法误差则比较大,所以四阶经典龙格-库塔方法得到最佳的精度。

而在计算量上面,相应地,很明显的四阶经典龙格-库塔方法也是最大,改进欧拉方法其次,欧拉方法计算量最小。

这样的结果,说明了运用以上三种方法时,其计算量的多少与精度的大小成正比。

我们在实际运用与操作中,可以根据实际情况,选择这3种方法中的其中一种最适合的,追求精度的话,可以使用四阶经典龙格-库塔方法;而改进的欧拉方法,在精度上和计算量上都表现得很出色,能够满足一般情况;而欧拉方法更主要的是适用于对

的估计上,相应的,精度则有所欠缺。

个人心得体会

在整个课程设计完成的过程中,从始至终按照理论结合实践的思想,按照计划稳步进行。

课程设计内容清晰,理论详细,编写程序简单,达到了课程设计的目的及要求。

通过此次课程设计的过程,自身也收获了很多,不仅更深入的学习了理论知识,而且能够将书本上的理论知识结合程序运算实际应用,提高了动手实践能力。

同时也学习了很多与课程设计有关的计算机操作,尤其能够熟练应用Matlab软件。

通过“数值计算方法”和Matlab的学习,能够有效的将二者相结合解决一些数学上的实际应用问题。

这次课程设计获益良多相信不仅对于计算方法这门学科,对以后的工作学习都有极大的帮助。

实际成绩评定

签章

年月日

指导教师意见:

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2