MATLAB和力学(主要是物理学)[第二部分]

时间:2015-04-27 21:24:56

标签: matlab physics simulink

恢复表单part 1

代表系统的基本方案: system

我们假设两个轴的连接是用离合器完成的

方程:

• 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

我的第二个任务是绘制非线性离合器如何影响转动惯量。

鉴于:

T1(t) = T0*1(t), T0 = 1, T2(t) = 0,
J1 = J2 = 5, c12 = 0, wn = 100,
Ts(phi12) = k1*phi12 + k2*(phi12)^3
k20 = 10e14, k2 = [10e-6 10e-5 10e-4 10e-3 10e-2 10e-1 10e0 10e1 10e2 10e3 10e4]

我需要绘制Tsmax/T0 = f(log(k2/k20));

到目前为止,我的进展是:

MATLAB代码

T2 = 0;
J1 = 5;
J2 = J1;
wn = 100;
Jz = J1.*J2/(J1+J2);
ckr = 2.*Jz*wn;
ks = (wn^2)*Jz;
c12 = 0;
k20 = 10e14;
k2 = [10e-6 10e-5 10e-4 10e-3 10e-2 10e-1 10e0 10e1 10e2 10e3 10e4];
Tsmax = zeros(size(k2));
k2a = 0;
plpl = zeros(size(k2));
k1 = 1;
sim ('model_2');

for ii=1:length(k2)
    k2a = k2(ii);
    sim ('model_2');
    Tsmax(ii) = max(Ts);
    plpl(ii) = log(k2a/k20);
end
figure()
    plot(plpl,Tsmax)  
   grid on

产生

matlab_plot_1

和Simulink模型:

simulink

嗯,我确定我的情节不应该是它的样子。

1 个答案:

答案 0 :(得分:0)

一些观点/建议:

  • 您似乎使用K2a对Simulink模型进行参数化(除非我从截图中看不到很好),但它没有在任何地方定义。您在代码中定义k2a,但MATLAB区分大小写,因此它与K2a不同。
  • 你的Fcn1区块没有做任何事情,你可以摆脱它。

除此之外,我并没有看到你所做的事情有什么不妥,我们不知道你的情节应该是什么样的,所以我们不能真正帮助你,而不是我害怕。

修改

我认为这就是你的情节应该是什么样子。我在Octave中尝试过它,只使用MATLAB代码&使用logspace的颂歌解算器(没有Simulink),以便在10^(-6)10^4之间有50个数据点对数空间,并得到非常相似的东西。

enter image description here

我认为您使用较大的k2值来解决数值刚度问题,因此我建议使用ode15s和最大步长1e-4。这可能需要更长的时间才能运行,但是当系统在数字上僵硬时,您可能会避免出现数值问题。