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

Cell aus WS mit WS Variablen ausführen

 

WS Niete

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2016, 18:17     Titel: Cell aus WS mit WS Variablen ausführen
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine WS Variable vom Typ cell, die als wiederum mehrere Variablen vom Typ double enthält, welche in andere Schleifen erstellt worden sind.

Nun möchte ich die WS Variable, die die anderen Variablen vom Typ double enthält ausführen und zwar so, dass ein Vektor bzw. ein MAtrix mit den Werten der Varibalen vom Typ double das Ergebnis ist.

ein Bsp (mir ist klar, dass man es anderes schreiben kann, aber so ist die WS Struktur aufgebaut):

Code:

alltogether = {'var1'; 'var2'; 'var3'}

var1 = 2;
var2 = 4;
var3 = 7;

% eval und evalin habe ich bereits ausprobiert ohne Erfolg

 


Die verwendete Matlabversion ist 2012b 32 Bit

VG


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.01.2016, 23:12     Titel: Re: Cell aus WS mit WS Variablen ausführen
  Antworten mit Zitat      
Hallo WS Niete,

Zitat:
ich habe eine WS Variable vom Typ cell, die als wiederum mehrere Variablen vom Typ double enthält, welche in andere Schleifen erstellt worden sind.

Was ist eine "WS Variable"? Meinst Du "Workspace"? Aber alle Variablen existieren nur in einem Workspace, es gibt also keine anderen.
Was die "WS Struktur" ist, verstehe ich deshalb auch nicht.

Zitat:
Nun möchte ich die WS Variable, die die anderen Variablen vom Typ double enthält ausführen und zwar so, dass ein Vektor bzw. ein MAtrix mit den Werten der Varibalen vom Typ double das Ergebnis ist.

Das verstehe ich nicht.

Wenn Du "eval und evalin" schon ausprobiert hast, poste bitte den Code und erkläre, was genau niocht funktioniert hat.

Zitat:
Code:
alltogether = {'var1'; 'var2'; 'var3'}
var1 = 2;
var2 = 4;
var3 = 7;

Was möchtest Du als Ergebnis bekommen? Das kann man bisher nicht erraten.

EVAL ist auf jeden Fall immer eine schlechte Idee, denn es gibt immer einfachere und direktere Lösungen. Wahrscheinlich wird die Lösung also lauten, einen anderen Ansatz zu wählen. Beschreibe also noch, welches Problem Du damit lösen möchtest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
WS Niete

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2016, 23:29     Titel:
  Antworten mit Zitat      
Hallo Jan S,

im WS habe ich ein Vielzahl von Variablen als double enthalten.

Code:

var1 = 2;
var2 = 4;
var3 = 7;

%Bsp für meine Varablen vom Typ double Anzahl der Variablen ist unterschiedliche

 


Eine andere Variable vom Typ cell beinhaltet diese Vielzahl an Variablen des Typs double.

Code:

alltogether = {'var1'; 'var2'; 'var3'}
%Variable vom Typ cell, die die oben genannten Variablen namentlich enthält
 


Ziel ist in ein xls alle Inhalte der Variablen Var1..Var2 (in dem Fall Zahlen) zu schreiben und zwar unter Verwendung von der Variable alltogether.

Mit who habe ich es auch probiert, das alle Variablen den identische Anfang haben, hier Var.

Das xlswrite sehr viel Zeit in Anspruch nimmt möchte ich einzelne Variablen zu einer Matrix zusammen fassen und per xlswrite ins xls schreiben. Das geht auch aber die es kann auch

Code:

Var4 = (4,5,6)
 


und dann fkt das ganze nicht, da jede Variable (Var1..VarX) in eine Zeile der xls geschrieben wird. Es ist als ein Spaltenvektor.

mit dem Code ist es nicht so einfach, der besteht aus zig Zeilen und die Daten liegen nicht vor, daher das Bsp von oben.

