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

Matrix mit einer Stringvariable als Name beschreiben

 

iEddy
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2014, 18:35     Titel: Matrix mit einer Stringvariable als Name beschreiben
  Antworten mit Zitat      
Hallo Freunde. Ich möchte eigentlich das:
Code:

$ var = Text;
$ var2=Q_mittel

$ eval('var2','(:,1)') = eval(var,'()');
$ eval('var2','(:,2)') =tsmovavg(eval(var),'s',120,1);


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:

Code:
$ assignin('base', 'var2','(:,1)', eval(var,'()'));


probiert. Doch immer erhalte ich eine Fehlermedlung. Ich brauche Bitte dringend Hilfe. Nirgendwo was gefunden und seit 6 Stunden auf der Suche!

Danke
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2014, 21:17     Titel:
  Antworten mit Zitat      
Hallo,

eval, evalin und assignin sollten grundsätzlich vermieden werden - siehe diverse Threads dazu.

Sämtliche Befehle sind ungültige Syntax, insofern ist höchstens zu erahnen, was du eigentlich willst.

Was ist der Sinn der $ ?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
iEddy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2014, 11:47     Titel:
  Antworten mit Zitat      
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)

eval('var2','(:,1)') = eval(var,'()');  (das nicht mehr)
eval('var2','(:,2)') =tsmovavg(eval(var),'s',120,1);


Danke und Grüße,
Eddy
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.10.2014, 12:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
iEddy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2014, 15:02     Titel:
  Antworten mit Zitat      
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, ...

Wie kann ich das anstellen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.10.2014, 15:32     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Sprich Matrizen: t1, t2, t3, v_0, v_1

Wie werden diese Matrizen erzeugt?

Zitat:
-> Diese bearbeite ich als schleife.

Wie wird diese Schleife gemacht? Etwa auch mit eval?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
iEddy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2014, 18:59     Titel:
  Antworten mit Zitat      
Hallo,
habs geschafft.

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;
clear var anz obj proz;
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.10.2014, 19:08     Titel:
  Antworten mit Zitat      
Und was spricht gegen einen Struct?

Code:

myData = struct('VARname', Var, 'Datafield', ...)
% oder so
myData(1).VARname = Var;
myData(1).Datafield = Matrix;
 


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.10.2014, 23:32     Titel:
  Antworten mit Zitat      
Hallo iEddy,

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
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.