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 Inhalte als Variablen in Workspace

 

grinsetina83
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2013, 14:18     Titel: Cell Inhalte als Variablen in Workspace
  Antworten mit Zitat      
Hallo Leute,
ich bin eigentlich mehr der Simulink User, muss mir aber für mein Modell nun die Variablen erst mal im Workspace erstellen. Hintergrund ist, dass ich aus einem DAT-File sowohl die Variablennamen, als auch die Werte dazu einlese.
Ich habe nun eine Workspace Variable "Ergebnis" <1x4 cell>
Innerhalb dieser Cell sind in dem Ergebnis{1,2}(:,1) die Namen meiner Variablen enthalten und in Ergebnis{1,4} zeilenweise die Werte.
D.h. in jeder Zeile aus im Ergebnis{1,2} steht nur ein Name, diesen möchte ich als Variable im Workspace deklarieren und aus Ergebnis {1,4} stehen in der gleichen Zeile teilweise mehrere Werte, die der Variable zugeordnet werden sollen.
Ich kann dazu leider keinen Code posten, aber der Aufbau ist wie folgt:

Ergebnis{1,2}....Ergebnis{1,4}:
(:,1)..................(:,1) (:,2) (:,3) usw.
Name1...............1......0......0
Name2...............2......3......4
Name3...............1......1......1
=> format cell...=> format double

Ich hätte dann gerne im Workspace:
Name1 = [1 0 0]
Name2 = [2 3 4]
Name3 = [1 1 1]

Würde mich sehr freuen, wenn mir da wer helfen könnte, auch noch einiger Suche in der Hilfe, Forum oder Inet hab ich dazu nichts hilfreiches gefunden.
Private Nachricht senden Benutzer-Profile anzeigen


kordu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2013, 14:49     Titel:
  Antworten mit Zitat      
Du willst im Endeffekt dynamisch Variablen deklarieren. Häufig wird die Frage gestellt, wenn Leute Variablen durchnummerieren wollen (A1, ..., A10). Das kann man mit `eval` und einer for-Schleife zusammenfrickeln. Das ist dann aber wirklich fehleranfällige Frickelei. Du musst dir dann halt in einer for-Schleife einen String zusammenbauen, der dann mit eval ausgefuehrt wird eval('foobar = [1, 2, 3]').

Ich weiß nicht was du machen willst, aber bevor man `eval` nutzt gibt es häufig eine bessere Alternative. Zum Beispiel eine Struktur.

Code:

names = {'foo', 'foobar', 'warsdfda'};
values = [1, 2; 3, 4; 5, 6];

results = struct();
for i = 1:numel(names)
    results.(names{i}) = values(i,:);
end
 

Ausgabe:
    >> results

    results =

    foo: [1 2]
    foobar: [3 4]
    warsdfda: [5 6]
 
grinsetina83
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2013, 14:59     Titel:
  Antworten mit Zitat      
Hallo kordu,

danke erst mal für die Antwort. Um vielleicht meine Zielstellung klarer zu formulieren:
Ich habe ein Simulink Model in dem ich Constanten aus dem Workspace aufrufe. Diese haben einen festen Namen in meinem Modell.
Diese Constanten habe ich bislang in einem m-File händisch mit Werten belegt, die ich jedoch nun aus einem dat-File automatisch einlesen lassen möchte. Das Problem an der Struktur ist bei mir nun, dass ich an den Inhalt ja wieder nicht in Simulink ran komme.
Beispiel: in Simulink steht in einem constant-Block: Name1
Die Variabel Name1 steht in meinem Cell zb in Ergebnis{1,2}(10,1) und die zugehörigen Zahlenwerte in Ergebnis{1,4}(10,: ) = [1 2 3 4];
Auf diese Zahlenwerte will ich nun in Simulink zugreifen können.

Ich hab leider nicht mal eine Idee, wie ich das clever anstellen könnte ...
Private Nachricht senden Benutzer-Profile anzeigen
 
kordu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2013, 15:38     Titel:
  Antworten mit Zitat      
Ich kenne mich mit Simulink leider nicht aus. Vielleicht gibt es da schon eine vorgesehen Lösung. Ansonsten musst du eben doch mit eval arbeiten. Ich verstehe immer noch nicht in was fuer eine Datenstruktur deine Namen stehen (was Ergebnis{1,2} fuer einen Typ hat - ein normales Array? Dann muessten alle Namen die gleiche Laenge haben).

Prinzipiell dann halt so etwas in der Art:
Code:


for i = 1:n_entries
    current_name = Ergebnis{1,2}(i,1);
    current_values = Ergebnis{1,4}(i,:);
    cmd = sprintf('%s = current_values;', current_name);
    eval(cmd);
end

 
 
grinsetina83
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 11:35     Titel:
  Antworten mit Zitat      
Hallo kordu,

mit ein wenig anpassen hat dein Vorschlag funktioniert - vielen Dank!

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