此教程说明如何使用 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 和 dydtt=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')

对于较大的 μ,问题将变为刚性。此标签表示拒绝使用普通方法计算的问题。这种情况下,要实现快速积分,需要使用特殊的数值方法。ode15sode23sode23t 和 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

时滞微分方程

     dde23ddesd 和 ddensd 可以求解具有各种时滞的时滞微分方程。示例 ddex1ddex2ddex3ddex4 和 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 使用一个空间变量和时间对偏微分方程求解。示例 pdex1pdex2pdex3pdex4 和 pdex5 构成了 pdepe 的迷你使用教程。

此示例问题使用函数 pdex1pdepdex1ic 和 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微分方程相关推荐

  1. stata 求输出相关系数矩阵命令_一文读懂结果输出命令大全(上)

    目录 描述统计量 help tabstat   //Stata 官方命令 描述统计量组间均值差异检验 help ttest help ttable2 help estout 相关分析命令 help p ...

  2. psm倾向得分匹配法举例_一文读懂倾向得分匹配法(PSM)举例及stata实现(一)

    原标题:一文读懂倾向得分匹配法(PSM)举例及stata实现(一) 一.倾向匹配得分应用之培训对工资的效应 政策背景:国家支持工作示范项目( National Supported Work,NSW ) ...

  3. stata 将数据集变量名称导出_一文读懂空间计量经济学及stata操作

    在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量命令之spregress的使用. 一. ...

  4. matlab运行stata命令,一文读懂108个常用stata命令

    原标题:一文读懂108个常用stata命令 本文由计量经济学服务中心编辑整理,转载请注明出处.下面命令按照重要程度以及相关分析方法步骤等依次列出. Some useful Stata commands ...

  5. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  6. python输入什么就输出什么_一文读懂Python的输入和输出

    本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...

  7. gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景

    前文我们大致了解陀螺仪的来历,原理和种类,那么,它与我们的日常生活有怎样的关系呢? 陀螺仪器最早是用于航海导航,但随着科学技术的发展,它在航空和航天事业中也得到广泛的应用.陀螺仪器不仅可以作为指示仪表 ...

  8. hdfs读写流程_一文读懂HDFS分布式存储框架分析

    一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...

  9. mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...

最新文章

  1. python爬取电影和美食数据实战
  2. IBM发布未来五年五大科技预测
  3. 第十四周项目二-两个成员的类模版(1)
  4. ftrace跟踪内核_ftrace、kpatch、systemtap的基本原理、联系和区别
  5. C 语言编程 — Makefile
  6. boost::spirit模块实现复杂的日期解析器的测试程序
  7. docker选择安装位置_如何使用docker 1.13版本更改centos 7中的docker安装目录
  8. Mac 下查看网络端口占用情况
  9. python中的数学模块
  10. json字段 react_react里怎么对获得的json数据进行处理。
  11. 各种对话框 Dialog
  12. python中、函数定义可以不包括以下_python函数定义精讲
  13. RedisTemplate 概述 与 操作 Redis 5 种数据类型
  14. 新装好SQL2005时SA无法登陆的解决办法
  15. XamarinEssentials教程应用程序信息AppInfo
  16. houdini大神自诉:为什么我要放弃maya I
  17. 电商系统PC商城模块介绍
  18. 构建数字高程模型的算法——不规则三角网(TIN, Triangulated Irregular Network)
  19. 什么是贪婪型人格?如何改变贪婪的性格?
  20. mysql5.7.19winx64安装_mysql5.7.19winx64安装配置方法图文教程(win10)

热门文章

  1. caffe-ssd编译、训练、测试全过程(最后有彩蛋)
  2. FPGA基础之锁存器与触发器的设计
  3. proc文件系统概述
  4. mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)
  5. 项目实战4—HAProxy实现高级负载均衡实战和ACL控制
  6. Workshop | 超高效的设计方法你GET了吗?Design Sprint设计冲刺工作坊
  7. 亚信安全火力全开猎捕“坏兔子”,全歼详解
  8. Centos7单用户模式修改root密码
  9. 企业信息管理- 近期功能改善(3)
  10. numpy中reshape,multiply函数