常微分方程数值解的若干Matlab函数文件
重要:MATLAB常微分方程(组)数值解法
Matlab常微分方程求解问题分类
边值问题:
初值问题:
• 定解附加条件在自变量 的一端
• 一般形式为: y' f (x, y)
y(a)
y0
• 初值问题的数值解法一 般采用步进法,如 Runge-Kutta法
➢ 在自变量两端均给定附加 条件
y' f (x, y)
➢ 一般形式:y(a)y1, y(b)y2
1.根据常微分方程要求的求解精度与速度要求
求解初值问题:
y
'
y
2x y
y ( 0 ) 1
(0x1)
比较ode45和ode23的求解精度和速度
ode45和ode23的比较-1
function xODE clear all clc
format long
y0 = 1; [x1,y1] = ode45(@f,[0,1],y0); [x2,y2] = ode23(@f,[0,1],y0); plot(x1,y1,'k-',x2,y2,'b--') xlabel('x') ylabel('y')
rD = k(3)*C(2)-k(5)*C(4);
rE = k(4)*C(3)+k(5)*C(4);
% Mass balances dCdt = [rA; rB; rC; rD; rE];
三个串联的CSTR等温反应器(例4-3)
function IsothermCSTRs clear all clc CA0 = 1.8; % kmol/m^3 CA10 = 0.4; % kmol/m^3 CA20 = 0.2; % kmol/m^3 CA30 = 0.1; % kmol/m^3 k = 0.5; % 1/min tau = 2; stoptime = 2.9; % min [t,y] = ode45(@Equations,[0 stoptime],[CA10 CA20 CA30],[],k,CA0,tau); disp(' Results:') disp(' t CA1 CA2 CA3') disp([t,y]) plot(t,y(:,1),'k--',t,y(:,2),'b:',t,y(:,3),'r-') legend('CA_1','CA_2','CA_3') xlabel('Time (min)') ylabel('Concentration') % -----------------------------------------------------------------function dydt = Equations(t,y,k,CA0,tau) CA1 = y(1); CA2 = y(2); CA3 = y(3); dCA1dt = (CA0-CA1)/tau - k*CA1; dCA2dt = (CA1-CA2)/tau - k*CA2; dCA3dt = (CA2-CA3)/tau - k*CA3; dydt = [dCA1dt; dCA2dt; dCA3dt];
matlab ode45 求解带积分的常微分方程
概述在工程和科学领域中,常微分方程是一种常见的数学建模工具。
其中,带积分的常微分方程更是一种需要特殊解法的方程形式。
MATLAB是一种功能强大的数学工具软件,而ode45是MATLAB中用于求解常微分方程的函数之一。
本文将详细介绍如何使用MATLAB中的ode45函数来求解带积分的常微分方程。
一、带积分的常微分方程简介带积分的常微分方程是指在微分方程中出现积分形式的项,通常表现为对某个函数进行积分。
这种形式的微分方程在工程和科学领域中有着广泛的应用,例如在电路分析、控制系统、生物学模型等领域中都能见到。
典型的带积分的常微分方程形式如下所示:y' = f(t,y) + ∫g(t,y)dt其中,y'表示y对自变量t的导数,f(t,y)为已知的函数,g(t,y)为未知的函数需要求解。
这种形式的微分方程要比普通的常微分方程更复杂,需要使用特定的求解方法来得到解析解或数值解。
二、MATLAB中的ode45函数介绍MATLAB是一种被广泛应用于科学计算和工程领域的数学软件工具,其中有丰富的数值计算函数库。
其中,用于求解常微分方程的ode45函数是应用较为广泛的函数之一。
ode45函数可以通过数值计算的方法来求解常微分方程的数值解,其基本调用格式如下:[t,y] = ode45(odefun,tspan,y0)其中,odefun是定义了微分方程的函数句柄,tspan是求解的时间范围,y0是初始条件。
ode45函数会返回微分方程在tspan范围内的数值解t和对应的y值。
三、使用MATLAB求解带积分的常微分方程对于带积分的常微分方程,我们需要将其转化为标准形式,然后利用MATLAB的ode45函数进行求解。
假设我们有如下形式的带积分的常微分方程:y' = f(t,y) + ∫g(t,y)dt我们将其转化为等价的无積分項的方程形式,例如∂F/∂t = f(t,y) + ∫g(t,y)dt我们可以利用MATLAB中的ode45函数来求解上述形式的微分方程。
matlab求解常微分方程
用matlab 求解常微分方程在MATLAB 中,由函数dsolve ()解决常微分方程(组)的求解问题,其具体格式如下:r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是独立变量,默认的独立变量是't'。
函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。
例1:求解常微分方程1dy dx x y =+的MATLAB 程序为:dsolve('Dy=1/(x+y)','x') ,注意,系统缺省的自变量为t ,因此这里要把自变量写明。
其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X 。
例2:求解常微分方程2'''0yy y -=的MATLAB 程序为:Y2=dsolve('y*D2y-Dy^2=0','x')Y2=dsolve('D2y*y-Dy^2=0','x')我们看到有两个解,其中一个是常数0。
例3:求常微分方程组253ttdxx y edtdyx y edt⎧++=⎪⎪⎨⎪--=⎪⎩通解的MATLAB程序为:[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t')例4:求常微分方程组2210cos,224,0tttdx dyx t xdt dtdx dyy e ydt dt=-=⎧+-==⎪⎪⎨⎪++==⎪⎩通解的MATLAB程序为:[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2,y(0)=0','t')以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。
matlab_常微分方程数值解法
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是一个功能强大的数值计算软件,对于求解常微分方程组也提供了多种数值方法。
本实验将介绍MATLAB中求解常微分方程(组)的方法,并通过实例来演示这些方法的应用。
一、MATLAB的常微分方程(组)求解函数MATLAB提供了多种函数用于求解常微分方程(组),其中最常用的函数是ode45、ode23和ode15s。
这些函数采用不同的数值方法,精度和效率也不同。
下面分别对这些函数进行简单介绍:1. ode45函数:ode45函数采用了一种自适应的步长控制算法,可以在一个时间段内自动调整步长。
这个函数的语法是:[t,y] = ode45(odefun,tspan,y0,options)其中,odefun是一个函数句柄,表示待解的常微分方程组,tspan是求解区间,y0是初始条件,options是一个结构体,包含其他的参数和选项。
2. ode23函数:ode23函数也采用了自适应的步长控制算法,但相对于ode45,它是一个简化版本,只允许使用比较简单的问题。
这个函数的语法与ode45相似:[t,y] = ode23(odefun,tspan,y0,options)3. ode15s函数:ode15s函数采用了一种隐式数值方法,适用于比较刚性(stiff)的常微分方程。
这个函数的语法与前两个函数也相似:[t,y] = ode15s(odefun,tspan,y0,options)以上是MATLAB提供的三种解常微分方程(组)的函数,根据问题的特点和求解的需求选择相应的函数。
二、实例演示在本实验中,我们将通过一个实例来演示如何使用MATLAB解常微分方程组。
假设有一个简单的线性常微分方程组:dy1/dt = -2y1 + y2dy2/dt = y1 - 2y2给定初始条件为y1(0)=1,y2(0)=0,求在t=[0,5]时,y1和y2的解。
matlab求解常微分方程
y=dsolve('Dy=-2*y+2*x^2+2*x','y(0)=1','x') x=0:0.01:0.5;
yy=subs(y,x);
fun=inline('2*y+2*x*x+2*x');[x,y]=ode15s(fun,[0:0.01:0.5],1);ys=x.*x+exp(2*x); plot(x,y,'r',x,ys,'b')
dy 1 = 例 1:求解常微分方程 dx x + y 的MATLAB程序为:dsolve('Dy=1/(x+y)','x')
,
注意,系统缺省的自变量为 t,因此这里要把自变量写明。 其中:Y=lambertw(X)表示函数关系 Y*exp(Y)=X。
2 例 2:求解常微分方程 yy ''− y ' = 0 的MATLAB程序为:
Y2=dsolve('y*D2y-Dy^2=0','x')
Y2=dsolve('D2y*y-Dy^2=0','x')
我们看到有两个解,其中一个是常数 0。
⎧ dx + 5 x + y = et ⎪ ⎪ dt ⎨ ⎪ dy − x − 3 y = e 2t ⎩ dt 通解的MATLAB程序为: 例 3:求常微分方程组 ⎪
d2y dy − μ (1 − y 2 ) + y = 0, y (0) = 1, y '(0) = 0 2 dt 的解,并画出解的图形。 例 6:求解常微分方程 dt
常微分方程数值解与matlab
其中,r a / v
d 2 - S0 2
令: dx p, dy
d 2 x dp 2 dy dy
dy dp r 2 y 1 p p ( d 2 S 2 ) S0 0 2 2 d S 0
dy dp r 2 y 1 p p (20) 0
当 y 0 时,
x ,缉私艇不可能追赶上走私船。
dx 1 20 r y r dy 2 y 20 x(20) 0
(b)用MATLAB软件求解析解
MATLAB软件5.3以上版本提供的解常微分方程解析解的指令是 Dsolve, 完整的调用格式是: dsolve('eqn1','eqn2', ...) 其中‘eqn1’,‘eqn2’, ...是输入宗量,包括三部分: 微分方程、初始 条件、指定变量,若不指定变量,则默认小写字母t为独立变量.书P-69 微分方程的书写格式规定:当y是因变量时,用“Dny”表示y的n阶导数. 例 求微分方程
a 2) r 1 , v 1 20r r 1 r r 1 r x 20 (1 r ) y 20 (1 r ) y 2 1 r2
当 y 0 时,
x
缉私艇不可能追赶上走私船。
1 1 2 3) r 1 , x 2 20ln y 40 y
M(x,y)
d
S0
追赶方向可用方向余弦表示为:%两点形成的向量的方向余弦
cosk
S0 at xk (S0 at xk )2 ( yk )2
yk (S0 at x)2 ( yk )2
matlab求解常微分方程
2*t)','x(0)=2,y(0)=0','t')
以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是,我们知 道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析 解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰 富的函数,我们将其统称为 solver,其一般格式为:
例
4:求常微分方程组
⎧ ⎪⎪ ⎨ ⎪ ⎪⎩
dx dt dx dt
+ +
2x
dy dt
− +
dy dt
2y
= 10 cos = 4e−2t ,
t,
x =2 t=0
y =0
t=0 通解的MATLAB程序为:
[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-
用 matlab 求解常微分方程
在 MATLAB 中,由函数 dsolve()解决常微分方程(组)的求解问题,其具体格式如 下:
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v') 'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是 独立变量,默认的独立变量是't'。 函数 dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如 果有初始条件,则求出特解。
[T,Y]=solver(odefun,tspan,y0)
matlab 二阶常微分方程数值求解函数
MATLAB 二阶常微分方程数值求解函数一、MATLAB 中常微分方程的求解在科学计算领域,常微分方程是一个非常重要的数学工具,常被用于描述动态系统的演变规律。
MATLAB 作为一种功能强大的科学计算软件,提供了丰富的工具箱和函数,用于求解常微分方程。
其中,二阶常微分方程求解函数是其中的重要一部分。
二、二阶常微分方程的数值求解方法1. 常微分方程的基本概念在了解 MATLAB 中的二阶常微分方程数值求解函数之前,首先要明确常微分方程的基本概念。
常微分方程是关于未知函数及其导数的方程,而二阶常微分方程则是包含到二阶导数的方程。
通常情况下,常微分方程不易求解,因此需要借助数值求解方法进行近似求解。
2. MATLAB 中的数值求解函数在 MATLAB 中,有多种数值求解方法可用于求解二阶常微分方程,例如 ODE45、ODE23、ODE113 等。
这些函数可以根据用户输入的微分方程表达式和初始条件,使用不同的数值方法进行求解,得到相应的数值解。
三、使用 MATLAB 数值求解二阶常微分方程的示例考虑一个带有阻尼和弹簧的振动系统,其运动方程为:\[ m\frac {d^2x}{dt^2} + c\frac{dx}{dt} + kx = 0 \]其中,\( m \) 为质量,\( c \) 为阻尼系数,\( k \) 为弹簧刚度。
现在,我们可以使用 MATLAB 中的二阶常微分方程数值求解函数来求解该振动系统的运动方程。
```matlabfunction secondOrderODEExample% 定义常数m = 1; % 质量c = 0.1; % 阻尼系数k = 1; % 弹簧刚度% 定义初始条件x0 = 1; % 初位移v0 = 0; % 初速度% 定义时间范围tspan = [0 10]; % 时间范围% 定义运动方程odefun = @(t,x) [x(2); -c/m*x(2) - k/m*x(1)];% 求解微分方程[t, sol] = ode45(odefun, tspan, [x0 v0]);% 绘制位移随时间变化图figure;plot(t, sol(:,1));xlabel('Time');ylabel('Displacement');title('Displacement vs. Time');end```代码中,我们使用了 MATLAB 中的 ode45 函数来求解给定的二阶常微分方程,并绘制了位移随时间变化的图像。
第八章基于MATLAB的科学计算—常微分方程数值解法
第八章基于MATLAB的科学计算—常微分方程数值解法第八章主要介绍了基于MATLAB的科学计算中的常微分方程数值解法。
常微分方程是数学中一个重要的领域,它研究的是一种未知函数的导数与
自变量之间的关系。
在实际问题中,常微分方程常常被用来描述物理系统、化学反应等现象。
在科学计算中,常微分方程的数值解法是一种常用的计算方式。
本章
首先介绍了常微分方程的基本概念和形式,包括一阶和高阶常微分方程的
定义和求解方法。
然后,详细介绍了数值解法中的欧拉方法、中点方法和
四阶龙格-库塔方法等。
欧拉方法是常微分方程数值解法中最简单的一种方法,它以初始条件
为基础,通过逐步逼近的方式求解方程。
中点方法在欧拉方法的基础上进
行了改进,通过使用两个点的平均斜率来逼近函数的斜率。
四阶龙格-库
塔方法是常微分方程数值解法中最常用的一种方法,它通过使用多个点的
斜率,以及加权平均值的方式来求解方程。
本章还介绍了MATLAB中的常微分方程求解工具箱,包括ode45、
ode23等函数,这些函数可以方便地求解各种不同类型的常微分方程。
MATLAB的求解工具箱提供了多种求解常微分方程的方法,用户可以根据
实际需求选择合适的方法。
总之,本章内容涵盖了基于MATLAB的科学计算中常微分方程数值解
法的基本概念和求解方法。
掌握这些知识,可以帮助科学计算中的研究人
员和工程师更好地理解和应用常微分方程数值解法,在实际问题中进行精
确的数值计算和模拟。
常微分方程数值求解 MATLAB 求解
dsolve 举例
例:[x,y]=dsolve('Dx+5*x=0', 'Dy-3*y=0', ...
'x(0)=1', 'y(0)=1', 't') sol = dsolve('Dx+5*x=0', 'Dy-3*y=0', ...
'x(0)=1', 'y(0)=1', 't') 这里返回的 sol 是一个 结构类型 的数据 sol.x % 查看解函数 x(t) sol.y % 查看解函数 y(t)
常微分方程数值求解
—— MATLAB 求解
Matlab 解初值问题函数
用 Maltab自带函数 解初值问题
求解析解:dsolve
求数值解:
ode45、ode23、 ode113、ode23t、ode15s、 ode23s、ode23tb
2
符号求解
符号求解
dsolve
3
dsolve 求解析解
如果省略自变量,则默认自变量为 t
dsolve('Dy=2*x','x'); % dy/dx = 2x
dsolve('Dy=2*x');
% dy/dt = 2x
若找不到解析解,则提出警告,并返回空解。
5
dsolve 的使用
使用符号方程
导数:diff,如 diff(y),diff(y,2) 等号:== 必须声明应变量与自变量!
求解析解:dsolve
y=dsolve('eq1','eq2', ... ,'cond1','cond2', ... ,'v')
【2019年整理】matlab第二章常微分方程的数值解法
K3 = ZCX_sub (t0 + h/2, Y0 + hK2/2, P )
P=
%输入 (t0+h) 时刻的外部激励力
K4 = ZCX_sub (t0 + h, y0 + hK3, P) Y1 = y0 + (h/6) (K1 + 2K2 + 2K3 + K4) t1, Y1 (输出 t1, y1) next i 输出数据或图形
0
m2
0 0
0 x1 k1 k2
0
x2
k2
m3 x3 0
k2 k2 k3
k3
0 x1 P0 sin(t)
k3
x2
0
k3 k4 x3 0
其中:
x1
X
x2
x3
m1 0 0
M
0
m2
0
0 0 m3
k1 k2
K
k2
0
k2 k2 k3
解析解:
x1 x2
(t) (t)
1 0.0882
P0 k
x3 (t )
1
3
sin(wt) 2.63
0
3
P0 k
sin(wt) 0.21
2
2
2
P0 k
sin(wt)
第一个质量的位移响应时程
4阶龙格-库塔法的结果
0.4
ode45 的结果
0.4
0.3
0.3
0.2
0.2
0.1
0.1
例题2:三自由 度质量弹簧系统
P0sin(wt) x1
k1
k2
m1
x2
k3 m2
x3
常微分方程数值解及其MATLAB实现
--茂名学院毕业论文题目常微分方程数值解及其MATLAB实现英文并列题目Numerical Solution of Ordinary Differential Equations and MATLAB Implementation学院理学院专业数学与应用数学(师范)班级数学05-1班学生李尧光指导教师(职称)李伟勋(副教授)完成时间2009年1月15日至2009 年6月10日------茂 名 学 院毕 业 论 文 任 务 书数学 系 数学与应用数学(师范)专业 数学05-1班 学生 李尧光一、毕业论文课题 常微分方程数值解及其MATLAB 实现二、毕业论文工作自 2009 年 1 月 15 日起至 2009 年 6 月 10 日止三、毕业论文进行地点 茂名学院图书馆、学生宿舍四、毕业论文的内容要求1.内容要求《常微分方程数值解及其MATLAB 实现》主要介绍常微分方程初值问题的数值解法,探讨了采用单步法求解常微分方程初值问题的数值解,并运用MATLAB 进行编程求解。
2.过程要求(1)4月10日前按要求组织所需资料,完成提纲、摘要。
(2)5月26日前按要求查阅相关文献、撰写论文初稿。
(3)6月9日前按要求完成论文终稿、打印装订以及答辩前的准备工作。
(4)6月10日至14日为小组答辩,15日至16日为公开答辩。
(5)论文的语言文字要规范,格式要按规定的格式进行编辑,字数在1.2万至1.5万之间,参考文献至少10项,至少1篇外文文献。
(6)在整个毕业论文写作过程中要经常与指导老师交流。
教研室负责人 江蓉指导教师 李伟勋 (副教授)接受设计论文任务开始执行日期 2009 年 1 月 16 日学生签名--摘要科学技术和工程中大量的问题都表达为常微分方程的形式,然而,只有少数十分简单的微分方程能够用初等方法求解,在很多情况下,我们只能求得解的近似值,因此,就有研究常微分方程数值解显得非常重要。
本文介绍常微分方程初值问题的数值解法,探讨了采用单步法求解常微分方程初值问题的数值解,并运用MATLAB进行编程求解,程序简洁、直观, 求解速度快, 方法实用性较强。
常微分方程数值解及其MATLAB实现
常微分方程数值解及其MATLAB实现茂名学院毕业论文题目常微分方程数值解及其MATLAB实现英文并列题目Numerical Solution of Ordinary Differential Equations and MATLAB Implementation学院理学院专业数学与应用数学(师范)班级数学05-1班学生李尧光指导教师(职称)李伟勋(副教授)完成时间2009年1月15日至2009 年6月10日1 / 31常微分方程数值解及其MATLAB 实现2 / 31茂 名 学 院毕 业 论 文 任 务 书数学 系 数学与应用数学(师范)专业 数学05-1班 学生 李尧光一、毕业论文课题 常微分方程数值解及其MATLAB 实现二、毕业论文工作自 2009 年 1 月 15 日起至 2009 年 6 月 10 日止三、毕业论文进行地点 茂名学院图书馆、学生宿舍四、毕业论文的内容要求1.内容要求《常微分方程数值解及其MATLAB 实现》主要介绍常微分方程初值问题的数值解法,探讨了采用单步法求解常微分方程初值问题的数值解,并运用MATLAB 进行编程求解。
2.过程要求(1)4月10日前按要求组织所需资料,完成提纲、摘要。
(2)5月26日前按要求查阅相关文献、撰写论文初稿。
(3)6月9日前按要求完成论文终稿、打印装订以及答辩前的准备工作。
(4)6月10日至14日为小组答辩,15日至16日为公开答辩。
(5)论文的语言文字要规范,格式要按规定的格式进行编辑,字数在1.2万至1.5万之间,参考文献至少10项,至少1篇外文文献。
(6)在整个毕业论文写作过程中要经常与指导老师交流。
教研室负责人 江蓉指导教师 李伟勋 (副教授)接受设计论文任务开始执行日期 2009 年 1 月 16 日学生签名常微分方程数值解及其MATLAB实现摘要科学技术和工程中大量的问题都表达为常微分方程的形式,然而,只有少数十分简单的微分方程能够用初等方法求解,在很多情况下,我们只能求得解的近似值,因此,就有研究常微分方程数值解显得非常重要。
常微分方程数值解及其Matlab实现
高振荡微分方程是指其解具有高振荡性的一类微分方程,在分子动力学、天体力学、量子化学以及原子物理等方面有着广泛的应用。因此,研究其 数值解法具有重要意义。然而对于高振荡微分方程,一般的数值解法难以给出好的计算结果。
设计数值计算格式的一个基本想法是数值解法保持原问题的基本特征。对于Hamilton方程,Hamilton函数(通常表示能量)为守恒量。按照上述原则 ,数值解法也应较好地保持这一性质。
万方数据
一b一
科技信息
博士·专家论坛
在儿=y(_)前提下,将岛,心作泰勒屉开,则
尼。=/(%,%) ☆:=,(%+自,此+胁:,)=,(%,")+妩+^墨‘+o(^2)
=y’(_)+咖”(“)+D(^2) 以+.=n+矗(y’(‘)+y’(矗)+砂”(%))/2+D(旷)
:,(矗)+吵-(矗)+嬖y”(‘)+。(矿)
— 万8一 方数据
常微分方程数值解及其Matlab实现
作者: 作者单位: 刊名:
英文刊名: 年,卷(期): 被引用次数:
武瑞婵, 邓黎 武瑞婵(襄樊学院数学系), 邓黎(华东交通大学)
科技信息(学术版) SCIENCE & TECHNOLOGY INFORMATION 2007,""(35) 1次
儿“=以+(向+2乞+2岛+缸)/6 屯=可(吒,此) 如=矿(%+五/2,咒+矗/2) 尼3=矿(■+厅/2,虬+屯/2) 尼4=矽(矗+厶,蚝+乜)
本文讨论主要以改进尤拉法(3)和标准四阶龙格库塔法(4)为例。 2利用_at Iab求解一阶方程初值问题¨1 2.1利用内嵌程序直接得到结果 一阶微分方程仞值问题的求解在liatlab中有非常简便易求的方法.而且由于Matlab中内嵌的微分方程初值问题的求解 方法足变步长的龙格库塔法,故而求解结果值得信赖.
matlab解常微分方程-odefile的使用
MATLAB常微分方程(ODE)解算(copyright:lishuxingok@)一ODE解算指令MATLAB解算ODE方程一共有三方面的协调:一个是ODE文件;一个是主程序中的solver解算指令,用来调用ODE文件;一个是解算选项options的设置;前两个东西一定要区分他们的格式。
关于以上两个函数格式,在这里列举一下二者的主要不同,以免用错: 1.1.ODE文件:MATLAB用专门名称“ODE文件”称呼被微分方程解算指令调用的M函数。
ODE文件的功能很多,其中最基本的、最必不可少的功能是:计算每一步的导数。
此外,还有一些常用的功能,如解算指令中options的参数设置,事件设置等。
MATLAB给ODE文件制订了严格的格式和规定,而且也提供了一个模板文件。
function varagout = odefile (t,y,flag,p1,p2)1. varargout 是MATLAB专门设计的"变长度"输出宗量。
它由元胞数组构成,因此可适应任意多个、任意形式的输出宗量,也就是说MATLAB对ODE文件的输出没有要求,可以是任意的东西。
当然,最简单的情形就是以dy/dt作为输出宗量,这点要牢记,而且一般情况下会用这种情形就行了,更复杂的编写方法还可以包含其他有用信息,这个可见参考MATLAB自带的odefile;2.自变量t,不管在下面指令中是否出现,自变量t必须作为第一输入宗量(牢记),任何调用格式都必须服从此规则;3.因变量y,一阶微分方程组的列向量形式函数。
它必须作为第二输入宗量(牢记),任何调用格式都必须服从此规则;4.Flag,切换变量。
它必须处在第三输入宗量位置(牢记),任何调用格式都必须服从此规则,除非在只有两个输入宗量的最简洁格式中。
用户无须也不要对它直接赋值,直接写flag就行,它的赋值由微分方程解算指令(solver)自动产生;5.被传递的参数要位于第四、五、六、七分量上,而且要注意的是这些分量的参数性质、数目和排列次序应该与solver解算器中第五、六、七、八分量相对应。
第六章 MATLAB教程常微分方程的数值解
0
-1
-2
-3
0
5
10
15
20
25
30
35
40
45
50
例3 x′ = y, y′ = 0.2 y sin t
(1)转化方程。
H=[0,100] t = 0, x = 0, y = 2
(2)建立文件,设文件名为dzdt03.m。 function dz=f(t,z) a=-0.2;
1.5 2
dz(1)=z(2);
(3)调用求解。 H=[0.1,30];z0=[0;0;0]; [t,z]=ode45('dzdt01',H,z0); plot(t,z(:,1),'m-')
1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5 x 10
5
plot(t,z(:,1),'m-')
0
5
10
15
20
25
30
例2 y′′ c(1 y 2 ) y′ + y = 0 H=[0,50] t = 0, y = 2, y′ = 1
30 20 10 0
dz(3)=c*z(2)-z(3)-z(1)*z(2); dz=[dz(1);dz(2);dz(3)]; (3)调用求解。
-10 -20 -30 20 10 60 0 -10 -20 -20 0 40 20
H=[0,80];z0=[0;0;0.222/10^15]; [t,z]=ode23('dzdt05',H,z0); plot3(z(:,1),z(:,2),z(:,3),'m-')
第六章 常微分方程的数值解
常见的近似数值求解方法有欧拉 折线法、阿当姆斯法、龙格-库塔 法与吉尔法。 不受方程类型的限制,可以求任 何形状常微分方程的特解,但求 出的解只能是数值的解函数。
常微分方程(ODEs)的MATLAB数值解法
1.ODE 解算器简介 ..............................................................................................................................................................3 2.微分方程转换 ...................................................................................................................................................................5 3.刚性/非刚性问题 ..............................................................................................................................................................8 4.隐式微分方程(IDE) ........................................................................................................................................................10 5.微分代数方程(DAE)....................................................................................................................................................... 15 6.延迟微分方程(DDE)....................................................................................................................................................... 18 7.边值问题(BVP) ...............................................................................................................................................................20
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a=tspan(1);b=tspan(2);h=(b-a)/h; x=(a+h:h:b); y(1)=y0+h*feval(f,a,y0);
for i=2:n
y(i)=y(i-1)+h*fevol(f,x(i-1),y(i-1)); end x=[a x]; y=[y0 y];
第八章常微分方程数值解法
8.7.2 经典Runge-Kutta 法的 Matlab 函数文件
function [x,y] =rk4(f,tspan,y0,n) % 解初值问题:y’ =f(x,y),y(a)=y0。 % 使用 n 步 4 阶 R-K 法。 a=tspan(1);b=tspan(2);h=(b-a)/n; k1=h*feval (f,a,y0); k2=h*feval (f,a+h/2,y0+k1/2); k3=h*feval (f,a+h/2,y0+k2/2); k4=h*feval (f,a+h,y0+k3); y(1)=y0+k1/6+k2/3+k3/3+k4/6;
第八章常微分方程数值解法
8.7.3 三阶 Adams方法的 Matlab 函数文件
function [x,y] =ad3 (f,tspan,y0,n)
a=tspan(1);b=tspan(2);
h=(b-a)/n;hh=h/12; x=(a+h:h:b);
%使用中点方法提供开始值。
z0=feval (f,a,y0); k1=h*z0;k2=h*feval (f,a+h/2,y0+k1/2) ; y(1)=y0+k2; z(1)=feval (f,x(1)+h/2,y(1)+k1/2);
第八章常微分方程数值解法
k1=h*z(1);k2=h*feval (f,x(1)+h/2,y(1)+k1/2) ;
y(2)=y(1)+k2 ; % 继续使用三阶 Adams 方法。 z(2)=feval (f,x(2),y(2)); y(3)=y(2)+hh*(23*z(2)-16*z(1)+5*feval (f,a,y0)) ; for i=3:n-1 z(i) =feval (f,x(2),y(2)) ; y(i+1)=y(i)+hh(23*z(i)-16*z(i-1)+5z(i-2)) : end x=[a x] ; y=[y0 y];
第八章常微分方程数值解法8来自7常微分方程数值解的若干Matlab函数文件
8.7.1 Euler 方法的 Matlab 函数文件
function [x,y]=euler(f,tspan,y0,n)
% 解初值问题: y =f(x,y),y(a)=y0。 % 使用 n 步的 Euler 法,步长 h=(b-a)/h。
第八章常微分方程数值解法
for i=1:n-1 k1=h*feval(f,x(i),y(i)); k2=h*feval(f,x(i)+h/2,y(i)+k1/2); k3=h*feval(f,x(i)+h/2,y(i)+k2/2); k4=h*feval(f,x(i)+h/2,y(i)+k3/2); y(i+1)=y(i)+k1/6+k2/3+k3/3+k4/6 ; end x=[a x]; y=[y0 y];