文档

微分方程

这个例子展示了如何用MATLAB来建立和求解三种不同类型的微分方程。MATLAB提供了几种数值算法来解决各种各样的微分方程。

初值问题

VANDERPOLDEMO是一个定义范德波尔方程的函数。

类型vanderpoldemo
函数dydt = vanderpoldemo(t,y,Mu) % vanderpoldemo定义ODEDEMO的范德波尔方程。% Copyright 1984-2014 The MathWorks, Inc. dydt = [y(2);μ* (1 y (1) ^ 2) * y (2) - y (1)];

这个方程被写成两个一阶ode的系统。这些是对参数Mu的不同值进行评估的。为了加快积分速度,我们根据参数Mu的取值选择合适的求解器。

对于Mu = 1,任何MATLAB ODE求解器都可以有效地求解范德堡尔方程。下面使用的ODE45求解器就是这样一个例子。方程在定义域[0,20]内求解。

Tspan = [0,20];y0 = [2;0);μ= 1;ode = @(t,y) vanderpoldemo(t,y,Mu);[t,y] = ode45(ode, tspan, y0);%图中的解情节(t, y(: 1))包含(“t”) ylabel (“解决方案y”)标题('范德波尔方程,\mu = 1'

对于较大的Mu值,问题就变得棘手了。快速积分需要特殊的数值方法。ODE15S、ODE23S、ODE23T和ODE23TB能有效地解决刚性问题。

这是使用ODE15S对Mu = 1000的范德堡尔方程的一个解。

Tspan = [0,3000];y0 = [2;0);μ= 1000;ode = @(t,y) vanderpoldemo(t,y,Mu);[t,y] = ode15s(ode, tspan, y0);情节(t y(: 1)标题('范德波尔方程,\mu = 1000')轴([0 3000 -3 3])xlabel(“t”) ylabel (“解决方案y”

边值问题

BVP4C解决常微分方程边值问题。

例函数TWOODE有一个微分方程,写成两个一阶ode的系统。

类型twoode
求TWOBVP的微分方程。参见TWOBC, TWOBVP。% Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. dydx = [y(2);abs (y (1)));

TWOBC具有TWOODE的边界条件。

类型twobc
函数res = twobc(ya,yb) % twobc计算TWOBVP的边界条件中的残差。参见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在点xint上评估溶液溶胶(下图)并绘制。

Sol = bvp4c(@twoode, @twobc, solinit);Xint = linspace(0, 4, 50);Yint = deval(sol, xint);情节(xint yint (1:)“b”);包含(“x”) ylabel (“解决方案y”)举行

这个特殊的边值问题有两个解。万博 尤文图斯另一个解的初始猜想是

Y (x) = -1 Y '(x) = 0

和以前一样。

Solinit = bvpinit([0 1 2 3 4],[-1;0]);索尔= bvp4c (@twoode @twobc solinit);xint = linspace(0、4、50);yint =德瓦尔(溶胶,xint);情节(xint yint (1:)“r”);持有

偏微分方程

PDEPE解决了一个空间变量和时间的偏微分方程。

示例PDEX1, PDEX2, PDEX3, PDEX4, PDEX5形成了使用PDEPE的迷你教程。浏览这些函数以获得更多示例。

这个示例问题使用了PDEX1PDE、PDEX1IC和PDEX1BC函数。

PDEX1PDE定义了微分方程。

类型pdex1pde
计算PDEX1问题的微分方程分量。% %参见PDEPE, PDEX1。% Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. c = pi^2;f = DuDx;s = 0;

PDEX1IC设置了初始条件。

类型pdex1ic
计算PDEX1中编码的问题的初始条件。% %参见PDEPE, PDEX1。% Copyright 1984-2014 The MathWorks, Inc. u0 = sin(pi*x);

PDEX1BC设置了边界条件。

类型pdex1bc
计算用PDEX1编码的问题的边界条件。% %参见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个节点组成的网格来解决这个问题,并请求在5个t值处的解。最后,我们提取并绘制解的第一个分量。

x = linspace (0, 1, 20);T = [0 0.5 1 1.5 2];索尔= pdepe (0 @pdex1pde @pdex1ic @pdex1bc x, t);u1 =索尔(:,:1);冲浪(x, t, u1);包含(“x”);ylabel (“t”);zlabel (“u”);

这个话题有用吗?