Wichtig ist das var2 nicht der Matrixname ist, sondern ebenfalls nur eine Stringvariable welches den eigentlichen Matrixnamen beinhalten soll.
Habe auch schon erfolglos mit evalin, und:
Hallo Harald,
"$" ist eine Marotte aus Android. Hat sich hier wohl eingeschlichen.
Wieso sollen eval, evalin und assignin vermieden werden? und welche Alternativen habe ich?
Was ich will ist eigentlich ganz Simple. Ich habe ein Skript geschrieben, welches verschiedene Matrizen einlesen, mit dem Inhalt Aufgaben erledigen und dann die Ergebnisse in neue Matrizen speichern soll. So nun möchte ich eben jene neue Matrizen basierend auf die original Matrizen in leichter Abwandlung speichern. Dazu muss ich im Skript die Berechnungen mit einer neutralen, allgemeinen Variablen vollführen und anschließend diese dann Umbenennen. Dabei sollte der Name der neuen Variablen aus eben einer anderen String variablen gelesen werden. Das hier eben
Code:
var = char(Matrix); %alt
var2=strcat(Matrix,'_neu'); %neu (Das funktioniert)
Wieso sollen eval, evalin und assignin vermieden werden? und welche Alternativen habe ich?
Es gibt wie gesagt sehr viele Beiträge zu diesem Thema. Allein wenn du auf gomatlab suchst, findest du sicher ein paar Dutzend Fragen zu eval(in) mit der stets gleichen Antwort, es zu vermeiden, und ggf. Rat zur Abänderung des Codes.
Ein schöner Link dazu:
http://blogs.mathworks.com/loren/2006/01/04/more-in-eval/
Zitat:
So nun möchte ich eben jene neue Matrizen basierend auf die original Matrizen in leichter Abwandlung speichern. Dazu muss ich im Skript die Berechnungen mit einer neutralen, allgemeinen Variablen vollführen und anschließend diese dann Umbenennen. Dabei sollte der Name der neuen Variablen aus eben einer anderen String variablen gelesen werden.
Mir ist klar, was du grundsätzlich möchtest. Ich bin allerdings der Ansicht, dass das keine gute Idee ist und zu mehr Problemen als Nutzen führt. Du merkst ja selbst, dass das schwer umsetzbar und schwer lesbar ist.
Wenn zusätzliche Informationen benötigt werden, dann kann man die beispielsweise in Feldern einer Struktur abspeichern, aber nicht im Variablennamen.
Zitat:
Das hier eben ...
wobei ich nach wie vor nur raten kann, was du damit genau bezweckst.
Konkret kann man an eval nur ein Argument übergeben, und man kann an einen Befehl keine Zuweisung machen.
Vielen Dank für deine Antwort,
ich habe aber leider einen Riesigen Datensatz. Und um einen Automatismus zu programmieren welcher mir erlaubt die Stationarität herauszufiltern muss ich die gewonnen Ergebnisse als eine Variation der Originalvariable abspeichern. Ansonsten verliere ich die Übersicht.
Sprich Matrizen: t1, t2, t3, v_0, v_1 -> Diese bearbeite ich als schleife.
und das Ergebnis soll sein:
t1_stat, t2_stat, t3_stat, ...
Ich führe Anfangs mehrere temporäre Matrizen für die Berechnung ein.
Am Ende meiner while-Schleife werden sie umgeschrieben und gecleart.
wobei ich die Variable "var" zu Beginn über einen inputdlg definieren kann.
Code:
%Schreibe Data in EndMatrizen ('Variablename' , 'für Mittelwert' , 'Object') assignin('base', strcat(var,'_m_string'), tmp_mittel_string);
assignin('base', strcat(var,'_m_stat'), tmp_mittel_stat);
assignin('base', strcat(var,'_m_roh'), tmp_mittel);
%Lösche temporäre Variablen
clear t1 t2 t3 x y i cnt tmp tmp2 tmp_mittel tmp_mittel_stat tmp_mittel_string;
clearvar anz obj proz;
Es gibt immer Möglichkeiten evalin etc. zu vermeiden. Je umfangreicher ein Projekt ist und man gezwungen ist mit dem Debugger zu arbeiten, desto mehr wird man struct oder cellarrays vorziehen.
Nimm Haralds Einwände ernst. Per EVAL Indices in den Namen von Variablen zu verstecken, ist ein schlechter Programmierstil. Es gibt immer eine elegantere und effizientere Lösung.
"var" ist der Name einer standard Matlab-Funktion. Es führt immer wieder zu Bugs, wenn man diese Namen für Variablen verwendet.
Gruß, Jan
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.