Matlab 和力学(主要是物理学)
Matlab and mechanics (mostly physics)
我正在尝试解决有关两个轴的动量的力学问题。我以前从未接触过 class 机械师,所以我不知道如何解决这个问题。
鉴于:
方程式:
• J1*dw1/dt + Td(w12)+Ts(phi12) = T1;
• J2*dw2/dt - Td(w12) -Ts(phi12) = T2;
where w1 = dphi1/dt,
w2 = dphi2/dt,
phi12 = phi1 - phi2
w12 = w1 - w2
Td(w12) = c12 * w12
Ts(phi12) = ks * phi12
c12 and ks are some coefficients
• dphi12/dt = w12
• dw12/dt = T1/J1 - T2/J2 - Td(w12)/Jeq - Ts(phi12)/Jeq
ccr = 2*Jeq*wn
wn = sqrt(ks/Jeq)
Jeq = (J1*J2)/(J1+J2)
T1(t) = T0*1(t), T0 = 1 T2(t) = 0
J1+J2 = 10 wn = 100 rad/s c12 = 0 Ts(phi12) = ks*phi12
`
目标是绘制函数 Tsmax/T0 = f(J1/(J1+J2))
任何指导将不胜感激。
我尝试在 simulink 中求解方程,这是我目前所做的
我在 matlab 中的代码
T0 = 1;
T2 = 0;
J1 = 5;
J2 = 10-J1;
wn=100;
Jeq=J1.*J2/(J1+J2);
ckr = 2.*Jeq*wn;
ks = (wn^2)*Jeq;
c12=0;
J1s = 1;
length(J1)
a2 = 0 :J1;
for c=1:J1
J1s = a2(c);
sim('model');
a = J1s/(J1s+J2);
plot(Ts,a)
hold all
end
grid on
这与预期的完全不符。
据我所知,曲线应该类似于 f(x) = -1x+b.
我认为问题是在你的每次迭代中,你都没有重新计算 J2
和 Jeq
。现在,您的模型已使用 J1
、J2
和 Jz
进行参数化,因此这些是您需要在每次迭代中更新的值。类似于:
a2 = 0:J1; % do you really want 0 inertia?
Tsmax = zeros(size(a2));
for ii=1:length(a2)
J1 = a2(ii); % Using J1 as model is parameterised with J1;
J2 = 10 - J1; % New value of J2
Jz = J1*J2/(J1+J2); % New value of Jz
sim('model'); % ks and c12 do not change with each iteration
Tsmax(ii) = max(Ts); % get max value of Ts
end
% Plot Tsmax as a function of Jeq
Jeq = (a2.*(10-a2))/10;
plot(Jeq,Tsmax)
grid on
我正在尝试解决有关两个轴的动量的力学问题。我以前从未接触过 class 机械师,所以我不知道如何解决这个问题。
鉴于: 方程式:
• J1*dw1/dt + Td(w12)+Ts(phi12) = T1;
• J2*dw2/dt - Td(w12) -Ts(phi12) = T2;
where w1 = dphi1/dt,
w2 = dphi2/dt,
phi12 = phi1 - phi2
w12 = w1 - w2
Td(w12) = c12 * w12
Ts(phi12) = ks * phi12
c12 and ks are some coefficients
• dphi12/dt = w12
• dw12/dt = T1/J1 - T2/J2 - Td(w12)/Jeq - Ts(phi12)/Jeq
ccr = 2*Jeq*wn
wn = sqrt(ks/Jeq)
Jeq = (J1*J2)/(J1+J2)
T1(t) = T0*1(t), T0 = 1 T2(t) = 0
J1+J2 = 10 wn = 100 rad/s c12 = 0 Ts(phi12) = ks*phi12
`
目标是绘制函数 Tsmax/T0 = f(J1/(J1+J2))
任何指导将不胜感激。
我尝试在 simulink 中求解方程,这是我目前所做的
我在 matlab 中的代码
T0 = 1;
T2 = 0;
J1 = 5;
J2 = 10-J1;
wn=100;
Jeq=J1.*J2/(J1+J2);
ckr = 2.*Jeq*wn;
ks = (wn^2)*Jeq;
c12=0;
J1s = 1;
length(J1)
a2 = 0 :J1;
for c=1:J1
J1s = a2(c);
sim('model');
a = J1s/(J1s+J2);
plot(Ts,a)
hold all
end
grid on
这与预期的完全不符。 据我所知,曲线应该类似于 f(x) = -1x+b.
我认为问题是在你的每次迭代中,你都没有重新计算 J2
和 Jeq
。现在,您的模型已使用 J1
、J2
和 Jz
进行参数化,因此这些是您需要在每次迭代中更新的值。类似于:
a2 = 0:J1; % do you really want 0 inertia?
Tsmax = zeros(size(a2));
for ii=1:length(a2)
J1 = a2(ii); % Using J1 as model is parameterised with J1;
J2 = 10 - J1; % New value of J2
Jz = J1*J2/(J1+J2); % New value of Jz
sim('model'); % ks and c12 do not change with each iteration
Tsmax(ii) = max(Ts); % get max value of Ts
end
% Plot Tsmax as a function of Jeq
Jeq = (a2.*(10-a2))/10;
plot(Jeq,Tsmax)
grid on