欧拉法,改进欧拉法,斐波那契法基础原理及经过流程图
《改进Euler法》课件

实例讲解
一阶微分方程
使用改进欧拉法解决了一阶微分方程。
不同步长的对比
展示了使用不同步长时所得到的结果的对比,说明 步长对解的准确性的影响。
总结
欧拉法的局限性
欧拉法虽然精度有限,但Байду номын сангаас在数值解微分方程中使用广泛。
改进欧拉法的优势
改进欧拉法通过增加计算量等方法,提高了精度和稳定性。
根据实际情况选择方法
2 处理高阶微分方程
使用改进的欧拉方法(Improved Euler Method),利用泰勒公式对下一时刻的解做泰勒 展开,得到更精确的解。
3 防止发散
采用小步长策略或自适应步长策略,防止迭代过程中发散。
改进欧拉法示意图
改进欧拉法迭代过程
展示了改进欧拉法的迭代过程和与欧拉法的区别。
更靠近真实解
通过计算得到更靠近真实解的值,提高了解的准确 性。
改进Euler法
通过本次PPT课件,我们将学习改进Euler法,一种数值解微分方程的方法, 通过迭代逼近真实解,提高精度和稳定性。
什么是Euler法?
Euler法是一种数值解微分方程的方法,通过迭代逼近真实解。然而,它存在精度有限、不能处理高阶微分方 程和容易发散等问题。
改进的方法
1 提高精度
使用龙格-库塔方法,在算法中增加计算量来提高精度。
在实际应用中,我们需要根据具体情况选择适合的数值解法。
向前欧拉法,向后欧拉法与改进欧拉法求解微分方程

向前欧拉法,向后欧拉法与改进欧拉法求解微分方程
向前欧拉法、向后欧拉法和改进欧拉法是求解微分方程的常用数值方法。
这些方法都是基于欧拉公式,即将微分方程中的导数用差分代替,从而将微分方程转化为差分方程,进而用数值方法求解。
向前欧拉法是一种简单的数值方法,它利用当前时刻的导数来估计下一时刻的解。
具体来说,假设微分方程为dy/dt=f(y,t),则向前欧拉法的迭代公式为:y_n+1=y_n+hf(y_n,t_n),其中h为时间步长。
这个公式可以看作是在当前时刻上做一个切线,然后用这个切线的斜率来估计下一时刻的解。
向后欧拉法是一种更加精确的数值方法,它利用下一时刻的导数来估计当前时刻的解。
具体来说,向后欧拉法的迭代公式为:
y_n+1=y_n+hf(y_n+1,t_n+1),其中h为时间步长。
这个公式可以看作是在下一时刻上做一个切线,然后用这个切线的斜率来估计当前时刻的解。
由于向后欧拉法需要解一个非线性方程,因此比向前欧拉法更加复杂。
改进欧拉法是向前欧拉法和向后欧拉法的结合,它利用当前时刻和下一时刻的导数来估计当前时刻的解。
具体来说,改进欧拉法的迭代公式为:y_n+1=y_n+(h/2)(f(y_n,t_n)+f(y_n+1,t_n+1)),其中h 为时间步长。
这个公式可以看作是在当前时刻和下一时刻上各做一个切线,然后将这两个切线的斜率取平均值来估计当前时刻的解。
改进欧拉法相对于向前欧拉法和向后欧拉法更加精确。
总的来说,向前欧拉法、向后欧拉法和改进欧拉法都是求解微分
方程的有力工具,使用时需要根据具体问题选择合适的方法。
欧拉方法课件

yi
1 2 h[ f (xi , yi )
f ( xi1 , yi1 )]
隐式措施
这种只用前一步 yi 即可算出 yi1 的公式称为单步法.
显式旳单步法能够逐层求解,简朴以便;
隐式旳单步法需要解具有 yi1 旳方程式,很不以便,
常用迭代法求解。
隐式措施旳迭代求解
梯形措施:
1 yi1 yi 2 h [ f ( xi , yi ) f ( xi1 , yi1 )]
第四步,将差分方程改写为线性方程组旳形式并求 解,解出 yi .
第五步,从理论上研究数值格式旳局部截断误差(即 相容性)、稳定性以及收敛性与整体误差。
第六步,分析数值成果与理论分析是否一致,考察 有无不足及可改善线法)
第一步,对问题(*)旳求解区域作一致网格剖分,
即 yi1 yi h f ( xi , yi ), i 0, 1, n 1.
总旳, yi1 yi h f ( xi , yi ), i 0, 1, n 1.
y0 y( x0 ).
这就是著名旳欧拉(Euler)公式。 以上措施称为欧拉措施或欧拉折线法。
欧拉折线法名称旳由来: yi1 yi h f ( xi , yi ), i 0, 1, n 1.
证:此定理旳证明可在一般旳《常微分方程》教材 上找到,故略。
2.求解问题(*)数值措施旳基本思想
求解问题(*)数值措施旳基本思想是在求解区域 I
上任取 n 1个节点 a x0 x1 x2 xn b ,
在这些节点上采用离散化措施(一般用数值积分、微 分、泰勒公式等)将上述初值问题化成有关离散变量
(xi ,
yi )
yi
h( yi
2xi yi
),
第13节 欧拉方法

