在挖掘了一点 Matlab 文档之后,我认为更优雅的方法是使用该bvp4c
函数。bvp4c
是一个专门设计用于处理这样的边界值问题的函数,而不是ode**
,它实际上仅用于初始值问题。事实上,Matlab 中还有一整套其他函数,例如deval
和bvpinit
,真正方便了bvp4c
. 这是Matlab 文档的链接。
我将在这里发布一个简短的(也许有点做作)示例:
function [y1, y2, y3] = test(start,T)
solinit = bvpinit(linspace(0,3,10), [1,1,0]);
sol = bvp4c(@odefun,@bvpbc,solinit);
tspan = linspace(start,T,100);
S = deval(sol, tspan);
y1 = S(1,:);
y2 = S(2,:);
y3 = S(3,:);
plot (tspan,y1)
figure
plot (tspan,y2)
figure
plot (tspan,y3)
%% system definition & BVCs
function dydx = odefun(t,y)
dydx(1) = y(1) + y(2) + t;
dydx(2) = 2*y(1) + y(2);
dydx(3) = 3 * y(1) - y(2);
end
function res = bvpbc(y0,yT)
res= [y0(3) yT(2) yT(3)];
end
end
该test
函数分别输出 和 的 3 个解点向量y1
,y2
并y3
绘制它们。
以下是 Matlab 绘制的变量路径:
此外,我发现WMU的 Jake Blanchard 教授的这段视频非常有帮助。