代码之家  ›  专栏  ›  技术社区  ›  Jose Lopez Garcia

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

  •  0
  • Jose Lopez Garcia  · 技术社区  · 7 年前

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

    system

    我知道如何使用ODE45解决ODE 不涉及代数方程 . 在上述系统中, V (速度)和 C (加速度)都是 不变的和已知的。 c是航天器的横向加速度。

    这个问题应该解决如下:

    1. 当t=0时,我们知道θ(0),x(0)和y(0)。记住,v和c都是常数,也是已知的。
    2. 给定θ(0)和c/v,我们得到θ(T1)积分第四个方程。有了这个新的θ值,我们应该能够计算出新的vx(T1)和vy(T1),这将为我们提供x(T1)和y(T2)的新值。
    3. 重复

    使用Matlab的ODE45解决这个问题很重要,因为当我添加风、改变重力和密度、航天器质量和几何结构(以及惯性等)时,最终很难解决这个问题。所以我会得到一个由几十个方程组成的系统,这些方程都是耦合的。如果我知道如何在matlab中解决这个简单的问题,我将了解如何在将来解决更复杂的问题。

    我上网是为了寻求帮助,但没用。非常感谢你的帮助。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Lutz Lehmann    7 年前

    对于修正后的系统,你只有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])
    

    为初始条件和集成结束使用适当的值。

        2
  •  0
  •   user3646557    7 年前

    在我看来,你的系统是不确定的,在这个意义上,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个方程式。现在有两个与时间相关的r.h.s.方程足够简单,可以用解析法求解。例如,最后一个方程给出y_6=-y_1/b cos(bt+y0_4)+y0_6。

    更一般地说,假设您遇到了一个未经充分约束的问题。然后,你总是可以在时间上区分代数方程,得到一个耦合的ODE系统。

    作为最后的评论,我会说,在奔向Matlab(或Python,或R,或C++,…)之前,用纸和铅笔解决问题是很好的事情,看看它是否可以简化,或者,如上所述,它是可以解决的。

    推荐文章