【VIP专享】关于ode45函数的说明

matlab ode4的用法

第11章积分和微分方程组 在有效的M A T L A B命令帮助下,可以求解出定积分和普通微分方程的数字解并绘制出其图形。 11.1 积分 在M A T L A B中能求解如下形式的定积分并给出数字解: 有许多方法都可以能够解决积分问题(又叫做求面积)。如果要用M A T L A B监控整个计算过程,可以使用q u a d命令。同样能计算出被积函数g的值,并且让M A T L A B使用梯形规则和t r a p z命令计算出积分。当只有离散的数据点和被积函数的数学表达式为未知时,这种方法是非常有效的。 命令集1 07定积分计算 t r a p z(x,y)计算出函数x的积分并将结果返回到y。向量x和y有相同的长度, (xi, yi)代表曲线上的一点。曲线上点的距离不一定相等,x值也 不一定有序。然而,负值间距和子区间被认为是负值积分。 t r a p z(y)计算方法同上,但x值间隔为1。 t r a p z(x,A)将A中每列的值带入x的函数算出其积分,并返回一组包含 积分结果的向量。A的列向量必须和向量x的长度相同。 Z =t r a p z(x,A,d i m)在矩阵A中d i m指定的维内进行数据积分。如果给定向量x, 则x的长度必须与size(A, dim)相同。 c u m t r a p z(A, d i m)返回大小和A相同的数组,包含的是将矩阵A进行梯形积分 的累积值。如果d i m已给定,则在d i m维内进行计算。 q u a d(f c n,a,b)返回在区间[a, b]上g的积分近似值。字符串f c n包含一个与g相 对应的M A T L A B函数名,也就是预定义函数或者是M文件。 这个函数接收一个向量参数,并返回一个向量结果。 M AT L A B利用辛普森规则执行递归的积分,计算误差为10-3。 q u a d(f c n,a,b,t o l)求g的积分近似值,其相对误差由参数t o l定义。否则,计算 过程同上。 quad(fcn,a b,tol,求g的积分近似值,其相对误差由参数t o l所定义。如果参数 p i c)p i c是非零值,则在图形中显示求值的点。 q u a d(. .., t r a c e)如果t r a c e是非零值,则画出积分图形。

ODE45函数的使用翻译

