Vok*_*ram 7 matlab numerical-methods ode
我正在尝试用来ode45解决ODE系统:
[X,Y]= ode45(@sys,[0, T],y0);
Run Code Online (Sandbox Code Playgroud)
哪里,
function dy = sys(t,y)
dy(1) = f_1(y)
dy(2) = f_2(y)
dy(3) = f_3(y)
end
Run Code Online (Sandbox Code Playgroud)
问题是该函数ode45需要y0是初始值[y_1(0), y_2(0), y_3(0)],而在我的系统中,我只有值[y_2(0), y_3(0), y_3(T)]可用.
从数学上讲,这组初始/终端条件应该足以确定系统,但是有什么方法可以用ode45MATLAB中的任何其他函数来处理它?
谢谢!
在深入挖掘Matlab文档后,我认为更优雅的方法是使用该bvp4c功能.bvp4c是一个专门设计用来处理像这样的边界值问题的函数ode**,而不仅仅是初始值问题.事实上,有一整套的其他功能,如deval与bvpinitMatlab中,真正方便使用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
Run Code Online (Sandbox Code Playgroud)
该test函数分别输出3个解决方案点矢量y1,y2并y3分别绘制它们.
以下是Matlab绘制的可变路径:

另外,我发现这个来自WMU的杰克布兰查德教授的视频非常有帮助.