-1
0
0.2
0.4
0.6
0.8
1
步长选择不同导致数值方法的收敛性不同 注意:隐式欧拉方法收敛性与步长无关!! 注意:隐式欧拉方法收敛性与步长无关!!
欧拉方法的稳定性
欧拉方法稳定性分析微小误差在迭代过程中积累的情况。
问题: y '(t ) = f (t , y ), t ∈ [a, b], y (0) = y 0 + e, 已知 其中e为初始值的误差,分析误差随迭代过程的变化情况。 讨论一:考虑简单情况,假设f (t , y ) = α y,则欧拉迭代公式为: y( n +1) = y( n ) + hα y( n ) y( n +1) = (1 + hα ) n ( y(0) + e) 如果 1 + hα > 1, 则误差越来越大;反之,如果 1 + hα < 1, 则误差越来越小。 讨论二:一般情况,如果对任意 1 + hf ( x, y ) < 1, 则误差收敛。
由于单步误差在迭代过 程中产生积累,从而产 生的误差为积累误差。
欧拉方法的局部误差
前向欧拉方法的局部误差 : h2 由于:y ( x( n +1) ) = y ( x( n ) + h) = y ( x( n ) ) + hy '( x( n ) ) + y ''( x( n ) + θ h) 2 其中,θ ∈ (0,1) 所以:y ( x( n +1) ) - y( n +1) h2 = y ''( x( n ) + θ h), 记作:O(h 2 ) 2
前向欧拉方法: 也叫做:左矩形数值求积公式建立Euler法 也叫做:左矩形数值求积公式建立Euler Euler法 根据导数的定义,用差商代替微商(导数 )的方法 dy dx ≈
Euler法与改进Euler法PPT课件

yp
yn
0.1( yn
2 xn yn
)
yq
yn
0.1( y p
2( xn 0.1) ) yp
yn1
1 2
(
yp
yq )
七、 龙格 - 库塔法 /* Runge-Kutta Method */ 建立高精度的单步递推格式。
单步递推法的基本思想是从 ( xi , yi ) 点出发,以某一 斜率沿直线达到 ( xi+1 , yi+1 ) 点。欧拉法及其各种变
一、引 言
许多实际问题的数学模型是微分方程或微分方 程的定解问题,如物体运动,电路震荡,化学反映及 生物群体的变化等.
能用解析方法求出精确解的微分方程为数不多, 而且有的方程即使有解析解,也可能由于解的表达 式非常复杂而不易计算,因此有必要研究微分方程 的数值解法
常微分方程数值解法
重点 研究一阶常微分方程的初值问题的数值解
y(x) 在 xn 处展开:
y(xn
h)
y(xn ) hy(xn )
h2 2
y(xn )
取一次Taylor多项式近似函数,得
y(xn1) y(xn h)
y(xn ) hy(xn )
h2 2
y( )
y(xn )
hf
(xn ,
y(xn ))
1 2
h2
y( )
yn
hf
(xn ,
yn )
形所能达到的最高精度为2阶。
考察改进的欧拉法,可以将其改写为:
斜率
yi 1
yi
h
1 2
K1
1 2
K
2
一定取K1 K2 的平均值吗?
K1 f ( xi , yi )
欧拉法的若干基本概念

