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

Auf mit assignin erstellte Variablen dynamisch zugreifen

 

Shin
Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 16.11.2009, 16:19     Titel: Auf mit assignin erstellte Variablen dynamisch zugreifen
  Antworten mit Zitat      
! Aktuelles und aktualisiertes, sowie auf den "Punkt gebrachteres" Problem in meinem dritten Beitrag in diesem Thread !


Hallo Leute, folgender Sachverhalt:
ich habe mir mit
Code:
for i = 1:12
    for k = 2000:2008
assignin ('caller',['J' num2str(k) '_' num2str(i)], xlsread([num2str(k) '.xls'], i, 'B11:E41'))
    end
end;

9*12 verschiedene Variablen erstellt, heißen J2000_1 bis J2008_12.

Einfaches Problem:
Ich kann die variablen gezielt ansprechen, sprich:
Code:

funktioniert.

Aber wenn ich jetzt dynamisch darauf zugreifen will, sprich:
Code:
t = length(['J' num2str(k) '_' num2str(i)]);

gibt er mir nicht den Wert (zB, wenn k=2000 und i = 2 ist, die Länge von J2000_2) aus, sondern nur die Länge der Zeichen, also 7 (J, 2, 0, 0, 0, _, 2).
Wie muss ich das verändern? Wäre recht wichtig, dass ich von jeder Variable die Länge kenne. Denke die Lösung sollte recht einfach sein, komme aber leider nicht drauf.

Grüße und bestem Dank,
Shin.

Zuletzt bearbeitet von Shin am 16.11.2009, 16:42, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Shin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 16.11.2009, 16:22     Titel:
  Antworten mit Zitat      
Alternativproblem, dann wäre oben genanntes irrelevant, da anders lösbar:

Wie füge ich in eine Matrix die Werte einer anderen Matrix ein?
Angenommen ich habe eine 2x2 Matrix und erstelle mir eine 3x3-Nullmatrix.
Nun will ich die 2x2 Matrix in die 3x3 Matrix einsetzen. Wie geht das?
Veranschaulicht:

meine 2x2-matrix
1 3
4 5 in

folgende 3x3-Nullmatrix:
0 0 0
0 0 0
0 0 0

soll so aussehen:
1 3 0
4 5 0
0 0 0


Gruß!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

da die 2. Frage übersichtlicher ist, die Antwort dazu:

Code:
A = [1 3; 4 5];
B = zeros(3);
B(1:size(A,1), 1:size(A,2)) = A

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

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 16.11.2009, 16:41     Titel:
  Antworten mit Zitat      
Vielen Dank, funktioniert einwandfrei, so wie ich es mir vorgestellt hatte.
Leider lag ich nicht richtig, dass der zweite Weg den ersten komplett ersetzen würde.

Ich formuliere mein Problem nochmal kurz und knapp, auf verständliche Weise:

In meinem Workspace sind 12*9 Variablen, sie heißen

J2000_1
J2000_2
J2000_3
...
J2008_12


Nun will ich darauf dynamisch zugreifen, damit ich nicht jede einzelne der 108 Variablen gezielt einzeln aufrufen muss.

Ich habe folgendes nun geschrieben:
Code:
Nv = zeros(31,5);
Nv(1:size(J2000_4,1), 1:size(J2000_4,2), 1:size(J2000_4,3), 1:size(J2000_4,4)) = J2000_4;
 


Nur anstelle der einzelnen Variable 'J2000_4' sollen nun ALLE angesprochen werden und in einen Nullvektor eingefügt werden.

Code:
?

Gruß und besten Dank,
Chris.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dazu brauchst du eine (doppelte) for-Schleife, und darin den Befehl EVAL.
Code:

Achtung: die von mir angegebene Lösung schreibt die Matrix A immer in die linke obere Ecke von B.

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

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 16.11.2009, 16:54     Titel:
  Antworten mit Zitat      
Super, vielen Dank.
Dann werde ich mich mit EVAL auseinandersetzen.

Das mit der linken oberen Ecke konnte ich nachvollziehen und passt auch zu meinem Problem hier.


Gruß.
Private Nachricht senden Benutzer-Profile anzeigen
 
Shin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 16.11.2009, 17:33     Titel:
  Antworten mit Zitat      
Hallo nochmal.
Irgendwas stimmt nicht...

Code:
a = length(['J' num2str(k) '_' num2str(i)]);
eval(a);

sollte doch funktionieren? Oder etwa nicht?

??? Undefined function or method 'eval' for input arguments of type 'double'.
ist das Resultat.

Gruß,
Chris.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich muss sagen, ich weiss jetzt nicht, was du machen willst.
Klar ist aber, dass a in deinem Fall die length, also eine Zahl ist. Als Eingabeargument für eval brauchst du aber einen String.

z.B. so:

Code:
a = ['length(J' num2str(k) '_' num2str(i) ')']
eval(a);

(natürlich weiss ich jetzt nicht, ob das das macht, was du willst)

Es ist vielleicht einfacher, wenn du dir erst einmal anschaust, was das a genau ist, bevor du es in EVAL hineinsteckst.

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

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 16.11.2009, 17:46     Titel:
  Antworten mit Zitat      
Vielen Dank, Harald.
Ich glaube zu der Realisierung meines Projektes fehlt mir ganz klar das Verständnis wie man ein String genau erstellt und wie sich String von einer Zahl in Matlab unterscheidet... danke für deinen Code.
Werde mir mal genau anschauen wie man den Code umschreiben muss, damit MATLAB es auch als String erkennt. Daran hat es bisher gewaltig gehakt!

Grüße und besten Dank, du hast mich schon ein großes Stück weiter gebracht!

edit#1:
Ich brauche die Länge der Variablen an einer anderen Stelle, hoffe ich bekomme das auch äquivalent zum oben genannten Problem (Matrix und Null-Matrix verschmelzen) gebacken.
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.