初值问题
范德波德莫是界说范德波尔方程的函数。
type vanderpoldemo
按“Enter”键。
如图1所示。
方程被写当作一个二阶一阶赋格。对于参数Mu的分歧值,对它们进行计较。为了加速积分速度,我们按照参数μ的值来选择合适的求解器。
对于μ=1,肆意一个MATLAB的ODE解算器都能有用地求解范德波尔方程。下面利用的ODE45求解器就是这样一个例子。方程在[0,20]域内求解。
tspan = [0, 20];
y0 = [2; 0];
Mu = 1;
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode45(ode, tspan, y0);
% Plot of the solution
plot(t,y(:,1))
xlabel('t')
ylabel('solution y')
title('van der Pol Equation, \mu = 1')
按“Enter”键。
得图2所示。
对于较大的μ量级,问题变得棘手。快速积分需要特别的数值方式。ODe15S、ODe23S、ODe23T和ODe23Tb能有用地解决刚性问题。
这里是一个解决范德波尔方程的μ=1000利用ODe15S。
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')
按“Enter”键。
得图3所示。
边值问题
Bvp4C求解常微分方程边值问题。
示例函数TWOODE有一个微分方程,它被写当作二阶一阶ODEs系统。
type twoode
TWOBC的鸿沟前提。
type twobc
在利用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计较并绘制。
sol = bvp4c(@twoode, @twobc, solinit);
xint = linspace(0, 4, 50);
yint = deval(sol, xint);
plot(xint, yint(1,:),'b');
xlabel('x')
ylabel('solution y')
hold on
按“Enter”键。
得图4所示。
这个特别的边值问题正好有两个解。获得的另一个解是对
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,:),'r');
hold off
按“Enter”键。
得图5所示。
偏微分方程
PDEPE在一个空间变量和时候内求解偏微分方程。
示例PDex1、PDex2、PDex3,PDex4,PDex5形当作了一个关于利用PDEPE的小型教程。浏览这些函数以获取更多示例。
此示例问题利用了函数PDex1Pde、PDex1IC和PDex1BC。
PDex1Pde界说微分方程。
type pdex1pde
PDex1IC设置初始前提。
type pdex1ic
PDex1BC设置鸿沟前提。
type pdex1bc
PDEPE需要x(空间离散化)和t(但愿获得解决方案快照的时候矢量)。我们利用20个节点的网格来解决这个问题,并在5个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');
按“Enter”键。
得图6所示。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!