Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Structs in ode-Funktion übergeben
Autor
Universität/Hochschule Structs in ode-Funktion übergeben
Kons
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 30.07.2009
Mitteilungen: 37
  Themenstart: 2017-04-28

Hallo zusammen, ich komme mit der Weitergabe mehrerer structs in Matlab nicht weiter. Mein Programm sieht so aus: \sourceon matlab \numberson struct1 = struct; struct2 = struct; % jede Menge Quellcode [t,y]=ode15s(@ODE, tSpan, initialValue,options,struct1,struct2); function yp = ODE(t,y,struct1,struct2) % innerhalb dieser Funktion folgen weitere Sub-Routinen end \sourceoff Die Übergabe der structs in die ode15s-Funktion klappt problemlos. Nun ist in einem der structs ein Vektor definiert, der innerhalb weiterer Sub-Routinen in der ODE-Funktion verändert wird. Sobald die Funktion @ODE verlassen wird, also z.B. der nächste Zeitschritt berechnet wird, wird der besagte Vektor wieder auf den Anfangszustand umgeschrieben. Wie kann ich den struct der ode15s Funktion übergeben, dass dieser nicht immer wieder auf den Anfangszustand gesetzt wird? Vielen Dank Kons


   Profil
majoka
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 25.02.2014
Mitteilungen: 814
  Beitrag No.1, eingetragen 2017-04-28

Mir ist nicht genau klar was Du machen möchtest. Vielleicht hilft ja folgendes schon weiter \sourceon Matlab [T,Y] = ode15s(@(t,y) ODE(t,y,struct1,struct1),[0 3000],[2 0]); \sourceoff [Verschoben aus Forum 'Programmieren' in Forum 'Matlab' von majoka]


   Profil
Kons
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 30.07.2009
Mitteilungen: 37
  Beitrag No.2, vom Themenstarter, eingetragen 2017-04-28

Hallo majoka, nein, das löst mein Problem leider nicht. Ich habe mal etwas geschrieben, das mein Problem verdeutlicht. \sourceon Matlab A = struct; A.vek1 = zeros(5,1); tspan = [0 5]; y0 = [0 0.01]; [t,y] = ode15s(@(t,y) odefcn(t,y,A), tspan, y0); \sourceoff \sourceon Matlab function dydt = odefcn(t,y,A) dydt = zeros(2,1); dydt(1) = y(2); dydt(2) = t.*y(1); [t,y,A] = Afunc(t,y,A); end \sourceoff \sourceon Matlab function [t,y,A] = Afunc(t,y,A) A.vek1(:,1) = A.vek1(:,1) + 5.; end \sourceoff Wenn ich "function dydt" verlasse, wird "A.vek1" wieder null gesetzt. Wie kann ich das unterbinden, so dass A.vek1 in der Funktion "Afunc" aufaddiert wird? Beste Grüße Kons


   Profil
Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen.
majoka
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 25.02.2014
Mitteilungen: 814
  Beitrag No.3, eingetragen 2017-04-29

Hast Du es mal mit "persistent" probiert? \sourceon Matlab function [t,y,A] = Afunc(t,y,A) persistent A_init A_state if isempty(A_init) A_state = A.vek1(:,1); A_init = A; end A_state = A_state + 5.; A.vek1(:,1) = A_state; end \sourceoff Auf die Schnelle habe ich Dein Beispiel aber nicht verstanden: Die Afunc hat doch auf die odefcn nicht wirklich einen Einfluss?


   Profil

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]