高阶偏微分方程的求解
总结词
对于高阶偏微分方程,欧拉法可以通过迭代的方式逐 步逼近解,但可能收敛速度较慢且精度较低。
详细描述
对于高阶偏微分方程,如 (u_{tt} = f(x, y, u, u_x, u_y, u_z, u_{xx}, u_{xy}, u_{xz}, u_{yy}, u_{yz}, u_{zz})),可 以通过泰勒级数展开等方式将其转化为多个一阶偏微分 方程,然后对每个一阶偏微分方程应用欧拉法进行求解。 但需要注意的是,由于欧拉法的精度和收敛速度限制, 对于高阶偏微分方程,可能需要采用其他数值方法如有 限元法、谱方法等来提高精度和收敛速度。
欧拉法的应用领域
物理模拟
欧拉法可用于求解物理现象的数学模 型,如流体动力学、电磁学和热传导
等。
工程设计
在工程设计中,欧拉法可用于模拟和 分析复杂系统的行为,如机械系统、
控制系统和航空航天系统等。
金融建模
欧拉法也可用于金融领域,如股票价 格模拟、期权定价和风险评估等。
02
欧拉法的基本原理
离散化思想
一阶偏微分方程的求解
总结词
欧拉法也可以用于求解一阶偏微分方程,通过将偏微分方程转化为多个一维常微分方程, 然后分别用欧拉法求解。
详细描述
对于形如 (u_t = f(x, y, u, u_x, u_y, u_z)) 的一阶偏微分方程,可以通过有限差分法等 手段将其转化为多个一维常微分方程,然后对每个一维常微分方程应用欧拉法进行求解。
研究欧拉法在处理高阶微分方程 和其他复杂问题中的应用,以扩 大其应用范围。
05
欧拉法的应用实例
一维常微分方程的求解
要点一
总结词
欧拉法在求解一维常微分方程时,通过选取离散的时间点 ,将微分方程转化为差分方程,然后通过迭代求解。
euler算法

euler算法欧拉算法(Euler's method),也称为数值积分算法或者欧拉积分,是一种常用的数值积分算法,用于近似解常微分方程(ODE)的初值问题。
它是一种一阶显式数值积分算法,通过使用l-step近似直线来逼近解析解。
本文将介绍欧拉算法的基本原理、算法步骤以及其应用。
欧拉算法的基本原理是将微分方程转化为差分方程,通过逐步逼近解析解。
对于给定的初值问题y'(t) = f(t, y(t)),y(t0) = y0,其中f是一元函数,y是未知函数。
我们想要求解在区间[t0, tn]上的近似解y(ti),其中ti = t0 + i*h,h是步长。
具体的欧拉算法步骤如下:1. 将初始条件t0和y0代入未知函数f(t, y)中,计算f(t0, y0)得到f0。
2. 使用近似直线来逼近解析解,y(ti+1) ≈ y(ti) + h*f(ti, yi),其中h是步长。
3. 重复步骤2,直到得到近似解y(tn)。
欧拉算法的实现相对简单,但是由于使用了线性逼近,所以误差较大。
对于某些情况下误差不能太大的问题,欧拉算法可能不够准确,这时需要使用更高阶的数值积分算法。
欧拉算法的应用广泛,包括但不限于以下方面:1. 物理学:在物理学中,许多问题可以用ODE建模,比如牛顿第二定律、电路等。
欧拉算法可以用于求解这些物理问题的近似解。
2. 经济学:经济学中的许多问题也可以用ODE描述,如宏观经济模型、供需分析等。
欧拉算法可以用于求解这些经济问题的近似解。
3. 生物学:生物学研究中,很多问题需要建立数学模型,如生物种群的增长和竞争、药物代谢和毒性等。
欧拉算法可以用于求解这些生物问题的近似解。
4. 计算机图形学:计算机图形学中,欧拉算法可以用于模拟物体的运动,如粒子系统的模拟、刚体的模拟等。
5. 控制工程:控制工程中的系统动力学可以用ODE建模,欧拉算法可以用于分析系统的稳定性和响应特性。
总结来说,欧拉算法是一种常用的数值积分算法,用于近似解常微分方程的初值问题。
欧拉法、改进的欧拉法、龙格-库塔法求解初值问题

欧拉法、改进的欧拉法、龙格-库塔法求解初值问题欧拉法、改进的欧拉法、龙格-库塔法求解初值问题简介通过求解简单的初值问题:dudx =f (x ,u )(1)u (x 0)=u 0(2)引⼊欧拉法、改进的欧拉法、龙格-库塔法等。
前期准备数值解法的基本思想就是先对x 和u(x)在区间[x0,∞)上进⾏离散化,然后构造递推公式,再进⼀步得到u(x)u(x) u(x)u(x)u(x)u(x)在这些位置的近似取值。
取定步长h ,令x n =x 0+nh (n =±1,±2,⋯)得到离散的位置:x 1,x 2,⋯,x n ,u(x)在这些点精确取值为:u (x 1),u (x 2),⋯,u (x n )利⽤数值解法得到的这些点的近似取值,u 1,u 2,⋯,u n欧拉法欧拉法的核⼼就是将导数近似为差商。
将导数近似为向前差商,则有:du dxx =x n≈u x n +1−u x nh代⼊(1)式,有:u x n +1=y x n +hf x n ‖u x n⽤u n +1和 u n 代替u (x n +1)和u (x n ),得:u n +1=u n +hf x n ,u n因此,若知道u 0我们就可以递归出u 1,u 2,⋯如果将导数近似为向后差商:du dxx =x n≈u x n −u x n −1h类似的,就可以得到:u n −1=u n −hf x n ,u n这样,若知道u 0我们就可以递归出u −1,u −2⋯改进的欧拉法对(1)式在[x n ,x n +1]上积分,可得:u x n +1=u x n +∫xn +1x nf (x ,u )dx其中,n =0,1,⋯⽤不同⽅式来近似上式的积分运算,就会得到不同的递推公式。
若使⽤左端点计算矩形⾯积并取近似:∫x n +1x nf (x ,u )dx ≈hf x n +1,u x n +1代⼊上式得:{|()()()()(())()|()()()()()(())u n +1=u n +hf (x n ,u n )若使⽤梯形的⾯积做近似:∫x n +1x nf (x ,y )dx ≈h2f x n ,u x n+f x n +1,ux n +1得到:u n +1=u n +h2f x n ,u n +f x n +1,u n +1欧拉法虽然精度偏低,但它是显式的,可直接得到结果。
数值分析各算法流程图

01,,n1,,n1,,)n x及数值分析各算法流程图一、插值1、 拉格朗日插值流程图:( 相应程序:lagrintp(x,y,xx))2,,n ,,j n 1,2,,n 1,,)n 2、 牛顿插值流程图(1)产生差商表的算法流程图(相应程序:divdiff(x,y))注:1、另一程序divdiff1(x,y),输出的矩阵包含了节点向量。
而divdiff(x,y)不含节点向量。
2、另一程序tableofdd(x,y,m),输出的是表格形式,添加了表头。
1,,),,n m 及1,,m (2)非等距节点的牛顿插值流程图(相应程序:newtint11(x,y,xx,m)) 、注:1、虽然程序newtint11(x,y,xx,m)考虑了多种情形,看上去很复杂,但基本流程结构还是如上图所示。
2、程序中调用的子程序是divdiff 。
若调用的子程序是divdiff1的话,流程图中的第三,第四,第五步要相应的改一下数字。
2,3,,1m +1,,j1,2,,n=1,2,,)n m 及(3)求差分表的流程图(相应程序:difference(y,m))注:1、difference 输出的是矩阵D 。
而另一程序tableofd(y,m),输出的是带有表头的差分表。
n x m1,,),,1,,m注:1、程序newtforward1(x,y,xx,m))的结构与上述流程图一致,xx可以是数组。
2、另一程序newtforward(x,y,xx,m))先求出插值多项式,再求插值多项式在插值点的函数值。
基本结构还是和上面的流程图一样。
n x m1,,),,-x x1,,m注:1、程序newtbackward1(x,y,xx,m))的结构与上述流程图一致,xx可以是数组。
2、另一程序newtbackward(x,y,xx,m))先求出插值多项式,再求插值多项式在插值点的函数值。
基本结构还是和上面的流程图一样。
1,2,,n1,2,,n ,2,,)n x及3、Hermite 插值流程图(1) 已知条件中一阶导数的个数与插值节点的个数相等时的Hermite 插值流程图。
欧拉法