在Matlab 中使用ode45简介 Matlab 中常微分方程常用的函数是ODE45,这个函数能够利用--龙哥库塔法--有效求解带时间变量步长的计算。Ode45用于求解如下的一般问题: )(()00,,x t x x t f dt dx ==(1) 其中,时间t 是独立变量,x 为时间相关矢量,)(x t f ,是时间t 和x 的函数。当(1)右边的)(x t f ,是固定的,且给定x 的初始值,那么问题的解是唯一的。 在ME175中,解法是不完整的,但是只要你解决了问题,就可以获得ODE 代表的系统运动趋势。这有利于得到一个直观的印象,看起来很复杂的常微分方程,代表的质点运动轨迹确实简单明了的。以下简要解释如何得到运动轨迹: 第一步: 对给定的ODE 方程进行降阶处理,得到一系列一阶方程 这就是你要做的第一步,在一张草稿纸上处理。例如,给定ODE 方程如下: 1,3,5002-===-+? ???y y y e y y m y (2) 对本问题,矢量x 有两个组成分量:y 和?y ,或 ()()?==y x y x 21(3) 且 ()()()()()()()()()()() 211251221x e x m dt x d x dt x d x +-==(4) 其中,用(3)中的式子代表了y ,? y ,? ?y ,于是把(2)改写为(4)。

如果求解的问题有更多阶数更多变量呢?例如,我们除了有上面的方程(2),同时还有以下的方程: ().1,0,sin 002233===-+?z z t z dt z d dt z d (5) 那么,我们可以通过构造更大的矢量x 同时求解y ,z : ()()()? ??===z x z x z x 543 (6) 然后 ??????=????z z z y y x ,,,, (7) 以及 [?? ?==??=?==?==000000,,,,t t t t t t z z z y y x (8) 其中,y 变量和z 变量的放置位置对求解不造成影响。实际上,任意次序都是有效的,例如 ??????=????z z y z y x ,,,, 和???????=? ?????y y z z z x ,,,, 但是重要的是,在整个计算过程中,你使用的顺序都必须和一阶ODE 方程中定义的变量顺序相同。之后,如果你使用的是(7)中给定的的式子,那么系统的一阶ODE 方程,由以下方程组组成。

Matlab中龙格-库塔(Runge-Kutta)方法原理及实现

函数功能编辑本段回目录 ode是专门用于解微分方程的功能函数,他有ode23,ode45,ode23s等等,采用的是Runge-Kutta算法。ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)3。解决的是Nonstiff(非刚性)的常微分方程.是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,换用ode23来解. 使用方法编辑本段回目录 [T,Y] = ode45(odefun,tspan,y0) odefun 是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名 tspan 是区间[t0 tf] 或者一系列散点[t0,t1,...,tf] y0 是初始值向量 T 返回列向量的时间点 Y 返回对应T的求解列向量 [T,Y] = ode45(odefun,tspan,y0,options) options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等 [T,Y,TE,YE,IE] =ode45(odefun,tspan,y0,options) 在设置了事件参数后的对应输出 TE 事件发生时间 YE 事件解决时间 IE 事件消失时间 sol =ode45(odefun,[t0 tf],y0...) sol 结构体输出结果 应用举例编辑本段回目录 1 求解一阶常微分方程

程序: 一阶常微分方程 odefun=@(t,y) (y+3*t)/t^2; %定义函数 tspan=[1 4]; %求解区间 y0=-2; %初值 [t,y]=ode45(odefun,tspan,y0); plot(t,y) %作图 title('t^2y''=y+3t,y(1)=-2,1

ODE45函数的使用——翻译

O D E45函数的使用— —翻译 -CAL-FENGHAI.-(YICAI)-Company One1

在Matlab 中使用ode45简介 Matlab 中常微分方程常用的函数是ODE45,这个函数能够利用--龙哥库塔法--有效求解带时间变量步长的计算。Ode45用于求解如下的一般问题: )(()00,,x t x x t f dt dx ==(1) 其中,时间t 是独立变量,x 为时间相关矢量,)(x t f ,是时间t 和x 的函数。当 (1)右边的)(x t f ,是固定的,且给定x 的初始值,那么问题的解是唯一的。 在ME175中,解法是不完整的,但是只要你解决了问题,就可以获得ODE 代表的系统运动趋势。这有利于得到一个直观的印象,看起来很复杂的常微分方程,代表的质点运动轨迹确实简单明了的。以下简要解释如何得到运动轨迹: 第一步: 对给定的ODE 方程进行降阶处理,得到一系列一阶方程 这就是你要做的第一步,在一张草稿纸上处理。例如,给定ODE 方程如下: 1,3,5002-===-+? ???y y y e y y m y (2) 对本问题,矢量x 有两个组成分量:y 和?y ,或 ()()?==y x y x 21(3) 且 ()()()()()()()()()()() 211251221x e x m dt x d x dt x d x +-==(4) 其中,用(3)中的式子代表了y ,?y ,? ?y ,于是把(2)改写为(4)。 如果求解的问题有更多阶数更多变量呢?例如,我们除了有上面的方程(2),同时还有以下的方程: ().1,0,sin 002233===-+?z z t z dt z d dt z d (5) 那么,我们可以通过构造更大的矢量x 同时求解y ,z :

matlab ode45和矩阵生成有向网络图

Matlab中解常微分方程的ode45 ode是专门用于解微分方程的功能函数,他有ode23,ode45,ode23s等等,采用的是Runge-Kutta算法。ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)^3。解决的是Nonstiff(非刚性)的常微分方程.是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,换用ode23来解.其他几个也是类似的用法 使用方法 [T,Y] = ode45(odefun,tspan,y0) odefun 是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名 tspan 是区间 [t0 tf] 或者一系列散点[t0,t1,...,tf] y0 是初始值向量 T 返回列向量的时间点 Y 返回对应T的求解列向量 [T,Y] = ode45(odefun,tspan,y0,options) options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等 [T,Y,TE,YE,IE] =ode45(odefun,tspan,y0,options) 每组(t,Y)之产生称为事件函数。每次均会检查是否函数等于零。并决定是否在零时终止运算。这可以在函数中之特性上设定。例如以events 或@events产生一函数。[value, isterminal,direction]=events(t,y)其中,value(i)为函数之值,isterminal(i)=1时运算在等于零时停止,=0时继续;direction(i)=0时所有零时均需计算(默认值),+1在事件函数增加时等于零,-1在事件函数减少时等于零等状况。此外,TE, YE, IE则分别为事件发生之时间,事件发生时之答案及事件函数消失时之指针i。 sol =ode45(odefun,[t0 tf],y0...) sol 结构体输出结果 应用举例 1 求解一阶常微分方程 程序: ) (y+3*t)/t^2; %定义函数 tspan=[1 4]; %求解区间 y0=-2; %初值 [t,y]=ode45(odefun,tspan,y0); plot(t,y) %作图 title('t^2y''=y+3t,y(1)=-2,1

ODE45的意义

matlab ode45 解微分方程 在用odesolver(ode45, ode15s, …)来解微分方程的时候,最基本的用法是: [t, y] = odesolver(odefun, tspan, y0); 这里的odefun是待求的微分方程。那么odefun中一般会含有多个系统参数,通常要通过改变参数来观察系统动态的变化。那么如何在调用odesolver的时候传递参数呢? 以前,我都是用全局变量的写法,将参数在主函数和子函数中分别都定义为global,这样做有一个弱点:针对系统不同,参数的表达与数量有变化的时候,程序通常要做变化,通用性不强。那么最好是在调用的时候进行传递,方法如下: 实际上很简单,就是将一切其他的参数都写在括号中就可以了!但是要注意的是:odesolver的第四个参数一定是options,也就是对微分方程添加补充功能的参数(类型为structure,要用odeset来定义),那么其他系统参数就只能从第五个参数写起。也就是说,第四个参数不可以为空,一定要定义某种option加进去,或者用使用空白矩阵(placeholder)。这样调用的时候格式就是: [t, y] = odesolver(odefun, tspan, y0, options, parameter1, parameter2); 或者 [t, y] = odesolver(odefun, tspan, y0, [], parameter1, parameter2); 然后定义微分方程的时候也要有参数的地方: function dydt = odefun(t, y, parameter1, parameter2) dydt = [ eqn-1; eqn-2; …]; 就OK了。 另一种用法: [T,Y] = ode45(@(t,y) rigid(t,y,Lambda,Lami,Cs,ionization,Ed),[0 100],[PHI_0,E_0,M_0,Gma_0],options); Lambda,Lami,Cs,ionization,Ed是参数之前有声明t y是变量 ,[PHI_0,E_0,M_0,Gma_0],是初始值 -------------------------------------------------- function dy = rigid(t,y,Lambda,Lami,Cs,ionization,Ed) dy = zeros(4,1); % a column vector dy(1) = y(2); dy(2) = exp(y(1))-y(3)/y(4); dy(3)=Lambda*ionization/Cs*exp(y(1)); dy(4) = -y(4)*Lambda/Lami-Lambda*ionization/Cs-y(2)/y(4)-Ed/y(4); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [t,H]=ode45('solitiontry1',tspan,h0,[],m1,epsinon) —————————————————————————————— function solfi=solitiontry1(t,H,flag,m1,epsinon) %m1=1.15; y=(1-epsinon)*(1-exp(H))+epsinon*m1^2*(1-sqrt(1+2*H*m1^-2))+m1^2*(1-sqrt(1-2*H*m1^-2)); solfi=-sqrt(-2*y); ;;注意前面两个函数之间的区别,第二个多了一股flag参数。应该是针对options为空的那个参数的,但是在这里,如果options不为空的话,还不知道有什么区别。

matlab课后知识题目解析第四章

第4章数值运算 习题 4 及解答 1 根据题给的模拟实际测量数据的一组t和)(t y试用数值差分diff 或数值梯度gradient指令计算)(t y',然后把)(t y和)(t y'曲线绘制在同一张图上,观察数值求导的后果。(模拟数据从prob_data401.mat获得) 〖目的〗 ●强调:要非常慎用数值导数计算。 ●练习mat数据文件中数据的获取。 ●实验数据求导的后果 ●把两条曲线绘制在同一图上的一种方法。 〖解答〗 (1)从数据文件获得数据的指令 假如prob_data401.mat文件在当前目录或搜索路径上 clear load prob_data401.mat (2)用diff求导的指令 dt=t(2)-t(1); yc=diff(y)/dt; %注意yc的长度将比y短1 plot(t,y,'b',t(2:end),yc,'r') grid on

(3)用gradent 求导的指令(图形与上相似) dt=t(2)-t(1); yc=gradient(y)/dt; plot(t,y,'b',t,yc,'r') grid on 〖说明〗 ● 不到万不得已,不要进行数值求导。 ● 假若一定要计算数值导数,自变量增量dt 要取得比原有数据相对误差高1、2个量级 以上。 ● 求导会使数据中原有的噪声放大。 2 采用数值计算方法,画出dt t t x y x ? =0 sin )(在]10 ,0[区间曲线,并计算)5.4(y 。 〖提示〗 ● 指定区间内的积分函数可用cumtrapz 指令给出。 ● )5.4(y 在计算要求不太高的地方可用find 指令算得。 〖目的〗 ● 指定区间内的积分函数的数值计算法和cumtrapz 指令。 ● find 指令的应用。

Matlab解微分方程(ODE+PDE)

常微分方程: 1 ODE解算器简介(ode**) 2 微分方程转换 3 刚性/非刚性问题(Stiff/Nonstiff) 4 隐式微分方程(IDE) 5 微分代数方程(DAE) 6 延迟微分方程(DDE) 7 边值问题(BVP) 偏微分方程(PDEs)Matlab解法 偏微分方程: 1 一般偏微分方程组(PDEs)的命令行求解 2 特殊偏微分方程(PDEs)的PDEtool求解 3 陆君安《偏微分方程的MATLAB解法 先来认识下常微分方程(ODE)初值问题解算器(solver) [T,Y,TE,YE,IE] = odesolver(odefun,tspan,y0,options) sxint = deval(sol,xint) Matlab中提供了以下解算器: 输入参数: odefun:微分方程的Matlab语言描述函数,必须是函数句柄或者字符串,必须写成Matlab

规范格式(也就是一阶显示微分方程组),这个具体在后面讲解 tspan=[t0 tf]或者[t0,t1,…tf]:微分变量的范围,两者都是根据t0和tf的值自动选择步长,只是前者返回所有计算点的微分值,而后者只返回指定的点的微分值,一定要注意对于后者tspan必须严格单调,还有就是两者数据存储时使用的内存不同(明显前者多),其它没有任何本质的区别 y0=[y(0),y’(0),y’’(0)…]:微分方程初值,依次输入所有状态变量的初值,什么是状态变量在后面有介绍 options:微分优化参数,是一个结构体,使用odeset可以设置具体参数,详细内容查看帮助 输出参数: T:时间列向量,也就是ode**计算微分方程的值的点 Y:二维数组,第i列表示第i个状态变量的值,行数与T一致 在求解ODE时,我们还会用到deval()函数,deval的作用就是通过结构体solution计算t 对应x值,和polyval之类的很相似! 参数格式如下: sol:就是上次调用ode**函数得道的结构体解 xint:需要计算的点,可以是标量或者向量,但是必须在tspan范围内 该函数的好处就是如果我想知道t=t0时的y值,不需要重新使用ode计算,而直接使用上次计算的得道solution就可以 [教程] 微分方程转换为一阶显示微分方程组方法 好,上面我们把Matlab中的常微分方程(ODE)的解算器讲解的差不多了,下面我们就具体开始介绍如何使用上面的知识吧! 现实总是残酷的,要得到就必须先付出,不可能所有的ODE一拿来就可以直接使用,因此,在使用ODE解算器之前,我们需要做的第一步,也是最重要的一步,借助状态变量将微分

如何使用ODE45

如何使用ODE45 在MATLAB 中ode23,ode45,ode113,ode15s,ode23s,ode23t,ode23tb 等函数都是用来解决常微分方程的初值问题。根据MATLAB 的帮助文档,应优先尝试使用ODE45求解器。 之一。 相关参数介绍如下:参数名称 参数说明odefun 用于存放待求解的方程的m 文件名,方程必须用y’=f(t,y)的形式存放tspan 指定自变量范围的向量,通常用[t0tf]指定y0 函数的边界条件,即y0=y(t0),对于方程组,y0也可以是向量options 设置求解的相关选项,可以使用odeset 函数创建选项 下面看一个简单的例子: 求解方程:'1,(1)1y y y t ?==在14t ≤≤的解事实上这个微分方程可以采用一般的公式求解,其理论解为(ln 1)y t t =+,下面用ODE45来求解。 可以验证和实际的函数图形是很接近的,方法如下:

蓝色的线条是真实函数的曲线,而红色的点是数值计算的结果,可见两者符合的很好。下面是一个比较复杂一点的方程,所谓的复杂是说用理论方法很难求解的: 求微分方程2 32,(1)2y yt y t y t ′=+++=?在14t ≤≤时的数值解 首先要将方程改写为:22 32y y y t t t t ′= +++ 另外,也可以求微分方程组的问题,例如Matlab 帮助文档中提供的一个例子:

求方程组'123 '213 '3220.51y y y y y y y y y ==?=?在满足初值条件123(0)0,(0)1,(0)1y y y ===时的数值解 对于二阶微分方程,基本原理是一样的,但是M 文件却有很大的不同。 二阶常微分方程的一般形式为: 0001 ''()'()(),(),'()y p t y q t y g t y t y y t y ++===下面的一个例子将做出说明。

Matlab ode函数 微分方程的数值解

ode45 百科名片 ode45,常微分方程的数值求解。MA TLAB提供了求常微分方程数值解的函数。当难以求得微分方程的解析解时,可以求其数值解,Matlab中求微分方程数值解的函数有五个:ode45,ode23,ode113,ode15s,ode23s。 目录 概述 语法 示例 展开 编辑本段 概述 ode是Matlab专门用于解微分方程的功能函数,他有ode23,ode45,ode23s等等,采用的是Runge-Kutta算法。ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)3。解决的是Nonstiff(非刚性)的常微分方程.是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,换用ode23来解. 编辑本段 语法 [T,Y] = ode45(odefun,tspan,y0) [T,Y] = ode45(odefun,tspan,y0,options) [T,Y,TE,YE,IE] = ode45(odefun,tspan,y0,options) sol = ode45(odefun,[t0tf],y0...) [T,Y] = ode45(odefun,tspan,y0) odefun 是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名 tspan 是区间[t0 tf] 或者一系列散点[t0,t1,...,tf] y0 是初始值向量《Simulink与信号处理》 T 返回列向量的时间点 Y返回对应T的求解列向量 [T,Y] = ode45(odefun,tspan,y0,options) options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等 [T,Y,TE,YE,IE] =ode45(odefun,tspan,y0,options) 在设置了事件参数后的对应输出 TE 事件发生时间 YE 事件解决时间 IE The index i of the event functionthat vanishes. sol =ode45(odefun,[t0 tf],y0...) sol 结构体输出结果 编辑本段 示例

