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

koppeln von Differentialgleichungssysteme

 

martin1234

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 10:43     Titel: koppeln von Differentialgleichungssysteme
  Antworten mit Zitat      
Hallo Zusammen!

Also ich habe folgendes Problem:

Als erstes betrachtete ich eine Kugelfeder die fällt und sich dann einpendelt bis sie ruhig liegt. Man hat also eine Differentialgleichung 2. Ordnung diese transformierte ich in ein System 2 , 1.Ordnung und löste sie mit ode45.

Nun betrachte ich einen Stab mit 2 Kugelfedern an je einem Ende -> also 2 Differentialgleichungen 2.Ordnung für die Translation des Stabschwerpunktes und die Rotation um den Schwerpunkt. Somit hätte ich auch 2 Systeme von Differentialgleichunge 1.Ordnung (wie oben). Wie kann ich diese beiden Systeme in Matlab, bzw. mit dem ode45 koppeln?

Mfg Martin


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.01.2011, 11:06     Titel:
  Antworten mit Zitat      
Hallo,

du hast dann 2*2=4 Differentialgleichungen, deren rechte Seiten interagieren. Das kannst du aber in ode45 einfach reinschreiben.

Für mehr Informationen bitte die konkrete DGL posten.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 11:46     Titel:
  Antworten mit Zitat      
Also die beiden Differentialgleichungen sind: (ein Punkt neben der variable bedeutet Ableitung nach der Zeit (was normal der Punkt darüber wer geht aber nicht zum schreiben also y.. ist a die beschleunigung))

m*y.. = F1 + F2 - m*g (F1 Kraft auf die erste Feder, F2 Kraft auf die zweite Feder, m Masse des Stabes, g Erdbeschleunigung)

mit Fi = ki*(Ri-hi) - Di*h.i
wobei k,D Feder und Dämpfungskonstante
hi die Höhe der jeweiligen Feder 1,2 vom Boden.
hi ergibt sich ja dann wiederum aus der geometrischen Beziehung
h1= y-d1*sin(phi),
h2= y+d2*sin(phi)
d sind die Abstände zum Schwerpunkt, y die Höhe des Schwerpunktes über dem Boden und phi der Winkel des Stabes gegenüber der x Achse. (ich weiß eine Skizze wäre von Vorteil habe aber leider keinen Scanner zur Hand)


die zweite Differentialgleichung wäre:

I*phi.. = (F2*d2 - F1*d1)*cos(phi)

I.. Trägheit des Stabes

Diese habe ich in 2 Systeme transformiert und das wäre ja dann einfach ode vom ersten System und ode vom zweiten da die aber voneinander abhängen weiß ich nicht wie ich dass in ein ode hineinpacke.

danke im voraus mfg
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 11:47     Titel:
  Antworten mit Zitat      
I Trägheit des Stabes nicht I..! verschrieben
 
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.01.2011, 11:52     Titel:
  Antworten mit Zitat      
Hallo,

denke dir einen Vektor mit allen Größen, z.B.

x = [y y. phi phi.]

Die Funktion nimmt x entgegen und muss dann die entsprechenden Ableitungen zurückgeben.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 14:05     Titel:
  Antworten mit Zitat      
Danke hat super geklappt !!!

mfg
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 14:17     Titel:
  Antworten mit Zitat      
Ich hätte da noch eine weitere Frage:

Kann man neben Zeit, Startwerte und Argumente auch noch odeset optionen übergeben?

bis jetzt habe ich nur ode45(@func,tspan,init und dann die übergabe Argumente wie Federkonstante und Dämpfungskonstante usw. möchte aber die Genauigkeit erhöhen.

bis jetzt hab ich es nur gefunden als (@func,t,y0,options) wenn ich nach meinen argumenten jedoch noch options anhänge kommt immer ein Fehler?
 
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.01.2011, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

das solllte gehen. Bitte den genauen verwendeten Code (Aufruf von odeset und ode45 dürfte reichen) und die gesamte Fehlermeldung angeben.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 14:38     Titel:
  Antworten mit Zitat      
Das ist jetzt nur für den 1-dim Fall der einfachen Kugelfeder deshalb nur 2 Gleichungen

tspan=[0 tend];
parameter=[y1 y2];
options = odeset('RelTol',1e-9);
[t,yout] = ode45(@diffGL,tspan,parameter,c,m,r,D,g,options);

Fehlermeldung:

??? Undefined function or method 'uminus' for input arguments of type 'struct'.

Error in ==> diffGL at 5
diffGL(2) = -g + max((c/m)*(r-y(1)),0) - (D/m)*y(2)*(y(1) < r);

Error in ==> odearguments at 109
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in ==> kugelfedertest at 19
[t,yout] = ode45(@diffGL,tspan,parameter,c,m,r,D,g,options);
 
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.01.2011, 14:47     Titel:
  Antworten mit Zitat      
Hallo,

das Problem sind die zusätzlichen Parameter c,m,r,D,g. Sachen zum Probieren:
- funktioniert es ohne options? (ich nehme an: ja)
- funktioniert es, wenn du options vor c setzt?
- nimmt die DGL-Funktion diffGL.m auch die entsprechenden Parameter entgegen?

Ich würde empfehlen, die zusätzlichen Parameter über ein anonymous function handle zu übergeben, sieht dann so aus:

Code:
[t,yout] = ode45(@(t,x) diffGL(t,x,c,m,r,D,g),tspan,parameter,options);


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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 15:02     Titel:
  Antworten mit Zitat      
also mit deiner Codezeile funktionierts einwandfrei ! die anderen Punkte habe ich schon vorher probiert aber ohne Erfolg... danke vielmals!

- ohne options funktionierts mit dem Zusatz, dass man vor die Argumente noch einmal die Startbedinung y1 hinschreib (also
(@diffGL,tspan,parameter,y1,c,m,r,D..)
keine Ahnung warum das notwendig ist) mit deiner Zeile ist das auch nicht mehr notwendig

-vor's c geschrieben brachte auch eine Fehlermeldung

-DiffGL.m nimmts entgegen
 
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.01.2011, 16:30     Titel:
  Antworten mit Zitat      
Hallo,

die Variante, die du zunächst versucht hast, stammt aus einer Zeit, als es noch keine (anonymous) function handles gab. Es ist definitiv besser, das in der von mir gezeigten Form zu machen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
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.