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

Nichtlineare DGL's mit zwei Parametern

 

harry
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2008, 10:17     Titel: Nichtlineare DGL's mit zwei Parametern
  Antworten mit Zitat      
Hallo Leute,
ich habe folgendes Problem und hoffe,dass ihr mir weiterhelfen könnt:

Ich habe 9 nichtlineare Differentialgleichungen mit zwei Parametern,die ich hier A und B nenne, mit ode15s berechnen lassen,wobei zunächst A=B=0 ist. Als Ergebnis bekomme ich meinen x-Vektor.
Bis hierher ist alles ok.
Mein Problem ist nun: ich möchte die Parameter A und B, welche Skalare sind, jeweils in einem Intervall zw. 0 und 10^2 ( sagen wir in 10-er Schritten) laufen lassen und die Differentialgleichungen, bei jedem Schritt, somit neu berechnen,so dass ich meine neuen x-Vektoren bekomme.
Wie mache ich das am einfachsten und wie stell ich dann die neuen Vektoren zu einer Matrix zusammen?

Vielen Dank schonmal
Grüßle,
Harry
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 09.01.2008, 10:42     Titel:
  Antworten mit Zitat      
Hallo Harry,

ich denke, am einfachsten geht das mit einer nested function. Dafür muss dein Code, der den ode15s-Befehl enthält, eine Funktion sein, in der dann die DGL wiederum als Funktion steht. Damit kann man in einer Schleife die Parameter A und B neu setzen, und sie verändern sich dadurch auch in der DGL, ohne dass sie als globale Variablen deklariert sein müssen. Also ungefähr so:

Code:
function myOdeSolver

A=0:10:100;
B=A;
tspan = ...
x0=...
options = odeset(...)

for k=1:11
    a=A(k);
    b=B(k);
    [time,x]=ode15s(@odefun,tspan,x0,options);
    X(k,:)=x;
end

function x = odefun(t,s)
    ...    % hier können a und b verwendet werden
    x=...
end

end


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
harry
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2008, 09:18     Titel:
  Antworten mit Zitat      
hallo Bijick ,

vielen Dank für deine schnelle Antwort.
leider klappt die Zusammenfassung der Vektoren zu einer Matrix nicht und ich weiß leider auch nicht, woran das liegen könnte.du vielleicht?

Danke, grüßle
Harry
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 10.01.2008, 09:39     Titel:
  Antworten mit Zitat      
Hallo Harry,

das könnte daran liegen, dass in jeder DGL unterschiedlich viele Zeitschritte gerechnet werden, sodass die Vektoren unterschiedliche Längen haben. Versuch's mal so:

Code:
for k=1:11
a=A(k);
b=B(k);
[time,x]=ode15s(@odefun,tspan,x0,options);
X(k,1:length(x))=x;
end


Eine andere Möglichkeit ist, erst mal in ein cell array zu speichern, also

Code:


Der Vorteil liegt darin, dass eine Matrix bei unterschiedlichen x-Längen mit Nullen aufgefüllt wird, während im cell array nur genau die Lösungen der DGL stehen. Je nachdem, wie du die Werte weiterverwenden willst, und ob die Lösungen selbst auch Nullwerte enthalten können, biete sich der eine oder andere Datentyp an.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
harry
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2008, 09:50     Titel:
  Antworten mit Zitat      
hallo Bijick,

wär's dann nicht besser,wenn ich vorab die Zeitschritte begrenze, damit ich hinterher Vektoren gleicher Länge bekomme?

grüßle
Harry
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 10.01.2008, 09:57     Titel:
  Antworten mit Zitat      
Hallo Harry,

das kommt auf Deine DGL an. Auf die Schnelle kann ich nicht sogen, ob es eine Option gibt, mit der man die exakte Anzahl der Zeitschritte vorgeben kann, ohne die Zeitpunkte selbst im tspan anzugeben. Wenn Du also die Zeitpunkte für alle DGLs vorgeben kannst, weil Du sie gut kennst, ist das eine gute Möglichkeit. Aber vor dem cell array musst Du auch keine Angst haben, damit kann man wirklich auch gut weiterarbeiten.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
harry
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2008, 10:05     Titel:
  Antworten mit Zitat      
Okay, herzlichen Dank Bijick Smile

grüße
Harry
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.