Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Digitale Signalverarbeitung

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleichungssystem aus Differentialgleichungen lösen mit ode4

 

Nico2020
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2020, 10:56     Titel: Gleichungssystem aus Differentialgleichungen lösen mit ode4
  Antworten mit Zitat      
Hallo zusammen,

ich möchte folgendes Gleichungssystem lösen:

2*F + H' = 0
F^2 + F'*H - G^2 - F'' = 0
2*F*G + H*G' - G'' = 0
P' + HH' - H'' = 0

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.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 22.875
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.12.2020, 11:12     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2020, 16:25     Titel:
  Antworten mit Zitat      
Hallo,

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?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.875
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2020, 16:47     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2020, 18:24     Titel:
  Antworten mit Zitat      
Aber wenn ich die Gleichungen nach ihren höchsten Ableitungen aufgelöst habe

F^2 + F'*H - G^2 = F''
2*F*G + H*G' = G''
P' + HH' = H''

und für F = -0.5*H' eingesetzt habe, kann ich die doch nicht weiter einsetzen?
Wie soll da eine Funktion am Ende bei raus kommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.875
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2020, 18:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wenn ich ... für F = -0.5*H' eingesetzt habe

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2020, 20:29     Titel:
  Antworten mit Zitat      
Für F=-0.5*H

aus F²+F'H-G²=F'' => (-0.5H')²+(-0.5H'')H-G² = -0.5H''' (hier später noch /(-0.5))
aus 2FG+HG'=G'' => 2*(-0.5H')G+HG'=G''
und P'+HH'=H''

Jetzt weiß ich nicht wie ich weiter vorgehen soll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2020, 21:35     Titel:
  Antworten mit Zitat      
Vielen Dank, jetzt hab ich es verstanden Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2020, 18:36     Titel:
  Antworten mit Zitat      
Hallo,

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?

Code:
%Rotationssymetrische Staupunktströmung
clc; close all; clear all;

%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));
  if abs(y(Nt,2)-1.0)<tol, break, end
end

figure(1)
plot(t,y(:,1),t,y(:,2),t,y(:,3),t,y(:,4),t,y(:,5),t,y(:,6),'LineWidth',2)
axis([0 4 0 1]);
grid on;
legend('f´´´´´','f´´´´','f´´´','f´´','','f');
xlabel('\zeta=z\surd(\omega/\nu)');
ylabel('f,f´,f´´');
title('Rotationssymetrische Staupunktströmung')


function dydt = odefcn(tspan,y)
%           H    = y(1)
%x(1)' = H'   = y(2)
%x(2)' = H''  = y(3)
%x(3)' = H''' = ((-0.5H')²+(-0.5H'')H-G²)/(-0.5) = ...
%               ((-0.5*y(2))²-0.5*y(3)*y(1)-y(4))/(-0.5)
%          G    = y(4)
%x(4)' = G'   = y(5)
%x(5)' = G''  = 2*(-0.5H')G+HG' = 2*(-0.5*y(2))*y(4)+y(1)*y(5)
%x(6)' = H'' - HH' = y(3)-y(1)*y(2)

dydt = [y(2);
        y(3);
        ((-0.5*y(2))^2-0.5*y(3)*y(1)-y(4)^2)/(-0.5);
        y(5);
        2*(-0.5*y(2))*y(4)+y(1)*y(5);
        y(3)-y(1)*y(2)];
end


Screenshot 2020-12-30 173130.jpg
 Beschreibung:

Download
 Dateiname:  Screenshot 2020-12-30 173130.jpg
 Dateigröße:  31.87 KB
 Heruntergeladen:  28 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.875
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.12.2020, 22:32     Titel:
  Antworten mit Zitat      
Hallo,

G ist doch x4? Dann solltest du x4 auf 1 setzen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.12.2020, 14:57     Titel:
  Antworten mit Zitat      
Hallo,

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.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.875
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.01.2021, 23:26     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nico2020
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 02.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2021, 21:56     Titel:
  Antworten mit Zitat      
Hallo,

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 (line 251)
Unable to solve the collocation equations -- a singular Jacobian
encountered.

Error in Testneu (line 20)
  sol = bvp4c(@fsode, @fsbc, solinit);


Woran könnte das liegen?

Code:
%Ebene Staupunktströmung
clc; close all; clear all;

infinity = 4;
solinit = bvpinit(linspace(0,infinity,5),[1 0 0 0 0 0]);

  sol = bvp4c(@fsode, @fsbc, solinit);
  x = sol.x;
  f = sol.y;


figure(1)
%plot(x,f(1,:),x,f(2,:),x,f(3,:),'LineWidth',2)
axis([0 4 0 1]);
grid on;
legend('f´´','','f');
xlabel('\zeta=z\surd(\omega/\nu)');
ylabel('f,f´,f´´');
title('Ebene Staupunktströmung')

function dfdeta = fsode(x,f)
%        H    = y(1)
%x(1)' = H'   = y(2)
%x(2)' = H''  = y(3)
%x(3)' = H''' = ((-0.5H')²+(-0.5H'')H-G²)/(-0.5) = ...
%               ((-0.5*y(2))²-0.5*y(3)*y(1)-y(4))/(-0.5)
%        G    = y(4)
%x(4)' = G'   = y(5)
%x(5)' = G''  = 2*(-0.5H')G+HG' = 2*(-0.5*y(2))*y(4)+y(1)*y(5)
%x(6)' = H'' - HH' = y(3)-y(1)*y(2)
dfdeta = [f(2);
          f(3);
          ((-0.5*f(2))^2-0.5*f(3)*f(1)-f(4)^2)/(-0.5);
          f(5);
          2*(-0.5*f(2))*f(4)+f(1)*f(5);
          f(3)-f(1)*f(2)];    
end

function res = fsbc(f0,finf)

res =[f0(1) - 0;
      f0(4) - 1;
      finf(4) - 0;
      f0(2);
      f0(3);
      f0(5)];
end


PS:
Zitat:
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.875
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.01.2021, 23:54     Titel:
  Antworten mit Zitat      
Hallo,

mehr als das, was Google findet, kann ich dir dazu auch nicht sagen:
https://de.mathworks.com/matlabcent.....4c-function-within-matlab

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 ;)
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.