matlab - 如何使用 ODE45(涉及代数方程)求解这个由 5 个方程组成的系统?
问题描述
我是一名经验丰富的Matlab程序员,但我不知道如何解决这个(看似)简单的问题。我有一个由 5 个方程和 5 个未知数组成的系统:
当不涉及代数方程时,我知道如何使用 ode45 求解 ODE 。在上述系统中,V(速度)和C(加速度)都是常数且已知的。 C 为航天器横向加速度。
这个问题应该解决如下:
- 在 t=0 时,我们知道 Theta(0)、x(0) 和 y(0)。请记住,V 和 C 都是常数且已知的。
- 给定 Theta(0) 和 C/V,我们得到 Theta(t1) 积分第 4 个方程。有了这个新的 Theta 值,我们应该能够计算新的 Vx(t1) 和 Vy(t1),这将为我们提供 x(t1) 和 y(t2) 的新值。
- 重复
使用 Matlab 的 ODE45 解决问题很重要,因为当我添加风、不同的重力和密度、航天器的质量和几何形状(以及惯性等等!)时,它最终会变得非常难以解决。所以我会得到一个由几十个方程组成的系统,它们都将被耦合。如果我知道如何在 Matlab 中解决这个简单的问题,我将了解如何在未来解决更复杂的问题。
我搜索了互联网以寻求帮助,但徒劳无功。非常感激您的帮忙。
解决方案
使用更正后的系统,您只需集成 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])
为初始条件和积分结束使用适当的值。
推荐阅读
- sql - 使用两个表的 BETWEEN 子句在 oracle 中完成查询需要更多时间
- hive - 将参数传递给 HIVE 查询
- material-ui - Material-UI:对话框内的下拉(选择控件)问题
- android - 如果我在为家庭设计的应用程序中使用 Google Analytics 和 Firebase 服务(例如 FCM、Firebase Analytics)会违反 COPPA 政策吗?
- javascript - 在三个 JS 中相交数组为空
- recursion - 通过“for循环”在Maple中定义递归关系
- java - 从 .txt 文件中读取数据并保存为类变量
- mysql - 如何为单列上的不同值获取有限的数据集?
- javascript - 手动选择输入日期到最大值返回未定义
- android - FAB 内的中心图像