常微分方程的数值解法(欧拉法、改进欧拉法、泰勒方法和龙格库塔法)

常微分方程的数值解法(欧拉法、改进欧拉法、泰勒方法和龙格库塔法)
常微分方程的数值解法(欧拉法、改进欧拉法、泰勒方法和龙格库塔法)

[例1]用欧拉方法与改进的欧拉方法求初值问题

h 的数值解。

在区间[0,1]上取0.1

[解]欧拉方法的计算公式为

x0=0;

y0=1;

x(1)=0.1;

y(1)=y0+0.1*2*x0/(3*y0^2);

for n=1:9

x(n+1)=0.1*(n+1);

y(n+1)=y(n)+0.1*2*x(n)/(3*y(n)^2);

end;

x

y

结果为

x =

Columns 1 through 8

0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 Columns 9 through 10

0.9000 1.0000

y =

Columns 1 through 8

1.0000 1.0067 1.0198 1.0391 1.0638 1.0932 1.1267 1.1634 Columns 9 through 10

1.2028 1.2443

改进的欧拉方法其计算公式为

本题的精确解为()

y x=

x0=0;

y0=1;

初值问题

《计算机数学基础(2)》辅导六 第14章常微分方程的数值解法 一、重点内容 1.欧拉公式: (k=0,1,2,…,n-1) 局部截断误差是O(h2)。 2. 改进欧拉公式: 或表示成: 平均形式: 局部截断误差是O(h3)。 3. 四阶龙格――库塔法公式: 其中κ1=f(x k,y k);κ2=f(x k+ 0.5h,y k+ 0.5 hκ1);κ3=f(x k+ 0.5 h,y k+ 0.5 hκ2); κ4=f(x k+h,y k+hκ3) 局部截断误差是O(h5)。

二、实例 例1用欧拉法解初值问题 取步长h=0.2。计算过程保留4位小数。 解h=0.2,f(x,y)=-y-xy2。首先建立欧拉迭代格式 =0.2y k(4-x k y k) (k=0,1,2) 当k=0,x1=0.2时,已知x0=0,y0=1,有 y(0.2)≈y1=0.2×1(4-0×1)=0.8 当k=1,x2=0.4时,已知x1=0.2,y1=0.8,有 y(0.4)≈y2=0.2×0.8×(4-0.2×0.8)=0.6144 当k=2,x3=0.6时,已知x2=0.4,y2=0.6144,有 y(0.6)≈y3=0.2×0.6144×(4-0.4×0.6144)=0.4613 例2 用欧拉预报-校正公式求解初值问题 取步长h=0.2,计算y(1.2),y(1.4)的近似值,小数点后至少保留5位。 解步长h=0.2,此时f(x,y)=-y-y2sin x 欧拉预报-校正公式为: 有迭代格式:

当k=0,x0=1,y0=1时,x1=1.2,有 =y0(0.8-0.2y0sin x0)=1×(0.8-0.2×1sin1)=0.63171 y(1.2)≈y1 =1×(0.9-0.1×1×sin1)-0.1(0.63171+0.631712sin1.2)=0.71549 当k=1,x1=1.2,y1=0.71549时,x2=1.4,有 =y1(0.8-0.2y1sin x1)=0.71549×(0.8-0.2×0.71549sin1.2) =0.47697 y(1.4)≈y2 =0.71549×(0.9-0.1×0.71549×sin1.2) -0.1(0.47697+0.476972sin1.4) =0.52611 例3写出用四阶龙格――库塔法求解初值问题 的计算公式,取步长h=0.2计算y(0.4)的近似值。至少保留四位小数。 解此处f(x,y)=8-3y,四阶龙格――库塔法公式为 其中κ1=f(x k,y k);κ2=f(x k+ 0.5h,y k+ 0.5 hκ1);κ3=f(x k+ 0.5 h,y k+ 0.5 hκ2);

微分方程数值解法

《微分方程数值解法》 【摘要】自然界与工程技术中的很多现象,可以归结为微分方程定解问题。其中,常微分方程求解是微分方程的重要基础内容。但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、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]);

数值计算方法复习题9

习题九 1. 取步长h = 0.1,分别用欧拉法与改进的欧拉法解下列初值问题 (1);(2) 准确解:(1);(2); 欧拉法:,,, 改进的欧拉法:,,, 2. 用四阶标准龙格—库塔法解第1题中的初值问题,比较各法解的精度。,,, 3. 用欧拉法计算下列积分在点处的近似值。 0.5000,1.1420,2.5011,7.2450 4. 求下列差分格式局部截断误差的首项,并指出其阶数。 (1),2 (2),3; (3),4 (4),4 5.用Euler法解初值问题取步长h=0.1,计算到x=0.3(保留到小数点后4位).