ode45求解多自由度动力学方程实例

Ode45函数调用形式如下: [T,Y]=ode45(odefun,tspan,y0) 相关参数介绍如下: 例:若一三自由度多体动力学系统方程如下: 1121221231233232323 1.510050 2.0sin(3.754t) 2 1.5 3 1.55010050 2.0cos(2.2t)2 1.5350100 1.0sin(2.8t) x x x x x x x x x x x x x x x x x +-+-=-+--+-=-++-+= 初始条件: 1020301020301 1x x x x x x ====== 由于方程必须用y’=f(t ,y)的形式存放,因此需要对方程组进行降阶处理。 令11 3253214263y x y x y x y x y x y x ====== 则方程组可化为: 12 2241334 424613556 646350.5*(3 1.510050 2.0sin(3.754t))0.5*(1.53 1.55010050 2.0cos(2.2t)) 0.5*( 1.5350100 1.0sin(2.8t))y y y y y y y y y y y y y y y y y y y y y y y ==-+-++==-++-+-==--+-+

因此建立M函数文件来定义此方程组如下: function dy=func(t,y) dy=zeros(6,1); dy(1)=y(2); dy(2)=0.5*(-3*y(2)+1.5*y(4)-100*y(1)+50*y(3)+2.0*sin(3.754*t)); dy(3)=y(4); dy(4)=0.5*(1.5*y(2)-3*y(4)+1.5*y(6)+50*y(1)-100*y(3)+50*y(5)-2.0*cos(2.2*t)); dy(5)=y(6); dy(6)=0.5*(-1.5*y(4)-3*y(6)+50*y(3)-100*y(5)+1.0*sin(2.8*t)); end 在matlab命令窗口里输入一下命令: y0=[1 1 1 1 1 1]; tspan=[0 30]; [t,y]=ode45(@func,tspan,y0); figure(1) plot(t,y(:,1),t,y(:,3),t,y(:,5)); legend('x1','x2','x3'); xlabel('时间(s)','FontSize',10); ylabel('振动位移曲线','FontSize',10); figure(2) plot(t,y(:,2),t,y(:,4),t,y(:,6)); legend('v1','v2','v3'); xlabel('时间(s)','FontSize',10); ylabel(‘振动速度曲线’,’FontSize’,10);

