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

rekursive DGL lösen?

 

Klaatu
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2009, 19:19     Titel: rekursive DGL lösen?
  Antworten mit Zitat      
Hallo zusammen.

Ich bin noch immer nicht besonders bewandert was Matlab angeht daher wende ich mich mit viel Hoffnung an euch. Zu meinem Problem:
Ich möchte ein System von DGLs der Form y'=f(y', y, x), x'=f(y',y,x) lösen. Die erste Funktion ist also rekursiv und lässt sich auch nicht umstellen. Für diskrete Punkte kann ich y' mit fzero berechnen. Gibt es eine Möglichkeit die iterative Berechnung von y' in ode45 einzubauen? Meine Versuche haben da nicht viel ergeben. Oder gibt es eine andere Möglichkeit ein solches Gleichungssystem zu berechnen?

Mit freundlichen Grüßen,
Klaatu
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

es sollte eigtl kein Problem sein... An ode45 oder ähnliches eine Funktion übergeben, die in etwa so aussieht:

Code:
function dz = fctn(t, z)

dz(1) = % x-Komponente
dz(2) = fzero(...) % y-Komponente


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Klaatu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2009, 23:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die erneute Hilfe. Habe das mal versucht mit der Funktion fzero. Allerdings habe ich noch Schwierigkeiten die z(1).....z(4) der Funktion zu übergeben. Des weiteren hatte ich bei kleinen Proberechnungen immer den Fehler des überschrittenen Recursionslimits. Auch eine Erhöhung hatte da nichts bewirkt außer, dass bei 5000 Matlab abschmiert. Hast du vll noch einen Tipp für mich?

Mit freundlichen Grüßen,
Klaatu
Private Nachricht senden Benutzer-Profile anzeigen
 
Nicolas S.
Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 25.09.2009, 08:30     Titel:
  Antworten mit Zitat      
rekursiv != implizit

Ansonsten: Notfalls mal nachschauen, woran das System scheitert. Einfach mal einen impliziten Euler von Hand unter Matlab programmieren und schauen, wo es schiefgeht.

Grüße
Nicolas
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.09.2009, 09:08     Titel:
  Antworten mit Zitat      
Hallo Klaatu,

poste doch mal deinen Code bzw. das genaue Problem.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Klaatu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2009, 13:07     Titel:
  Antworten mit Zitat      
Hallo zusammen,

erstmal danke dafür, dass ihr euch mit meinem Problem beschäftigt.
Ich habe nochmal die Sache mit ode45 in Kombination mit fzero bearbeitet. Für einfache Systeme funktioniert das auch ganz prima. (Ich hatte den Code nochmal neu geschrieben, danach klappte es.) Ich hatte zu Testzwecken die Nullstelle einer linearen Funktion suche lassen. Eine quadratische Funktion funktionierte schon nicht mehr. Ich schätze weil fzero zwei Nullstellen zurückgibt. Für mein eigentliches Problem funktioniert es ebenfalls nicht. Die Nullstellensuche gibt zuverlässig einen Wert zurück, in Kombination mit ode45 ergeben sich allerdings konstante Werte als Lösung. Ich hab euch mal mein DGL-System als PDF angehängt. Die Terme sind recht lang. Mein Code ist recht einfach (Bis auf die Formeln) und folgender:


[Code]%DGL-funktion

function dy = KKerweitertDGLtest( t,y )

global Lp sigma omega R T d delta1 delta2 D1 D2

delta1=0.01;
delta2=0.01;
D1=5e-10;
D2=5e-10;
R=8.315;%allgemeine Gaskonstante [J/molK]
Lp=5e-12;%Parameter Lp [m³/Ns]
sigma=0.5;%Parameter sigma [-]
omega=2e-10;%Parameter omega [mol/Ns]
T=298.15;%Temperatur des Versuchs [K]
d=0.005;%Durchmesser der Membran [m]
A=0.25*pi*d^2;%Fläche der Membran


%y(1)=vfeed
%y(2)=vfermenter
%y(3)=nfeed
%y(4)=nfermenter
%c2=cfeed=y(3)/y(1)
%c1=cfermenter=y(4)/y(2)



