Euler法与改进Euler法
- 格式:ppt
- 大小:1021.00 KB
- 文档页数:40


实验九欧拉方法信息与计算科学金融崔振威201002034031一、实验目的:1、掌握欧拉算法设计及程序实现二、实验内容:1、p364-9.2.4、p386-9.5.6三、实验要求:主程序:欧拉方法(前项):function [x,y]=DEEuler(f,a,b,y0,n);%f:一阶常微分方程的一般表达式的右端函数%a:自变量的取值下限%b:自变量的取值上限%y0:函数的初值%n:积分的步数if nargin<5,n=50;endh=(b-a)/n;x(1)=a;y(1)=y0;for i=1:nx(i+1)=x(i)+h;y(i+1)=y(i)+h*feval(f,x(i),y(i));endformat short欧拉方法(后项):function [x,y]=BAEuler(f,a,b,y0,n);%f:一阶常微分方程的一般表达式的右端函数%a:自变量的取值下限%b:自变量的取值上限%y0:函数的初值%n:积分的步数if nargin<5,n=50;endh=(b-a)/n;x(1)=a;y(1)=y0;for i=1:nx(i+1)=x(i)+h;y1=y(i)+h*feval(f,x(i),y(i));y(i+1)=y(i)+h*feval(f,x(i+1),y1);endformat short梯形算法:function [I,step,h2] = CombineTraprl(f,a,b,eps)%f 被积函数%a,b 积分上下限%eps 精度%I 积分结果%step 积分的子区间数if(nargin ==3)eps=1.0e-4;endn=1;h=(b-a)/2;I1=0;I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;while abs(I2-I1)>epsn=n+1;h=(b-a)/n;I1=I2;I2=0;for i=0:n-1x=a+h*i;x1=x+h;I2=I2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym(f),findsym(sym(f)),x1));endendI=I2;step=n;h2=(b-a)/n;改进欧拉方法:function [x,y]=MoEuler(f,a,b,y0,n);%f:一阶常微分方程的一般表达式的右端函数%a:自变量的取值下限%b:自变量的取值上限%y0:函数的初值%n:积分的步数if nargin<5,n=50;endh=(b-a)/n;x(1)=a;y(1)=y0; for i=1:nx(i+1)=x(i)+h;y1=y(i)+h*feval(f,x(i),y(i)); y2=y(i)+h*feval(f,x(i+1),y1); y(i+1)=(y1+y2)/2; endformat short四阶龙格-库塔法:function y = DELGKT4_lungkuta(f, h,a,b,y0,varvec) %f:一阶常微分方程的一般表达式的右端函数 %h:积分步长%a :自变量的取值下限 %b:自变量的取值上限%varvec :常微分方程的变量组 format long; N = (b-a)/h;y = zeros(N+1,1); y(1) = y0; x = a:h:b;var = findsym(f); for i=2:N+1K1 = Funval(f,varvec,[x(i-1) y(i-1)]);%Funval 为程序所需要的函数 K2 = Funval(f,varvec,[x(i-1)+h/2 y(i-1)+K1*h/2]); K3 = Funval(f,varvec,[x(i-1)+h/2 y(i-1)+K2*h/2]); K4 = Funval(f,varvec,[x(i-1)+h y(i-1)+h*K3]); y(i) = y(i-1)+h*(K1+2*K2+2*K3+K4)/6; endformat short;p364-9.2.4欧拉方法(前项):1、22)(,1)0(,22'+-+-==-=-t t e t y y y t y t解:执行20步时:编写函数文件doty.m 如下: function f=doty(x,y); f=x^2-y;在Matlab 命令窗口输入:>> [x1,y1]=DEEuler('doty',0,2,1,20)可得到结果:x1 =0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.70000.8000 0.9000 1.0000 1.1000 1.2000 1.3000 1.4000 1.50001.6000 1.7000 1.8000 1.90002.0000y1 =1.0000 0.9000 0.8110 0.7339 0.6695 0.6186 0.5817 0.55950.5526 0.5613 0.5862 0.6276 0.6858 0.7612 0.8541 0.96471.0932 1.2399 1.4049 1.5884 1.7906在Matlab 命令窗口输入:>> y3=-exp(-x1)+x1.^2-2*x1+2求得解析解:y3 =1.0000 0.9052 0.8213 0.7492 0.6897 0.6435 0.6112 0.59340.5907 0.6034 0.6321 0.6771 0.7388 0.8175 0.9134 1.02691.1581 1.3073 1.4747 1.6604 1.8647输入:>> plot(x1,y1,'o');hold on>> plot(x1,y3,'*');hold on可得近似值与解析解的图像比较:执行40步时:在Matlab 命令窗口输入:>> [x1,y1]=DEEuler('doty',0,2,1,40)可得到结果:x1 =0 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 0.7000 0.75000.8000 0.8500 0.9000 0.9500 1.0000 1.0500 1.1000 1.15001.2000 1.2500 1.3000 1.3500 1.4000 1.4500 1.5000 1.55001.6000 1.6500 1.7000 1.7500 1.8000 1.8500 1.9000 1.95002.0000y1 =1.0000 0.9500 0.9026 0.8580 0.8162 0.7774 0.7417 0.7091 0.6798 0.6538 0.6312 0.6121 0.5967 0.5848 0.5767 0.5724 0.5719 0.5753 0.5826 0.5940 0.6094 0.6290 0.6526 0.68050.7126 0.7490 0.7897 0.8347 0.8841 0.9379 0.9961 1.05881.1260 1.1977 1.2739 1.3547 1.4401 1.5301 1.6247 1.7240 1.8279在Matlab 命令窗口输入:>> y3=-exp(-x1)+x1.^2-2*x1+2求得解析解:y3 =1.0000 0.9513 0.9052 0.8618 0.8213 0.7837 0.7492 0.7178 0.6897 0.6649 0.6435 0.6256 0.6112 0.6005 0.5934 0.5901 0.5907 0.5951 0.6034 0.6158 0.6321 0.6526 0.6771 0.70590.7388 0.7760 0.8175 0.8633 0.9134 0.9679 1.0269 1.09031.1581 1.2305 1.3073 1.3887 1.4747 1.5653 1.6604 1.7602 1.8647输入:>> plot(x1,y1,'o');hold on>> plot(x1,y3,'*');hold on可得近似值与解析解的图像比较:从上面结果可以看出,执行40步时近似解的值要接近于解析解,误差更小,结果更精确。
euler 采样方法(原创实用版3篇)目录(篇1)1.Euler 采样方法的概述2.Euler 采样方法的原理3.Euler 采样方法的优缺点4.Euler 采样方法的应用实例5.Euler 采样方法的局限性和改进方向正文(篇1)一、Euler 采样方法的概述Euler 采样方法是一种在离散系统中广泛应用的时间步进方法,由数学家 Euler 首次提出,主要用于求解常微分方程的初值问题。
该方法通过对方程的解在每个时间步长上进行局部线性近似,从而获得离散系统中各个时刻的解。
二、Euler 采样方法的原理Euler 采样方法的基本思想是,将连续时间系统中的状态变量在每个时间步长上进行线性插值。
具体来说,设在某一特定时间步长 k,系统的状态变量为 x_k,对其进行局部线性近似,可得:x_{k+1} = x_k + h*f(x_k)其中,h 为时间步长,f(x_k) 为系统状态变量 x_k 的瞬时变化率,即系统的运动方程。
通过不断迭代上述公式,我们可以得到离散系统中各个时刻的状态变量。
三、Euler 采样方法的优缺点1.优点:Euler 采样方法简单易懂,实现起来较为方便,且具有一定的数值稳定性。
对于一些简单的系统,该方法可以得到较好的结果。
2.缺点:Euler 采样方法的数值稳定性较差,特别是在处理非线性系统或高阶系统时,可能会出现较大的误差。
此外,该方法对于系统的初始条件较为敏感,初始条件的微小变化可能导致结果的显著差异。
四、Euler 采样方法的应用实例Euler 采样方法在物理、工程和生物学等领域的数值模拟中都有广泛应用。
例如,在求解牛顿运动定律、电磁场方程、生态系统模型等方面,Euler 采样方法都可以发挥重要作用。
五、Euler 采样方法的局限性和改进方向虽然 Euler 采样方法在许多情况下可以得到合理的结果,但其数值稳定性和精度仍然有待提高。
为了克服这些问题,研究者们提出了许多改进的 Euler 方法,如改进的欧拉方法(Euler with improvement)、四阶龙格库塔法(4th order Runge-Kutta method)等。
微分方程离散化方法
微分方程的离散化方法是将连续的微分方程转化为离散的形式,通常用于数值求解。
离散化方法可以分为两类,时间离散化和空间
离散化。
时间离散化方法包括Euler方法、改进的Euler方法、Runge-Kutta方法等。
Euler方法是最简单的一阶显式方法,通过将时间区
间离散化为若干个小区间,用当前点的斜率来估计下一个点的函数值。
改进的Euler方法通过对斜率的不同估计来提高精度。
Runge-Kutta方法是一种更高阶的方法,通过多次斜率估计来提高数值解
的精度。
空间离散化方法包括有限差分法、有限元法、谱方法等。
有限
差分法是将空间区域离散化为网格,通过近似微分算子来表示微分
方程,然后将微分方程转化为代数方程组进行求解。
有限元法是将
空间区域离散化为有限个单元,通过单元之间的连接关系建立代数
方程组。
谱方法则是利用傅里叶级数展开来逼近微分方程的解。
在选择离散化方法时,需要考虑精度、稳定性、计算效率等因
素。
不同的方法适用于不同类型的微分方程和求解要求。
因此,在实际应用中,需要根据具体问题的特点来选择合适的离散化方法。
欧拉法与龙格库塔法比较分析解微分方程的欧拉法,龙格-库塔法简单实例比较欧拉方法(Euler method)用以对给定初值的常微分方程(即初值问题)求解分为前EULER法、后退EULER法、改进的EULER法。
缺点:欧拉法简单地取切线的端点作为下一步的起点进行计算,当步数增多时,误差会因积累而越来越大。
因此欧拉格式一般不用于实际计算。
改进欧拉格式(向前欧拉公式):为提高精度,需要在欧拉格式的基础上进行改进。
采用区间两端的斜率的平均值作为直线方程的斜率。
改进欧拉法的精度为二阶。
算法:微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值。
对于常微分方程:dy,fxy(,)xab,[,] dxyay(), 0'可以将区间分成段,那么方程在第点有,再用n[,]abyxfxyx()(,()),xiiii 向前差商近似代替导数则为:((1)())yxyx,,ii,fxyx(,()) iihh在这里,是步长,即相邻两个结点间的距离。
因此可以根据点和的数xyii值计算出来: yi,1yyhfxy,,,(,)iL,0,1,2,? iiii,1这就是向前欧拉公式。
改进的欧拉公式:将向前欧拉公式中的导数改为微元两端导数的平均,即上式便是梯形的fxy(,)ii欧拉公式。
可见,上式是隐式格式,需要迭代求解。
为了便于求解,使用改进的欧拉公式: 数值分析中,龙格,库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。
实际上,龙格-库塔法是欧拉方法的一种推广,向前欧拉公式将导数项简单取为,而改进的欧拉公式将导数项取为两端导数fxy(,)nn 的平均。
龙格-库塔方法的基本思想:在区间内多取几个点,将他们的斜率加权平均,作为导数的近似。
[,]xxnn,1龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。
令初值问题表述如下。
'yty(),yfty,(,) 00则,对于该问题的RK4由如下方程给出:h,,,,,(22)yykkkk nn,112346其中kfty,(,) 1nnhh(,)kftyk,,, 21nn22hh(,)kftyk,,, 32nn22kfthyhk,,,(,) 43nnh这样,下一个值由现在的值加上时间间隔和一个估算的斜率的乘积决yyn,1n定。