Es handelt sich hierbei um die gewöhnlichen Differentialgleichungen aus den Navier-Stokes Gleichungen für eine rotierende Scheibe.
Ich weiß lediglich wie ich eine Differentialgleichung mit ode45 lösen kann, in der z.B. nur F vorkommt, aber wie löse ich das, wenn ich jetzt auch noch G, H und P habe?
Anfangsbedingung bei x=0 -> F=0, G=1, H=0, P=0
Als Ergebnis möchte ich F, G und H darstellen.
nach den höchsten Ableitungen auflösen und als System von DGLen 1. Ordnung schreiben. Es kann für die 4. DGL hilfreich sein, sogar H''' mit zu berechnen, weil du dann H'' als Hilfsgröße hast.
Die erste DGL würde ich so erfassen, dass du F = -1/2*H' in die anderen DGLen einsetzt.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
entschuldige dass ich Thema nochmal aufgreifen muss, aber ich bin leider bisher nicht dazu gekommen es zu bearbeiten.
Ist mein Ziel dann eine einzelne Funktion zu erzeugen die ich für ode45 verwende? Also praktisch per Einsetzungsverfahren aus vier Funktionen eine zu machen?
du brauchst eine Funktion, aber diese eine Funktion löst insgesamt 6 DGLen auf einmal für x' = f(t,x) mit x = [H, H', H'', G, G', P].
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Mach das doch erst mal. Wichtig ist dann, dass auch F' = -0.5*H'' und F'' = -0.5*H'''.
Zitat:
kann ich die doch nicht weiter einsetzen?
Ich weiß nicht, was du damit meinst.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
die unterste Gleichung nach P' statt H'' auflösen. Nun hast du für x = [H, H', H'', G, G', P] die DGLen:
x(1) ' = H' = x(2)
x(2) ' = H'' = x(3)
x(3) ' = H''' = ( (-0.5H')²+(-0.5H'')H-G ) / (-0.5) = ( (-0.5*x(2))^2 - 0.5*x(3)*x(1) - x(4) ) / (-0.5)
x(4) ' = G' = x(5)
x(5) ' = G'' = 2*(-0.5H')G+HG' = 2*(-0.5*x(2))*x(4) + x(1)*x(5)
x(6) ' = H'' - HH' = x(3) - x(1)*x(2)
Das solltest du aber lieber nochmal kontrollieren für den Fall, dass ich irgendwo mich vertan habe.
Also ein System, das man schön mit ode45 lösen kann.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
ich muss leider doch nochmal zurückkommen, weil mein Code nicht funktioniert.
Ich möchte dass mein Ergebnis aussieht wie im angehängten Bild, aber ich weiß nicht wie ich die Randbedingungen
x=0 => F=0, G=1, H=0, P=0
x=infinite => F=0, G=0
richtig einfügen soll. Wie kann ich diese Randbedingungen realisieren?
%Vordefinition der Randbedingungen
x1=0;
x2=0;
x3=1;
x4=0;
x5=0;
x6=0;
tol=1e-3; %Toleranz als Berechnungsgrenze
dx=0.1; %In welchen x-Wert Abständen Punkte berechnet werden
Xf=4; %Bis welchem x-Wert berechnet wird
tspan=(0:dx:Xf); %Zeitintervall für ode45
Nt=Xf/dx+1;
for i=1:10000 %Intervallschritte
x3=x3-0.0001;
y0=[x1;x2;x3;x4;x5;x6]; %6 Startbedingungen,
[t,y]=ode45(@(t,y) odefcn(tspan,y),tspan,y0);
y2=(y(Nt,2));
ifabs(y(Nt,2)-1.0)<tol, break, end end
Wenn du Werte an der rechten Intervallgrenze vorgeben willst, ist das kein Anfangswertproblem, sondern ein Randwertproblem, was nicht mit ode45 gelöst werden kann. Hierfür gibt es bvp4c und bvp5c. Ob die mit inf umgehen können, müsstest du nachsehen, stelle ich mir aber für ein numerisches Verfahren sehr schwierig vor.
Intuitiv würde ich ohnehin vermuten, dass es eine Lösungsfamilie gibt, die bei unterschiedlichen H' und H'' unterschiedlich schnell gegen 0 tendiert. Ich würde also eher versuchen, "vernünftige" Bedingungen aller Größen für t = 0 zu finden und "hoffen", dass die Bedingungen gegen inf automatisch erfüllt werden.
Die Gleichungen passen übrigens nicht zur Graphik: Die Ableitung (Steigung) von H ist durchgehend positiv, d.h. nach deiner ersten Gleichung wäre F negativ - ist es aber in der Graphik nicht.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Also wenn ich "vernünftige" Größen für t=0 finde kann ich trotzdem ode45 benutzt, habe ich das richtig verstanden? Ich habe mir bvp4c und bvp5c schon mal angesehen, finde die Umsetzung für diesen Fall aber sehr kompliziert.
Okay, den Fehler mit H habe ich nicht gesehen, ich werde gleich daran arbeiten und gucken woran das liegt.
Also wenn ich "vernünftige" Größen für t=0 finde kann ich trotzdem ode45 benutzt, habe ich das richtig verstanden?
Die Frage ist, was das Ziel ist. Wenn das Ziel ist, die Lösung zu bestimmten Anfangsbedingungen zu finden: ja. Wenn das Ziel ist, eine Lösung mit anderen Kriterien (wie eben dieses Grenzwertverhalten) zu finden, dann möglicherweise nicht. Kommt auf den Versuch an.
Zitat:
Ich habe mir bvp4c und bvp5c schon mal angesehen, finde die Umsetzung für diesen Fall aber sehr kompliziert.
sehr finde ich nun übertrieben. Randwertprobleme sind aber nun mal komplexer als Anfangswertprobleme.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
also ich habe mir bvp4c jetzt mal angeschaut, auch wie es mit x=inf aussieht. Man macht einfach Schätzungen, wie es bis zu einem gewissen x-Wert aussieht- Ich habe hier jetzt bis x=4 genommen.
Leider funktioniert der Code nicht, ich bekomme jedes Mal die Fehlermeldung:
Code:
Error using bvp4c (line251)
Unable to solve the collocation equations -- a singular Jacobian
encountered.
Error in Testneu (line20)
sol = bvp4c(@fsode, @fsbc, solinit);
Die Gleichungen passen übrigens nicht zur Graphik: Die Ableitung (Steigung) von H ist durchgehend positiv, d.h. nach deiner ersten Gleichung wäre F negativ - ist es aber in der Graphik nicht.
In der Abbildung ist der Verlauf von -H eingetragen, nicht H. Die Steigung von H ist also negativ.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
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
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.