matlab 解方程组_一文读懂MATLAB微分方程
此教程说明如何使用 MATLAB 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程:
初始值问题
边界值问题
时滞微分方程
偏微分方程
初始值问题
vanderpoldemo
是用于定义 van der Pol 方程的函数
type vanderpoldemo
function dydt = vanderpoldemo(t,y,Mu)dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)];
该方程写作包含两个一阶常微分方程 (ODE) 的方程组。将针对参数 μ 的不同值计算这些方程。为了实现更快的积分,您应该根据 μ 的值选择合适的求解器。
当 μ=1 时,任何 MATLAB ODE 求解器都能有效地求解 van der Pol 方程。ode45
求解器就是其中之一。该方程在域 [0,20] 中求解,初始条件为 y(0)=2 和 dydtt=0=0。
tspan = [0 20];y0 = [2; 0];Mu = 1;ode = @(t,y) vanderpoldemo(t,y,Mu);[t,y] = ode45(ode, tspan, y0);% Plot solutionplot(t,y(:,1))xlabel('t')ylabel('solution y')title('van der Pol Equation, \mu = 1')
对于较大的 μ,问题将变为刚性。此标签表示拒绝使用普通方法计算的问题。这种情况下,要实现快速积分,需要使用特殊的数值方法。ode15s
、ode23s
、ode23t
和 ode23tb
函数可有效地求解刚性问题。
当 μ=1000 时,van der Pol 方程的求解使用 ode15s
,初始条件相同。您需要将时间范围大幅度延长到 [0,3000] 才能看到解的周期性变化。
tspan = [0, 3000];y0 = [2; 0];Mu = 1000;ode = @(t,y) vanderpoldemo(t,y,Mu);[t,y] = ode15s(ode, tspan, y0);plot(t,y(:,1))title('van der Pol Equation, \mu = 1000')axis([0 3000 -3 3])xlabel('t')ylabel('solution y')
边界值问题
bvp4c
和 bvp5c
可以求解常微分方程的边界值问题。
示例函数 twoode
将一个微分方程写作包含两个一阶 ODE 的方程组。此微分方程为
type twoode
function dydx = twoode(x,y)%TWOODE Evaluate the differential equations for TWOBVP.dydx = [ y(2); -abs(y(1)) ];
函数 twobc
求解该问题的边界条件为:y(0)=0 和 y(4)=−2。
type twobc
function res = twobc(ya,yb)res = [ ya(1); yb(1) + 2 ];
在调用 bvp4c
之前,您必须为要在网格中表示的解提供一个猜想值。然后,求解器就像对解进行平滑处理一样修改网格。
bvpinit
函数以您可以传递给求解器 bvp4c
的形式设定初始猜想值。对于 [0 1 2 3 4]
的网格以及 y(x)=1 和 y'(x)=0 的常量猜想值,对 bvpinit
的调用为:
solinit = bvpinit([0 1 2 3 4],[1; 0]);
利用这个初始猜想值,您可以使用 bvp4c
对该问题求解。使用 deval
计算 bvp4c
在某些点返回的解,然后绘制结果值。
sol = bvp4c(@twoode, @twobc, solinit);xint = linspace(0, 4, 50);yint = deval(sol, xint);plot(xint, yint(1,:));xlabel('x')ylabel('solution y')hold on
此特定的边界值问题实际上有两种解。通过将初始猜想值更改为 y(x)=−1 和 y'(x)=0,可以求出另一个解。
solinit = bvpinit([0 1 2 3 4],[-1; 0]);sol = bvp4c(@twoode,@twobc,solinit);xint = linspace(0,4,50);yint = deval(sol,xint);plot(xint,yint(1,:));legend('Solution 1','Solution 2')hold off
时滞微分方程
dde23
、ddesd
和 ddensd
可以求解具有各种时滞的时滞微分方程。示例 ddex1
、ddex2
、ddex3
、ddex4
和 ddex5
构成了这些求解器的迷你使用教程。
ddex1
示例说明如何求解微分方程组
y′1(t)=y1(t−1)y′2(t)=y1(t−1)+y2(t−0.2)y′3(t)=y2(t).
您可以使用匿名函数表示这些方程
ddex1fun = @(t,y,Z) [Z(1,1); Z(1,1)+Z(2,2); y(2)];
问题的历史解(t≤0 时)固定不变:
y1(t)=1y2(t)=1y3(t)=1.
您可以将历史解表示为由 1 组成的向量。
ddex1hist = ones(3,1);
采用二元素向量表示方程组中的时滞。
lags = [1 0.2];
将函数、时滞、历史解和积分区间 [0,5] 作为输入传递给求解器。求解器在整个积分区间生成适合绘图的连续解。
sol = dde23(ddex1fun, lags, ddex1hist, [0 5]);plot(sol.x,sol.y);title({'An example of Wille and Baker', 'DDE with Constant Delays'});xlabel('time t');ylabel('solution y');legend('y_1','y_2','y_3','Location','NorthWest');
偏微分方程
pdepe
使用一个空间变量和时间对偏微分方程求解。示例 pdex1
、pdex2
、pdex3
、pdex4
和 pdex5
构成了 pdepe
的迷你使用教程。
此示例问题使用函数 pdex1pde
、pdex1ic
和 pdex1bc
。
pdex1pde
定义微分方程
type pdex1pde
function [c,f,s] = pdex1pde(x,t,u,DuDx)%PDEX1PDE Evaluate the differential equations components for the PDEX1 problem.c = pi^2;f = DuDx;s = 0;
pdex1ic
设置初始条件
type pdex1ic
function u0 = pdex1ic(x)%PDEX1IC Evaluate the initial conditions for the problem coded in PDEX1.u0 = sin(pi*x);
pdex1bc
设置边界条件
u(0,t)=0,
πe−t+∂∂xu(1,t)=0.
type pdex1bc
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)%PDEX1BC Evaluate the boundary conditions for the problem coded in PDEX1.pl = ul;ql = 0;pr = pi * exp(-t);qr = 1;
pdepe
需要提供空间离散 x
和时间向量 t
(您要获取解快照的时间点)。使用包含 20 个节点的网格求解此问题,并请求五个 t
值的解。提取解的第一个分量并绘图。
x = linspace(0,1,20);t = [0 0.5 1 1.5 2];sol = pdepe(0,@pdex1pde,@pdex1ic,@pdex1bc,x,t);u1 = sol(:,:,1);surf(x,t,u1);xlabel('x');ylabel('t');zlabel('u');
关注公众号:MATLAB基于模型的设计 (ID:xaxymaker) ,每天推送MATLAB学习最常见的问题,每天进步一点点,业精于勤荒于嬉。
可保存后扫码关注哦!
matlab 解方程组_一文读懂MATLAB微分方程相关推荐
- stata 求输出相关系数矩阵命令_一文读懂结果输出命令大全(上)
目录 描述统计量 help tabstat //Stata 官方命令 描述统计量组间均值差异检验 help ttest help ttable2 help estout 相关分析命令 help p ...
- psm倾向得分匹配法举例_一文读懂倾向得分匹配法(PSM)举例及stata实现(一)
原标题:一文读懂倾向得分匹配法(PSM)举例及stata实现(一) 一.倾向匹配得分应用之培训对工资的效应 政策背景:国家支持工作示范项目( National Supported Work,NSW ) ...
- stata 将数据集变量名称导出_一文读懂空间计量经济学及stata操作
在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量命令之spregress的使用. 一. ...
- matlab运行stata命令,一文读懂108个常用stata命令
原标题:一文读懂108个常用stata命令 本文由计量经济学服务中心编辑整理,转载请注明出处.下面命令按照重要程度以及相关分析方法步骤等依次列出. Some useful Stata commands ...
- java中date类型如何赋值_一文读懂java中的Reference和引用类型
简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...
- python输入什么就输出什么_一文读懂Python的输入和输出
本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...
- gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景
前文我们大致了解陀螺仪的来历,原理和种类,那么,它与我们的日常生活有怎样的关系呢? 陀螺仪器最早是用于航海导航,但随着科学技术的发展,它在航空和航天事业中也得到广泛的应用.陀螺仪器不仅可以作为指示仪表 ...
- hdfs读写流程_一文读懂HDFS分布式存储框架分析
一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...
- mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...
最新文章
- python爬取电影和美食数据实战
- IBM发布未来五年五大科技预测
- 第十四周项目二-两个成员的类模版(1)
- ftrace跟踪内核_ftrace、kpatch、systemtap的基本原理、联系和区别
- C 语言编程 — Makefile
- boost::spirit模块实现复杂的日期解析器的测试程序
- docker选择安装位置_如何使用docker 1.13版本更改centos 7中的docker安装目录
- Mac 下查看网络端口占用情况
- python中的数学模块
- json字段 react_react里怎么对获得的json数据进行处理。
- 各种对话框 Dialog
- python中、函数定义可以不包括以下_python函数定义精讲
- RedisTemplate 概述 与 操作 Redis 5 种数据类型
- 新装好SQL2005时SA无法登陆的解决办法
- XamarinEssentials教程应用程序信息AppInfo
- houdini大神自诉:为什么我要放弃maya I
- 电商系统PC商城模块介绍
- 构建数字高程模型的算法——不规则三角网(TIN, Triangulated Irregular Network)
- 什么是贪婪型人格?如何改变贪婪的性格?
- mysql5.7.19winx64安装_mysql5.7.19winx64安装配置方法图文教程(win10)