欧拉算法与改进的欧拉算法实例
欧拉算法与改进的欧拉算法实例

题目再现:2. 当病人采取服用口服药或肌肉注射来治疗疾病时,药物虽然瞬间进入了体内,但它一般都集中与身体的某一部位,靠其表面与肌体接触而逐步被吸收。
假定身体系统是一个单房室系统,设t 时刻体内药物的总量为x(t),则x(t)满足:问题分析:运用欧拉公式求微分方程的数值解。
微分方程为:11dx ,(0)0dtk t k De kx x -=-= 1,欧拉折线法:设h=0.1,即n=201时,1k 0.6=,k 0.2=,D=200.MATLAB 程序如下所示:clearf=sym('0.6*200*exp(-1*0.6*t)-0.2*x ');a=0; b=20;h=0.1;n=(b-a)/h+1;t=0; x=0;szj=[t,x];for i=1:n-111dx ,(0)0dt k t k De kx x -=-=10011100 ,(,)()k t k k k k k k kt x x x h f t x x h k De kx t t h -++==⎧⎪=+=+-⎨⎪=+⎩x=x+h*subs(f,{'t','x'},{t,x});t=t+h;szj=[szj;t,x];endszj ;x=dsolve(‘Dx=120*exp(-0.6*t)-0.2*x’,'x(0)=0','t')T=[0:0.1:20];X=subs(x,T);plot(szj(:,1),szj(:,2),'or-',T,X,’b-’)输出结果为:解析解:x=其中红线代表的是数值解,蓝线代表的是解析解。
可见,数值解的误差还是比较小的。
二、改进的欧拉法:有公式:[]11100(,)(,)2()i i i i i i h x x f t x f t x x x t +++=++= 与欧拉公式结合使用,有(0)1(1)()111(,)[(,)(,)],0,1,2 (2)i i i i k k i i i i i i x x hf t x h x x f t x f t x k +++++=+=++= 设h=0.1,即n=201时,1k 0.6=,k 0.2=,D=200.MATLAB 程序如下所示:clearf=sym('0.6*200*exp(-1*0.6*t)-0.2*x');a=0; b=20;h=0.1;n=(b-a)/h+1;t=0; x=0;szj=[t,x];for i=1:n-1m=0;p=0;q=0;m=x;q=subs(f,{'t','x'},{t,m});x=m+h*q;if abs(p-x)>0.1p=x;x= m+h/2*(q+subs(f,{'t','x'},{t+h,x}));endt=t+h;szj=[szj;t,x];endszj ;x=dsolve('Dx=120*exp(-0.6*t)-0.2*x', 'x(0)=0','t')T=[0:0.1:20];X=subs(x,T);plot(szj(:,1),szj(:,2),'or-',T,X,'b-')可见,改进后的欧拉算法误差更小,极其精确,基本与原曲线重合。
欧拉方法实际应用

欧拉方法实际应用欧拉方法是一种数值解微分方程的方法,它的原理是将微分方程转化为差分方程,通过连续取样来逼近微分方程的解。
欧拉方法可以应用于各种领域,例如物理、工程、金融等。
在物理领域,欧拉方法可以用于求解运动方程。
例如,一个自由落体运动的运动方程可以表示为:$$y''=-g$$ 其中y是物体的位移,g是重力加速度。
通过欧拉方法,可以将微分方程转化为差分方程:$$\frac{y_{i+1}-2y_i+y_{i-1}}{(\Delta x)^2}=-g$$ 其中$\Delta x$表示时间上的间隔。
通过迭代计算,可以得到物体在不同时间点的位置。
在工程领域,欧拉方法可以用于模拟系统的动态行为。
例如,在控制系统中,欧拉方法可以用于计算系统的响应,以及优化控制器的设计。
欧拉方法还可以用于计算机模拟,例如在飞行器设计中,欧拉方法可以用于计算飞行器的动态响应,并优化飞行控制器的设计。
在金融领域,欧拉方法可以用于计算期权的价格。
例如,在期权定价模型中,欧拉方法可以用于计算期权价格的变化情况。
欧拉方法还可以用于计算金融衍生品的价格,例如期货、期权等。
欧拉方法虽然简单易懂,但在实际应用中也存在一些限制。
例如,在求解微分方程时,欧拉方法的精度可能受到时间步长的限制。
如果时间步长太大,将会导致误差增大,从而影响计算结果的准确性。
此外,欧拉方法只适用于解析解不存在的情况,对于存在解析解的微分方程,欧拉方法可能会得到不准确的结果。
欧拉方法是一种简单易懂的数值解微分方程的方法,可以广泛地应用于各个领域。
在实际应用中,需要根据具体情况选择合适的方法,以保证计算结果的准确性。
欧拉回路的算法演示