课程名称欧拉法求解微分方程学生学院理学院专业班级信息与计算科学131班学号5501213051学生姓名陈小娟欧拉法(Euler)简单欧拉法欧拉法是简单有效的常微分方程数值解法,欧拉法有多种形式的算法,其中简单欧拉法是一种单步递推算法。
1 基本原理对于一个简单的一阶微分方程:Y’=f(x,y)其中初始值为:Y(x0)=y0欧拉方法等同于将函数微分转换为数值差分,如下式,y’(x)=(y(x+h)-y(x))/h故原方程变形为:y n+1=y n+h2 算法的程序实现在MA TLAB中编程实现的欧拉法函数为:MyEuler .功能:以欧拉法求解常微分方程。
调用格式:[outx,outy]=Myeuler(fun,x0,xt,y0,pointNUM).其中,fun为函数名;x0为自变量区间初值;xt为自变量区间终值;y0为函数在x0处的值;Pointnum为自变量在[x0,xt]上所取的点数;Outx为输出自变量区间上所取点的x值;Outy为对应点上的函数值。
欧拉法的MATLAB程序代码如下:Function[outx.outy]=MyEuler[fun,x0,xt,yo,pointnum)%用前向差分的欧拉方法解微分方程y’=fun%函数f(x,y):fun%自变量的初值和终值:x0,xt%yo表示函数在x0处的值,输入初值为列向量形式%自变量在[x0,xt]上取的点数;pointnum%outx:所取的点的x值%outy:对应点上的函数值If nargin<5|pointnum<=0 %如果函数仅输入4个参数值,则pointnum默认值10 Pointnum=100EndIf nargin<4 %y0默认值为0y0=0;EndH=(xt-xo)/pointnum; %y0默认为0X=xo+[0:pointnum]’*h; %自变量数组Y(1,:)=y0(:)’; %输入存为列向量For k=1:pointnumF=feval(fun,x(k),y(k,:)); %计算发(x,y)在每个迭代点的值F=f(:)’;Y(k+1,:)=y(k,:)+h*f; %对于所取的点迭代计算y值EndOuty=yOutx=xPlot(x,y)3、实例分析欧拉法求解常微分方程应用实例。
欧拉法,改进欧拉法,斐波那契法原理及流程图

