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

Mathieusche Differentialgleichung in Octave

 

Marco1234

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2016, 16:31     Titel: Mathieusche Differentialgleichung in Octave
  Antworten mit Zitat      
Hallo zusammen!

Ich versuche seit drei Tagen vergebens ein Paper zu reproduzieren. Mein Problem ist die numerische Lösung einer linearen gewöhnlichen DGL 2. Ordnung, der Mathieuschen DGL mit Octave.

lsode scheint (verglichen mit dem Paper) ein falsches Ergebnis auszuspucken:
Code:
function [X Z T] = reboot3 ()
   clear
   graphics_toolkit('gnuplot')
   val = [ 0028            # 1   m/z         Aktuelle m/z für Sim
         0020             # 2   U         offset Voltage
         0124             # 3   V         RF Voltage
         2*pi*2000000          # 4   omega      Frequenz f ... omega=2*pi*f
         0.00275          # 5   r0         Quad-Innenradius
         10e+1            # 6   U beschl.   Beschleunigungsspannung Ionen, vor Eintritt in Quad
         1e-9            # 7   dt         Zeitintervall für Sim
         0.10];            # 8   zmax      Simuliertes Längenintervall
   
   e=1.602176462e-19;                     #Elementarladung in Coulomb
   ukg=1.66054e-27;                     #1u=1*ukg kg
   
   vz=sqrt(1/val(1)*2*val(6)*e/ukg);         #Geschw. in z
   tmax=val(8)/vz;                        #Sim. Dauer
   points=tmax/val(7);                        #Berechn. Punkte
   zres=val(8)/points;                     #Auflösung in z
   phasepi=0.5*pi;
   
   ax=1/val(1)*e/ukg*4*val(2)/val(5)^2/val(4)^2#ax-Wert des Stabilitätsdiagramms
   qx=1/val(1)*e/ukg*2*val(3)/val(5)^2/val(4)^2#qx-Wert des Stabilitätsdiagramms
   
   Z=[0:zres:val(8)];
   
   function xdot=pendx(x,t)
      xdot(1)=x(2);
      xdot(2)=-(ax-2*qx*cos(2*val(4)*t/2+phasepi))*x(1);
   endfunction
   
   solx=lsode("pendx",[0.0003 0000],t=[0:val(7):tmax]);
   
   Points=points
   Zres=size(Z)
   Tres=size(t)
   plot(Z,solx);
endfunction

Wenn ich es mit ode45 probiere gibt es mir den Fehler aus "handles to nested functions are not yet supported".
Und daspk kann ich nicht Anwenden, weil mir die Dokumentation zu kryptisch ist...
Vielleicht kann mir jemand ein Beispiel für die Implementation mit daspk geben, mit der ich weiterarbeiten kann.
Vielen Dank!
Marco


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.03.2016, 12:02     Titel: Re: Mathieusche Differentialgleichung in Octave
  Antworten mit Zitat      
Hallo Marco1234,

Ich habe keinerlei Erfahrungen mit Octave. Aber die Fehlermeldung erscheint mir eindeutig:
Zitat:
"handles to nested functions are not yet supported"

Ich würde als als erstes pendx aus der Funktion heraus ziehen und als eigentständige Funktion speichern.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2016, 17:52     Titel: Re: Mathieusche Differentialgleichung in Octave
  Antworten mit Zitat      
Hallo Jan, vielen Dank für die Antwort.

Ich habe noch einen Fehler in meinem Ursprünglichen code gefunden. Richtig ist
Code:
     
function xdot=pendx(x,t)                    
        xdot(1)=x(2);
   xdot(2)=-(ax+2*qx*cos(2*t+phasepi))*x(1);
endfunction
lsode_options("integration method", "stiff");
solx=lsode("pendx",[0.0003 0.0000],t=[0:val(4)*val(7)/2:val(4)*tmax/2]);

Funktioniert nur leider trotzdem nicht wie gewünscht Sad

Mit ode45 würde ich das ganze so lösen:
Code:

function dydt=pendx(t, x)
   dydt=[x(1); -(ax+2*qx*cos(2*t+phasepi))*x(1)];
endfunction
[t,x]=ode45(@pendx, [0 val(4)*tmax/2], [0.0003 0]);

Dann bekomme ich aber oben beschriebene Fehlermeldung...

Du meinst, ich solle das ganze so implementieren?
Code:

pendx=@(t,x)[x(1); -(ax+2*qx*cos(2*t+phasepi))*x(1)];
[t,x]=ode45(pendx, [0 val(4)*tmax/2], [0.0003 0]);

Jetzt sagt er mir "ode45 undefined"... sehr komisch, das Package ist jedenfalls installiert.
Wie würdest du es in MATLAB lösen wollen? Danke schonmal!
 
Marco1234

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2016, 18:19     Titel:
  Antworten mit Zitat      
Sorry, ich bins nochmal.

ode45 läuft jetzt mit
Code:

options=odeset('InitialStep',val(4)*val(7)/2,'MaxStep',val(4)*val(7)/2,'AbsTol', 1e-5);
pendx=@(t,x)[x(2); -(ax+2*qx*cos(2*t+phasepi))*x(1)];
[t,x]=ode45(pendx, [0 val(4)*tmax/2], [0.0003 0], options);


und liefert genau dasselbe, offensichtlich falsche, Ergebnis wie
Code:

function xdot=pendx(x,t)                  
        xdot(1)=x(2);
   xdot(2)=-(ax+2*qx*cos(2*t+phasepi))*x(1);
endfunction
   
lsode_options("integration method", "stiff");
solx=lsode("pendx",[0.0003 0.0000],t=[0:val(4)*val(7)/2:val(4)*tmax/2]);


Es liegt also wohl nicht am solver, sondern an meiner Implementierung der DGL, auch wenn ich meinen Fehler nicht finden kann. Danke jedenfalls trotzdem!
Viele Grüße
Marco
 
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.