欧拉图中欧拉回路的算法,演示,及分析
设G为欧拉图,一般来说G中存在若干条欧拉回路,下面介绍两种求欧拉回路的算法。
1.Fleury算法,能不走桥就不走桥:
(1)任取v0∈V(G),令P0=v0.
(2)设Pi=v0e1v1e2…e i v i已经行遍,按下面方法来从E(G)-{e1,e2,…,e i}中选取e i+1:
(a)e i+1与v i相关联;
(b)除非无别的边可供行遍,否则e i+1不应该为G i=G-{e1,e2,…,e i}中的桥。
(3)当(2)不能再进行时,算法停止。
可以证明,当算法停止时所得简单回路P m=v0e1v1e2…e m v m(v m=v0)为G中一条欧拉回路。
例15.2 图15.4(1)是给定的欧拉图G。
某人用Fleury算法求G中的欧拉回路时,走了简单回路v2e2v3e3v4e14v9e10v2e1v1e8v8e9v2之后(观看他的错误走法),无法行遍了,试分析在哪步他犯了错误?
解此人行遍v8时犯了能不走桥就不走桥的错误,因而他没行遍出欧拉回路。
当他走到v8时,G-{e2,e3,e14,e10,e1,e8}为图15.4(2)所示。
此时e9为该图中的桥,而e7,e11均不是桥,他不应该走e9,而应该走e7或e11,他没有走,所以犯了错误。
注意,此人在行遍中,在v3遇到过桥e3,v1处遇到过桥e8,但当时除桥外他无别的边可走,所以当时均走了桥,这是不会犯错误的。
Euler法与修正的Euler法局部截断误差Range-Kutta公式

Comparison with exact results
Temperature, θ(K)
1500
1000
500
0 0
-500
-1000
-1500
Exact solution
h=120 h=240
100
200
300
400
500
Tim e, t (sec)
h=480
Figure 4. Comparison of Euler’s method with exact solution for different step sizes 5
考虑形如
k
ynk ynk 1 h i fni i0
的 k步法,称为阿当姆斯(Adams)方法. k为显0式方法, 为隐k 式0方法,通常称为阿
当姆斯显式与隐式公式,也称Adams-Bashforth公式与Adam -Monlton公式.
22
阿当姆斯显式公式
kp
公式
c p1
1 1 yn1 yn h fn
y( xn ) f ( xn , yn )
y( xn )
d dx
f
( xn ,
yn )
0.5h[f(xn,yn)+f(xn+1, yn+hf(xn, yn))]
=hy’(xn)+0.5h2y”(xn)+0.5h2y'(xn) [fy’]n+
O局 故(h部修y3n)截正+1断 的= 误Eyun差l+er:h法yy(’具xddyn(x有y+(x1x)20n–))阶+fy精0n(+.xy15度0,=hy。2y)y(,”xxn)(–xnxy)n0+=OO((hh33))
向前欧拉法,向后欧拉法与改进欧拉法求解微分方程

