隐式微分方程求解Matlab
微分方程求解Matlab详解
在matlab求解微分方程有很多中,ode45是最常见的,当然,ode45求解有一定条件,就是需要把高阶微分方程转化为1阶微分方程。即使用降阶法。降阶法原理就是引入中间变量,然后实现降阶。例如:F(t,y,y′,y′′)=0F(t,y,y^{'},y^{''})=0F(t,y,y′,y′′)=0 令x1=yx_1=yx1=y, x2=y′x_2=y^{'}x2=y′,那么就可以将原来的二阶微分方程降阶为两个一阶微分方程。
dx1dt=x2dx2dt=G(t,x1,x2)\begin{matrix} \frac{dx_1}{dt}=x_2 \\ \frac{dx_2}{dt}=G(t,x_1,x_2) \end{matrix} dtdx1=x2dtdx2=G(t,x1,x2)
高阶微分方程组同理!!!
例子
这里以一个简单的例子演示ode45,以及包括之后使用的均为这个例子:
y′−2t=0y^{'}-2t = 0y′−2t=0
并且指定时间区间 [0,5][0,5][0,5]和初始条件 y0=0y_{0} = 0y0=0。
ODE45求解
使用匿名函数的方式
clc;clear all;
tspan = [0 5];
y0 = 0;figure(1)
[t,y] = ode45(@(t,y) 2*t, tspan, y0);
plot(t,y,'-o')
使用.m文件的方式
function dy = Fcn(t,y)%FCN dy=2*t;
end
clc;clear all;
tspan = [0 5];
y0 = 0;figure(2)
[t1,y2] = ode45(@Fcn, tspan, y0);
plot(t1,y2,'-o')
隐式微分方程求解
ODE45使用最困难的一步就是微分方程的降阶,对于一个含有最高阶耦合项的微分方程来说,根本无法手动将其化简为一阶微分方程,例如:
ty′′3+y′y′′+y=0ty^{''3}+y^{'}y^{''}+y = 0ty′′3+y′y′′+y=0
那对于这种该如何求解呢?
方法1-使用solve()求解高阶表达式
以上面的例子为例,将F(t,y,y′)=0F(t,y,y^{'})=0F(t,y,y′)=0看做是y′y^{'}y′的方程,利用solve()函数求解出y′y^{'}y′的表达式。这种方法是省去了手动的降阶,而使用计算机代替我们计算,我将这个封装了一个函数,可以通用,源码和参考在这里;
clc;clear all;
syms dy t y
eq = dy-2*t;dy = solve(eq,dy) matlabFunction(dy,'File','Fcn','Vars',[t,y]);tspan = [0 5];
y0 = 0;figure(1)[t,y] = ode45(@Fcn, tspan, y0);plot(t,y,'-o')
方法2-使用求解高阶变量的数值解,再使用ode45
然而,对于上述的方法,不是所有的微分方程都能算出最高阶的解析解。那么我们就么有办法了吗?观察ode45所传入的函数句柄,例如F(t,y,y′)=0F(t,y,y^{'})=0F(t,y,y′)=0,输入是t,y,输出是y′y^{'}y′,也就是说,我们要通过变量的低阶值和时间t求解变量的最高阶的值,因此,对于任意复杂的F(t,y,y′)=0F(t,y,y^{'})=0F(t,y,y′)=0或者是高阶微分方程组,我们在函数句柄,利用fsolve求解出最高阶的值,将其返回即可。
function dy = Fcn(t,y)
fun = @(dy)dy-2*t;
options=optimset('display','off');
dy = fsolve(fun,0,options) ;
clc;clear all;
tspan = [0 5];
y0 = 0;figure(2)
[t1,y2] = ode45(@Fcn, tspan, y0);
plot(t1,y2,'-o')
方法3-使用ode15i
matlab在后续版本提供了ode15i,其求解思路类似上面方法2。具体使用:
function fcn = Fcn(t,y,dy)
%WEISSINGER Evaluate the residual of the Weissinger implicit ODE
%
% See also ODE15I.
% Jacek Kierzenka and Lawrence F. Shampine
% Copyright 1984-2014 The MathWorks, Inc.fcn = dy - t.*2.0;
clc;clear all;
t0 = 0;
tspan = [t0 5];
y0 = 0;
yp0 =1;% 计算一致的初始条件
% ode15i 求解器需要一致的初始条件,即提供给求解器的初始条件必须满足
% 这个就是需要满足微分方程
[y0,dy0] = decic(@Fcn,t0,y0,1,yp0,0);
[t,y] = ode15i(@Fcn, tspan, y0,dy0);
figure(1)
plot(t,y,'-o')
源码gtihub
GitHub传送门!!!
隐式微分方程求解Matlab相关推荐
- 几类常微分方程的matlab求解方法 | 刚性微分方程、隐式微分方程、微分代数方程
目录 微分方程的转换 一.单个高阶常微分方程 二.高阶常微分方程组 刚性微分方程求解 隐式微分方程求解 微分代数方程求解 微分方程的转换 根据微分方程求解的标准型,要得到微分方程的数值解,应该先将该方 ...
- 2.4 一阶隐式微分方程与参数表示
文章目录 类型一:y=f(x,dydx)y=f(x,\frac{dy}{dx})y=f(x,dxdy) 类型二:x=f(y,dydx)x=f(y,\frac{dy}{dx})x=f(y,dxdy) ...
- 从拉格朗日乘子--约束优化到五元齐次线性方程求解
从拉格朗日乘子--约束优化到五元齐次线性方程求解 引入 问题导入(事情起源) 三层循环 数学神器--Wolfwarm alpha 拉格朗日乘子 五元齐次线性方程 自坑三连--被伤的体无完肤 Win t ...
- 龙格库塔法matlab求解微分方程组,微分方程组的龙格库塔公式求解matlab版.pdf
微分方程组的龙格库塔公式求解matlab版 微分方程组的龙格-库塔公式求解matlab版 南京大学 王寻 1. 一阶常微分方程组 考虑方程组 y'f x,y,z , y x y ...
- 基于人工蜂群算法的线性规划求解matlab程序
基于人工蜂群算法的线性规划求解matlab程序 1 人工蜂群算法概述 2005年D. Karaboga教授仿照蜜蜂集群采蜜生物行为,提出了人工蜂群仿生算法,可以有效解决有关函数优化等相关难题.ABC算 ...
- 视频教程-三课时精通matlab常微分方程求解-Matlab
三课时精通matlab常微分方程求解 图像和算法等领域有多年研究和项目经验:指导发表科技核心期刊经验丰富:多次指导数学建模爱好者参赛. 宋星星 ¥12.00 立即订阅 扫码下载「CSDN程序员学院AP ...
- 微分方程求解 matlab,4MATLAB常微分方程求解.ppt
4MATLAB常微分方程求解 MATLAB微分方程 1 求简单微分方程的解析解 2 求微分方程的数值解 3 建模实例 1 求简单微分方程的解析解 求微分方程(组)的解析解命令: dsolve('方程1 ...
- 基于沙猫群优化算法的线性规划求解matlab程序
基于沙猫群优化算法的线性规划求解matlab程序 1 沙猫群优化算法 沙猫的中文学名叫沙丘猫,俗名沙漠猫,与荒漠猫名字相似,但却是两种不同的猫科动物.沙猫生活在茫茫沙漠里,主要分布在分布于非洲北部,阿 ...
- 微分方程求解matlab冲激信号,用Matlab求冲激响应的几种方法
·实验技术与方法· 用 Matlab 求冲激响应的几种方法 贺富堂,应柏青,张 锋,孙 敏 ( 西安交通大学 电工电子教学实验中心,陕西 西安 710049) 摘 要: 用 Matlab 软件求冲激响 ...
- 数学建模微分方程导弹问题matlab求解,Matlab建模—导弹追踪问题
数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正. Matlab微分求解工具箱使用 求数值解 dsolve('方程1','方程2',-,'方程 ...
最新文章
- Spring Boot注册Servlet三大组件(Servlet, Filter, Listener)
- 杭电1430康托 bfs(java)
- Log4j的layout配置
- 玩够了没,开始奋斗吧?
- DateTime和字符串转换问题
- php如何加密图片,php实现图片加密解密,支持设置密码 (两年后版本!)
- Java生产环境下性能监控与调优详解 第3章 基于JVisualVM的可视化监控
- 第一章:了解SQL_数据库基础
- linux 提取有效源码,MPSOC之4——petalinux提取源码
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_15maven工程servlet实例之导入项目依赖...
- windows自带黑体_win10黑体,windows10里的黑体
- uniapp中引入colorUI
- Oracle或关闭中国研发中心,裁员1600 人
- 最快的 Hexo 博客搭建方法
- 小米3刷android 6.0,安卓6.0版MIUI7曝光:小米3/小米4/小米Note将尝鲜
- Android WebView支持文件下载之调起浏览器下载(Java与Kotlin版)
- 蒙特卡洛方法 matlab 实现
- Flutter 打包iOS包出现 ld: bitcode bundle could not be generated because
- Algorithm - Bubble Sort(Java)
- 逆向微信Mac客户端:微信情话助手初版
热门文章
- 基于图的广度优先搜索策略(耿7.11)
- Exchange会议室邮箱4种常见会议预定场景的介绍和设置
- FedEx v20.0.7654的CData驱动程序
- 易生信:临床基因组学数据分析实战(11月12-14开课)
- 沈阳打铁记录+暑假训练开始分界线
- ccpc2016长春站打铁记(后记)
- 你的知识需要管理PKM
- 第七章产品生命周期管理
- Google SketchUp Cookbook: (Chapter 3) Intersection Edges: Cutting and Trimming
- 【AI视野·今日CV 计算机视觉论文速览 第158期】Mon, 23 Sep 2019