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