1欧拉法求微分方程方法说明欧拉(Euler)法是解常微分方程初值问题(4.1)最简单的数值方法,其具体做法是,将区间[a,b]进行N等分:,步长.并将式(4.1)写成等价的积分形式(4.2)再对式(4.2)右端积分用矩形公式计算,则有, (4.3)在式(4.3)右端取,舍去余项。
则得,作为的近似值。
在式(4.3)右端取,舍去余项,则得作为的近似值.一般地,在式(4.3)右端取舍去余项,则得(4.4)作为的近似值.式(4.4)为欧拉法计算公式.我们知道微分方程的解是平面上的一族积分曲线,这族曲线中过点的积分曲线就是初值问题式(4.1)的解.欧拉法的几何意义是,过点引斜率为的积分曲线的切线,此切线与直线的交点为,再过点引以为斜率的切线与直线的交点为,依此类推,从出发,作以为斜率的切线,此切线与直线交点为.于是便得到过点的一条折线,见图4.1.过的积分曲线则用此折线来代替.因此,这种方法亦称折线法.图4.1例:用欧拉法求微分方程[]2',(0)1,0.1,0,1x y y y h y 区间为=-==欧拉法流程图如下:欧拉法程序如下: clear;clc;x1=0; x2=1; h=0.1; x0=0; y0=1;N=(x2-x1)/h;%要计算的次数 x(1)=x0; y(1)=y0; for n=1:Nx(n+1)=x(n)+h;y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n)); end X=x Y=y2改进欧拉法求微分方程方法说明由于欧拉法采用矩形公式计算积分产生较大截断误差.改进欧拉法(又称改进折线法)是采取梯形公式来计算式(4.3)右端积分,则有(5.1)在式(5.1)右端取,舍去余项,则得将作为的近似值.在式(5.1)右端再取,舍去余项,则得将作为的近似值.一般地,在式(5.1)右端取,舍去余项.则得(5.2)将作为的近似值.式(5.2)为改进欧拉法计算公式.流程图如下:例:用改进欧拉法求微分方程[] 2',(0)1,0.1,0,1xy y y hy区间为=-==改进欧拉法程序如下:clear;clc;x1=0;x2=1;h=0.1;x0=0;y0=1;p(1)=0;N=(x2-x1)/h;x(1)=x0;y(1)=y0;for n=1:Nx(n+1)=x(n)+h;y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n));p(n+1)=y(n)+h*(y(n+1)-2*x(n)/y(n+1));y(n+1)=(y(n+1)+p(n+1))/2;endX=xY=y3斐波那契法求极值方法说明斐波那契法原理类似于黄金分割法,只是搜索区间的缩短率不再采用黄金分割数0.618。
第3章0102欧拉方法

n =0
2 y1 y0 h y0 x0 y0 1 0.2(1 0 12 ) 0.8
n 1 y2 y1 h y1 x1 y12 0.8 0.2 0.8 0.2 0.82 0.6144
2 2 n 2 y3 y2 h y2 x2 y2 0.6144 0.2 0.6144 0.4 0.6144
一阶常微分方程: 微分方程中各阶导数的最高阶数为 一阶的
定解条件:
初值问题----给出积分曲线在初始时
刻的状态 边值问题----给出积分曲线在首末两 端的状态
定理:常微分方程初值问题
y f ( x , y ), y ( x 0 ) y0 x [a , b ]
设x0∈[a,b], f(x,y)对 x 连续且关于y满足李普希兹 条件,则上述初值问题在[a,b]上有唯一解。
隐式欧拉公式的局部截断误差: 假设 yn y ( xn ) ,则
h2 2 y ( xn 1 ) yn 1 y ''( xn ) =O(h ) 2
隐式欧拉公式与显式欧拉公式的精度相当,都是一阶方法。
3.1.3 两步欧拉格式
为了提高精度,改用中心差商
1 [ y ( xn1 ) y ( xn1 )] 替 代 2h
n =0 x0=0
2 x0 2 0 y1 y0 h( y0 ) 1 0.1(1 ) 1.1 y0 1
2 x1 2 0.1 y2 y1 h( y1 ) 1.1 0.1(1.1 ) 1.1918 y1 1.1
n 1 x1 0.1
局部截断误差和阶:数值公式的精度
y ' y xy 2 取步长 h 0.2 ,用欧拉法解初值问题 其中 y (0) 1
2.3欧拉方法及拉格朗日方法(共28张PPT)

