Matlab:是否有可能在初始和终端条件的混合下用数字方式解决一个颂歌系统?

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中的任何其他函数来处理它?

谢谢!

Vok*_*ram 6

在深入挖掘Matlab文档后,我认为更优雅的方法是使用该bvp4c功能.bvp4c是一个专门设计用来处理像这样的边界值问题的函数ode**,而不仅仅是初始值问题.事实上,有一整套的其他功能,如devalbvpinitMatlab中,真正方便使用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,y2y3分别绘制它们.

以下是Matlab绘制的可变路径: y1路径 y2路径 y3路径

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