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 4. Ordnung

 

Mad

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2011, 14:57     Titel: Runge Kutta 4. Ordnung
  Antworten mit Zitat      
Hi Leute, bin sehr neu in Sachen matlab und muss derzeit eine schrittweise Integration mit dem Runge Kutta Verfahren 4. Ordnung durchführen. Ich hab dazu einen Code im Internet gefunden:

Code:
h=1.5; %step size
x = 0:h:3; % Calculates upto y(3)
y = zeros(1,length(x));
y(1) = 5;
F_xy = @(t,r) 3.*exp(-t)-0.4*r; %change the function as you desire

for i=1:(length(x)-1)   %calculation loop
    k_1 = F_xy(x(i),y(i));
    k_2 = F_xy(x(i)+0.5*h,y(i)+0.5*h*k_1);
    k_3 = F_xy((x(i)+0.5*h),(y(i)+0.5*h*k_2));
    k_4 = F_xy((x(i)+h),(y(i)+k_3*h));

    y(i+1) = y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*h;  %main equation
end


wenn ich das nach meinem Vorhaben abänder, sagt er aber:

??? Input argument "P" is undefined.

Error in ==> @(dQdt,avQ,P,ET,Q_Initial)((dQdt/avQ)*(P-ET/Q_Initial-1))


Heißt das, dass ich nen Fehler in der Definition meiner Differentialgleichung habe? Was bedeutet denn eigentlich das @(t,r) in obigem code, das vor der differentialgleichung steht?

ich hab obigen code folgendermaßen für mich abgeändert, wo sind die fehler?

Code:
h=1;
x = 0:h:30000;
y = zeros(1,length(x));
y(1) = Q_Initial;
F_xy = @(dQdt,avQ,P,ET,Q_Initial) ((dQdt/avQ)*(P-ET/Q_Initial-1))

for i=1:(length(x)-1)   %calculation loop
    k_1 = F_xy(x(i),y(i));
    k_2 = F_xy(x(i)+0.5*h,y(i)+0.5*h*k_1);
    k_3 = F_xy((x(i)+0.5*h),(y(i)+0.5*h*k_2));
    k_4 = F_xy((x(i)+h),(y(i)+k_3*h));

    y(i+1) = y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*h;  %main equation
end


Ich hab wirklich sehr wenig Ahnung und hab das Problem, dass ich nicht einmal weiß, wonach ich genau googeln soll um meine Fragen zu lösen, deshalb frag ich euch jetzt mal ganz konkret, dann leuchtets nem Neuling wie mir vllt am besten ein.


Mad

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2011, 18:39     Titel: nochmal
  Antworten mit Zitat      
Ich bins nochmal. Hab jetzt gesehen, dass das ganze wenn ich mich nicht täusche ja auch einfacher geht mit ode45

In einem tutorial hab ich gelesen, dass man zuerst im editor die funktion definieren soll:

Code:
function dy = ode_4(x,y)
dy = – 2*x*y;


etwa so bei der differentialgleichung: y'(x)=-2*x*y(x)

Code:
[x, y] = ode45('ode_4',[0,2],1);


und dann so gelöst werden kann.

jetzt wollte ich das auf meinen fall anwenden und hab folgendes eingegeben:

Code:
function dQ_dt=Abflussberechnung(dQdt,avQ,P,ET,Q)
dQ_dt=((dQdt/avQ)*(P-ET/Q-1));
 


und dann:

Code:
loesung=ode45(@Abflussberechnung,[1,30000],Q_Initial);


dann zeigt er mir aber an:

>> loesung=ode45(@Abflussberechnung,[1,30000],Q_Initial);
??? Input argument "P" is undefined.

Error in ==> Abflussberechnung at 2
dQ_dt=((dQdt/avQ)*(P-ET/Q-1));

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

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


mir war schon klar, dass das nicht direkt hinhaut, aber was genau mach ich falsch?
 
Mad

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2011, 21:10     Titel: ---
  Antworten mit Zitat      
hat keiner nen tipp? mit dem beispiel aus diesem tutorium mit der differentialgleichung

dy = -2*x*y

klappt die integration mit ode45 wunderbar. aber bei meiner differentialgleichung klappt gar nix mehr:

dQ = ((dQdt/avQ)*(P-ET/Q-1))

was hab ich denn im obigen code falsch gemacht? Sad
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2011, 21:48     Titel: Re: ---
  Antworten mit Zitat      
Hallo Mad,


Zitat:
mit dem beispiel aus diesem tutorium mit der differentialgleichung
dy = -2*x*y
klappt die integration mit ode45 wunderbar. aber bei meiner differentialgleichung klappt gar nix mehr:
dQ = ((dQdt/avQ)*(P-ET/Q-1))

Wo liegt denn der Unterschied zwischen den beiden Funktionen?
Und wo könnte der Zusammenhang mit
Zitat:
??? Input argument "P" is undefined.

liegen?

Deine Differentialgleichung hast Du so definiert:
Code:
F_xy = @(dQdt,avQ,P,ET,Q_Initial) ((dQdt/avQ)*(P-ET/Q_Initial-1))

Du rufst sie aber so auf:
Code:
F_xy(x(i),y(i))

Nun vergleiche die Anzhal der Inputargument: Einmal 5, einaml 2. Also sind die Argumente 3, 4 und 5 nicht definiert. Das erste davon ist "P", deshalb wird nur diesbezüglich gewarnt. Die ET und Q_Initial fehlen aber auch.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mad

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2011, 22:13     Titel: ---
  Antworten mit Zitat      
Vielen Dank schonmal für deine Antwort, ich hab grad Kopfschmerzen und werd mich daher erst morgen wieder dem ganzen widmen Wink
Falls bei mir noch ne Frage aufkommt, werd ich sie hier stellen.
Bis dahin schonmal wie gesagt vielen Dank, dass auch absoluten Anfängern geholfen wird Smile
 
chrisly

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2016, 17:52     Titel: Probleme bei runge kutta 4.Ordnung
  Antworten mit Zitat      
Hallo,
ich habe auch ein Problem mit meiner Projektarbeit.
Muss eine numerische Lsg. mittels Runge-kutta programmieren für ein Fadenpendel (mathematisches Pendel) für kleine Auslenkungen.

kriege es iwie nicht hin.
mein code mit function befindet sich im Anhang.

ich würde mich sehr über eine schnelle Hilfe freuen.

runge2.PNG
 Beschreibung:

Download
 Dateiname:  runge2.PNG
 Dateigröße:  3.31 KB
 Heruntergeladen:  705 mal
runge1.PNG
 Beschreibung:

Download
 Dateiname:  runge1.PNG
 Dateigröße:  17.13 KB
 Heruntergeladen:  712 mal
 
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.