dy = zeros(4,1); % Zeilenvektor

f=@(Jv) Lp*sigma*R*T*(exp((1-sigma)*Jv/(omega*R*T))-1)*((y(4)/y(2)-y(3)/y(1))*exp(Jv*delta2/(D2))*(1-sigma)+sigma*(y(4)/y(2)*exp(Jv*delta1/(D1))*exp(Jv*delta2/(D2))-y(3)/y(1)))/((1-sigma)*(1-exp((1-sigma)*Jv/(omega*R*T))*exp(Jv*delta1/(D1))*exp(Jv*delta2/(D2)))+exp(Jv*delta1/(D1))*sigma*(1-exp((1-sigma)*Jv/(omega*R*T))))-Jv;

z=fzero(f, 1e-12);



dy(1)=-A*z;

dy(2)=A*z;

dy(3)=-A*z*(1-sigma)*(y(4)/y(2)-y(3)/y(1)*exp((1-sigma)*z/(omega*R*T))*exp(z*delta1/D1)*exp(z*delta2/D2))/((1-sigma)*(1-exp((1-sigma)*z/(omega*R*T))*exp(z*delta1/D1)*exp(z*delta2/D2))+exp(z*delta1/D1)*sigma*(1-exp((1-sigma)*z/(omega*R*T))));

dy(4)=A*z*(1-sigma)*(y(4)/y(2)-y(3)/y(1)*exp((1-sigma)*z/(omega*R*T))*exp(z*delta1/D1)*exp(z*delta2/D2))/((1-sigma)*(1-exp((1-sigma)*z/(omega*R*T))*exp(z*delta1/D1)*exp(z*delta2/D2))+exp(z*delta1/D1)*sigma*(1-exp((1-sigma)*z/(omega*R*T))));


end
[\code]

Diese Funktion übergebe ich ode45. Als Lösung erhalte ich Konstante Werte von y(1),y(2) und y(3). Das ist nicht das was man erwarten würde, daher denke ich steckt hier irgendwo ein Fehler. Vll hat ja irgendjemand eine Idee wie ich das zum laufen bekomme.


Mit freundlichen Grüßen,
Klaatu

DGL-System.pdf
 Beschreibung:

Download
 Dateiname:  DGL-System.pdf
 Dateigröße:  45.18 KB
 Heruntergeladen:  578 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.09.2009, 14:28     Titel:
  Antworten mit Zitat      
Das ist auf Anhieb schwierig zu beantworten.
Hinweise:
- die Reihenfolge der Gleichungen stimmt nicht mit dem PDF überein (Vorzeichen)
- Definiere doch A0, A1, A2 als function handles, dann wird es übersichtlicher.
- Teste mal, ob deine Funktion für t = 0 und den Anfangswert, den du übergibst, eine sinnvolle (das musst du als Anwender wissen) Rückgabe liefert
- wenn die Lösung konstant zu sein scheint, hast du sie vielleicht über einen zu geringen Zeitraum simuliert?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Klaatu
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2009, 15:17     Titel:
  Antworten mit Zitat      
Kommando zurück. Peinlicher wirds nimmer. Wenn man mit m³ rechnet und mL erwartet ist es kein wunder, dass die Werte scheinbar stagnieren. Das Volumen war um den Faktor 10^6 zu groß.
Eure Tipps waren ganz richtig und funktionieren vollkommen. Tut mir wirklich leid, dass ich hier so einen Quatsch poste. Vielen Dank für die schnelle und gute Hilfe.
Da ich noch die Versuchsdaten einlesen und die Parameter fitten muss, komme ich, wenn möglich, bestimmt noch mal darauf zurück. Diesmal dann hoffentlich mit qualifizierteren Fragen.

Gruß und besten Dank,
Klaatu
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.09.2009, 15:22     Titel:
  Antworten mit Zitat      
Ich hatte es mir ja vorhin noch verkniffen, aber in diesem Sinne dann: SI-Einheiten!! Razz Wenn es dich beruhigt: den meisten von uns wird sowas schon passiert sein, mir jedenfalls ja.

Grüße,
Harald
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 - 2024 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.