使用系统变量在ODE45中改变变量

时间:2017-01-20 00:34:53

标签: matlab

我有以下ode函数(如下),我正在尝试调整函数以允许变量' k_mb'取决于函数torsional_stiffness_changer中所见的z(1)的值,但当z(1)= 0时也等于5。

代码的当前状态没有计算,因为我不确定如何以这种方式正确使用z(1)变量。

非常感谢任何帮助,谢谢!

    function zdot = odenesttest(t,z)
global r_p r_g I_p I_g m_p m_g V
persistent k_mb;
k_mb = 5;
A_or_B = [5,10];
V = [0,5,15,20,30,35,45,50,60];
%% state space equations are defined below:
zdot(2) = ((r_p*k_mb)/I_p)*(-r_p*z(1)+r_g*z(3)+z(5)-z(7));  % Eq 1ss
zdot(6) = (k_mb/m_p)*(r_p*z(1)-r_g*z(3)-z(5)+z(7));         % Eq 2ss
zdot(4) = ((r_g*k_mb)/I_g)*(-r_g*z(3)+r_p*z(1)+z(7)-z(5));  % Eq 3ss
zdot(8) = (k_mb/m_g)*(-r_p*z(1)+r_g*z(3)-z(7)+z(5));        % Eq 4ss

zdot(1) = z(2); % Eq 5ss
zdot(3) = z(4); % Eq 6ss
zdot(5) = z(6); % Eq 7ss
zdot(7) = z(8); % Eq 8ss

torsional_stiffness_changer
   function torsional_stiffness_changer
       if 0 <= z(1)
           lower_index = find(V < z(1), 1, 'last');
           even_or_odd = mod(lower_index,2);
           k_mb = A_or_B(2 - even_or_odd);
       end
   end
% Outputs
zdot = zdot';
end

0 个答案:

没有答案