Euler法解微分方程-Matlab程序

合集下载

欧拉法(euler)求解常微分方程的matlab程序及案例

欧拉法(euler)求解常微分方程的matlab程序及案例

欧拉法(euler)求解常微分方程的matlab程序及案例欧拉方法是最初用于求解常微分方程的数值方法之一,它是一种显式的一步法,具有易于实施的优点,特别适合初学者使用。

本文将介绍欧拉法的原理和使用MATLAB求解常微分方程的具体方法,同时给出一个简单的实例进行说明。

一、欧拉法原理考虑一个一阶常微分方程y'=f(t,y),欧拉法的基本思想是将时间步长Δt均分成n个小步长,从y(t0)开始依次计算每个时刻的值,得到一列估计值y1, y2, …, yn。

欧拉法的计算公式为:(1)y1=y(t0+Δt)=y(t0)+Δtf(t0, y0)(2)y2=y(t0+2Δt)=y(t0+Δt)+Δtf(t0+Δt, y1)(3)yn=y(t0+nΔt)=y(t0+(n-1)Δt)+Δtf(t0+(n-1)Δt, yn-1)可以看出,欧拉法的核心在于利用已知的t和y计算f(t,y),从而获得y的逼近值。

但是需要注意的是,步长Δt越小,计算所需的时间和内存就越多,而精度却并不一定提高。

因此在实际应用中需要结合具体问题选择合适的步长。

二、MATLAB求解常微分方程的具体方法(1)定义常微分方程我们以一个简单的例子开始,考虑求解y'=1-y,y(0)=0.5在[0,1]区间内的积分。

首先定义匿名函数dydt,将其传到ode45中求解:dydt=@(t,y)1-y;[t,y]=ode45(dydt,[0 1],0.5);plot(t,y,'-o')运行以上代码可以得到结果,其中plot函数用于绘制图像。

但是,由于求解过程中计算机执行到ode45函数时可能需要很长时间,因此需要更快捷的方法。

(2)利用欧拉法求解方程欧拉法求解方程首先需要定义步长Δt,这里设Δt为0.1。

定义起始值y=[0.5]、时间向量t=0:Δt:1,然后计算列向量y的估计值:t=0:0.1:1;y=zeros(size(t));y(1)=0.5;for n=1:length(t)-1y(n+1)=y(n)+0.1*(1-y(n));endplot(t,y,'-o')以上代码的执行结果与前面的ode45方法相同,但是速度更快。

matlab中的向后euler方法

matlab中的向后euler方法

文章标题:深入理解Matlab中的向后Euler方法在数值计算中,求解常微分方程(ODE)是一个十分常见也是重要的任务。

其中,向后Euler方法是一种常用的数值求解方法之一。

在Matlab中,我们可以通过调用内置函数ode15s来使用向后Euler方法来求解ODE。

在本文中,我们将深入探讨Matlab中使用向后Euler方法求解ODE的原理和应用,并通过具体例子来展示其在实际工程中的价值。

1. 向后Euler方法的原理和特点向后Euler方法是一种隐式数值求解方法,其基本思想是将微分方程转化为差分方程,然后通过迭代的方式逼近实际解。

与前向Euler方法相比,向后Euler方法具有更好的稳定性和收敛性,特别在处理刚性ODE的时候表现更为突出。

在Matlab中,我们可以使用ode15s函数来调用向后Euler方法进行数值求解,其使用形式为[y, t] =ode15s(@(t,y)odefun,tspan,y0,options)。

2. 向后Euler方法在实际工程中的应用在实际工程中,ODE求解是一个非常重要的任务。

在控制系统设计中,经常需要求解系统的状态方程以完成系统设计和性能评估;在仿真和建模中,也需要对系统进行数值求解以获得系统的动态响应。

在这些应用中,向后Euler方法常常被用来求解刚性ODE,以获得更为准确和稳定的结果。

3. 使用Matlab进行向后Euler方法的数值求解在Matlab中,使用向后Euler方法进行数值求解非常方便。

通过调用ode15s函数,我们可以通过简单的参数设置来实现对ODE的求解。

下面通过一个简单的例子来展示如何使用Matlab中的向后Euler方法来求解ODE。

考虑一个一阶常微分方程dy/dt = -2y,初始条件为y(0) = 1。

我们可以使用Matlab中的ode15s函数来对其进行数值求解。

具体代码如下:```matlabfunction yprime = odefun(t,y)yprime = -2*y;end[t, y] = ode15s(@odefun, [0 10], 1);plot(t, y, '-')xlabel('t');ylabel('y(t)');title('Solution of dy/dt = -2y using Backward Euler method');```通过运行以上代码,我们可以得到dy/dt = -2y的数值解。

MATLAB实验四_求微分方程的解

MATLAB实验四_求微分方程的解

