【问题标题】:Simulate a 2D point mass moving along y=x^2 in MATLAB在 MATLAB 中模拟沿 y=x^2 移动的二维点质量
【发布时间】:2017-03-08 18:40:58
【问题描述】:

我有一组混合的微分方程和代数方程,我在 MATLAB 中找到了解析解。它涉及沿由y=x^2 约束的二维曲线移动的点质量。

我将如何在 MATLAB 中使用 ode-solver(或其他更容易的方法)来模拟球在曲线上滚动?我可以自己做的动画,我更关心找到每个连续步骤的速度xd yd。这就是我迷路的地方。

这些是我使用拉格朗日乘子推导出的运动方程。因此lambdalambda 是反作用力。我可以计算加速度,xdd ydd,但如果我想正确模拟这个,我还需要状态下的速度,我假设。

% Symbolic functions
syms y x xd yd xdd ydd
syms m g lambda

% Parameters

A = [m 0 -2*x; 0 m 1; -2*x 1 0];
X = [xdd ydd lambda].';
b = [0 -m*g -2*xd^2].';

sol = A\b % these are the states stored in X

【问题讨论】:

  • 如果你知道它的加速度,你可以计算它的速度和位置。 x=dx+dx*dt,dx=dx+ddx*dt。 (d -> 导数,dd 二阶导数)。不仅仅是随着时间的推移循环......
  • 你只需要写出质量沿曲线的运动方程:Serret-Frenet 公式:en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas。一旦你有了它们,Runge-Kutta 数值积分应该就足够了。

标签: matlab math


【解决方案1】:

因此,如果您使用拉格朗西算子解决问题,您将得到以下公式(请参阅https://physics.stackexchange.com/questions/47154/ball-rolling-in-a-parabolic-bowl)。 k 值来自 y=kx^2(对于您的示例可以是 1)。

所以改写成下面的形式。

现在你只需使用

 ddx=   Formula seen above..
 x  =  x + dx  *dt
 dx = dx + ddx *dt
 t  = t  + dt 
 y  = k*x*x

您使用足够小的 dt 创建一个循环,并更新您的 x 位置速度和加速度。 现在你需要 指定以下起始值 -> x0 dx0 ddx0 和 dt。 我希望这有帮助 干杯:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多