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

题目再现: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');
- 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-')
可见,改进后的欧拉算法误差更小,极其精确,基本与原曲线重合。