参数说明
[T,Y] = solver(odefun,tspan,y0)
odefun 为显式常微分方程,可以用命令 inline 定义,或 在函数文件中定义,然后通过函数句柄调用。
dy 2 2 y 2 x 2x 求初值问题 的数值解,求解范 例: dx 围为 [0,0.5] y( 0 ) 1
dsolve的输出个数只能为一个 或 与方程个数相等。
只有很少一部分微分方程(组)能求出解析解。 大部分微分方程(组)只能利用数值方法求数值解。
Matlab函数数值求解
[T,Y] = solver(odefun,tspan,y0)
其中 y0 为初值条件,tspan为求解区间;Matlab在数值求解 时自动对求解区间进行分割,T (列向量) 中返回的是分割点 的值(自变量),Y (数组) 中返回的是这些分割点上的近似解, 其列数等于因变量的个数。
数学实验
实验四
求微分方程的解
问题背景和实验目的
自牛顿发明微积分以来,微分方程在描述事物运 动规律上已发挥了重要的作用。实际应用问题通过 数学建模所得到的方程,绝大多数是微分方程。 由于实际应用的需要,人们必须求解微分方程。 然而能够求得解析解的微分方程十分有限,绝大多 数微分方程需要利用数值方法来近似求解。 本实验主要研究如何用 Matlab 来计算微分方程 (组)的数值解,并重点介绍一个求解微分方程的 基本数值解法--Euler折线法。
Runge-Kutta 方法
Euler 法与 R-K法误差比较
Matlab 解初值问题
用 Maltab自带函数 解初值问题 求解析解:dsolve 求数值解:
ode45、ode23、 ode113、ode23t、ode15s、 ode23s、ode23tb

matlab_常微分方程数值解法

matlab_常微分方程数值解法
d2x 2x2 0
dt 2
简朴问题可以求得解析解,多数实际问题靠数值求解 。
第4页
一阶常微分方程(ODE )初值问题 : ODE :Ordinary Differential Equation
dy
f
(x,
y)
dx
x0 x xn
y(x0 ) y0
数值解法就是求y(x)在某些分立旳节点 xn 上旳近似值 yn,用以近似y(xn)
x0
y0
x1 f y(x), x dx
x0
x2 f y(x), x dx
x1
y(x1) f y(x1), x1 h
第17页
同样,在[x0,xn+1] ,积分采用矩形近似,得:
y(xn1) y0
f xn1
x0
y(x), x dx
y(xn ) f y(xn ), xn h
yn y(xn )
第5页
2、欧拉近似办法
2.1 简朴欧拉(L.Euler, 1707-1783)办法。
dy
dx
f
(y, x)
y(x0 ) y0
欧拉数值算法就是由初值通过递推求解,递推求解
就是从初值开始,后一种函数值由前一种函数值得到。核 心是构造递推公式。
y0 y1 y2 yn
第6页
i 1,2,...
第36页
没有一种算法可以有效地解决所有旳 ODE 问题,因此 MATLAB 提供了多种ODE函数。
函数 ODE类
特点
阐明

ode45
非刚性 单步法;4,5 阶 R-K 措施;合计 大部分场合旳首选措施
截断误差为 (△x)3
ode23
非刚性 单步法;2,3 阶 R-K 措施;合计 使用于精度较低旳情形

欧拉法求解一阶微分方程matlab

欧拉法求解一阶微分方程matlab

为了更好地理解欧拉法求解一阶微分方程在Matlab中的应用,我们首先来了解一些背景知识。

一阶微分方程是指只含有一阶导数的方程,通常表示为dy/dx=f(x,y),其中f(x,y)是关于x和y的函数。

欧拉法是一种常见的数值解法,用于求解微分方程的近似数值解。

它是一种基本的显式数值积分方法,通过将微分方程转化为差分方程来进行逼近。

在Matlab中,我们可以利用欧拉法求解一阶微分方程。

我们需要定义微分方程的函数表达式,然后选择合适的步长和初始条件,最后使用循环计算逼近解。

下面我们来具体讨论如何在Matlab中使用欧拉法来求解一阶微分方程。

我们假设要求解的微分方程为dy/dx=-2x+y,初始条件为y(0)=1。

我们可以通过以下步骤来实现:1. 我们需要在Matlab中定义微分方程的函数表达式。

在Matlab中,我们可以使用function关键字来定义函数。

在这个例子中,我们可以定义一个名为diff_eqn的函数,表示微分方程的右侧表达式。

在Matlab中,这个函数可以定义为:```matlabfunction dydx = diff_eqn(x, y)dydx = -2*x + y;end```2. 我们需要选择合适的步长和初始条件。

在欧拉法中,步长的选择对于数值解的精度非常重要。

通常情况下,可以先尝试较小的步长,然后根据需要进行调整。

