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

这篇具有很好参考价值的文章主要介绍了matlab使用教程(29)—微分方程实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1.初始值问题

        vanderpoldemo 是用于定义 van der Pol 方程的函数
matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言
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) 的方程组。将针对参数 μ 的不同值计算这些方程。为了实现更快的积分,您应该根据 μ 的值选择合适的求解器。
matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言
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')

matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言

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

matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言

2.边界值问题

        bvp4c bvp5c 可以求解常微分方程的边界值问题。示例函数 twoode 将一个微分方程写作包含两个一阶 ODE 的方程组。此微分方程为
matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言
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

matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言

3.时滞微分方程

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

matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言

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

matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言

4.偏微分方程

        pdepe 使用一个空间变量和时间对偏微分方程求解。示例 pdex1 pdex2 pdex3 pdex4 pdex5 构成了 pdepe 的迷你使用教程。此示例问题使用函数 pdex1pde pdex1ic pdex1bc
        pdex1pde 定义微分方程
matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言
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 设置边界条件
matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言
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');

matlab使用教程(29)—微分方程实例,从0开始学Matlab,算法,matlab,开发语言文章来源地址https://www.toymoban.com/news/detail-688207.html

到了这里,关于matlab使用教程(29)—微分方程实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PINN解偏微分方程实例1

       PINN是一种利用神经网络求解偏微分方程的方法,其计算流程图如下图所示,这里以偏微分方程(1)为例。 ∂ u ∂ t + u ∂ u ∂ x = v ∂ 2 u ∂ x 2 begin{align} frac{partial u}{partial t}+u frac{partial u}{partial x}=vfrac{partial^2 u}{partial x^2} end{align} ∂ t ∂ u ​ + u ∂ x ∂ u ​ = v ∂ x

    2024年02月02日
    浏览(33)
  • matlab解微分方程

    f=@(变量) 表达式; x1为2 3 4 5;x2为3 4 5 6的情况下求解函数f的值 用“dsolve” step1: 申明自变量和因变量 syms y(x) step2:编程 得到: step1: 申明自变量和因变量 syms y(x) step2:编程 得到 step1.写函数文件 step2.主函数 相当于定义了一个新向量y,然后列 匿名函数 ,方程的 左边都是一阶

    2024年02月13日
    浏览(79)
  • MATLAB-常微分方程求解

    MATLAB中可以用来求解常微分方程(组)的函数有ode23、 ode23s、 ode23t、 ode23tb 、ode45、ode15s和odel13等,见下表。它们的具体调用方法类似,为了方便后面的描述, 在后面的介绍中将使用solver统一代替它们。 函数的具体调用方法如下。 [T,Y] =solver( odefun, tspan,y0) [T,Y] = solver( odefun,

    2024年02月02日
    浏览(47)
  • PINN解偏微分方程实例2(一维非线性薛定谔方程)

       考虑偏微分方程如下: i h t + 0.5 h x x + ∣ h ∣ 2 h = 0 h ( 0 , x ) = 2 s e c h ( x ) h ( t , − 5 ) = h ( t , 5 ) h x ( t , − 5 ) = h x ( t , 5 ) begin{align} begin{aligned} ih_t + 0.5h_{xx} + |h|^2h = 0 \\\\ h(0,x) = 2 sech(x) \\\\ h(t,-5) = h(t,5) \\\\ h_x(t,-5) = h_x(t,5) end{aligned} end{align} ​ i h t ​ + 0.5 h xx ​ + ∣ h ∣

    2024年02月01日
    浏览(49)
  • matlab解微分方程:方向场

    在微分方程中,常见的形式是: x ′ = f ( x , t ) x\\\'=f(x,t) x ′ = f ( x , t ) 方向场的每一个矢量可以形象地刻画一阶微分方程的解。在方向场中的每个点处,都会出现一条其斜率等于通过该点的微分方程解的矢量。给定一个初值,微分方程对应一条curve曲线,点上的方向矢量和相

    2024年02月13日
    浏览(37)
  • 【Matlab】一、解常微分方程ODE

    ​ 在matlab中,我们可以求解常微分方程的 解析解 ,和 数值解 ,一般使用 dsolve 来求解常微分方程的解析解,使用类似于 ode45 的求解器来求解常微分方程的数值解。 求解解析解 ,例如求解该方程的解析解 d y d x = 3 x 2 + 1 frac{dy}{dx}=3x^2 + 1 d x d y ​ = 3 x 2 + 1 只需要在命令行中

    2024年02月07日
    浏览(45)
  • matlab求解时变系统的Riccati矩阵微分方程

    对于代数Riccati方程的求解网上能找到很多的资源,matlab也有成熟的函数,但是对于时变系统的Riccati矩阵微分方程,能找到的资料还比较少。 可以在网上找到很多资料,如 https://blog.csdn.net/m0_62299908/article/details/127807014 matlab也有相应的一系列函数 lqr、icare等。 对于这些函数不

    2024年02月05日
    浏览(44)
  • 用MATLAB求一阶微分方程(组)数值解

    标准形式要先写成左边是y的导数右边是本身函数或者自变量,然后写成.m文件类似: 如果有多个微分方程,dy=zeros(3,1);% 一定要写成列向量 3、[0,1,1]都是方程(组)的初始值,并且初始值的x=0; 就会得到一系列x,y值; ode45(最常用) **问题类型:**非刚性 **精准度:**中等 ode15s

    2024年02月11日
    浏览(56)
  • 【数学建模\MATLAB】掌握用Matlab求解微分方程问题

    d y d t = a y 2 cfrac{dy}{dt}=ay^2 d t d y ​ = a y 2 结果 d 3 y d t 3 = b y cfrac{d^3y}{dt^3}=by d t 3 d 3 y ​ = b y 结果 x 2 + y + ( x − 2 y ) y ′ = 0 x^2+y+(x-2y)yprime=0 x 2 + y + ( x − 2 y ) y ′ = 0 结果: d 2 y d t 2 = a y , 初 始 条 件 为 y ( 0 ) = 5 , y ′ ( 0 ) = 1 cfrac{d^2y}{dt^2}=ay, text初始条件为y(0)=5,yprime(

    2024年02月03日
    浏览(42)
  • MATLAB求解偏微分方程【PDE和差分法】

    目录 前言  1.用差分法求解 显示差分 其他方程举例 : r是什么 2.PDETOOL 3.pdepe函数 示例:热方程 代码:   在我们处理一些公式时,常常会有偏微分方程出现,所以我今天整理了一下求解偏微分方程的常用方法,希望有所帮助 在1979年复旦大学学者的一篇论文里,谈到了偏微分

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包