Guest User

Untitled

a guest
Jul 14th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 6.42 KB | None | 0 0
  1. function ex1(profil, schrittweite, geschwindigkeit, m, l, k, d)
  2. % Implementieren Sie das Modell mit MATLAB, die dazu notwendigen Gleichungen sind
  3. % im Anhang beschrieben. Führen Sie einen Simulationslauf mit den angegebenen
  4. % Parametern durch, plotten Sie die Verläufe sämtlicher Zustandsgrößen über der
  5. % Zeit und interpretieren Sie die Ergebnisse. Die Fahrbahnunebenheiten sind dabei
  6. % in tabellarischer Form mit Höhenangaben an charakteristischen Punkten entlang der
  7. % Fahrbahn gegeben. Dazwischen soll der Verlauf linear interpoliert werden. Sie
  8. % werden auch die Ableitung dieser so definierten Funktion benötigen.
  9.  
  10. % Wie kann diese in einfacher Weise aus den Tabellenwerten errechnet werden?
  11. %  Ableitung = Steigung der Tangente -> (profil[i+1] - profil[i]) / (Distanz zw. i und i+1)
  12.  
  13. % Differenzialgleichungen: RM * z'' = FD + FE - RK * z
  14. %    RM .. Massematrix
  15. %    RK .. Steifigkeitsmatrix
  16. %    FD .. Vektor mit den Dämpfkräften der Federn
  17. %    FE .. Vektor mit den Erregerkräften
  18.  
  19. % Beispiel aus ACSL Programm:
  20. %   >> m1v = 60.0; m1h = 80.0; m2v = 1200.0; m2h = 1200.0; m2k = 1200.0; lv = 1.0; lh = 1.5; lg = lv + lh;
  21. %   >> k1h = 260.e3; k1v = 260.e3; k2h = 50.e3; k2v = 40.e3; d1h = 0.2e3; d1v = 0.2e3; d2h = 0.0; d2v = 0.0;
  22. %   >> ex1(m1v, m1h, m2v, m2h, m2k, lv, lh, lg, k1h, k1v, k2h, k2v, d1h, d1v, d2h, d2v)
  23.  
  24.     m1v = m(1);
  25.     m1h = m(2);
  26.     m2v = m(3);
  27.     m2h = m(4);
  28.     m2k = m(5);
  29.  
  30.     lv = l(1);
  31.     lh = l(2);
  32.     lg = lv + lh;
  33.  
  34.     k1v = k(1, 1);
  35.     k1h = k(1, 2);
  36.     k2v = k(2, 1);
  37.     k2h = k(2, 2);
  38.  
  39.     d1v = d(1, 1);
  40.     d1h = d(1, 2);
  41.     d2v = d(2, 1);
  42.     d2h = d(2, 2);
  43.  
  44.     deltaT = schrittweite / geschwindigkeit;
  45.  
  46.     % Erstelle Vektor mit dem Fahrbanprofil in Abhängigkeit von der Schrittweite -> h
  47.     x = [profil(1 , 1) profil(1 , 2)];
  48.     y = [profil(2 , 1) profil(2 , 2)];
  49.     xi = profil(1 , 1) : schrittweite : profil(1 , 2);
  50.     h = interp1(x, y, xi);
  51.     for i = 2 : (length(profil) - 1)
  52.         x = [profil(1 , i) profil(1 , i + 1)];
  53.         y = [profil(2 , i) profil(2 , i + 1)];
  54.         xi = profil(1 , i) : schrittweite : profil(1 , i + 1);
  55.         hi = interp1(x, y, xi);
  56.         h = [h , hi(2 : length(hi))];
  57.     end;
  58.  
  59.     clear x y xi;
  60.  
  61.     x = 0 : schrittweite : profil(1, length(profil)) + lg;
  62.     hh = [zeros(size(0 : schrittweite : lg)) h];
  63.     hv = [h zeros(size(0 : schrittweite : lg))];
  64.     dhh = diff(hh);
  65.     dhv = diff(hv);
  66.     hv(length(hv)) = []; % Make all arrays equal length
  67.     hh(length(hh)) = []; % Make all arrays equal length
  68.     x(length(x)) = [];
  69.     x(length(x)) = [];
  70.  
  71.     % Plotte Steigung der Fahrbahn (1. Ableitung)
  72. %    plot(x, dhh, '-r', x, hh, '-b');
  73.  
  74.     % Definiere die Matritzen für die systembeschreibenden Diffenrentialgleichungen:  RM * z'' + RK * z = FD + FE
  75.     RM = [m2v+m2k*(lh/lg)*(lh/lg) , m2k*(lv*lh/(lg*lg)) , 0 , 0 ; m2k*(lv*lh/(lg*lg)) , m2h+m2k*(lv/lg)*(lv/lg), 0 , 0 ; 0 , 0 , m1v , 0 ; 0 , 0 , 0 , m1h]
  76.     RK = [k2v , 0 , -k2v , 0 ; 0 , k2h , 0 , -k2h ; -k2v , 0 , k2v , 0 ; 0 , -k2h , 0 , k2h];
  77.     % Modell mit linearen Dämpfern
  78. %    FD = [-d2v*(dz2v-dz1v) , -d2h*(dz2h-dz1h) , -d2v*(dz1v-dz2v)-d1v*(dz1v-dhv) , -d2h*(dz1h-dz2h)-d1h*(dz1h-dhh)]';
  79.     % Modell mit konstanten Dämpfern
  80.     FD = [-d2v , -d2h , -d2v-d1v , -d2h-d1h]';
  81.     FE = [0 , 0 , k1v*hv , k1h*hh]';
  82. %    FE = [0 , 0 , k1v*(z1v-hv) , k1h*(z1h-hh)]';
  83.  
  84. % Umformen: RM * z'' = -RK*z + FD + FE
  85. % Obige Matrixschreibweise in das DGL 1. Ordnung auflösen und in die Funktion unten einfügen.
  86. % u = dz/dt    RM * u' = -RK*z + FD + FE
  87. % Danach mit einem ODE Solver lösen (ode23, ode45, ...)
  88.  
  89. % Löse das DGL mit Schrittweite durch x definiert  
  90.  
  91.   %  hold on;
  92.   %  plot(t,y(:,1));
  93. %    plot(T, Y(:,1), '-r', T, Y(:,2), '-g' T, Y(:,3), '-b' T, Y(:,4), '-');
  94.    % grid off;
  95.   %  xlabel('t');
  96.   %  ylabel('Auslenkung');
  97.   %  legend('Aufhängung vorne', 'Aufhängung hinten', 'Radmittelpunkt vorne', 'Radmittelpunkt hinten');
  98.   %  hold off;
  99. %   tspan = [0 20];
  100. %     y0 = [0,0,0,0 ; 0,0,0,0 ; 0,0,0,0 ; 0,0,0,0];
  101. %
  102. %     options=odeset('mass','M)')
  103. % %[t,y]=ode113('indmot_ode1',tspan,y0,options)
  104. % [T, Y] = ode45('diffgl', tspan, y0, options);
  105. %
  106. %
  107. %  function dy = diffgl(t, y, flag)
  108. %         switch flag
  109. %             case ''
  110. %                 dy = zeros(4,1);%-RK+FD+FE
  111. %                 dy(1) = -k2v*z(1) +k2v*z(3)   -d2v(zd2v-zd1v)+0;
  112. %                 dy(2) =  - k2h*z(2) +k2h*z(4) -d2h(zd2h-zd1h)+0;
  113. %                 dy(3) =  +k2v*z(1) -k2v*z(3)  -d2v(zd1v-zd2v)-d1v(zd1v-hdv )+k1v(z1v-hv);
  114. %                 dy(4) =  k2h*z(2)  - k2h*z(4) -d2h(zd1h-zd1h)-d1h(zd1v-hdh)+k1h(z1h-hh);
  115. %             case 'mass'
  116. %           dy = RM;
  117. %         end
  118. %     end
  119. % Löse das DGL mit Schrittweite durch x definiert  
  120. zd2v =0;
  121. zd1v =0;
  122. zd2h = 0;
  123. zd1h = 0;
  124. hdv =0;
  125. hdh=0;
  126. z1h=0;
  127. z1v=0;
  128.     tspan = [0 20];
  129.     y0 = [0,0,0,0 ; 0,0,0,0 ; 0,0,0,0 ; 0,0,0,0];
  130.     opt = odeset('Mass', 'RM');
  131.     [T, Y] = ode45(@diffgl, tspan, y0, opt);
  132.  
  133.     hold on;
  134.     plot(T,Y(:,1));
  135. %    plot(T, Y(:,1), '-r', T, Y(:,2), '-g' T, Y(:,3), '-b' T, Y(:,4), '-');
  136.     grid off;
  137.     xlabel('t');
  138.     ylabel('Auslenkung');
  139.     legend('Aufhängung vorne', 'Aufhängung hinten', 'Radmittelpunkt vorne', 'Radmittelpunkt hinten');
  140.     hold off;
  141.  
  142.  
  143.     function dy = diffgl(t, y)
  144.      
  145.                 dy = zeros(4,1);%-RK+FD+FE
  146.                 dy(1) =  -k2v +k2v  -d2v*(zd2v-zd1v);
  147.                 dy(2) =  -k2h +k2h  -d2h*(zd2h-zd1h);
  148.                 dy(3) =  +k2v -k2v  -d2v*(zd1v-zd2v)-d1v*(zd1v-hdv )+k1v*(z1v-hv);
  149.                 dy(4) =   k2h -k2h  -d2h*(zd1h-zd1h)-d1h*(zd1v-hdh)+k1h*(z1h-hh);
  150.        
  151.     end
  152.  
  153.                
  154.  
  155. % function varargout=indmot_ode1(t,y,flag)
  156. % switch flag
  157. % case ''
  158. % %no input flag
  159. % varargout{1}=FF1(t,y);
  160. % case 'mass'
  161. % %flag of mass calls mass.m
  162. % varargout{1}=MM1(t,y);
  163. % otherwise
  164. % error(['unknown flag ''' flag '''.']);
  165. % end
  166. %
  167. %
  168. %     function yp = FF1(t, y)
  169. %                 dy = zeros(4,1);%-RK+FD+FE
  170. %                 dy(1) = -k2v*z(1) +k2v*z(3)   -d2v(zd2v-zd1v)+0;
  171. %                 dy(2) =  - k2h*z(2) +k2h*z(4) -d2h(zd2h-zd1h)+0;
  172. %                 dy(3) =  +k2v*z(1) -k2v*z(3)  -d2v(zd1v-zd2v)-d1v(zd1v-hdv )+k1v(z1v-hv);
  173. %                 dy(4) =  k2h*z(2)  - k2h*z(4) -d2h(zd1h-zd1h)-d1h(zd1v-hdh)+k1h(z1h-hh);
  174. %     end
  175. %        
  176. %  function n = MM1(t, y)
  177. %                 dy = RM%zeros(4,1); %RM
  178. %                 %n1 = (m2v +m2k(lh/lg)^2)
  179. %              
  180. %             end
  181.  
  182. end
Add Comment
Please, Sign In to add comment