在这个例子中,我们可以选择步长h=0.1,并设置初始条件x0=0,y0=1。

3. 接下来,我们可以使用循环来逼近微分方程的数值解。

在每一步,根据欧拉法的迭代公式y(i+1) = y(i) + h * f(x(i), y(i)),我们可以按照下面的Matlab代码计算逼近解:```matlabh = 0.1; % 步长x = 0:h:2; % 定义计算区间y = zeros(1, length(x)); % 初始化y的值y(1) = 1; % 设置初始条件for i = 1:(length(x)-1) % 欧拉法迭代y(i+1) = y(i) + h * diff_eqn(x(i), y(i));end```通过上述步骤,在Matlab中就可以用欧拉法求解一阶微分方程。

欧拉方法及其改进的欧拉方法的Matlab实现

欧拉方法及其改进的欧拉方法的Matlab实现
局部截断误差指的是,按(4式计算由n x到1n x +这一步的计算值1n y +与精确值1( n y x +之差
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 ++−==∫

MATLAB Euler法解常微分方程

MATLAB Euler法解常微分方程

Euler 法解常微分方程Euler 法解常微分方程算法:Step 1 分别取积分上限、积分下限、步长Step 2计算h n n +=判断b n ≤是否成立,成立转到Step 3,否则继续进行Step 4 Step 3 计算),(1n n n n y x hf y y +=+Step 4 ),(1n n n n y x hf y y +=+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<b-hb=y;y=y+h*feval(fun,x,b)x=x+h;end例:用Euler 法计算下列初值问题(取步长h=0.2))6.00(1)0('2≤≤⎩⎨⎧=--=x y xy y y输入:fun=inline('-y-x*y^2')euler2(fun,1,[0 0.6],0.2)得到:y =0.8000y =0.6144y =0.4613指导教师: 年 月 日改进Euelr 法解常微分方程改进Euler 法解常微分方程算法:Step 1 分别取积分上限、积分下限、步长Step 2 取一个以h 为步长,a ,b 分别为左右端点的矩阵Step 3 (1)做显性Euler 预测),(1n n i i y x hf y y +=+(2)将1+i y 带入)],(),([2h 111+++++=i i i i i i y x f y x f y y Step 4计算h n n +=判断b n ≤是否成立,成立返回Step 3,否则继续进行Step 5 Step 5 )],(),([2h 111+++++=i i i i i i y x f y x f y y 改进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)-1w1=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;endx=x'y=y'例:用改进Euler 法计算下列初值问题(取步长h=0.25) )50(2)0('2≤≤⎩⎨⎧=-=x y xy y 输入:fun=inline('-x*y^2')gaijineuler2(fun,2,[0 5],0.25)得到:x =0.25000.50000.75001.00001.25001.50001.75002.00002.25002.50002.75003.00003.25003.50003.75004.00004.25004.50004.75005.0000y =2.00001.87501.59391.28241.00960.79320.62820.50370.40970.33790.28240.23890.20430.17650.15380.13520.11960.10660.09550.08610.0779指导教师:年月日。

数值分析Matlab作业龙格库塔欧拉方法解二阶微分方程

数值分析Matlab作业龙格库塔欧拉方法解二阶微分方程
K3=RK_z(i)+0.5*h*L2; L3=rightf_sys1(x(i)+0.5*h,RK_y(i)+0.5*h*K2,RK_z(i)+0.5*h*L2);
% K3 and L3
K4=RK_z(i)+h*L3; L4=rightf_sys1(x(i)+h,RK_y(i)+h*K3,RK_z(i)+h*L3);% K4and L4
RK_y(i+1)=RK_y(i)+1/6*h*(K1+2*K2+2*K3+K4);
RK_z(i+1)=RK_z(i)+1/6*h*(L1+2*L2+2*L3+L4);
end
plot(x,Euler_y,'r-',x,RK_y,'b-');
[y,T]=max(RK_y);
fprintf('角度峰值等于%d',y)%角度的峰值也就是π
运行第三个程序:在一幅图中显示欧拉法和RK4法,随着截断误差的积累,欧拉法产生了较大的误差
h=0.01
h=0.0001,仍然是开始较为稳定,逐渐误差变大
总结:RK4是很好的方法,很稳定,而且四阶是很常用的方法,因为到五阶的时候精度并没有相应提升。通过这两种方法计算出角度峰值y=3.141593,周期是1.777510。
y(0)=0
z(0)=0
精度随着h的减小而更高,因为向前欧拉方法的整体截断误差与h同阶,(因为是用了泰勒公式)所以欧拉方法的稳定区域并不大。
2.RK4-四阶龙格库塔方法
使用四级四阶经典显式Rungkutta公式
稳定性很好,RK4法是四阶方法,每步的误差是h5阶,而总积累误差为h4阶。所以比欧拉稳定。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档