0

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

系统

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

这个问题应该解决如下:

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

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

我搜索了互联网以寻求帮助,但徒劳无功。非常感激您的帮忙。

4

2 回答 2

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])

为初始条件和积分结束使用适当的值。

于 2019-02-09T18:19:48.420 回答
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 个等式。现在您有两个具有时间相关 rhs 的 ODE 方程非常简单,可以解析求解。例如,最后一个方程给出 y_6=-y_1/B cos(Bt+y0_4)+y0_6。

更一般地,假设您有一个不受约束的问题。然后,您总是可以对代数方程进行时间微分,并获得 ODE 的耦合系统。

作为最后的评论,我想说,在急于使用 Matlab(或 Python,或 R,或 C++,......)之前,用纸和铅笔来解决问题,看看它是否可以简化总是一件好事,或者像上面的情况,它可以被解决。

于 2019-02-09T14:17:36.403 回答