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

Funktion aus/während ODE45 aufrufen ??

 

LeBob
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2012, 10:45     Titel: Funktion aus/während ODE45 aufrufen ??
  Antworten mit Zitat      
Hallo erstmal an alle, nachdem ich hier im Forum bereits einige Problemlösungen finden konnte, dachte ich ich wende mich mit meinem aktuellen Problem auch mal an euch.

Folgendes möchte ich gerne machen. Es soll eine Differentialgleichung der Form

Code:
y''=A(y,y')*y'+B(y)


mittels des Solvers ODE45 gelöst werden. Es handelt sich hierbei im im Prinzip um die Bewegungsgleichungen eines Doppelpendels im Raum. A(y,y') und B(y) sind also Matrizen, während es sich bei y,y' und y'' um Vektoren handelt. Die selbe Gleichung wird auch in Simulink abgebildet und gelöst. Eigentlich möchte ich mich/mein Programm selber kontrollieren, wobei die Simulink Version das Endziel sein soll.

Nun habe ich mir also ein m.file sowie drei weitere Funktionen zur Berechnung von A(y,y'), B(y) und natürlich die DGL gebaut. Soweit so gut. Es wird auch fleißig berechnet, die Ergebnisse sind allerdings Müll. Nun meine eigentliche Frage.

Die Funktionen für A(y,y') und B(y) werden innerhalb der function der DGL aufgerufen, wodurch ich eine ständige Anpassung an die jeweils aktuellen Werte bezwecke. Nun bin ich mir nicht sicher ob dies die richtige Vorgehensweise ist.

Code:


%m.file

ode45(DGL)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%function DGL =....

A_aktuell=A(y(t),y'(t));
B_aktuell=B(y(t));

y''=A(y,y')*y'+B(y)

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%function A(y,y')=....
...
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%function B(y)=...
...
end

 


Um es vll. etwas plastischer zu machen, A und B kann man sich als Transformationsmatrizen vorstellen welche für jeden Zeitpunkt und somit jede Winkelstellung des Pendels berechnet werden müssen.

Über Hilfe würde ich mich sehr freuen.

MfG

Bob
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.04.2012, 15:55     Titel: Re: Funktion aus/während ODE45 aufrufen ??
  Antworten mit Zitat      
Hallo LeBob,

Ich verstehe den geposteten code nicht. Die Zeilen für die Funktionsheader sind auskommentiert und "y'(t)" ist keine valide Matlab-Syntax. Du kannst auch nicht y'' einen Wert zuweisen:
Code:

%function DGL =....
A_aktuell=A(y(t),y'(t));
B_aktuell=B(y(t));

y''=A(y,y')*y'+B(y)
end

%function A(y,y')=....
 

Nun muss ich raten, ob dies so wirklich in Deinem Code steht, oder ob Du eine "aufgehübschte" Fassung für das Forum erzeugt hast. Raten ist aber immer schlecht, wenn man Probleme zu lösen versucht.

Bitte poste die relevanten Teile des Orginal-Codes.
Zudem wäre es sinnvoll zu erklären was "die Ergebnisse sind allerdings Müll" hier genau bedeutet.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
LeBob
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2012, 17:07     Titel:
  Antworten mit Zitat      
Vielen Dank erstmal für die Mühe meine etwas ungenauen Angaben nachzuvollziehen. Also bei dem dargestellten Code handelt es sich lediglich um eine Art "Prinzipskizze", es ging mir primär darum zu erfahren ob ich während dem Lösen der DGL auch andere, vom aktuell errechneten Wert abhängig Funktionen aufrufen kann. Der Code wird so natürlich nicht verwendet, ginge ja auch nicht Smile .

Nachdem ich nun heute den ganzen Tag mit Fehlersuche verbracht habe (und keinen cm weiter gekommen bin), fiel es mir eben wie Schuppen von den Augen. Der Funktionsaufruf WÄHREND der Solver aktiv ist, sowie die jeweiligen Funktionen haben prinzipiell die ganze Zeit über funktioniert, ich habe allerdings die falschen Werte ausgeben. Statt also ein Pendel/Doppelpendel mit dem soeben errechneten Winkel zu zeichnen habe ich das Integral des Winkels (denke ich jedenfalls) anstelle des Integrals von Geschwindigkeit und Beschleunigung übergeben und genutzt. Das gab eine abenteuerliche Darstellung, daher die Aussage die Ergebnisse sind MÜLL. Ich denke dieses Problem ist somit gelöst.

Trotzdem vielen herzlichen Dank für die Mühen. Ich finde es super, dass hier so gute Unterstützung geboten wird, und das alles freiwillig.

Ich sag erst mal bis bald, das nächste Problem kommt bestimmt Wink .

MfG

Bob
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.