2016-05-04 7 views
0

Ich habe eine Liste von Variablen (unterschiedlich großen numerischen Matrizen) mit dem Namen REACH1 zu Reach7Looping über die Liste der Variablen in Matlab

Ich möchte sie alle als Nebenhandlungen in einer Figur zeichnen.

über jede Variable wie unten einen Weg Schleife braucht:

names = {'Reach1' 'Reach2' 'Reach3' 'Reach4' 'Reach5' 'Reach6' 'Reach7'}; 
for index = 1:7 
    subplot(3,3,index) 
    plot(names(index)(:,1),names(index)(:,2));hold on; 
    plot(names(index)(:,5),names(index)(:,6)); 
    plot(names(index)(:,9),names(index)(:,10));hold off; 
end 

Gibt es einen besseren Weg, dies in Matlab zu tun?

+0

Worauf möchten Sie zugreifen? 'Namen (Index) (:, 1)' –

+0

Zum Beispiel Reach1 ist eine 76x12 Matrix, 'Namen (Index) (:, 1)' ist die gesamte erste Spalte dieser Matrix gegen die zweite Spalte 'Namen (index) (:, 2) ' – Tommy

+0

Ich kann mir nicht wirklich einen viel effizienteren Weg vorstellen, dies in Matlab zu tun. Sie können die verschiedenen Spaltennummern vor der Schleife deklarieren, um die Ausgabe zu vereinfachen. Sie könnten auch (wenn sich die Anzahl der Namen ändern könnte) das 'index = 1: 7 'durch' index = 1: length (names)' ersetzen. – Swier

Antwort

0

Sie können nicht auf names(index) zugreifen, da es sich um cell Array handelt und auf diese von names{index} zugegriffen wird.

Wenn Sie durch den Aufruf names{1}(1,3) Variable Reach1(1,3) zugreifen möchten, werden Sie scheitern, weil Matlab wird (versuchen) a als ein Element der char Array zurück. Dieser Ansatz kann durch eval erreicht werden aber tun NICHT tun Sie das! Es hat viele drawbacks und keinen Vorteil.

Sie können Ihren Code mit Matlabs-Funktionen vereinfachen, die nicht offensichtlich, aber sehr nützlich sind.

Angenommen, wir haben alle Matrizen in einem Zellenfeld Reaches={<Reach1>;<Reach2>;...}:

Reaches={rand(4,12);rand(6,12);rand(8,12);rand(2,12);rand(9,12)}; %declare dummy variables 
counter=0; 

for Reach=Reaches 
    counter=counter+1; 
    subplot(3,3,counter); 
    plot(Reach(:,[1,5,9]),Reach(:,2,6,10)); 
end 

Dieser Code Vorteile aus:

  • for Schleife über Array-Elemente ist in der Lage.
  • plot kann Arrays verarbeiten.
  • (Fortgeschrittene) Array indexing.

In diesem Beispiel entsprechende Element names{ii} zu Reach variable übergeben wird, Zähler counter vorgeschoben und wird durch plot Matrizen unterstützt den Spalten 1, 5 und 9 und 2, 6 und 10 als x und y-Werte containig, respectively.

+0

ausgezeichnet schreiben können, danke, dass du das geklärt hast. – Tommy