我正在解决eqaution运动,我需要数值积分,所以我决定在Matlab中使用ode45。我找到了位移和速度,现在我需要找到角加速度并随时间绘制。
我的代码和功能:
码:
global r b m2 m3 m4 g I M
% Quantities
r=0.2;
b=0.1;
m2=1;
m3=0.2;
m4=2;
g=9.81;
tspan=0:0.01:2;
% Calculation
I=(m2*r^2)/3
M0=m2*g*b+g*r*(m3+m4)
M=1.2*M0
% Runge- Kutta
[t,x]=ode45(@funkce,tspan,[0 0]);
% Plotting
figure(1);
plot(t,x(:,2));
grid;
figure(2);
plot(t,x(:,1));
grid;
功能:
function v=funkce(t,x);
global r b m2 m3 m4 g I M
% Method
v(1,1)= (x(1)^2*(m4*r^2*cos(x(2))*sin(x(2)))+M-cos(x(2))*m2*g*b+(m3+m4)*g*r)/(I+m3*r^2+m4*r^2*cos(x(2))^2);
v(2,1)= x(1);
答案 0 :(得分:1)
也许,我错过了一些东西,但如果你有位移和速度,你唯一需要做的就是区分速度:
% Assuming x(:,1) is the velocity, haven't checked your equations
accel = zeros(size(x(:,1)));
accel(2:end) = diff(x(:,1))./diff(t);
但是,当我尝试在Octave上运行您的代码时,ode45
无法解决方程式。这些情节看起来像这样:
您是否能够在MATLAB中获得有意义的位移和速度结果?如果没有,我建议你检查你的方程式,并确保在尝试推导加速度之前得到合理的结果。