重要:MATLAB常微分方程(组)数值解法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ 输出变量T为返回时间列向量;解矩阵Y的每一行对应于T的一个元素,列 数与求解变量数相等。
❖ @fun为函数句柄,为根据待求解的ODE方程所编写的ode文件(odefile); ❖ TSPAN=[T0 TFINAL]是微分系统y'=F(t,y)的积分区间;Y0为初始条件 ❖ options用于设置一些可选的参数值,缺省时,相对于第一种调用格式。
(0x1)
function f=fun(x,y) f=y+y^2;
odefile的编写---常微分方程组
yy12'' 0.1004 4 (1y 1'y31) 0(10(1 0yy22))y210.00(011y2)2 y1(0)0,y2(0)1,0x100 常微分方程组与单个常微分方程求解方法相同, 只需在编写odefile时将整个方程组作为一个向量 输出。
指令 ode23
ode45
ode113 解 算 ode23t
ode15s ode23s ode23tb
Matlab求解初值问题函数
含义
普通2-3阶法解 ODE
指令 odefile
含义 ODE文件格式
普通4-5阶法解 ODE
普通变阶法解ODE
odeset
选 项 odeget
解适度刚性ODE
变阶法解刚性ODE
2.3 常微分方程(组)的数值解法
知识要点
常微分方程初值问题---ode45,0de23 常微分方程边值问题---bvp4c
微分方程在化工模型中的应用
•间歇反应器的计算 •活塞流反应器的计算 •全混流反应器的动态模拟 •定态一维热传导问题 •逆流壁冷式固定床反应器一维模型 •固定床反应器的分散模型
求解: y" a (t)y (')2 b (t)yetco 2tsy(0)=0,y'(0)=1,
a (t) e t c2 ots e 2 t,b (t) co 2t)s(
本例的难度:
方程系数非线性
方程高阶,非标准形式
可在odefile中定义
function f=fun(t,y) a=-exp(-t)+cos(2*pi*t)*exp(-2*t); b=cos(2*pi*t); f=[y(2);-a*y(2)^2-b*y(1)+exp(t)*b];
方程变形:令y1=y;y2=y’ 则原方程等价于:
yy12'' y2ay22b1yet co2st
解算指令的使用方法
1. [T,Y]=ode45(@fun, TSPAN,Y0) 2. [T,Y]=ode45(@fun, TSPAN,Y0,options) 3. [T,Y]= ode45(@fun, TSPAN,Y0,options,P1,P2,…) 4. [T,Y,TE,YE,IE]= ode45(@fun, TSPAN,Y0,options,P1,P2,…)
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')
ode113 可变阶Adams-BashforthMoulton法
ode15s 基于数值差分的可变阶 方法(BDFs,Gear)
ode23s
ode23t ode23tb
二阶改进的Rosenbrock 法
使用梯形规则
TR-BDF2(隐式RungeKutta法)
精度 较高

低~中 低
适中 低
ode解算指令的选择(1)
Matlab常微分方程求解问题分类
边值问题:
初值问题:
• 定解附加条件在自变量 的一端wk.baidu.com
• 一般形式为: y' f (x, y)
y(a)
y0
• 初值问题的数值解法一 般采用步进法,如 Runge-Kutta法
➢ 在自变量两端均给定附加 条件
y' f (x, y)
➢ 一般形式:y(a)y1, y(b)y2
低阶法解刚性ODE
低阶法解刚性ODE
创建、更改ODE选项的 设置
读取ODE选项的设置
odefile
所谓的odefile实际上是一个Matlab函数文件,一般作为整 个求解程序的一个子函数,表示ode求解问题
一般而言,对于程序通用性要求不高的场合,只需将原 有模型写成标准形式,然后“翻译”成Matlab语言即可
odefile的编写---常微分方程
求解初值问题:
y
'
y
2x y
y ( 0 ) 1
(0x1)
y' f (x, y)
y(a)
y0
ode输入函数
输出变量为因变 量导数的表达式
function f=fun(x,y) f=y-2*x/y;
自变量在前,因变 量在后
初值问题: y' y y 2
y(0) 1
% -----------------------------------------------------------------function dydx = f(x,y) dydx = y - 2*x/y;
function f=fun(x,y) dy1dx = 0.04*(1-y(1))-(1-y(2)).*y(1)+0.0001*(1-y(2)).^2; dy2dx = -1e4*dy1dx + 3000*(1-y(2)).^2; f = [dy1dx; dy2dx];
高阶微分方程odefile的编写
➢ 边值问题可能有解、也可 能无解,可能有唯一解、 也可能有无数解
➢ 边值问题有3种基本解法 • 迭加法 • 打靶法 • 松弛法
Matlab求解常微分方程初值问题方法
将待求解转化为标准形式,并“翻译”成 Matlab可以理解的语言,即编写odefile文件
选择合适的解算指令求解问题
根据求解问题的要求,设置解算指令的调用格式
options中可以设置的参数参见odeset ❖ P1,P2,…的作用是传递附加参数P1,P2,…到ode文件。当options缺省
时,应在相应位置保留[],以便正确传递参数。
常微分方程初值问题解算指令比较
解算指 令
算法
ode45 四五阶Runge-Kutta法
ode23 二三阶Runge-Kutta法
相关文档
最新文档