向前欧拉法,向后欧拉法与改进欧拉法求解微分方程
向前欧拉法、向后欧拉法和改进欧拉法是求解微分方程的常用数值方法。
这些方法都是基于欧拉公式,即将微分方程中的导数用差分代替,从而将微分方程转化为差分方程,进而用数值方法求解。
向前欧拉法是一种简单的数值方法,它利用当前时刻的导数来估计下一时刻的解。
具体来说,假设微分方程为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 为时间步长。
这个公式可以看作是在当前时刻和下一时刻上各做一个切线,然后将这两个切线的斜率取平均值来估计当前时刻的解。
改进欧拉法相对于向前欧拉法和向后欧拉法更加精确。
总的来说,向前欧拉法、向后欧拉法和改进欧拉法都是求解微分
方程的有力工具,使用时需要根据具体问题选择合适的方法。
欧拉方法及其改进的欧拉方法的Matlab实现

11( n n y x y ++−。为了估计它,由Taylor展开得到的精确值1( n y x +是
2'
''
31( ( ( ( ( 2
n n n n h y x y x hy x y x O h +=+++ (5
2.欧拉方法、改进的欧拉方法及Matlab实现
下面主要讨论一阶常微分方程的初值问题,其一般形式为:
' 00
(,
( y f x y y x y ⎧=⎨
=⎩ (1我们知道,只要函数(, f x y适当光滑——譬如关于y满足利普希茨(Lipschitz条件
(, (, f x y f x y L y y −≤−
改进的欧拉方法是先用欧拉公式求1( n y x +的一个近似值1n y +,称为预测值,然后用梯形公式进行矫正并求得近似值1n y +。即
1111(, [(, (, ]
2n n n n n n n n n n y y f x y h h
y y f x y f x y ++++⎧=+⎪
⎨=++⎪⎩
(8 2.2.2改进的欧拉方法的误差估计
方法是一阶方法,因此它的精度不高。
2.2改进的欧拉方法
2.2.1改进的欧拉方法
用数值积分方法离散化问题(1,两端积分可得
1
1( ( (, ( (0,1, 2, n n
x n n x y x y x f x y x dx n ++−==∫
Euler法和改进的Euler法实验报告

用Euler法和改进的Euler法求u' -5u(0 < t w,,(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:nf=-5*u(i-1); u(i)=u(i-1)+h*f;zbu(1,i)=t(i); zbu(2,i)=u(i);endzbu%改进的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 zbvplot(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 onlegend( 'Euler 法’,'?改进的Euler 法','解析解')%解真值h=0.1;t=O:h:1;n=len gth(t);for i=1: ny(i)=1/exp(5*t(i)); %通过第一部分程序直接解得的解析解zby(1,i)=t(i);zby(2,i)=y(i);endzby我们可以得到计算后的结果图像如图一所示EulBr法和改进的Eutgr法比较)0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.9 09 1图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.5000 0.2500 0.1250 0.0625 0.0313 0.0156 0.0078 0.0039 0.0020 0.0010 改进欧拉 1.0000 0.6250 0.3906 0.2441 0.1526 0.0954 0.0596 0.0373 0.0233 0.0146 0.0091 真值 1.0000 0.6065 0.3679 0.2231 0.1353 0.0821 0.0498 0.0302 0.0183 0.0111 0.0067 表1 Euler法和改进的Euler法在各点数值比较(h=0.1)为了比较Euler法和改进的Euler法的算法精度,在这里我们利用相对误差的概念进行评判。
常微分方程作业欧拉法与改进欧拉法

plot(t,y,'*-g')
hold on
plot(x,y)
function x=xfun(t,x,y);
x=y;
function y=yfun(t,x,y);
y=-2*x-3*y;
调用函数:Euler4(0,[1,1],5,0.25)
图像:
(2)代码:function Euler5(t0,int,n,h)
t=t0;
x(1)=int(1);
y(1)=int(2);
for i=1:n
x1(i+1)=x(i)+h*xfun(t(i),x(i),y(i));
y1(i+1)=y(i)+h*yfun(t(i),x(i),y(i));
t(i+1)=t(i)+h;
x(i+1)=x(i)+1/2*h*(xfun(t(i),x(i),y(i))+xfun(t(i+1),x1(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)
图像:
代码:
function Euler2(t0,y0,inv,h)
n=round(inv(2)-inv(1))/h;
t(1)=t0;
y(1)=y0;
for i=1:n
调用:
Euler2(0,4,[0,5],1)
得到解析解:
hold on;
y=dsolve('Dy=(3-y)*(y+1)','y(0)=4','t');
Euler方法与改进的Euler方法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告Euler 方法与改进的Euler 方法的应用一、问题背景在工程和科学技术的实际问题中,常需求解微分方程,但常微分方程中往往只有少数较简单和典型的常微分方程(例如线性常系数常微分方程等)可求出其解析解,对于变系数常微分方程的解析求解就比较困难,而一般的非线性常微分方程的求解困难就更不用说了。
大多数情况下,常微分方程只能用近似方法求解。
这种近似解法可分为两大类:一类是近似解析法,如级数解法、逐次逼近法等;另一类是数值解法,它给出方程在一些离散点上的近似值。
二、数学模型在具体求解微分方程时,需具备某种定解条件,微分方程和定解条件合在一起组成定解问题。
定解条件有两种:一种是给出积分曲线在初始点的状态,称为初始条件,相应的定解问题称为初值问题。
另一类是给出积分曲线首尾两端的状态,称为边界条件,相应的定解问题称为边值问题。
在本文中主要讨论的是给定初值条件的简单Euler 方法和改进的Euler 方法来求解常微分方程。
三、算法及流程Euler 方法是最简单的一种显式单步法。
对于方程()y x f dxdy ,= 考虑用差商代替导数进行计算,取离散化点列nh x x n +=0,L n ,2,1,0=则得到方程的近似式()()()()n n n n x y x f hx y x y ,1≈-+ 即()n n n n y x hf y y ,1+=+ 得到简单Euler 方法。
具体计算时由0x 出发,根据初值,逐步递推二得到系列离散数值。
简单Euler 方法计算量小,然而精度却不高,因而我们可以构造梯形公式()()[]η=++=+++0111,,2y y t f y t f h y y n n n n n n 其中()N a b h -=。
这是一个二阶方法,比Euler 方法精度高。
但是上述公式右边有1+n y ,因而是隐式差分方程,可以用迭代方法计算1+n y 。
欧拉法、改进的欧拉法、龙格-库塔法求解初值问题

欧拉法、改进的欧拉法、龙格-库塔法求解初值问题欧拉法、改进的欧拉法、龙格-库塔法求解初值问题简介通过求解简单的初值问题: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欧拉法虽然精度偏低,但它是显式的,可直接得到结果。
欧拉螺旋 算法

欧拉螺旋算法全文共四篇示例,供读者参考第一篇示例:欧拉螺旋算法,又称为欧拉回路算法,是一种图论中用于寻找一个图中包含所有边并且每条边恰好访问一次的一条路径的算法。
这个算法由瑞士数学家欧拉在18世纪首先提出,被认为是图论领域的经典问题之一。
欧拉螺旋算法的应用范围非常广泛,包括网络路由、DNA测序、计算机网络、数据传输等领域。
欧拉螺旋算法的基本思想是从一个图中的某一个顶点出发,沿着边走到另一个未访问的顶点,直到无法再继续前进为止。
然后根据已经访问的路径,找到一个环路,将这个环路加入到已访问的路径中,直到所有的边都被访问过为止。
这个算法的核心是不停地寻找环路,将环路衔接到已有路径中,直到所有的边都被访问过。
欧拉螺旋算法的实现过程中,主要通过以下步骤来实现:1. 选择一个起始顶点作为当前顶点,并将其作为路径的第一个顶点。
2. 从当前顶点出发,选择一个未访问的相邻顶点作为下一个顶点,并将其加入路径中。
3. 如果当前顶点没有未访问的相邻顶点,则回退到上一个顶点,直到找到一个有未访问相邻顶点的顶点。
4. 如果回到起始顶点之前,所有的边都被访问过了,则算法结束;否则,从某一个已经访问的顶点开始查找环路,并将该环路衔接到已有路径中。
5. 重复以上步骤,直到所有的边都被访问过。
欧拉螺旋算法的时间复杂度为O(n+m),其中n为顶点数,m为边数。
这个算法在实际应用中表现出较高的效率和稳定性,因此被广泛应用于各个领域。
在网络路由中,欧拉螺旋算法可以帮助路由器寻找一条包含所有节点的最短路径,以提高网络通信的效率和可靠性。
在DNA测序中,欧拉螺旋算法可以帮助科学家快速地确定DNA序列中的基因排列顺序,加快疾病的检测和治疗过程。
在计算机网络和数据传输中,欧拉螺旋算法可以帮助提高数据包的传输速度和准确性,保证数据的安全性和可靠性。
第二篇示例:欧拉螺旋算法是一种用于解决大规模图形问题的高效算法,它由瑞士数学家欧拉在18世纪发明。
这种算法可以用来寻找图形中的欧拉回路或者哈密顿回路,是图论中非常重要的算法之一。
使用欧拉法作为预估公式,梯形法作为校正公式

欧拉法和梯形法是常见的数值计算方法,在求解微分方程以及积分时被广泛应用。
本文将从基本原理、应用场景和具体算法等方面详细介绍欧拉法和梯形法的相关知识。
一、欧拉法的基本原理欧拉法是一种数值计算方法,用于求解常微分方程的数值解。
它的基本原理是根据微分方程的导数来进行逼近。
对于微分方程 dy/dx = f(x, y),在给定初始条件 y0 = y(x0),我们可以用如下的递推公式来求解微分方程的数值解:y_{n+1} = y_n + hf(x_n, y_n)其中 h 为步长,根据这个递推公式,我们可以逐步求解微分方程在不同点上的数值解。
二、欧拉法的应用场景欧拉法适用于一阶常微分方程,并且其计算简单、直观,因此在实际应用中被广泛采用。
特别是对于一些复杂的微分方程,往往无法通过解析方法求解,而通过欧拉法可以得到较为准确的数值解。
因此在物理、工程、生物等领域,欧拉法都有着重要的应用价值。
三、欧拉法的具体算法1. 初始化条件:给定微分方程的初始条件 y0 = y(x0),以及步长 h。
2. 递推求解:根据递推公式 y_{n+1} = y_n + hf(x_n, y_n),依次求解微分方程在各个点上的数值解。
3. 结果输出:得到微分方程在各个点上的数值解,并输出结果。
四、梯形法的基本原理梯形法是一种数值积分方法,用于对函数进行数值积分。
它的基本原理是将积分区间等分成若干小段,然后用梯形来逼近每个小段上的积分值。
具体来说,对于积分区间 [a, b] 上的函数 f(x),我们可以用以下递推公式来求解积分的数值近似:I_{n+1} = I_n + h/2(f(x_n) + f(x_{n+1}))其中h 为步长,根据这个递推公式,我们可以逐步逼近积分的数值值。
五、梯形法的应用场景梯形法适用于对函数进行数值积分的场景,特别是对于无法通过解析方法求解积分的情况。
例如在泛函分析、数值计算等领域,梯形法都有着重要的应用价值。
梯形法的计算相对简单,适合通过计算机程序来实现,因此在实际应用中也被广泛采用。
_改进欧拉方法范文

_改进欧拉方法范文改进欧拉方法的方法有很多,并且可以从多个方面进行改进。
在下面的文本中,将介绍三种常见的改进方法:改进的欧拉方法、修正的欧拉方法和改进的欧拉方法。
改进的欧拉方法(Improved Euler Method)是一种将欧拉方法进行改进的方法,它通过对函数的斜率进行线性插值来提高计算精度。
具体来说,改进的欧拉方法使用欧拉方法所计算出的斜率与下一个时间步上使用欧拉方法所计算出的斜率的平均值来计算下一个时间步的值。
改进的欧拉方法的迭代公式如下:y(i+1)=y(i)+(1/2)*h*(f(t(i),y(i))+f(t(i+1),y(i)+h*f(t(i),y(i ))))其中,i表示当前时间步,i+1表示下一个时间步,h表示时间步长,t(i)表示当前时间,t(i+1)表示下一个时间,y(i)表示在当前时间步处的函数值,y(i+1)表示下一个时间步处的函数值,f(t,y)表示在时间t处函数的斜率。
修正的欧拉方法(Modified Euler Method)是在改进的欧拉方法的基础上进行改进的方法,它通过对两个时间步使用欧拉方法所计算出的斜率的平均值来计算下一个时间步的值。
修正的欧拉方法的迭代公式如下:y(i+1)=y(i)+h*f(t(i)+1/2*h,y(i)+1/2*h*f(t(i),y(i)))其中,i表示当前时间步,i+1表示下一个时间步,h表示时间步长,t(i)表示当前时间,y(i)表示在当前时间步处的函数值,y(i+1)表示下一个时间步处的函数值,f(t,y)表示在时间t处函数的斜率。
改进的欧拉方法(Heun's method)是一种通过将两个时间步的斜率进行加权平均来计算下一个时间步的值的方法。
改进的欧拉方法的迭代公式如下:y(i+1)=y(i)+(1/2)*h*(f(t(i),y(i))+f(t(i+1),y(i)+h*f(t(i),y(i ))))其中,i表示当前时间步,i+1表示下一个时间步,h表示时间步长,t(i)表示当前时间,t(i+1)表示下一个时间,y(i)表示在当前时间步处的函数值,y(i+1)表示下一个时间步处的函数值,f(t,y)表示在时间t处函数的斜率。
改进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 法推广
欧拉公式的改进

假设 yi 1 = y( xi 1 ), yi = y( xi ) ,则可以导出 Ri = y( xi +1 ) yi +1 = O(h3 ) 即中点公式具有 2 阶精度。
§1 Euler’s Method
方 法 显式欧拉 隐式欧拉 梯形公式 中点公式
简单 稳定性最好 精度提高 精度提高, 显式
d f ( x, y) dx 首先希望能确定系数 1、2、p,使得到的算法格式有 2阶 dy 精度,即在 yi = y( xi ) 的前提假设下,使得 = f x ( x, y) + f y ( x, y) dx Ri = y( xi +1 ) yi +1 = O(h3 ) = f x ( x, y) + f y ( x, y) f ( x, y) y( x ) =
§1 Euler’s Method
改进欧拉法 /* modified Euler’s method */
Step 1: 先用显式欧拉公式作预测,算出 y i +1 = y i + h f ( x i , y i ) Step 2: 再将 yi +1 代入隐式梯形公式的右边作校正,得到
y i +1
§2 Runge-Kutta Method Sample Judge Program #include <stdio.h> #include <math.h> #include "98115001_15.h" double f0(double x, double y) { return (yx*x+1.0); } void main( ) { FILE *outfile = fopen("out.txt", "w"); int n; double a, b, y0; a = 0.0; b = 2.0; y0 = 0.50; n = 10; RK4(f0, a, b, y0, n, outfile); fprintf(outfile, "\n"); fclose(outfile); } Sample Output ( represents a space)
用欧拉法、改进欧拉法、四阶龙格-库塔法解初值问题

常微分方程的数值解一、实验名称:用欧拉法、改进欧拉法、四阶龙格-库塔法解初值问题[])( b a, x ),(00⎪⎩⎪⎨⎧=∈=y x y y x f dx dy 要求输出:x ,真值,欧拉法,改进欧拉法,龙格库塔法二、算法:(1)欧拉法公式:),(1n n n n y x f h y y +=+(2)改进欧拉法公式:[]),(),(2111+++++=n n n n n n y x f y x f h y y (3)龙格—库塔法公式: ()⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧++=⎪⎭⎫ ⎝⎛++=⎪⎭⎫ ⎝⎛++==++++=+342312143211,2,212,21),()22(6hk y h x f k k h y h x f k k h y h x f k y x f k k k k k h y y n n n n n n n n n n 三、源程序(见附件)1. 常微分方程见f.m2. 欧拉法、改进欧拉法、龙格库塔法及真值对比见cwffc.m四、数值例子以讲义例9.2为例:⎪⎩⎪⎨⎧=-=1)0(2y y x y dxdy 在区间[0,1.5]上,取h=0.11.在命令窗口输入: cwffc(@f,1,0.1,0,1.5)、回车输出:欧拉法、改进欧拉法、龙格库塔法的计算结果及真值五、分析总结由以上的实例可以看出这三种方法的计算精度:龙格库塔>改进欧拉法>欧拉法,由于欧拉法采取的实际是左矩形公式,随着计算次数的增多,其误差越来越大,改进欧拉法较欧拉法的精度要高,而龙格库塔法具有收敛、稳定、计算过程中可以改变步长等优点。
六、操作手册1.双击启动matlab;2.在命令窗口依次输入cwffc(@fx,y0,h,a,b),回车(输入时给y0赋初始值,h赋步长,a赋左端点值,b赋右端点值,常微分方程的修改在f.m 中进行),即可输出真值和欧拉法、改进欧拉法、龙格库塔法的计算结果。
解微分方程欧拉法RK法及其MATLAB实例

解微分方程的欧拉法,龙格-库塔法及其MATLAB简单实例欧拉方法(Euler method)用以对给定初值的常微分方程(即初值问题)求解分为前进EULER法、后退EULER法、改进的EULER法。
缺点:欧拉法简单地取切线的端点作为下一步的起点进行计算,当步数增多时,误差会因积累而越来越大。
因此欧拉格式一般不用于实际计算。
改进欧拉格式:为提高精度,需要在欧拉格式的基础上进行改进。
采用区间两端的斜率的平均值作为直线方程的斜率。
改进欧拉法的精度为二阶。
算法为:微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值。
对于常微分方程:?x∈[a,b]y(a) = y0可以将区间[a,b]分成n段,那么方程在第xi点有y'(xi) = f(xi,y(xi)),再用向前差商近似代替导数则为:在这里,h是步长,即相邻两个结点间的距离。
因此可以根据xi点和yi点的数值计算出yi+1来:i=0,1,2,L这就是向前欧拉格式。
改进的欧拉公式:将向前欧拉公式中的导数f(xi,yi)改为微元两端导数的平均,即上式便是梯形的欧拉公式。
可见,上式是隐式格式,需要迭代求解。
为了便于求解,使用改进的欧拉公式:数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。
实际上,龙格-库塔法是欧拉方法的一种推广,向前欧拉公式将导数项简单取为f(xn,yn),而改进的欧拉公式将导数项取为两端导数的平均。
龙格-库塔方法的基本思想:在区间[xn,xn+1]内多取几个点,将他们的斜率加权平均,作为导数的近似。
龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。
令初值问题表述如下。
则,对于该问题的RK4由如下方程给出:其中这样,下一个值(y n+1)由现在的值(y n)加上时间间隔(h)和一个估算的斜率的乘积决定。
该斜率是以下斜率的加权平均:k1是时间段开始时的斜率;k2是时间段中点的斜率,通过欧拉法采用斜率k1来决定y在点tn + h/2的值;k3也是中点的斜率,但是这次采用斜率k2决定y值;k4是时间段终点的斜率,其y值用k3决定。
欧拉算法解方程

欧拉算法解方程嘿,朋友们!今天咱们来玩一玩用欧拉算法解方程,就像开启一场超级有趣的数学冒险之旅。
想象一下方程就像一个个神秘的小怪兽,而欧拉算法呢,就是我们手中超级厉害的魔法棒。
比如说方程y' = x + y,这就像一个到处捣乱的小怪兽,x和y在它肚子里扭来扭去。
不过别怕,我们的欧拉算法要上场啦。
我们先把这个方程想象成一个调皮的小迷宫。
欧拉算法就像我们在迷宫里的小地图。
按照欧拉算法的步骤,我们就像小心翼翼的探险家,先找个起点,然后一步一步去摸索这个方程迷宫的出路。
再看这个方程2y' - 3y = 5x,这方程看起来就像一个张牙舞爪的大螃蟹,2y'和 - 3y就像是螃蟹的大钳子。
但我们的欧拉算法可不会被它吓倒,就像一个勇敢的捕蟹人,稳稳地用步骤把这个螃蟹方程给制服。
还有方程y'' + 2y' + y = 0,这方程啊,就像一个超级复杂的拼图,每一块都在动来动去,y''、2y'和y就像拼图的小碎片。
欧拉算法就像是有魔力的手,把这些碎片按照规律一块一块地拼凑起来。
要是方程y' = sin(x) - y,这就像是一个小恶魔在sin(x)的魔法阵里藏着,还拖着个y当小尾巴。
我们的欧拉算法就像正义的小天使,挥舞着步骤的宝剑,去把这个小恶魔给揪出来。
方程3y' + 4y = e^x,这就像一个混合了魔法药水e^x的奇怪生物,3y'和4y就像它的两条腿。
我们用欧拉算法就像聪明的驯兽师,慢慢地让这个奇怪生物听话,找到方程的解。
你看方程y' = x^2 - y^2,这像不像一个充满漩涡的神秘黑洞,x^2和- y^2在里面搅来搅去。
欧拉算法却像一艘坚固的宇宙飞船,带着我们冲破这个黑洞方程的重重迷雾。
方程y' = 1 / (x + y),这就像一个超级黏人的小妖精,把x和y紧紧缠在一起。
我们的欧拉算法则像一个智慧的老神仙,用巧妙的步骤把小妖精和x、y分开,找到方程的答案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目再现:
2. 当病人采取服用口服药或肌肉注射来治疗疾病时,药物虽然瞬间进入了体内,但它一般都集中与身体的某一部位,靠其表面与肌体接触而逐步被吸收。
假定身体系统是一个单房室系统,设t 时刻体内药物的总量为x(t),则x(t)满足:
问题分析:运用欧拉公式求微分方程的数值解。
微分方程为:
11dx ,(0)0dt
k t k De kx x -=-= 1,欧拉折线法:
设h=0.1,即n=201时,1k 0.6=,k 0.2=,D=200.MATLAB 程序如下所示:
clear
f=sym('0.6*200*exp(-1*0.6*t)-0.2*x ');
a=0; b=20;
h=0.1;
n=(b-a)/h+1;
t=0; x=0;
szj=[t,x];
for i=1:n-1
11dx ,(0)0
dt k t k De kx x -=-=10011100 ,(,)()k t k k k k k k k
t x x x h f t x x h k De kx t t h -++==⎧⎪=+=+-⎨⎪=+⎩
x=x+h*subs(f,{'t','x'},{t,x});
t=t+h;
szj=[szj;t,x];
end
szj ;
x=dsolve(‘Dx=120*exp(-0.6*t)-0.2*x’,'x(0)=0','t')
T=[0:0.1:20];
X=subs(x,T);
plot(szj(:,1),szj(:,2),'or-',T,X,’b-’)
输出结果为:
解析解:x=
其中红线代表的是数值解,蓝线代表的是解析解。
可见,数值解的误差还是比较小的。
二、改进的欧拉法:有公式:
[]11100(,)(,)2
()i i i i i i h x x f t x f t x x x t +++=+
+= 与欧拉公式结合使用,有
(0)1(1)
()111(,)
[(,)(,)],0,1,2 (2)
i i i i k k i i i i i i x x hf t x h x x f t x f t x k +++++=+=++= 设h=0.1,即n=201时,1k 0.6=,k 0.2=,D=200.MATLAB 程序如下所示:
clear
f=sym('0.6*200*exp(-1*0.6*t)-0.2*x');
a=0; b=20;
h=0.1;
n=(b-a)/h+1;
t=0; x=0;
szj=[t,x];
for i=1:n-1
m=0;p=0;q=0;
m=x;
q=subs(f,{'t','x'},{t,m});
x=m+h*q;
if abs(p-x)>0.1
p=x;
x= m+h/2*(q+subs(f,{'t','x'},{t+h,x}));
end
t=t+h;
szj=[szj;t,x];
end
szj ;
x=dsolve('Dx=120*exp(-0.6*t)-0.2*x', 'x(0)=0','t')
T=[0:0.1:20];
X=subs(x,T);
plot(szj(:,1),szj(:,2),'or-',T,X,'b-')
可见,改进后的欧拉算法误差更小,极其精确,基本与原曲线重合。