如何使用ODE45(涉及代数方程式)求解由5个方程式组成的系统?

时间:2019-02-09 13:20:30

标签: matlab ode ode45

我是一位经验丰富的 Matlab 程序员,但我不知道如何解决这个(看似)简单的问题。我有一个由5个方程式和5个未知数组成的系统:

system

当不涉及代数方程时,我知道如何使用ode45求解ODE。在上面的系统中, V (速度)和 C (加速度)都是恒定的并且是已知的。 C是航天器的横向加速度

此问题应按以下方式解决:

  1. 在t = 0时,我们知道Theta(0),x(0)和y(0)。请记住,V和C都是常数并且是已知的。
  2. 给定Theta(0)和C / V,我们得到Theta(t1),它集成了第四个方程。有了这个新的Theta值,我们应该能够计算出新的Vx(t1)和Vy(t1),这将为我们提供x(t1)和y(t2)的新值。
  3. 重复

使用Matlab的ODE45解决问题非常重要,因为当我添加风,改变重力和密度,航天器的质量和几何形状(以及惯性等!)时,最终将很难解决。因此,我将得到一个包含数十个方程组的系统,所有这些方程组都将耦合在一起。如果我知道如何在Matlab中解决这个简单的问题,我将了解将来如何解决更复杂的问题。

我已经在互联网上寻找一些帮助,但这是徒劳的。非常感谢您的帮助。

2 个答案:

答案 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 ++ ...)之前,用纸和铅笔研究该问题是否总是一件好事。可以简化,或者像上面一样,可以解决。