In Bezug auf eval bin ich mir bewusst, dass es sehr "suboptimal" ist, aber andere Versuche bringen keinen Erfolg, ein Bsp:

Code:

if exist('Var1','var')
    n = 1;
    for l = 1:2
        if l == 1
            such = {'Teil1'};
        else
            such = {'Teil2'};
        end
        for i = 1:10
            stat = {'stat1' 'stat2' 'stat3' 'stat4' 'stat5'};
       
                for j = 1:4
                    eval(char(strcat(stat(j),'text',search,'__',num2str(i),'_ = ',stat(j)','(text',such,'__',num2str(i),'_);')));
                    eval(char(strcat('matrix_3(n,j) = ',stat(j),'text',such,'__',num2str(i),'_;')));
                end
             m = m + 1;
        end
    end
end
 


bei derartigen evals weiss ich nicht wie ich sie ersetzten kann, da die Zeile innerhalb der Schleife ausgeführt werden soll.

VG
WS Niete
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2016, 00:13     Titel:
  Antworten mit Zitat      
Hallo,

du siehst ja, dass es sehr mühsam ist, solchen Code zu schreiben. Wie wäre es stattdessen, alle relevanten Variablen in eine Struktur abzulegen? Dann kannst du problemlos mit
Code:

auf die einzelnen Variablen zugreifen.

Sollten die Variablen Spaltenvektoren gleicher Länge sein, würde ich z.B. auch anbieten, das als Table anzulegen.

Grüße,
Harald
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.01.2016, 00:14     Titel:
  Antworten mit Zitat      
Hallo WS Niete,

Ich habe also richtig geraten, dass das "WS" in "WS Variablen" den Ausdruck Workspace bedeuten soll. Dann kannst Du das "WS" auch einfach weglassen, denn andere Variablen gibt es nicht.

Zitat:
Eine andere Variable vom Typ cell beinhaltet diese Vielzahl an Variablen des Typs double.

Code:
alltogether = {'var1'; 'var2'; 'var3'}
%Variable vom Typ cell, die die oben genannten Variablen namentlich enthält
 

Nein. alltogether enthält drei Strings mit den Namen, aber eben keine Variablen. Hier wird schon das Programm und die Daten vermischt, und da liegt bereits der Denkfehler, der die verschwurbelte EVAL-Methode erfodert.

Zitat:
Ziel ist in ein xls alle Inhalte der Variablen Var1..Var2 (in dem Fall Zahlen) zu schreiben und zwar unter Verwendung von der Variable alltogether.

Und das ist genau eine sehr unpraktische Art zu programmieren.

Viel sinnvoller ist es, die Variablen von vornherein in ein Cell zu schreiben und die im Namen verstecken Indices zu vermeiden:
Code:
alltogether = {2, 4, 7};


Die EVAL-Befehle aus Deinem Code sind brutal häßlich. Die CHAR-Befehle darin sind überflüssig, wenn Du "stat{j}" mit geschweiften Klammern schreibst. Aber das Ziel sollte es sein, die EVALs ganz weg zu lassen, in dem Du die Daten gleich als Array speicherst und nicht als Variablen mit durchnumerierten Namen.

Statt
Code:
           stat = {'stat1' 'stat2' 'stat3' 'stat4' 'stat5'};

wäre also dies sinnvoll:
Code:
           stat = {stat1, stat2, stat3, stat4, stat5};

Dann kann man beim Excel-Export einfach mit "stat{k}" und einer Schleife über k darauf zugreifen. Das Ziel wäre es natürlich, die einzelnen Variablen "stat<X>" von Anfang an in ein Array zu schreiben.

Zitat:
und dann fkt das ganze nicht, da jede Variable (Var1..VarX) in eine Zeile der xls geschrieben wird. Es ist als ein Spaltenvektor.

Kannst Du das noch mal genauer erklären? Was funktioniert nicht?

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