matlab使用教程(29)—微分方程实例

        此示例说明如何使用 MATLAB® 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程:

1.初始值问题

        vanderpoldemo 是用于定义 van der Pol 方程的函数
type vanderpoldemo
function dydt = vanderpoldemo(t,y,Mu)
%VANDERPOLDEMO Defines the van der Pol equation for ODEDEMO.
% Copyright 1984-2014 The MathWorks, Inc.
dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)];
        该方程写作包含两个一阶常微分方程 (ODE) 的方程组。将针对参数 μ 的不同值计算这些方程。为了实现更快的积分,您应该根据 μ 的值选择合适的求解器。
tspan = [0 20];
y0 = [2; 0];
Mu = 1;
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode45(ode, tspan, y0);
% Plot solution
plot(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')

2.边界值问题

        bvp4c bvp5c 可以求解常微分方程的边界值问题。示例函数 twoode 将一个微分方程写作包含两个一阶 ODE 的方程组。此微分方程为
type twoode
function dydx = twoode(x,y)
%TWOODE Evaluate the differential equations for TWOBVP.
%
% See also TWOBC, TWOBVP.
% Lawrence F. Shampine and Jacek Kierzenka
% Copyright 1984-2014 The MathWorks, Inc.
dydx = [ y(2); -abs(y(1)) ];
        函数 twobc 求解该问题的边界条件为: y( 0)= 0 y( 4)= − 2
type twobc
function res = twobc(ya,yb)
%TWOBC Evaluate the residual in the boundary conditions for TWOBVP.
%
% See also TWOODE, TWOBVP.
% Lawrence F. Shampine and Jacek Kierzenka
% Copyright 1984-2014 The MathWorks, Inc.
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 = − 1y′ 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

3.时滞微分方程

        dde23 ddesd ddensd 可以求解具有各种时滞的时滞微分方程。示例 ddex1 ddex2 ddex3ddex4 ddex5 构成了这些求解器的迷你使用教程。ddex1 示例说明如何求解微分方程组
        您可以使用匿名函数表示这些方程
ddex1fun = @(t,y,Z) [Z(1,1); Z(1,1)+Z(2,2); y(2)];
        问题的历史解(t ≤ 0 时)固定不变:

        您可以将历史解表示为由 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');

4.偏微分方程

        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.
%
% See also PDEPE, PDEX1.
% Lawrence F. Shampine and Jacek Kierzenka
% Copyright 1984-2014 The MathWorks, Inc.
c = pi^2;
f = DuDx;
s = 0;
        pdex1ic 设置初始条件
u ( x , 0) = sin πx .
type pdex1ic
function u0 = pdex1ic(x)
%PDEX1IC Evaluate the initial conditions for the problem coded in PDEX1.
%
% See also PDEPE, PDEX1.
% Lawrence F. Shampine and Jacek Kierzenka
% Copyright 1984-2014 The MathWorks, Inc.
u0 = sin(pi*x);
        pdex1bc 设置边界条件
type pdex1bc
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
%PDEX1BC Evaluate the boundary conditions for the problem coded in PDEX1.
%
% See also PDEPE, PDEX1.
% Lawrence F. Shampine and Jacek Kierzenka
% Copyright 1984-2014 The MathWorks, Inc.
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');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在不重新安装的情况下将操作系统迁移到新硬盘?

通常情况下,当你的硬盘损坏或文件过多时,电脑会变得缓慢且卡顿。这时,你可能会被建议更换为一块更好的新硬盘。 ​ 在比较HDD和SSD之后,许多用户更愿意选择SSD作为他们的新硬盘,因为SSD比HDD更稳定且运行更安…

双核和双路服务器的区别

服务器术语里,大家经常会听到1U、2U,单路、双路,机架式、塔式及刀片式等常用名词。其中,机架式、塔式及刀片式是 指服务器的外形,U是指服务器的高度,路是指服务器的处理器数量。 部分朋友会问,我…

Android 设置app深色、浅色、跟随系统

Android深色模式适配 我们需要再用户设置时候,记录下来,用户的设置,等app再次启动时候,获取之前设置,重新设置 public static void setThemeMode() {int themeModeType SpUtils.getThemeModeType();if (themeModeTyp…

环境安装:rpm安装jdk上线项目

Tomcat安装 解析域名 购买域名并配置 安装Docker yum 卸载以前装过的docker

Seaborn数据可视化(四)

目录 1.绘制箱线图 2.绘制小提琴图 3.绘制多面板图 4.绘制等高线图 5.绘制热力图 1.绘制箱线图 import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据(例如,使用seaborn自带的数据集) tips sns.load_dataset("t…

算法通关村第十七关——柠檬水找零

贪心,顾名思义,就是挑价值最大的 如果直接挑价值最大的,这样不一定能够达到最优解,因为最终价值多少还要取决于背包容量。 贪心算法解决0-1背包问题的基本思路是:按照物品的单位价值(即价值与重量的比值&…

上海市青少年算法2023年7月月赛(丙组)

T1先行后列 题目描述 从 1 开始的 nm 个整数按照先行后列的规律排列如下: 给定 n 与 m,再给定一个数字 c,请输出 c 所在的行数与列数。 输入格式 第一行:两个整数表示 n 与 m 第二行:一个整数表示 c 输出格式 两个整数:表示 c 所在的行数与列数。 数据范围 1≤n,m≤10000…

[SpringBoot3]远程访问@HttpExchange

六、远程访问HttpExchange[SpringBoot3] 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实…

MIMIC-IV数据提取教程

一、获取MIMIC-IV数据库 MIMIC-IV数据库需要申请权限,具体怎么申请我之前的博客发的有:MIMIC数据库申请流程 以最新的MIMIC-IV 2.2版本为例,首先打开页面拖动到最底端:https://physionet.org/content/mimiciv/2.2/ 直接下载解压下来&#x…

linux下安装Mycat

1 官网下载mycat 官方网站: 上海云业网络科技有限公司http://www.mycat.org.cn/ github地址: MyCATApache GitHubMyCATApache has 34 repositories available. Follow their code on GitHub.https://github.com/MyCATApache 2 Mycat安装 1 把MyCat…

菜鸟教程《Python 3 教程》笔记(13):迭代器与生成器

菜鸟教程《Python 3 教程》笔记(13) 13 迭代器与生成器13.1 迭代器13.1.1 创建一个迭代器13.1.2 StopIteration 13.2 生成器13.3 yield 使用浅析13.3.1 通过 iterable 对象来迭代13.3.2 使用 isgeneratorfunction 判断13.3.3 类的定义和类的实例13.3.4 r…

基于材料生成算法优化的BP神经网络(预测应用) - 附代码

基于材料生成算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于材料生成算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.材料生成优化BP神经网络2.1 BP神经网络参数设置2.2 材料生成算法应用 4.测试结果:5…

时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测

时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测&a…

C++--完全背包问题

1.【模板】完全背包_牛客题霸_牛客网 你有一个背包,最多能容纳的体积是V。 现在有n种物品,每种物品有任意多个,第i种物品的体积为vivi​ ,价值为wiwi​。 (1)求这个背包至多能装多大价值的物品? &#xff0…

机器学习基础12-Pipeline实现自动化流程处理(基于印第安糖尿病Pima 数据集)

有一些标准的流程可以实现对机器学习问题的自动化处理,在 scikitlearn 中通过Pipeline来定义和自动化运行这些流程。本节就将介绍如何通过Pipeline实现自动化流程处理。 如何通过Pipeline来最小化数据缺失。如何构建数据准备和生成模型的Pipeline。如何构建特征选择…

C#调用barTender打印标签示例

使用的电脑需要先安装BarTender 我封装成一个类 using System; using System.Windows.Forms;namespace FT_Tools {public class SysContext{public static BarTender.Application btapp new BarTender.Application();public static BarTender.Format btFormat;public void Q…

200 套基于Java开发的Java毕业设计实战项目(含源码+说明文档)

文章目录 简介前言第一部分第二部分部分截图源码咨询 简介 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 前言 对于java方向的毕业设计题目选题&#xf…

2024河南光伏展,河南郑州太阳能光伏展,郑州光伏产业展览会

2024第四届中国(郑州)太阳能光伏及储能产业展览会   时间:2024年2月26-28日 地点:郑州.中原国际博览中心 在过去的几年中,太阳能光伏及储能技术得到了快速的发展和广泛的应用。为了进一步推动这一产业的发展和进步&…

Densenet模型详解

模型介绍 DenseNet的主要思想是密集连接,它在卷积神经网络(CNN)中引入了密集块(Dense Block),在这些块中,每个层都与前面所有层直接连接。这种设计可以让信息更快速地传播,有助于解…

实力征服每寸版图|昂首资本Anzo Capital狂揽“年度最佳经纪商“和“最佳青年导师”双料大奖

棉兰老岛交易者博览会在Tibungco 的 RTC-KorPhil 职业培训中心多功能厅举办。在本次博览会上,Anzo Capital 昂首资本脱颖而出斩获“2023年度最佳经纪商”,Anzo Capital 官方金融教育专家Joseph Lejarde斩获“最佳青年导师”双料大奖。 棉兰老岛交易者…