解: 直接将Eulerr法应用于本题,得到 由于,直接代入计算,得到 6.用改进Euler法和梯形法解初值问题取步长 h=0.1,计算到x=0.5,并与准确解相比较. 解:用改进Euler法求解公式,得 计算结果见下表 用梯形法求解公式,得 解得 精确解为 7.证明中点公式(7.3.9)是二阶的,并求其局部截断误差主项. 证明根据局部截断误差定义,得 将右端Taylor展开,得

故方法是二阶的,且局部截断误差主项是上式右端含h3的项。 8.用四阶R-K方法求解初值问题取步长 h=0.2. 解直接用四阶R-K方法 其中 计算结果如表所示: 9.对于初值问题 解因f'(y)=-100,故由绝对稳定区间要求(1)用Euler法解时, (2)用梯形法解时,绝对稳定区间为,由因f 对y是线性的,故不用迭代,对h仍无限制。(3)用四阶R-K方法时, 10. (1) 用Euler法求解,步长h应取在什么范围内计算才稳定?(2) 若用梯形法求解,对步长h有无限制? (3) 若用四阶R-K方法求解,步长h如何选取?

第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)。

计算方法及答案汇总

《计算方法》练习题一 一、填空题 1. 14159.3=π的近似值3.1428,准确数位是( )。 2.满足d b f c a f ==)(,)(的插值余项=)(x R ( )。 3.设)}({x P k 为勒让德多项式,则=))(),((22x P x P ( )。 4.乘幂法是求实方阵( )特征值与特征向量的迭代法。 5.欧拉法的绝对稳定实区间是( )。 6. 71828.2=e 具有3位有效数字的近似值是( )。 7.用辛卜生公式计算积分 ?≈+1 01x dx ( ) 。 8.设)()1()1(--=k ij k a A 第k 列主元为) 1(-k pk a ,则=-)1(k pk a ( )。 9.已知?? ? ? ??=2415A ,则=1A ( )。 10.已知迭代法:),1,0(),(1 ==+n x x n n ? 收敛,则)(x ?'满足条件( )。 二、单选题 1.已知近似数,,b a 的误差限)(),(b a εε,则=)(ab ε( )。 A .)()(b a εε B.)()(b a εε+ C.)()(b b a a εε+ D.)()(a b b a εε+ 2.设x x x f +=2 )(,则=]3,2,1[f ( )。 A.1 B.2 C.3 D.4 3.设A=?? ? ? ??3113,则化A为对角阵的平面旋转=θ( ). A. 2π B.3π C.4π D.6 π 4.若双点弦法收敛,则双点弦法具有( )敛速. A.线性 B.超线性 C.平方 D.三次 5.改进欧拉法的局部截断误差阶是( ). A .)(h o B.)(2h o C.)(3h o D.)(4 h o 6.近似数2 1047820.0?=a 的误差限是( )。 A. 51021-? B.41021-? C.31021-? D.2102 1 -? 7.矩阵A满足( ),则存在三角分解A=LR 。 A .0det ≠A B. )1(0det n k A k <≤≠ C.0det >A D.0det

微分方程数值解

微 分方程数值解及其应用 绪论 自然界中的许多事物的运动和变化规律都可以用微分方程来描述,因此对工程和科学技术中的实际问题的研究中, 常常需要求解微分方程.但往往只有少数较简单和典型的微分方程可求出其解析解,在大多数情况下,只能用近似法求解,数值解法是一类重要的近似方法.本文主要讨论一阶常微分方程的初值问题的数值解法,探讨这些算法在处理来自生活实际问题中的应用,并结合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

证明隐式Euler方法稳定性

第六章数值积分 6.1数值积分基本概念 6.1.1引言 在区间上求定积分 (6.1.1) 是一个具有广泛应用的古典问题,从理论上讲,计算定积分可用Newton-Leibniz公式 (6.1.2) 其中F(x)是被积函数f(x)的原函数.但实际上有很多被积函数找不到用解析式子表达的原函数,例如等等,表面看它们并不复杂, 但却无法求得F(x).此外,有的积分即使能找到F(x)表达式,但式子非常复杂,计算也很困难.还有的被积函数是列表函数,也无法用(6.1.2)的公式计算.而数值积分则只需计算f(x) 在节点xi(i=0,1,…,n)上的值,计算方便且适合于在计算机上机械地实现. 本章将介绍常用的数值积分公式及其误差估计、求积公式的代数精确度、收敛性和稳定性以及Romberg求积法与外推原理等. 6.1.2插值求积公式 根据定积分定义,对及都有 (极限存在)若不取极限,则积分I(f)可近似表示为 (6.1.3) 这里称为求积节点,与f无关,称为求积系数,(6.1.3)称为机械求积公式. 为了得到形如(6.1.3)的求积公式,可在上用Lagrange插值多项式 ,则得

其中 (6.1.4) 这里求积系数由插值基函数积分得到,它与f(x)无关.如果求积公式(6.1.3)中的系数由(6.1.4)给出,则称(6.1.3)为插值求积公式.此时可由插值余项得到 (6.1.5) 这里ξ∈,(6.1.5)称为插值求积公式余项. 当n=1时,,此时 由(6.1.4)可得 于是 (6.1.6) 称为梯形公式.从几何上看它是梯形A bB(见图6-1)的面积近似曲线y=f(x)下的曲边梯形面积,公式(6.1.6)的余项为 (6.1.7)

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

数值分析--6微分方程数值解习题课

微分方程 初值问题数值解 习题课

一、应用向前欧拉法和改进欧拉法求由如下积分 2 x t y e dt -=? 所确定的函数y 在点x =0.5,1.0,1.5的近似值。 解:该积分问题等价于常微分方程初值问题 2 '(0)0x y e y -?=??=?? 其中h=0.5。其向前欧拉格式为 2 ()100ih i i y y he y -+?=+?? =?? 改进欧拉格式为 22()2(1)10()20 ih i h i i h y y e e y --++? =++???=? 将两种计算格式所得结果列于下表

二、应用4阶4步阿达姆斯显格式求解初值问题 '1(0)1y x y y =-+??=? 00.6x ≤≤ 取步长h=0.1. 解:4步显式法必须有4个起步值,0y 已知,其他3个123,,y y y 用4阶龙格库塔方法求出。 本题的信息有: 步长h=0.1;结点0.1(0,1, ,6)i x ih i i ===; 0(,)1,(0)1f x y x y y y =-+== 经典的4阶龙格库塔公式为

11234(22)6 i i h y y k k k k +=++++ 1(,)1i i i i k f x y x y ==-+ 121(,)0.05 1.0522 i i i i hk h k f x y x y k =++=--+ 232(,)0.05 1.0522 i i i i hk h k f x y x y k =++=--+ 433(,)0.1 1.1i i i i k f x h y hk x y k =++=--+ 算得1 1.0048375y =,2 1.0187309y =,3 1.0408184y = 4阶4步阿达姆斯显格式 1123(5559379) 24i i i i i i h y y f f f f +---=+-+- 1231 (18.5 5.9 3.70.90.24 3.24)24 i i i i i y y y y y i ---=+-+++ 由此算出 4561.0703231, 1.1065356, 1.1488186y y y === 三、用Euler 方法求 ()'1,0101 x y e y x x y =-++≤≤= 问步长h 应该如何选取,才能保证算法的稳定性? 解:本题 (),1x f x y e y x =-++ (),0,01x y f x y e x λ'==-<≤≤

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

数值分析习 题 六 解 答

习 题 六 解 答 1、在区间[0,1]上用欧拉法求解下列的初值问题,取步长h=0.1。 (1)210(1)(0)2y y y '?=--?=?(2)sin (0)0 x y x e y -'?=+?=? 解:(1)取h=0.1,本初值问题的欧拉公式具体形式为 21(1)(0,1,2,)n n n y y y n +=--= 由初值y 0=y(0)=2出发计算,所得数值结果如下: x 0=0,y 0=2; x 1=0.1,2100(1)211y y y =--=-= x 2=0.2,2211(1)101y y y =--=-= 指出: 可以看出,实际上求出的所有数值解都是1。 (2)取h=0.1,本初值问题的欧拉公式具体形式为 21(sin )(0,1,2,)n x n n n y y h x e n -+=++= 由初值y 0=y(0)=0出发计算,所得数值结果如下: x 0=0,y 0=0; x 1=0.1, 02 1000 (sin )00.1(sin 0)00.1(01)0.1x y y h x e e -=++=+?+=+?+= x 2=0.2, 12 2110.1 (sin )0.10.1(sin 0.1)0.10.1(0.10.9)0.2 x y y h x e e --=++=+?+=+?+= 指出: 本小题的求解过程中,函数值计算需要用到计算器。 2、用欧拉法和改进的欧拉法(预测-校正法)求解初值问题,取步长h=0.1。 22(00.5) (0)1 y x y x y '?=-≤≤? =? 解:(1) 取h=0.1,本初值问题的欧拉公式具体形式为 2 1(2)(0,1,2,)n n n n y y h x y n +=+-= 由初值y 0=y(0)=1出发计算,所得数值结果如下: x 0=0,y 0=1; x 1=0.1,2 21000(2)10.1(021)0.8y y h x y =+-=+?-?= x 2=0.2,222111(2)0.80.1(0.120.8)0.641y y h x y =+-=+?-?=

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

常微分方程作业欧拉法与改进欧 拉法 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) 图像:

相关文档
最新文档