在MATLAB中模拟沿y=x^2移动的二维点质量

在MATLAB中模拟沿y=x^2移动的二维点质量,matlab,math,Matlab,Math,我有一组混合的微分方程和代数方程,我在MATLAB中找到了它们的解析解。它涉及沿受y=x^2约束的二维曲线移动的点质量 我将如何使用MATLAB中的ode解算器(或其他更容易的工具)来模拟球在曲线上滚动?我自己能做的动画,我更关心的是找到每个连续步骤的速度,xd yd。那是我迷路的地方 这些是我用拉格朗日乘子导出的运动方程。因此,lambda。lambda是反作用力。我可以计算加速度,xdd ydd,但是如果我想正确地模拟它,我还需要状态下的速度,我假设 % Symbolic functions

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

我将如何使用MATLAB中的ode解算器(或其他更容易的工具)来模拟球在曲线上滚动?我自己能做的动画,我更关心的是找到每个连续步骤的速度,
xd yd
。那是我迷路的地方

这些是我用拉格朗日乘子导出的运动方程。因此,
lambda
lambda
是反作用力。我可以计算加速度,
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

因此,如果你用拉格兰西安算出你的问题,你会得到下面的公式(见)。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。 我希望这有帮助
干杯:)

因此,如果你用拉格兰西安算出你的问题,你会得到下面的公式(见)。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。 我希望这有帮助
干杯:)

如果你知道它的加速度,你可以计算它的速度和位置。x=dx+dx*dt,dx=dx+ddx*dt。(d->导数,dd二阶导数)。而不仅仅是随时间循环……你只需要写出质量沿曲线的运动方程:Serret-Frenet公式:。一旦你有了它们,龙格-库塔数值积分应该足够了。如果你知道它的加速度,你可以计算它的速度和位置。x=dx+dx*dt,dx=dx+ddx*dt。(d->导数,dd二阶导数)。而不仅仅是随时间循环……你只需要写出质量沿曲线的运动方程:Serret-Frenet公式:。一旦你有了它们,龙格-库塔数值积分就足够了。