WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zweimassenschwinger mit Reibung und ode45

 

evalein

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2012, 09:56     Titel: Zweimassenschwinger mit Reibung und ode45
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem beim lösen der Differentialgleichung eines Zweimassenschwingeers mit Reibung. Ich habe die DGL des Zweimassenschwingers mit ode45 gelöst und möchte nun für die Reibung noch die Bedingung für die Unterscheidung von Haftreibung zu Gleitreibung einbauen. Dabei muss ich die Lösung der DGL für den Zeitschritt n-2 kennen. Ich habe dies momentan folgendermaßen gelöst:

Die DGL wird durch ode 45 aufgerufen:
Code:

[t,x] = ode45('DGL_fremderregt_2DOF_FPS_2',t_Spanne,X_0)
 


Die Funktion sieht dabei folgenddermaßen aus:

Code:


function dX = DGL_fremderregt_2DOF_FPS(t,X)

global ...;

% Interpolieren der gegebenen Werte für ode45

ti = 0:0.001:9.45;
t_NS = ti';
A=-inv(M)*Q;
B=-inv(M)*P;

a_2DOF = interp1(t_NS,a_NS,t,'linear');

C=dlmread('C:\Datei.txt'); % Öffnen der Datei als Matrix und Aufruf der Daten für d((dx2)/dt) und t zum Zeitschritt n-2
c=length(C);
t_= C(:,1);
v_2=C(:,5);
if c<2
    xalt=0;
    talt=0;
else
    xalt=v_2(end-2);
    talt=t_(end-2);
end

% DGL mit Fallunterscheidung

        if abs((m_gesamt)*a_2DOF+m_2*((X(4)-xalt)/(t-talt))+c_FPS*X(1)) < abs(r) % Haften und dadurch nur als Einmassenschwinger simuliert
            dX= [X(1);X(2);X(3);A(2,2)*X(2)+B(2,2)*X(4)-a_2DOF];

        elseif abs((m_gesamt)*a_2DOF+m_2*((X(4)-xalt)/(t-talt))+c_FPS*X(1))>abs(r) & X(3)>0 % Gleiten
            dX = [zeros(2) eye(2);-inv(M)*Q -inv(M)*P]*[X(1);X(2);X(3);X(4)]+[0;0;-(a_2DOF+r);-a_2DOF];

        else % Gleiten -> 2DOF system und Bewegung entgegen negativer verschiebung
            dX = [zeros(2) eye(2);-inv(M)*Q -inv(M)*P]*[X(1);X(2);X(3);X(4)]+[0;0;-(a_2DOF-r);-a_2DOF];
        end

fid = fopen('C:Datei.txt', 'at');  % Öffnen der Datei und Speichern der Variablen t und X
fprintf(fid,'\n %f %f %f %f %f',t,X(1),X(2),X(3),X(4));
fclose(fid);

end
 


Es werden also jedes Mal beim Aufruf der Funktion die errechneten Werte für t und X in einer txt-Datei gespeichert und aufgerufen. Dies dauert natürlich extrem lange. Gibt es eine elegantere Variante? Mit Einfügen der Option odeprint werden die Daten nur im Command Window angezeigt und nicht im Workspace. So dass ich die errechneten Werte irgendwie nicht schon vor der Gesamtlösung verwenden kann.

Ich hoffe ich konnte mein Problem halbwegs verständlich schildern und würde mich sehr freuen wenn Ihr mir weiterhelfen könntet!

Viele Grüße

Eva


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.06.2012, 20:37     Titel:
  Antworten mit Zitat      
Hallo,

du kannst mit PERSISTENT Variablen arbeiten und dort die letzten Werte abspeichern.

Was du hast, kann man auch als Delay Differential Equation (DDE) auffassen, siehe z.B.
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
evalein

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2012, 15:21     Titel:
  Antworten mit Zitat      
Vielen Dank Harald! Ich werde es mal versuchen.

Viele Grüße,

Eva
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.