gpt4 book ai didi

Matlab:是否可以通过混合初始条件和终止条件对 ode 系统进行数值求解?

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:16 25 4
gpt4 key购买 nike

我正在尝试使用 ode45 求解 ODE 系统:

[X,Y]=  ode45(@sys,[0, T],y0);

在哪里,

function dy = sys(t,y)

dy(1) = f_1(y)
dy(2) = f_2(y)
dy(3) = f_3(y)
end

问题是函数 ode45 要求 y0 为初始值 [y_1(0), y_2(0), y_3(0)],而在我的系统中,我只有值 [y_2(0), y_3(0), y_3(T)] 可用。

从数学上讲,这组初始/终止条件应该足以确定系统,但是我可以通过 ode45 或 MATLAB 中的任何其他函数使用它吗?

谢谢!

最佳答案

在深入研究了 Matlab 文档之后,我认为更优雅的方法是使用 bvp4c 函数。 bvp4c 是专为处理此类边界值问题而设计的函数,与 ode** 相反,后者实际上仅适用于初始值问题。事实上,在 Matlab 中有一整套其他函数,例如 devalbvpinit,它们真正促进了 bvp4c 的使用。这是 link to the Matlab documentation .

我将在这里发布一个简短的(可能有点做作的)示例:

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函数分别输出y1y2y3的3个解点向量,还有绘制它们。

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

另外,我找到了this video by professor Jake Blanchard来自 WMU 的帮助非常大。

关于Matlab:是否可以通过混合初始条件和终止条件对 ode 系统进行数值求解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17101252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com