我是一位经验丰富的 Matlab 程序员,但我不知道如何解决这个(看似)简单的问题。我有一个由5个方程式和5个未知数组成的系统:
当不涉及代数方程时,我知道如何使用ode45求解ODE。在上面的系统中, V (速度)和 C (加速度)都是恒定的并且是已知的。 C是航天器的横向加速度
此问题应按以下方式解决:
使用Matlab的ODE45解决问题非常重要,因为当我添加风,改变重力和密度,航天器的质量和几何形状(以及惯性等!)时,最终将很难解决。因此,我将得到一个包含数十个方程组的系统,所有这些方程组都将耦合在一起。如果我知道如何在Matlab中解决这个简单的问题,我将了解将来如何解决更复杂的问题。
我已经在互联网上寻找一些帮助,但这是徒劳的。非常感谢您的帮助。
答案 0 :(得分:1)
使用校正后的系统,您只有3个状态变量要积分
function dotu = f(t,u)
theta = y(1);
dotu = [ C/V, -V*cos(theta), V*sin(theta) ];
end
您可以直接将其插入到求解器中
[ T,U ] = ode45(f, [t0, tf], [ theta0, x0, y0])
使用适合初始条件和积分结束的值。
答案 1 :(得分:0)
在我看来,您的系统的不确定性在于y_1除了必须为正数外,不受其他方程式的约束。至于系统的其余部分,它实际上是分离的。这是我的处理方式:
1)第一个等式暗示y_1为正。考虑到这一点,如果在第一个方程式中替换y_2和y_3,则将获得恒等式y_1 = y_1。因此,该点y_1可以是时间的任何函数,仅受在t = 0时满足初始条件的约束。在下文中,我将假定它是时间常数。
2)根据该规定,C / y_1是一个任意常数,我们称其为B,由此得出y_4 = Bt + y0_4,y0_4是积分常数。
3)将y_2代入第5个方程,将y_3代入第6个方程。现在您有两个ODE,它们的时间依赖于r.h.s.这些方程非常简单,可以解析地求解。例如,最后一个等式给出y_6 = -y_1 / B cos(Bt + y0_4)+ y0_6。
更一般地说,假设您遇到的问题没有受到太多限制。然后,您总是可以及时微分代数方程组,并获得耦合的ODE系统。
作为最后的评论,我想说,在着急使用Matlab(或Python,R或C ++ ...)之前,用纸和铅笔研究该问题是否总是一件好事。可以简化,或者像上面一样,可以解决。