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

Runge-Kutta für physikalisches Problem

 

Physiker1234
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 06.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 18:49     Titel: Runge-Kutta für physikalisches Problem
  Antworten mit Zitat      
Hallo zusammen,

meine Aufgabe ist es die Bewegung eines Fußballs durch die Luft zu simulieren. Gegeben ist folgender Vektor mit Anfangswerte y0=[0;29.5;0;12.5] Die erste Komponente steht für den Anfangsort in x-Richtung, die Dritte für den Anfangsort in y-Richtung und die 2. und 4. je für die Anfangsgeschwindigkeit in x -bzw. y Richtung.
Des Weiteren sind Konstanten über Gravitation, Luftreibungseigenschaften, Querschnittsfläche und Masse gegeben.

Das systembeschreibene DGL System sieht folgendermaßen aus:
 \vec{f}(t,y) = \frac{d \vec{y}}{d t}
 \vec{f}(t,y) = \begin{pmatrix} y_2 \\ \frac{-B_2 y_2 \sqrt{y_2^2 + y_4^2}}{\text{masse}} \\ y_4 \\ -g -\frac{B_2 y_4 \sqrt{y_2^2 + y_4^2}}{\text{masse}}  \end{pmatrix}

Zur Implementierung der Runge-Kutta Methode habe ich folgendes in Matlab gemacht:
Code:

function ym=RungeKutta(y0,h,b)
g=9.81;
C=0.47;
rho=1.2;
A=0.038;
B2=0.5*C*rho*A;
mass=0.43;

a=1-b;
m=1/(2*b);

ym=y0;
yi=y0;
f1=@(y) y(2);
f2=@(y) -B2*y(2)*sqrt(y(2)^2+y(4)^2)/mass;
f3=@(y) y(4);
f4=@(y) -g-B2*y(4)*sqrt(y(2)^2+y(4)^2)/mass;

while yi(3)>=0
 
    i=size(ym,2);
    yi(1)=ym(1,i)+a*h*f1(ym(:,i))+b*h*(f1(ym(:,i))+h*m*(ym(1,i))    
    yi(2)=ym(2,i)+a*h*f2(ym(:,i))+b*h*(f2(ym(:,i))+h*m*(-B2/mass*(ym(1,i)*sqrt(ym(2,i)^2+ym(4,i)^2)+1/2*ym(2,i)*(ym(2,i)^2+ym(4,i)^2)^(-1/2)*(2*ym(2,i)*ym(1,i)+2*ym(4,i)*ym(3,i)))));
    yi(3)=ym(3,i)+a*h*f3(ym(:,i))+b*h*(f3(ym(:,i))+h*m*(ym(3,i)));
    yi(4)=ym(4,i)+a*h*f4(ym(:,i))+b*h*(f4(ym(:,i))+h*m(-B2/mass*(ym(3,i)*sqrt(ym(2,i)^2+ym(4,i)^2)+1/2*ym(4,i)*(ym(2,i)^2+ym(4,i)^2)^(-1/2)*(2*ym(2,i)*ym(1,i)+2*ym(4,i)*ym(3,i)))));
   
    ym(:,i+1)=yi;

end

end
 


Man plotte sich dann folgendes: plot(fm(1,: ),fm(3,: )).
Das sieht zwar schon mal ganz gut aus, stimmt aber nicht ganz.
Wo könnte mein Fehler liegen??

Vielen Dank schonmal Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

warum verwendest du nicht ode45 oder ähnliche zum Lösen der DGL?

Warum vektorisierst du nicht? Es sollte ja möglich sein, mit einem y und einem f zu arbeiten statt mit vier.

Wenn du z.B siehst, in welcher Komponente der Lösung das Problem ist, weißt du ja auch schon, wo du nach dem Fehler suchen musst.

Grüße,
Harald
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: 08.09.2011, 00:38     Titel: Re: Runge-Kutta für physikalisches Problem
  Antworten mit Zitat      
Hallo Physiker1234,

Der gepostete Code läuft nicht.
Code:
yi(4)=ym(4,i)+a*h*f4(ym(:,i))+b*h*(f4(ym(:,i))+h*m(-B2/mass* ...
 

Meinst Du: "h*m * (-B2/mass*" ?

Wie Harald schon sagte: ODE45 wäre eine bessere Idee. Den ODE-Solver und die DGL in einen Code zu packen, behindert das Debuggen. Besser wäre es, den Runge-Kutta-Code unabhängig von der DGL zu schreiben und zu testen.

Gruß, Jan
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.