Matlab中ode函数调用

函数功能编辑本段回目录 ode就是专门用于解微分方程的功能函数,她有ode23,ode45,ode23s等等,采用的就是Runge-Kutta算法。ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)3。解决的就是Nonstiff(非刚性)的常微分方程、就是解决数值解问题的首选方法,若长时间没结果,应该就就是刚性的,换用ode23来解、 使用方法编辑本段回目录 [T,Y] = ode45(odefun,tspan,y0) odefun 就是函数句柄,可以就是函数文件名,匿名函数句柄或内联函数名 tspan 就是区间[t0 tf] 或者一系列散点[t0,t1,、、、,tf] y0 就是初始值向量 T 返回列向量的时间点 Y 返回对应T的求解列向量 [T,Y] = ode45(odefun,tspan,y0,options) options 就是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等 [T,Y,TE,YE,IE] =ode45(odefun,tspan,y0,options) 在设置了事件参数后的对应输出 TE 事件发生时间 YE 事件解决时间 IE 事件消失时间 sol =ode45(odefun,[t0 tf],y0、、、) sol 结构体输出结果 应用举例编辑本段回目录 1 求解一阶常微分方程 程序:

一阶常微分方程 odefun=@(t,y) (y+3*t)/t^2; %定义函数 tspan=[1 4]; %求解区间 y0=-2; %初值 [t,y]=ode45(odefun,tspan,y0); plot(t,y) %作图 title('t^2y''=y+3t,y(1)=-2,1

ODE45函数的使用——翻译

在Matlab 中使用ode45简介 Matlab 中常微分方程常用的函数是ODE45,这个函数能够利用--龙哥库塔法--有效求解带时间变量步长的计算。Ode45用于求解如下的一般问题: )(()00,,x t x x t f dt dx ==(1) 其中,时间t 是独立变量,x 为时间相关矢量,)(x t f ,是时间t 和x 的函数。当(1)右边的)(x t f ,是固定的,且给定x 的初始值,那么问题的解是唯一的。 在ME175中,解法是不完整的,但是只要你解决了问题,就可以获得ODE 代表的系统运动趋势。这有利于得到一个直观的印象,看起来很复杂的常微分方程,代表的质点运动轨迹确实简单明了的。以下简要解释如何得到运动轨迹: 第一步: 对给定的ODE 方程进行降阶处理,得到一系列一阶方程 这就是你要做的第一步,在一张草稿纸上处理。例如,给定ODE 方程如下: 1,3,5002-===-+? ? ??y y y e y y m y (2) 对本问题,矢量x 有两个组成分量:y 和? y ,或 ()()?==y x y x 21(3) 且 ()() ()()() ()()()()()() 211251 221x e x m dt x d x dt x d x +-==(4) 其中,用(3)中的式子代表了y ,?y ,? ?y ,于是把(2)改写为(4)。 如果求解的问题有更多阶数更多变量呢?例如,我们除了有上面的方程(2),同时还有以下的方程: ().1,0,sin 002233===-+? z z t z dt z d dt z d (5) 那么,我们可以通过构造更大的矢量x 同时求解y ,z : ()()()??? ===z x z x z x 543 (6)

04第4讲 Matlab的数据处理

第4讲Matlab的数据处理 司守奎 烟台市,海军航空工程学院数学教研室 Email:sishoukui@https://www.360docs.net/doc/8b14400744.html, Matlab数据类型有以下几种:数值类型,字符串,日期和时间,结构数组,细胞数组(元胞数组),函数句柄,Java对象,逻辑类型等. 数值类型包括双精度浮点型,单精度浮点型,整型类型. 下面我们简单介绍细胞数组与结构数组,并主要给出数值类型数据的操作. 4.1 细胞数组与结构数组 4.1.1 细胞数组 细胞数组是Matlab中的一类特殊的数组. 在Matlab中,由于有细胞数组这个数据类型,才能把不同类型、不同维数的数据组成为一个数组. 1.细胞数组的创建 细胞数组的创建有两种方法:通过赋值语句或cell函数创建. (1)使用赋值语句创建细胞数组:细胞数组使用花括号“{}”来创建,使用逗号“,”或空格分隔同一行的单元,使用分号“;”来分行. (2)使用cell函数创建空细胞数组. 例4.1 创建细胞数组. clc, clear %以下构造4个细胞数组 A={'x', [2;3;6]; 10, 2*pi} B=cell(2,2) C={{'LiMing','LiHong'},{'0101','0102'}; {'f','m'},{[90,80],[88,80]}} fprintf('显示C{2,2}{1}的元素:'), C{2,2}{1} fprintf('显示C{2,2}{2}的元素:'), C{2,2}{2} fprintf('显示细胞数组C{2,2}所有元素(两个元素)的值:'), C{2,2}{:} fprintf('以下显示细胞数组C的全部元素:\n') celldisp(C) fprintf('细胞数组C的全部元素显示完毕!\n') -144-

MATLAB解ODE

MATLAB 解ODE 分子二班 张雷 1314057 要求: 介绍MATLAB 求解常微分方程初值问题、刚性问题、边值问题,隐式微分方程、延迟微分方程、代数微分方程的功能函数和使用方法,并分别举例说明。含程序和运行结果。 常微分方程(ODE )的定义: 凡含有参数,未知函数和未知函数导数 (或微分) 的方程,称为微分方程,有时简称为方程,未知函数是一元函数的微分方程称作常微分方程,未知数是多元函数的微分方程称作偏微分方程。微分方程中出现的未知函数最高阶导数的阶 数,称为微分方程的阶。定义式如下: 常微分方程的解析解: 有些微分方程可直接通过积分求解。有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解。 一阶常微分方程与高阶微分方程可以互化,已给一个阶方程 设,可将上式化为一阶方程组 所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 常微分方程的数值解: n ) ,,",',()1()(-=n n y y y t f y )1(21,,',-===n n y y y y y y ?????????====-),,,,(''''211 3221n n n n y y y t f y y y y y y y

