Verfasst am: 27.06.2016, 10:47
Titel: Variable über String ansprechen und manipulieren
Ich bin aktuell dabei eine Sensitivitätsanalyse für eine DGL zu erstellen.
Da ich sehr viele Parameter habe würde ich gerne eine Funktion schreiben, die ich mit Übergabe der zu manipulierenden Variable aufrufe und die mir Diagramme erstellt bei der der jeweilige Parameter prozentual vom ursprünglichen abweicht.
Die Problematik besteht nun darin, dass der Name der manipulierten Variable dem als String übergebenen Text entsprechen muss um mit Ode 45 die richtigen werte zu übergeben.
function Sens(VarName)
.
.
.
VarStart=eval(VarName);
mWerte=[10203050100];
j=1;
while j<=size(mWerte,2)
!!Hier sollte nun "m" stehen!!=mWerte(1,j)*0.01*VarStart;
[t,x]=ode45(@(t,x)DGLSystem(t,x,e,g,i,k,m,p,q,r),T,StartParam);
.
.
.
Die "Problematik" ist, dass ich den wert in m haben möchte sofern ich die Funktion mit Sens('m') aufrufe, der Wert in z.B. "k" sein soll wenn ich die Funktion mit Sens('k') aufrufe.
Nur so ist gewährleistet, dass die Richtigen Werte an ode45 übergeben werden.
jetzt habe ich aktuell nur noch die Problematik, dass die Variable im Workspace abgelegt wird und die Funktion somit nur funktioniert wenn ich sie in den Workspace kopiere und von dort aus starte.
... Weißt du zufällig was ich anstelle von 'base' schreiben muss, damit er die Variable im Funktions-Workspace ablegt?
letztlich sind dynamische Variablennamen keine gute Idee, da es ein ständiges Gefrickel mit eval/evalin/assignin nach sich zieht. Man sollte also von vorneherein versuchen, das zu vermeiden.
Das war die Lösung des Problems! Assignin liefert die Werte immer an den Workspace.
Egal ob ich mit base oder caller aufrufe.
Einstellungen und Berechtigungen
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
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.