4.1.1拉格朗日方法(fāngfǎ)
➢ 在直角坐标(zhí jiǎo zuò biāo)中展开
r r (a,b,c,t)
x x(a,b, c,t)
y
y(a,b, c,t)
z z(a,b, c,t)
第六页,共二十八页。
4.1.1拉格朗日方法(fāngfǎ)
流体质点的速度 V r (a,b, c,t) t
r
V
r
Vz
z )ir
V r
i
Di Dt
( t
Vr
r
V
r
Vz
z
)i
V r
ir
所以: a
DVr Dt
ir
VrV r
i
DV Dt
i
V2 r
ir
DVz Dt
iz
( DVr Dt
V2 r
)ir
( DV Dt
VrV r
)i
DVz Dt
iz
向心加速度 : ar
DVr Dt
V2 r
度的表达式为
DV lim V (M ',t t) V (M ,t)
Dt t0
t
第十六页,共二十八页。
4.1.2随体导数(dǎo shù)
这里用 D 表示这种导数不同于牛顿定律 Dt
对速度的简单导数
速度的变化有两方面的原因:
一方面的原因, 质点由M点运动至M '点时, 时间过去了t,由于场的时间非定常性引 起速度的变化
定义流速场V V r,t中的加速度:
如图M点的加速度就是此时过M点 的流体质点的加速度.
第十五页,共二十八页。
4.1.2随体导数(dǎo shù)
欧拉法与改进欧拉法

一、目的1.通过本实验加深对欧拉法、改进欧拉法、龙格-库塔法、线性多步法的构造过程的理解;2.能对上述三种方法提出正确的算法描述编程实现,观察计算结果的改善情况。
二、内容与设计思想 自选常微分方程的初值问题,分别用欧拉法、改进欧拉法求解。
分别用以上两种方法求解常微分方程初值问题:2'()1,([0.0,1.4],0.1)(0)0.0y x y h y ⎧=+=⎨=⎩求解区间取步长三、使用环境操作系统:windons XP软件平台:VC 6.0四、核心代码及调试过程#include <stdio.h>#include <conio.h>#include <math.h>double f(double x,double y){return (1+y*y);}int main(){int i;double x,y,y0=1,dx=0.1;double xx[11];double euler[11],euler_2[11];double temp;double f(double x,double y);for (i=0;i<11;i++)xx[i]=i*dx;euler[0]=y0;for (i=1,x=0;i<11;i++,x+=dx)euler[i]=euler[i-1]+dx*f(x,euler[i-1]);euler_2[0]=y0;for (i=1,x=0;i<11;i++,x+=dx){printf("x=%lf\teluer=%lf\teuler_2=%lf\taccu=%lf\n",x,euler[i],euler_2[i],pow(1+x*x,1.0/3));getch();}temp=euler_2[i-1]+dx*f(x,euler_2[i-1]);euler_2[i]=euler_2[i-1]+dx*(f(x,euler_2[i-1])+f(x+dx,temp))/2; }#include <stdio.h>#include <math.h>#include <process.h>#define MAX_N 20double f(double x,double y){return (1+y*y);}void euler(double a,double b,double init_val,int n){int i;double h,x[MAX_N],y[MAX_N];h=(b-a)/n;x[0]=a;y[0]=init_val;printf("y[%0.lf]=%lf\t",x[0],y[0]);for (i=1;i<=n;i++){y[i]=y[i-1]+h*f(x[i-1],y[i-1]);x[i]=a+i*h;y[i]=y[i-1]+0.5*h*(f(x[i-1],y[i-1])+f(x[i],y[i]));printf("y[%0.2lf]=%lf\t",x[i],y[i]);if ((i+1)%3==0)printf("\n");}}void main(){double a=0.0,b=1.4,init_val=1.0;euler(a,b,init_val,5);}运行结果:五、总结通过编程学会了对欧拉法和改进欧拉法的运用六、附录。
改进Euler法

(0 ? x ? 1)
解 f (x, y) ? y ? 2x / y
?
改进
Euler
格式
? ?? ?
yp yc
? ?
yn yn
? ?
hf hf
(xn , (xn?1
yn ,y
)
p
)
?
? ?
yn
?
1
?
1 2
(
y
p
?
yc )
Euler 法
改进Euler 法
准确解
xn Yn 0.1 1.1 0.2 1.1918 0.3 1.2774 0.4 1.3582 0.5 1.4351 0.6 1.5090 0.7 1.5803 0.8 1.6498 0.9 1.7178 1.0 1.7848
|yn-y(x n)| Yn 0.0046 1.0959 0.0086 1.1841 0.0125 1.2662 0.0166 1.3434 0.0209 1.4164 0.0257 1.4860 0.0311 1.5525 0.0373 1.6165 0.0445 1.6782 0.0527 1.7379
y?? f ( x , y) 准确成立
? y( xn?1) ? y( xn ) ? hf (? , y(? )) 令K ? ? f (? , y(? )),称为区间[ xn , xn?1]上的平均斜率
y( xn?1) ? y( xn ) ? hK * 寻求计算平均斜率的算法
? 考察欧拉法,以 xn的斜率值
希望用xn,xn? p两个点的斜率K1, K2加权平均得到平
均斜率K *,即 K * =?1K1 ? ?2 K2 , ?1,? 2为待定参数
将改进 Euler 法推广
斐波那契法

谢谢观看
斐波那契法与0.618法的主要区别在于:探索区间长度的缩短率不是采用黄金分割数,而是采用斐波那契数, 计算函数值的次数n也是已知的。
斐波那契数列
斐波那契数列
意大利数学家斐波那契,提出了一个著名的“兔子数列”,该数列从第3个数起,后面的每个数都是它前面 那两个数的和。如果把斐波那契数列的任何一项除以前一项,将会得到一个比值极限约为0.618,俗称黄金分割 点,因此斐波纳契数列又称黄金分割数列,用数列{Fn}表示,则有:
简介
简介
对闭区间[a,b]上的单峰函数f(t),按相邻两斐波那契数之比,使用对称规则进行搜索的方法。其特点是: 逐步缩短所考察的区间,以尽量少的函数求值次数,达到预定的某一缩短率。设{Fn}是斐波那契数列,对于区间 [0,1],确定搜索次数n,则选择两点:
比较f(t1)和f(t2),消去其中较小值所在的一段区间;在缩短后的搜索区间上,再作第二步迭代;如此继 续迭代下去,共做n次迭代,搜索区间长度缩短为1/Fn(使小于给定值)。1953年,美国数学家基弗(Kiefer, J.C.)首先研究用斐波那契数搜索一维函数f(t)的局部最大值 。
计算步骤
计算步骤
Fibonacci法计算步骤如下: (1)给定初始区间和最终长度L。求计算函数值的次数n,使,辨别常数,计算试探点和,计算函数值和 ; (2)若,则转步骤(3);若,则转步骤(4); (3)令,计算试点: 若k=n-2,则转步骤(6);否则,计算函数值,转步骤(5); (4)令,计算试点: 若k=n-2,则转步骤(6);否则,计算函数值,转步骤(5); (5)置k:=k+1,转至步骤(2); (6)令,计算和;若,则令;若,则令。停止计算,极小点含于。
这个级数与大自然植物的关系极为密切。几乎所有花朵的花瓣数都来自这个级数中的一项数字:菠萝表皮方 块形鳞苞形成两组旋向相反的螺线,它们的条数必须是这个级数中紧邻的两个数字(如左旋8行,右旋13行); 还有向日葵花盘等。直到最近的1993年,人们才对这个古老而重要的级数给出真正满意的解释:此级数中任何相 邻的两个数,次第相除,其比率都最为接近0.……这个值,它的极限就是所谓的"黄金分割数"。斐波那契数列在 许多科技领域都得到了应用 。
欧拉法

隐 式 ( 后 退 ) 欧 拉 公 式 的 局 部 截 断 误 差 : 假 设 yn y ( xn ) , 则
y ( x n 1 ) y n 1 h
2
2
y ''( x n )
2 两步欧拉公式:中点方法
1 2h
y ( x n 1 ) y ( x n h ) y ( x n ) h y ( x n ) 2! y ( n )
当 h 充分小时,忽略高次项得
h
2
2!
y ( n ) O ( h )
2
因此,有欧拉公式
y n 1 y n h f ( x n , y n )
y3 y 2 h y 2 x2 y 2 0 .4 6 1 3 2 1
2
2
0 .8 0 .2 0 .8 0 .2 0 .8 0 .6 1 4 4
2
0 .6 1 4 4 0 .2 0 .6 1 4 4 0 .4 0 .6 1 4 4
n
=0
y1 y 0 h ( y 0
y 2 y1 h ( y1
2 x0 y0
) 1 0 .1(1
20 1
) 1 .1
n 1
2 x1 y1
) 1 .1 0 .1(1 .1
2 0 .1 1 .1
) 1 .1 9 1 8
局部截断误差和阶:数值公式的精度 定义 局部截断误差:假设第n步是准确的,即 y(xn )=yn, 将y(xn+1 ) - yn+1定义为数值方法的局 部截断误差。
y ( x n 1 ) y n 1 2 hf ( x n , y n )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1欧拉法求微分方程
方法说明
欧拉(Euler)法是解常微分方程初值问题
(4.1)
最简单的数值方法,其具体做法是,将区间[a,b]进行N等分:
,步长.并将式(4.1)写成等价的积分形式
(4.2)
再对式(4.2)右端积分用矩形公式计算,则有
, (4.3)
在式(4.3)右端取,舍去余项。
则得
,
作为的近似值。
在式(4.3)右端取,舍去余项,则得
y2=y1+ℎf(x1,y1)
作为的近似值.
一般地,在式(4.3)右端取舍去余项,则得
(4.4)
作为的近似值.式(4.4)为欧拉法计算公式.
我们知道微分方程的解是平面上的一族积分曲线,这族曲线中过点的积分曲线就是初值问题式(4.1)的解.
欧拉法的几何意义是,过点引斜率为的积分曲线的切线,此切线与直线的交点为,再过点引以为斜率的切线与直线的交点为,依此类推,从出发,作以为斜率的切线,此切线与直线交点为.于是便得到过点的一条折线,见图4.1.过的积分曲线则用此折线来代替.因此,这种方法亦称折线法.
图4.1
例:用欧拉法求微分方程[
]2',(0)1,0.1,0,1x y y y h y 区间为=-==
欧拉法流程图如下:
欧拉法程序如下: clear;
clc;
x1=0; x2=1; h=0.1; x0=0; y0=1;
N=(x2-x1)/h;%要计算的次数 x(1)=x0; y(1)=y0; for n=1:N
x(n+1)=x(n)+h;
y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n));
end
X=x
Y=y
2改进欧拉法求微分方程
方法说明
由于欧拉法采用矩形公式计算积分产生较大截断误差.改进欧拉法(又称改进折线法)是采取梯形公式来计算式(4.3)右端积分,则有
(5.1)
在式(5.1)右端取,舍去余项,则得
将作为的近似值.
在式(5.1)右端再取,舍去余项,则得
将作为的近似值.
一般地,在式(5.1)右端取,舍去余项.则得
(5.2)
将作为的近似值.
式(5.2)为改进欧拉法计算公式.流程图如下:
例:用改进欧拉法求微分方程
[] 2
',(0)1,0.1,0,1
x
y y y h
y
区间为
=-==
改进欧拉法程序如下:
clear;
clc;
x1=0;
x2=1;
h=0.1;
x0=0;
y0=1;
p(1)=0;
N=(x2-x1)/h;
x(1)=x0;
y(1)=y0;
for n=1:N
x(n+1)=x(n)+h;
y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n));
p(n+1)=y(n)+h*(y(n+1)-2*x(n)/y(n+1));
y(n+1)=(y(n+1)+p(n+1))/2;
end
X=x
Y=y
3斐波那契法求极值
方法说明
斐波那契法原理类似于黄金分割法,只是搜索区间的缩短率不再采用黄金分割数0.618。
如图7.1所示,只要在[a,b]内取两点x1,x2,并计算出f(x1),f(x2),通过比较,可将区间[a,b]缩短为[a,x2]或[x1,b]。
因为新的区间内包含一个已经计算过函数值的点,所以再从其中取一个试点,又可将这个新区间再缩短一次,不断地重复这个过程,直至最终的区间长度缩短到满足预先给定的精确度为止。
图7.1
现在的问题是,怎样选取试点,在保证同样精确度的情况下使得计算f(x)函数值的次数最少?在计算函数值的次数一定的情况下,最初区间与最终区间的长度之比可作为取点方式优劣的一个标准。
计算n次函数值,如何取点使最终区间最小?或者最终区间长度为1,计算n次函数值,初始区间最多为多长?为此,引入Fibonacci数列:
F0=F1=1
F n=F n−1+F n−2 , n≥2
表7.1
系
所以当试点个数n确定之后,最初的两个试点分别选为:
x1=a+F n−2
F n
(b−a);
x2=a+F n−1
F n
(b−a).
显然x1,x2关于区间[a,b]对称,即有x1-a=b-x2,如图7.2所示
图7.2。