除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。 我们学过的有向前欧拉公式、向后欧拉公式、龙格-库塔公式、Adams公式等等等等。这其中,包含显格式、隐格式,单步法、多步法。 这些方法如果通过手工计算,费时费力,而且难免出错。使用Matlab进行计算,解决常微分方程问题就显示出优越性。 dsolve()函数 在MATLAB中,由函数dsolve()解决常微分方程(组)的求解问题,其具体格式如下: r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v') 'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是独立变量,默认的独立变量是't'。 函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。 求通解隐式微分方程 求解微分方程 输入语句:y=dsolve('Dy-x^2-y','x') (以字符串形式) 输出结果:y =C2*exp(x) - 2*x - x^2 – 2 边界问题 求解微分方程 输入语句: syms x y; y=dsolve('x*Dy+y-x=0','y(1)=2*exp(1)','x') 输出语句: y =(x^2/2 + 2*exp(1) - 1/2)/x 求微分方程 输入语句: syms x y; y=dsolve('D2y-x=0','Dy(0)=2','y(0)=1','x') 输出语句: y =x^3/6 + 2*x + 1 求解微分方程组 求 输入语句:[y1,y2]=dsolve('Dy1=4-2*y1','Dy2=2*x-y2','x')

matlab中ode45函数编写

function varargout = ode45(ode,tspan,y0,options,varargin) %ODE45 Solve non-stiff differential equations, medium order method. % [TOUT,YOUT] = ODE45(ODEFUN,TSPAN,Y0) with TSPAN = [T0 TFINAL] integrates % the system of differential equations y' = f(t,y) from time T0 to TFINAL % with initial conditions Y0. ODEFUN is a function handle. For a scalar T % and a vector Y, ODEFUN(T,Y) must return a column vector corresponding % to f(t,y). Each row in the solution array YOUT corresponds to a time % returned in the column vector TOUT. To obtain solutions at specific % times T0,T1,...,TFINAL (all increasing or all decreasing), use TSPAN = % [T0 T1 ... TFINAL]. % % [TOUT,YOUT] = ODE45(ODEFUN,TSPAN,Y0,OPTIONS) solves as above with default % integration properties replaced by values in OPTIONS, an argument created % with the ODESET function. See ODESET for details. Commonly used options % are scalar relative error tolerance 'RelTol' (1e-3 by default) and vector % of absolute error tolerances 'AbsTol' (all components 1e-6 by default). % If certain components of the solution must be non-negative, use % ODESET to set the 'NonNegative' property to the indices of these % components. % % ODE45 can solve problems M(t,y)*y' = f(t,y) with mass matrix M that is % nonsingular. Use ODESET to set the 'Mass' property to a function handle % MASS if MASS(T,Y) returns the value of the mass matrix. If the mass matrix % is constant, the matrix can be used as the value of the 'Mass' option. If % the mass matrix does not depend on the state variable Y and the function % MASS is to be called with one input argument T, set 'MStateDependence' to % 'none'. ODE15S and ODE23T can solve problems with singular mass matrices. % % [TOUT,YOUT,TE,YE,IE] = ODE45(ODEFUN,TSPAN,Y0,OPTIONS) with the 'Events' % property in OPTIONS set to a function handle EVENTS, solves as above % while also finding where functions of (T,Y), called event functions, % are zero. For each function you specify whether the integration is % to terminate at a zero and whether the direction of the zero crossing % matters. These are the three column vectors returned by EVENTS: % [VALUE,ISTERMINAL,DIRECTION] = EVENTS(T,Y). For the I-th event function: % VALUE(I) is the value of the function, ISTERMINAL(I)=1 if the integration % is to terminate at a zero of this event function and 0 otherwise. % DIRECTION(I)=0 if all zeros are to be computed (the default), +1 if only % zeros where the event function is increasing, and -1 if only zeros where % the event function is decreasing. Output TE is a column vector of times % at which events occur. Rows of YE are the corresponding solutions, and % indices in vector IE specify which event occurred. % % SOL = ODE45(ODEFUN,[T0 TFINAL],Y0...) returns a structure that can be % used with DEVAL to evaluate the solution or its first derivative at % any point between T0 and TFINAL. The steps chosen by ODE45 are returned % in a row vector SOL.x. For each I, the column SOL.y(:,I) contains % the solution at SOL.x(I). If events were detected, SOL.xe is a row vector % of points at which events occurred. Columns of SOL.ye are the corresponding % solutions, and indices in vector SOL.ie specify which event occurred. % % Example

相关文档
最新文档