第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法 2

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法 2
第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法 2

第8章 常微分方程数值解法

本章主要内容:

1.欧拉法、改进欧拉法. 2.龙格-库塔法。

3.单步法的收敛性与稳定性。

重点、难点

一、微分方程的数值解法

在工程技术或自然科学中,我们会遇到的许多微分方程的问题,而我们只能对其中具有较简单形式的微分方程才能够求出它们的精确解。对于大量的微分方程问题我们需要考虑求它们的满足一定精度要求的近似解的方法,称为微分方程的数值解法。本章我们主要

讨论常微分方程初值问题?????==00

)()

,(y

x y y x f dx dy

的数值解法。

数值解法的基本思想是:在常微分方程初值问题解的存在区间[a,b]内,取n+1个节点a=x 0<x 1<…<x N =b (其中差h n = x n –x n-1称为步长,一般取h 为常数,即等步长),在这些节点上把常微分方程的初值问题离散化为差分方程的相应问题,再求出这些点的上的差分方程值作为相应的微分方程的近似值(满足精度要求)。

二、欧拉法与改进欧拉法

欧拉法与改进欧拉法是用数值积分方法对微分方程进行离散化的一种方法。

将常微分方程),(y x f y ='变为()

*+=?++1

1))(,()()(n x

n x n n dt

t y t f x y x y

1.欧拉法(欧拉折线法)

欧拉法是求解常微分方程初值问题的一种最简单的数值解法。

欧拉法的基本思想:用左矩阵公式计算(*)式右端积分,则得欧拉法的计算公式为:N

a

b h N n y x hf y y n n n n -=

-=+=+)1,...,1,0(),(1 欧拉法局部截断误差

11121

)(2

++++≤≤''=n n n n n x x y h R ξξ或简记为O (h 2)。

我们在计算时应注意欧拉法是一阶方法,计算误差较大。

欧拉法的几何意义:过点A 0(x 0,y 0),A 1(x 1,y 1),…,A n (x n ,y n ),斜率分别为f (x 0,y 0),f (x 1,y 1),…,f (x n ,y n )所连接的一条折线,所以欧拉法亦称为欧拉折线法。

例1用欧拉法解初值问题

??

??

?=≤≤-=1)0()

10(2y x xy dx dy

在x =0 (0.2) 1处的近似解。(计算过程保留4位小数)。 【思路】 用欧拉法求解常微分方程的初值问题时,首先熟练掌握欧拉公式的一般形式, 根据具体题目写出找出欧拉公式的迭代式,并根据初始条件和所给步长进行迭代求解。 解 ∵ f (x ,y )=-2xy ,h =0.2,

欧拉公式为:

)

5,4,3,2,1,0()4.01()2(2.0),(1=-=-+=+=+n y x y x y y x hf y y n n n n n n n n n

列表计算如下:

2.改进欧拉法

改进欧拉法比欧拉法的计算准确,是对欧拉法的改进。改进欧拉法的基本思想:用梯形公式计算(*)式右端积分,则得改进欧拉法的计算公式为:

[]N

a b h N n y x f y x f h

y y n n n n n n -=

-=++

=+++)1,...,1,0(),(),(2

111

利用改进欧拉法计算常微分方程初值问题时,我们应注意此公式为隐式表达式,需要对它进行迭代求解。计算时可以采用一次迭代和多次迭代,因此,就有改进欧拉法预估-校正法公式和反复迭代的改进欧拉法预估-校正法公式。 改进欧拉法预估-校正法公式:

()()[]

??

??

?-=++=+=++++)

1,...,1,0(),(),(2),(011101N n y x f y x f h y y y x hf y y n

n n n n n n n n n

反复迭代的改进欧拉法预估-校正法公式:

()()()[]

????

?=-=++=+=+++++),...,1,0,1,,0(),(),(2)

,(1111

01m N n y x f y x f h y y y x hf y y m n n n n n m n n n n n

改进欧拉法的局部截断误差1113

1

)(12

++++≤≤'''=n n n n n x x y h R ξξ或简记为O (h 3)。从局部截断误差的形式看,改进欧拉法是二阶方法,因此,它比欧拉法更精确。 例2用预估-校正法求初值问题

?????=≤≤--='1

)0()

10(2

y x xy y y

在x=0(0.2)1的解。

【思路】掌握预估-校正法的计算公式,根据已知条件迭代求解。 解 步长h=0.2,将2

),(xy y y x f --=代入预估-校正公式,整理得

????

?+--=-=+++++2

)0(11)0(1212)0(1

)

((1.01.09.02.08.0n n n n n n n n n n n y x y y x y y y x y y 列表计算如下:

例3用改进欧拉法求解例1的初值问题,要求3)

1()(10--<-m n

m n y y 。

【思路】掌握改进欧拉法的计算公式,根据已知条件迭代求解,并检验迭代解是否满

足精度要求,若满足则确定此解为常微分方程在某点的近似解。 解 将xy y x f 2),(-=代入改进欧拉法的计算公式得:

()()[]()

[]

????

?+-=++=-=-+=+=-++-++++)

2.0),(),(2)4.01()2(2.0),(1111111

)0(1m n n n n n m n n n n n m n n n n n n n n n n

y x y x y y x f y x f h y y y x y x y y x hf y y

列表计算如下:

三、龙格-库塔法 1.龙格-库塔法

龙格-库塔法具有精度高、收敛、稳定,不需要计算高阶导数等优点,是求解微分方程初值问题的一组著名的显示单步方法,广泛应用于求解常微分方程的初值问题。本章我们介绍了二、三、四阶龙格-库塔法。 龙格-库塔法的基本思想:

在计算初值问题?

??=='00)()

,(y x y y x f y 的数值解时,考虑均差h x y x y n n )()(1-+,则由微分中值

定理可得)10()

()()(1<<+'=-+θθh x y h x y x y n n n , 由初值问题可得公式为:

))(,()()(1h x y h x hf x y x y k k k k θθ+++=+上式中))(,(h x y h x f k k θθ++称为区间

上的平均斜率。如果给平均斜率一种计算方法,就可得到计算y (x n+1)的近似值y n+1的公式。

如果仅取n x 处的斜率值),(n n y x f 作为平均斜率的近似值,则得到的1+n y 的公式为欧拉公式;

如果取1,+n n x x 处的斜率值),(n n y x f ,),(11++n n y x f 的平均值作为平均斜率的近似值,则得到的1+n y 的公式改进欧拉公式。 ㈠ 二阶龙格-库塔法的公式和局部截断误差:

????

???+==++=++)

,(),()

(112122111hk y x f k y x f k k k h y y n n n n n n λλ

在上式中选择不同的参数,会得到不同的二阶龙格-库塔法公式,所以二阶龙格-库塔法公式不唯一。二阶龙格-库塔法公式的局部截断误差为Ο(h 3)。

常见的二阶龙格-库塔法公式有以下两种 改进欧拉法迭代公式

微分方程数值解法

《微分方程数值解法》 【摘要】自然界与工程技术中的很多现象,可以归结为微分方程定解问题。其中,常微分方程求解是微分方程的重要基础内容。但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge —Kutta 方法、Adams 预估校正法以及勒让德谱方法等,通过具体的算例,结合MA TLAB 求解画图,初步给出了一般常微分方程数值解法的求解过程。同时,通过对各种方法的误差分析,让大家对各种方法的特点和适用范围有一个直观的感受。 【关键词】 常微分方程 数值解法 MA TLAB 误差分析 引言 在我国高校,《微分方程数值解法》作为对数学基础知识要求较高且应用非常广泛的一门课程,不仅 在数学专业,其他的理工科专业的本科及研究生教育中开设这门课程.近四十年来,《微分方程数值解法》不论在理论上还是在方法上都获得了很大的发展.同时,由于微分方程是描述物理、化学和生物现象的数学模型基础,且它的一些最新应用已经扩展到经济、金融预测、图像处理及其他领域 在实际应用中,通过相应的微分方程模型解决具体问题,采用数值方法求得方程的近似解,使具体问题迎刃而解。 2 欧拉法和改进的欧拉法 2.1 欧拉法 2.1.1 欧拉法介绍 首先,我们考虑如下的一阶常微分方程初值问题 ???==0 0)() ,('y x y y x f y (2--1) 事实上,对于更复杂的常微分方程组或者高阶常微分方程,只需要将x 看做向量,(2--1)就成了一个一阶常微分方程组,而高阶常微分方程也可以通过降阶化成一个一阶常微分方程组。 欧拉方法是解常微分方程初值问题最简单最古老的一种数值方法,其基本思路就是把(2--1)中的导数项'y 用差商逼近,从而将一个微分方程转化为一个代数方程,以便求解。 设在[]b a ,中取等距节点h ,因为在节点n x 点上,由(2--1)可得:

常微分方程作业欧拉法与改进欧拉法

P77 31.利用改进欧拉方法计算下列初值问题,并画出近似解的草图:dy + =t = t y y ≤ ≤ ,2 ;5.0 0,3 )0( )1(= ,1 ? dt 代码: %改进欧拉法 function Euler(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y+1; 调用:Euler(0,3,[0,2],0.5) 得到解析解:hold on; y=dsolve('Dy=y+1','(y(0)=3)','t'); ezplot(y,[0,2]) 图像:

dy y =t - t y ;2.0 t = ≤ )0( 0,5.0 ,4 )2(2= ≤ ? ,2 dt 代码: function Euler1(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y^2-4*t; 调用: Euler1(0,0.5,[0,2],0.2) 图像:

微分方程常用的两种数值解法:欧拉方法与龙格—库塔法

四川师范大学本科毕业论文 微分方程常用的两种数值解法:欧拉方法与龙 格—库塔法 学生姓名XXX 院系名称数学与软件科学学院 专业名称信息与计算科学 班级2006级 4 班 学号20060640XX 指导教师Xxx 四川师范大学教务处 二○一○年五月

微分方程常用的两种数值解法:欧拉方法与龙格—库塔法 学生姓名:xxx 指导教师:xx 【内容摘要】微分方程是最有生命力的数学分支,在自然科学的许多领域中,都 会遇到常微分方程的求解问题。当前计算机的发展为常微分方程的应用及理论研究提供了非常有力的工具,利用计算机解微分方程主要使用数值方法,欧拉方法和龙格——库塔方法是求解微分方程最典型常用的数值方法。本文详细研究了这两类数值计算方法的构造过程,分析了它们的优缺点,以及它们的收敛性,相容性,及稳定性。讨论了步长的变化对数值方法的影响和系数不同的同阶龙格—库塔方法的差别。通过编制C程序在计算机上实现这两类方法及对一些典型算例的结果分析比较,能更深切体会它们的功能,优缺点及适用场合,从而在实际应用中能对不同类型和不同要求的常微分方程会选取适当的求解方法。 关键词:显式单步法欧拉(Euler)方法龙格—库塔(Runge—Kutta)方法截断误差收敛性 Two commonly used numerical solution of differential equations:Euler method and Runge - Kutta method Student Name: Xiong Shiying Tutor:Zhang Li 【Abstract】The differential equation is the most vitality branch in mathematics. In many domains of natural science, we can meet the ordinary differential equation solution question. Currently, the development of computer has provided the extremely powerful tool for the ordinary differential equation application and the fundamental research, the computer solving differential equation mainly uses value method. The Euler method and the Runge—Kutta method are the most typical commonly value method to solve the differential equation. This article dissects the structure process of these two kinds of values commonly value method to solve the analyses their good and bad points, to their astringency, the compatibility, and the stability has made the proof. At the same time, the article discuss the length of stride to the numerical method changing influence and the difference of the coefficient different same step Runge—kutta method. Through establishing C program on the computer can realize these two kind of methods, Anglicizing some models of calculate example result can sincerely realize their function, the advantage and disadvantage points and the suitable situation, thus the suitable solution method can be selected to solve the different type and the

欧拉及改进的欧拉法求解常微分方程

生物信息技术0801 徐聪U200812594 #include #include void f1(double *y,double *x,double *yy) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); yy[i]=x[i]+1+exp(x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f2(double *y,double *x,double *yy) { y[0]=1.0; x[0]=0.0; yy[0]=1.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]); yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f3(double *y,double *x,double *yy,double *y0) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y0[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); y[i]=y[i-1]+0.1*(y[i-1]-x[i-1]+y0[i-1]-x[i-1]);

用Euler法、改进的Euler法及四阶的龙格库塔法求解初值问题

微分方程数值解课程设计题目 1(30分)分别用Euler 法、改进的Euler 法及四阶的龙格库塔 法求解初值问题:????? =- =1 )0(2'u u t u u 1 0≤> Euler('fun',0,1,0.1,10) T = Columns 1 through 10 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 1.1000 1.1918 1.2774 1.3582 1.4351 1.5090 1.5803 1.6498 1.7178 Column 11 1.0000 1.7848 ②.当h=0.2时 >> Euler('fun',0,1,0.2,5) T = 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.0000 1.2000 1.3733 1.5315 1.6811 1.8269 (3).改进的Euler 法: M 文件:Euler_modify.m function E=Euler_modify(fun,x0,y0,h,N) x=zeros(1,N+1);y=zeros(1,N+1);

实验8欧拉法_改进欧拉法_线性多步法

西华数学与计算机学院上机实践报告 课程名称:计算方法A 年级:2010级 上机实践成绩: 指导教师:严常龙 姓名:李国强 上机实践名称:解常微分方程初值问题 学号:362011********* 上机实践日期:2013.12.25 上机实践编号:8 上机实践时间:14:00 一、目的 1.通过本实验加深对欧拉法、改进欧拉法、线性多步法的构造过程的理解; 2.能对上述四种方法提出正确的算法描述编程实现,观察计算结果的改善情况。 二、内容与设计思想 自选常微分方程的初值问题,分别用欧拉法、改进欧拉法求解。 分别用以上两种方法求解常微分方程初值问题: 2 '()1,([0.0,1.4],0.1)(0)0.0 y x y h y ?=+=?=?求解区间取步长 三、使用环境 操作系统:Win 8 软件平台:Visual C++ 6.0 四、核心代码及调试过程 #include #include #define f(y) (y*y+1) #define m 0.0//初值为0 #define h 0.1//步长为0.1 #define n 14//迭代次数为14 #define a 0.0//定义区间长度 #define d 1.4 void gjol();//改进欧拉法 void ol();//欧拉法 main() { ol(); printf("\n"); gjol(); } void gjol() {

int i; float y[n+1]; y[0]=m;//赋初值 printf("改进欧拉法\n"); for(i=0;i

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法. 2.龙格-库塔法。 3.单步法的收敛性与稳定性。 重点、难点 一、微分方程的数值解法 在工程技术或自然科学中,我们会遇到的许多微分方程的问题,而我们只能对其中具有较简单形式的微分方程才能够求出它们的精确解。对于大量的微分方程问题我们需要考虑求它们的满足一定精度要求的近似解的方法,称为微分方程的数值解法。本章我们主要 讨论常微分方程初值问题?????==00 )() ,(y x y y x f dx dy 的数值解法。 数值解法的基本思想是:在常微分方程初值问题解的存在区间[a,b]内,取n+1个节点a=x 0<x 1<…<x N =b (其中差h n = x n –x n-1称为步长,一般取h 为常数,即等步长),在这些节点上把常微分方程的初值问题离散化为差分方程的相应问题,再求出这些点的上的差分方程值作为相应的微分方程的近似值(满足精度要求)。 二、欧拉法与改进欧拉法 欧拉法与改进欧拉法是用数值积分方法对微分方程进行离散化的一种方法。 将常微分方程),(y x f y ='变为() *+=?++1 1))(,()()(n x n x n n dt t y t f x y x y 1.欧拉法(欧拉折线法) 欧拉法是求解常微分方程初值问题的一种最简单的数值解法。 欧拉法的基本思想:用左矩阵公式计算(*)式右端积分,则得欧拉法的计算公式为:N a b h N n y x hf y y n n n n -= -=+=+)1,...,1,0(),(1 欧拉法局部截断误差 11121 )(2 ++++≤≤''=n n n n n x x y h R ξξ或简记为O (h 2)。

Euler法和改进的Euler法实验报告

用Euler法和改进的Euler法求u’=-5u(0≤t≤1),u(0)=1的数值解,步长h=0.1,0.05,并比较两个算法的精度。 解: 1)当步长h=0.1时 编写程序如下所示 clf clear clc %直接求解微分方程 y=dsolve('Dy=-5*y','y(0)=1','t') %Euler法 h=0.1; t=0:h:1; n=length(t); u=zeros(1,n); u(1)=1; zbu(1,1)=t(1); zbu(2,1)=u(1); for i=2:n f=-5*u(i-1); u(i)=u(i-1)+h*f; zbu(1,i)=t(i); zbu(2,i)=u(i); end zbu %改进的Euler法 v=zeros(1,n); v0=zeros(1,n); v(1)=1; zbv(1,1)=t(1); zbv(2,1)=v(1); for i=2:n f=-5*v(i-1); v0(i)=v(i-1)+h*f; v(i)=v(i-1)+h/2*(f-5*v0(i)); zbv(1,i)=t(i); zbv(2,i)=v(i); end zbv plot(t,u,'r*','markersize',10) hold on, plot(t,v,'r.','markersize',20)

hold on, ezplot(y,[0,1]) hold on, title('Euler法和改进的Euler法比较(h=0.1)), grid on legend('Euler法','?改进的Euler法','解析解') %解真值 h=0.1; t=0:h:1; n=length(t); for i=1:n y(i)=1/exp(5*t(i)); %通过第一部分程序直接解得的解析解 zby(1,i)=t(i); zby(2,i)=y(i); end zby 我们可以得到计算后的结果图像如图一所示 图1 Euler法和改进的Euler法比较(h=0.1) 同时,我们得到Euler法,改进的Euler法和解析解的在各点处数值分别如下所示: t坐标0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 改进欧拉 1.0000 0.6250 0.3906 0.2441 0.1526 0.0954 0.0596 0.0373 0.0233 0.0146 0.0091

微分方程数值解

微 分方程数值解及其应用 绪论 自然界中的许多事物的运动和变化规律都可以用微分方程来描述,因此对工程和科学技术中的实际问题的研究中, 常常需要求解微分方程.但往往只有少数较简单和典型的微分方程可求出其解析解,在大多数情况下,只能用近似法求解,数值解法是一类重要的近似方法.本文主要讨论一阶常微分方程的初值问题的数值解法,探讨这些算法在处理来自生活实际问题中的应用,并结合MATLAB 软件,动手编程予以解决. 1 微分方程的初值问题[1] 1.1 预备知识 在对生活实际问题的研究中,通常需要考虑一阶微分方程的初值问题 00(,)()dy f x y dx y x y ?=???=? (1) 这里(),f x y 是矩形区域R :00,x x a y y b -≤-≤上的连续函数. 对初值问题(1)需要考虑以下问题:方程是否一定有解呢?若有解,有多少个解呢?下面给出相关的概念与定理. 定义1 Lipschitz 条件[1][2]:矩形区域R :00,x x a y y b -≤-≤上的连续函数(),f x y 若满足:存在常数0L >,使得不等式()()1212,,f x y f x y L y y -≤-对所有()()12,,,x y x y R ∈都成立,则称(),f x y 在R 上关于y 满足Lipschitz 条件. 定理 1 解的存在唯一性定理[1][3]:设f 在区域()}{,,D x y a x b y R =≤≤∈上连续,关于y 满足Lipschitz 条件,则对任意的[]00,,∈∈x a b y R ,常微分方程初值问题(1)当[],x a b ∈时存在唯一的连续解()y x . 该定理保证若一个函数(),f x y 关于y 满足Lipschitz 条件,它所对应的微分方程的初值问题就有唯一解.在解的存在唯一性得到保证的前提下,自然要考虑方程的求

MATLAB求解常微分方程数值解

利用MATLAB求解常微分方程数值解

目录 1. 内容简介 (1) 2. Euler Method(欧拉法)求解 (1) 2.1. 显式Euler法和隐式Euler法 (2) 2.2. 梯形公式和改进Euler法 (3) 2.3. Euler法实用性 (4) 3. Runge-Kutta Method(龙格库塔法)求解 (5) 3.1. Runge-Kutta基本原理 (5) 3.2. MATLAB中使用Runge-Kutta法的函数 (7) 4. 使用MATLAB求解常微分方程 (7) 4.1. 使用ode45函数求解非刚性常微分方程 (8) 4.2. 刚性常微分方程 (9) 5. 总结 (9) 参考文献 (11) 附录 (12) 1. 显式Euler法数值求解 (12) 2. 改进Euler法数值求解 (12) 3. 四阶四级Runge-Kutta法数值求解 (13) 4.使用ode45求解 (14)

1.内容简介 把《高等工程数学》看了一遍,增加对数学内容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。 实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。 文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。最后考察MATLAB中各个函数的适用范围,当遇到实际工程问题时能够正确地得到问题的数值解。 2.Euler Method(欧拉法)求解 Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节内容分别介绍这3种方法的具体内容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

微分方程数值解欧拉法

1.1、求解初值问题()?????=-=-1 0y y xe dx dy x ,已知精确解为 ()()x x x x y -+=22 12 当h=0.1时,解为: n x n y ()n x y ()n n y x y - 0 1 1 0 0.1 0.900000 0.909362 9.3616E-03 0.2 0.819048 0.835105 1.6057E-02 0.3 0.753518 0.774155 2.0637E-02 0.4 0.700391 0.723946 2.3555E-02 0.5 0.657165 0.682347 2.5182E-02 0.6 0.621775 0.647598 2.5823E-02 0.7 0.592526 0.618249 2.5723E-02 0.8 0.568034 0.593114 2.5080E-02 0.9 0.547177 0.571230 2.4053E-02 1.0 0.529051 0.551819 2.2768E-02 0.1 0.2 0.30.40.50.60.70.80.91 当h=0.05时,解为:

n x n y ()n x y ()n n y x y - 0 1 1 0 0.05 0.950000 0.952418 2.4185E-03 0.10 0.904878 0.909362 4.4835E-03 0.15 0.864158 0.870391 6.2326E-03 0.20 0.827406 0.835105 7.6996E-03 0.25 0.794223 0.803138 8.9155E-03 0.30 0.764247 0.774155 9.9084E-03 0.35 0.737147 0.747850 1.0704E-02 0.40 0.712621 0.723946 1.1324E-02 0.45 0.690397 0.702188 1.1791E-02 0.50 0.670223 0.682347 1.2124E-02 0.55 0.651876 0.664213 1.2338E-02 0.60 0.635148 0.647598 1.2450E-02 0.65 0.619855 0.632328 1.2473E-02 0.70 0.605829 0.618249 1.2420E-02 0.75 0.592918 0.605220 1.2302E-02 0.80 0.580985 0.593114 1.2129E-02 0.85 0.569909 0.581819 1.1909E-02 0.90 0.559579 0.571230 1.1651E-02 0.95 0.549896 0.561258 1.1362E-02 1.00 0.540771 0.551819 1.1048E-02 0.1 0.2 0.30.40.50.60.70.80.91

fortran下欧拉法求解常微分方程(实例)

1. Euler 公式 100(,)() i i i i y y hf x y y y x +=+??=? 实例: ,00(,),0,1,01f x y x y x y x =-==≤≤ 精确解为:1x y x e -=+- 程序代码: DIMENSION x(0:20),y(0:20),z(0:20),k(0:21) DOUBLE PRECISION x,y,z,k,h,x0,y0,z0,k0,n f(x,y)=x-y n=20 h=1/n x(0)=0 y(0)=0 DO i=0,n-1 y(i+1)=y(i)+f(x(i),y(i))*h x(i+1)=x(i)+h ENDDO k(0)=0 DO i=0,n z(i)=k(i)+exp(-k(i))-1 k(i+1)=k(i)+h END DO open(10,file='1.txt') WRITE(10,10) (x(i),y(i),z(i),i=0,20) WRITE(*,10) (x(i),y(i),z(i),i=0,20) 10 FORMAT(1x,f10.8,2x,f10.8,2x,f10.8/) END 输出结果: 0.00000000 0.00000000 0.00000000 0.05000000 0.00000000 0.00122942 0.10000000 0.00250000 0.00483742 0.15000000 0.00737500 0.01070798 0.20000000 0.01450625 0.01873075 0.25000000 0.02378094 0.02880078 ???=='00)(),(y x y y x f y ???=='0 0)(),(y x y y x f y

常微分方程欧拉算法

常微分方程欧拉算法 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

常微分方程欧拉算法 摘要:本文主要论述了常微分方程的欧拉算法的算法原理,误差分析,实例,程序,以及算法比较等内容。 关键词:常微分方程 显式欧拉法 隐式欧拉法 引言:微分方程初值问题模型是常见的一类数学模型。对于一些简单而典型的微分方程模型,譬如线性方程、某些特殊的一阶非线性方程等是可以设法求出其解析解的,并有理论上的结果可资利用。但在数学建模中碰到的常微分方程初值问题模型,通常很难,甚至根本无法求出其解析解,而只能求其近似解。因此,研究其数值方法,以便快速求得数值鳃有其重大意义。 一、欧拉算法原理 对于微分方程初值问题 的解在xy 平面上是一条曲线,称为该微分方程的积分曲线。积分曲线上一点(),x y 的切线斜率等于函数f 在点(),x y 的值,从初始点()000,P x y 出发,向该点的切线方向推进到下一个点()111,P x y ,然后依次做下去,得到后面的未知点。一般地,若知道(),n n n P x y 依上述方法推进到点()111,n n n P x y +++,则两点的坐标关系为: 即 这种方法就是欧拉(Euler )方法(也叫显式欧拉法或向前欧拉法)。当初值0y 已知,则n y 可以逐步算出 对微分方程()=x y dy f dx ,从n x 到1n x +积分,那么有 现在用左矩形公式()(),n n hf x y x 代替()()1 ,n n x x f t y t dt +?,n y 代替()n y x ,1n y +代替() 1n y x +就得到了欧拉方法。如果用右矩形公式()()11,n n hf x y x ++去代替右端积分,则得到另外一 个公式,该方法就称为隐式欧拉法(或后退欧拉法),其公式为 欧拉公式与隐式欧拉公式的区别在于欧拉公式是关于1n y +的一个直接计算公式,然而隐式欧拉公式右端含有1n y +,所以它实际上是关于1n y +的一个函数方程。 二、实例 例 取h=,用Euler 方法解

微分方程数值解欧拉法

dy??x??xey?1.1、求解初值问题,已知精确解为 ????x?2xx?y?2x2当h=0.1时,解为:?dx????01y?1 ????yxy?xyyx nnnnn 1 0 1 9.3616E-03 0.1 0.900000 0.909362 1.6057E-02 0.819048 0.2 0.835105 2.0637E-02 0.774155 0.753518 0.3 2.3555E-02 0.723946 0.4 0.700391 2.5182E-02 0.5 0.682347 0.657165 2.5823E-02 0.621775 0.6 0.647598 2.5723E-02 0.592526 0.618249 0.7 2.5080E-02 0.568034 0.8 0.593114 2.4053E-02 0.547177 0.9 0.571230 2.2768E-02 1.0 0.551819 0.529051

1 0.950.90.850.80.750.70.650.60.550.510.100.20.80.70.90.60.40.30.5时,解为:h=0.05 当. ????x xyy y?yx nnn nn 1 1 0 2.4185E-03 0.952418 0.05 0.950000 4.4835E-03 0.10 0.909362 0.904878 6.2326E-03 0.15 0.864158 0.870391 7.6996E-03 0.827406 0.20 0.835105 8.9155E-03 0.794223 0.25 0.803138 9.9084E-03 0.774155 0.764247 0.30 1.0704E-02 0.737147 0.747850 0.35 1.1324E-02 0.723946 0.40 0.712621 1.1791E-02 0.702188 0.45 0.690397 1.2124E-02 0.50 0.670223 0.682347

用改进的欧拉方法和四阶龙格-库塔方法解初值问题

用改进的欧拉方法和四阶龙格-库塔方法解初值问题 一、题目: 取步长2.0=h ,分别用改进的欧拉方法和四阶龙格—库塔方法解初值问题 ? ??=≤≤+=.1)0(;10,'y x y x y 并比较结果。 二、基本思想: 1.改进的欧拉方法 改进的欧拉方法用梯形公式计算()()()()+1+1-=,.n n x n n x y x y x f x y x dx ?中的积分,并以 n y 和+1n y 分别表示()n y x 和()+1n y x 的近似值,就得到 ()()()+1+1+1=+,+,.2 n n n n n n h y y f x y f x y (梯形公式) 梯形公式也是一个一步法公式。由于公式右端也含有未知的+1n y ,故被称作是隐式的。隐式格式实际上是关于+1n y 的一个函数方程。为了避免解方程,可以采用欧拉方法计算初始值,再由梯形公式计算。这样建立起来的计算格式称为改进的欧拉格式: ()()()()+1+1+1=+,,=+,+,.2 p n n n n n n n n n y y hf x y h y y f x y f x y ????? 梯形公式也可以采用迭代法求解。如果仍然采用欧拉方法计算迭代初值,那么计算格式就是 []()[]()[]()() 0+1+1+1+1+1=+,,=+,+,.2n n n n k k n n n n n n y y hf x y h y y f x y f x y ????? 由于已假定(),f x y 满足里普希兹条件,所以有 [][][]()[]() [][]+1-1-1+1+1+1,+1+1+1+1+1-=-,-.22 k k k k k k n n n n n n n n h hL y y f x y f x y y y ≤ 从而,迭代的收敛条件是0<<1.2hL 2.四阶龙格-库塔方法 龙格—库塔方法不是用求导数的办法,而是用计算不同点上()y x f ,的函数值,然后对这些函数值作线性拟合,构造近似公式。组合的原则是使得近似公式与泰勒展开式有尽可能多的项吻合,以达到较高的精度。 改进的欧拉格式

MATLABEuler法解常微分方程

Euler法解常微分方程 Euler法解常微分方程算法: Step 1 分别取积分上限、积分下限、步长 Step 2计算判断是否成立,成立转到Step 3,否则继续进行Step 4 Step 3 计算 Step 4 Euler法解常微分方程算程序: function euler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 x=min(A); b=max(A); y=y0; while x

Step 3 (1)做显性Euler预测 (2)将带入 Step 4计算判断是否成立,成立返回Step 3,否则继续进行Step 5 Step 5 改进Euler法解常微分方程算程序: function gaijineuler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 a=min(A); b=max(A); x=a:h:b; y(1)=y0; for i=1:length(x)-1 w1=feval(fun,x(i),y(i)); y(i+1)=y(i)+h*w1; w2=feval(fun,x(i+1),y(i+1)); y(i+1)=y(i)+h*(w1+w2)/2; end x=x' y=y' 例:用改进Euler法计算下列初值问题(取步长h=0.25) 输入:fun=inline('-x*y^2') gaijineuler2(fun,2,[0 5],0.25) 得到: x = 0.2500 0.5000 0.7500 1.0000 1.2500 1.5000 1.7500 2.0000 2.2500 2.5000 2.7500

常微分方程作业欧拉法与改进欧拉法

常微分方程作业欧拉法与改进欧 拉法 P77 31.利用改进欧拉方法计算下列初值问题,并画出近似解的草图: (1) 3 =y 1,y(0) =3,0汀岂2, :t=0.5; dt 代码: %改进欧拉法 fun cti on Euler(t0,y0,i nv,h) n=rou nd(i nv(2)-in v(1))/h; t(1)=t0; y(1)=y0; for i=1: n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h;

y(i+1)=y (i)+1/2*h*(fu n( t(i),y(i))+ fun( t(i+1),y1(i+1))) end plot(t,y,'*r') fun cti on y=fun (t,y); y=y+1; 调用:Euler(0,3,[0,2],0.5) 得到解析解:hold on; y=dsolve('Dy=y+1','(y(0)=3)', 't'); ezplot(y,[0,2])

图像: (2)女=y2—4t,y(0) =0.5,0 叭乞2, :t =0.2; dt 代码: function Euler1(t0,y0,inv,h) n=rou nd(i nv(2)-in v(1))/h; t(1)=t0; y(1)=y0; for i=1: n y1(i+1)=y(i)+h*fu n(t(i),y(i)); t(i+l)=t(i)+h; y(i+1)=y (i)+1/2*h*(fu n( t(i),y(i))+ fun( t(i+1),y1(i+1)))

end plot(t,y,'*r') fun cti on y=fun (t,y); y=y A2-4*t; 调用: Euler1(0,0.5,[0,2],0.2) 图像:

改进欧拉(c语言程序)

1)改进欧拉法求解常微分方程的初值问题 #include float func(float x,float y) { return(y-x); } float euler(float x0,float xn,float y0,int N) { float x,y,yp,yc,h; int i; x=x0; y=y0; h=(xn-x0)/(float)N; for(i=1;i<=N;i++) { yp=y+h*func(x,y); x=x0+i*h; yc=y+h*func(x,yp); y=(yp+yc)/2.0; } return(y); } main() { float x0,xn,y0,e; int n; printf("\ninput n:\n "); scanf("%d",&n); printf("input x0,xn:\n "); scanf("%f,%f",&x0,&xn); printf("input y0:\n "); scanf("%f",&y0); e=euler(x0,xn,y0,n); printf("y(%f)=%6.4f",y0,e); } input n: 20 input x0,xn: 1,6 input y0: 2 y(2.000000)=7.0000Press any key to continue (2)四阶龙格—库塔法

#include float func(float x,float y) { return(x-y); } float runge_kutta(float x0,float xn,float y0,int N) { float x,y,y1,y2,h,xh; float d1,d2,d3,d4; int i; x=x0; y=y0; h=(xn-x0)/(float)N; for(i=1;i<=N;i++) { xh=x+h/2; d1=func(x,y); d2=func(xh,y+h*d1/2.0); d3=func(xh,y+h*d2/2.0); d4=func(xh,y+h*d3); y=y+h*(d1+2*d2+2*d3+d4)/6.0; x=x0+i*h; } return(y); } main() { float x0,xn,y0,e; int N; printf("\ninput n:\n "); scanf("%d",&N); printf("input x0,xn:\n "); scanf("%f,%f",&x0,&xn); printf("input y0:\n "); scanf("%f",&y0); e=runge_kutta(x0,xn,y0,N); printf("y(%f)=%8.6f",y0,e); } input n: 10 input x0,xn: 1,2 input y0: 5 y(5.000000)=2.833863Press any key to continue

微分方程数值解实验报告

微分方程数值解法课程设计报告 班级:_______ 姓名: ___ 学号:__________ 成绩: 2017年 6月 21 日

摘要 自然界与工程技术中的很多现象,可以归结为微分方程定解问题。其中,常微分方程求解是微分方程的重要基础内容。但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge—Kutta方法、Adams法以及椭圆型方程、抛物型方程的有限差分方法等,通过具体的算例,结合MATLAB求解画图,初步给出了一般常微分方程数值解法的求解过程。同时,通过对各种方法的误差分析,让大家对各种方法的特点和适用范围有一个直观的感受。 关键词:微分方程数值解、MATLAB

目录 摘要 (2) 目录 (3) 第一章常微分方程数值解法的基本思想与原理 (4) 1.1 常微分方程数值解法的基本思路 (4) 1.2用matlab编写源程序 (4) 1.3 常微分方程数值解法应用举例及结果 (5) 第二章常系数扩散方程的经典差分格式的基本思想与原理 (6) 2.1 常系数扩散方程的经典差分格式的基本思路 (6) 2.2 用matlab编写源程序 (7)

2.3 常系数扩散方程的经典差分格式的应用举例及结果 (8) 第三章椭圆型方程的五点差分格式的基本思想与原理 (10) 3.1 椭圆型方程的五点差分格式的基本思路 (10) 3.2 用matlab编写源程序 (10) 3.3 椭圆型方程的五点差分格式的应用举例及结果 (12) 第四章总结 (12) 参考文献 (12)

相关文档
最新文档