2016-05-01 8 views
0

Ich versuche, einige Daten zu plotten. Das Skript, das ich unten geschrieben habe, hat vorher gut funktioniert, aber jetzt weiß ich nicht, warum es nicht funktioniert. HierWie mache ich Vektoren in meinem Matlab-Skript gleich lang?

ist der Code:

x = [335,41,14,18,15,9,7,9,20607,5,5,143,3,5,72,134,2,28,172,3,72,173,280,186,20924,1,1,22,3,3,1,2,13,1,3,2,11,66,12983,176,123,192,64,258,182,123,299,58,198,7,113,342,72,8376,122,20,19,2,3,28,8,36,8,56,43,2,48,127,395,4664,186,46,236,219,258,69,203,189,169,72,100,78,109,46,112,3929,272,40,4,31,2,97,36,5,35,56,2,237,1672,256,224,28,163,341,151,263,157,397,94,380,173,75,87,272,1194,133,6,112,1,6,2,26,25,64,8,40,57,106,525,150,248,125,269,264,256,357,153,64,152,283,1,2,2,454,154,39,1,1,64,151,242,1,18,99,1,36,607,55,54,110,225,108,37,1,144,162,137,107,21,360,362,18,51,25,43,1,3,6,1,27,7,45,326,32,103,50,124,155,39,180,143,33,116,46,7,151,120,19,4,2,4,110,2,7,4,9,4,27,216,323,148,1,1,2,1,47,113,150,1,2,144,16,4827,1,1,1,14]; 
size = length(x); 
disp(size); 
z = 0; 
for i = 1:size 
    z = z + 1; 
    y(i) = z; 
end 
scatter(x,y); 

Dieser Code sollte sicherstellen, dass y ist von gleicher Länge wie x, da wir nur in y Füllung werden solange x (da wir ein verwenden für Schleife von 1 bis size, wobei size ist im Grunde die Anzahl der Indizes in x), aber ich bekomme diesen Fehler immer wieder. Ich überprüfte mit disp und es stellt sich heraus, dass meine X- und Y-Vektoren unterschiedliche Längen haben, x ist 227 und y ist 256. Kann mir jemand mit diesem trivialen Problem helfen?

Antwort

2

Dies ist wahrscheinlich, weil y erstellt wurde, um eine andere Größe zu sein, bevor Sie den Code ausgeführt haben, den Sie uns gezeigt haben. Irgendwo in Ihrem Skript, bevor Sie diesen Codeabschnitt aufgerufen haben, wurde y als Vektor mit 256 Elementen erstellt. Jetzt wird diese Variable in diesem Teil des Codes wiederverwendet, indem Elemente im Vektor y eingefügt werden. Die Variable x hat 227 Elemente und die Schleife, die Sie geschrieben haben, wird die ersten 227 Elemente der y ändern, da Sie so oft geloopt haben, wie es Elemente in x gibt. Die restlichen 29 Elemente sind jedoch noch immer da. Die Wiederverwendung der Variablen y ist wahrscheinlich der Grund, warum Ihr Skript fehlschlägt, da jetzt die Größen zwischen beiden Variablen nicht identisch sind. Als solche explizit neu erstellen y vor dem Aufruf scatter.

Eigentlich wird diese for Schleife überhaupt nicht benötigt. Der Zweck der Schleife besteht darin, ein ansteigendes Array von 1 bis zu so vielen Elementen wie in x zu erstellen.

Genau das tun Sie stattdessen:

y = 1:size; 

ich auch nicht mag, dass Sie eine Variable erstellen, genannt size. Es überschattet die Funktion size, die die Anzahl der Elemente in jeder Dimension findet, die das Eingabearray enthält.

Mit den Empfehlungen, die ich oben erwähnt habe, den gesamten Code mit diesem ersetzen:

x = [335,41,14,18,15,9,7,9,20607,5,5,143,3,5,72,134,2,28,172,3,72,173,280,186,20924,1,1,22,3,3,1,2,13,1,3,2,11,66,12983,176,123,192,64,258,182,123,299,58,198,7,113,342,72,8376,122,20,19,2,3,28,8,36,8,56,43,2,48,127,395,4664,186,46,236,219,258,69,203,189,169,72,100,78,109,46,112,3929,272,40,4,31,2,97,36,5,35,56,2,237,1672,256,224,28,163,341,151,263,157,397,94,380,173,75,87,272,1194,133,6,112,1,6,2,26,25,64,8,40,57,106,525,150,248,125,269,264,256,357,153,64,152,283,1,2,2,454,154,39,1,1,64,151,242,1,18,99,1,36,607,55,54,110,225,108,37,1,144,162,137,107,21,360,362,18,51,25,43,1,3,6,1,27,7,45,326,32,103,50,124,155,39,180,143,33,116,46,7,151,120,19,4,2,4,110,2,7,4,9,4,27,216,323,148,1,1,2,1,47,113,150,1,2,144,16,4827,1,1,1,14]; 
numX = numel(x); 
y = 1 : numX; 
scatter(x,y); 

Der Vektor y jetzt explizit statt Wiederverwendung die Variable erstellt, die mit einer früheren Größe in der Vergangenheit erstellt wurden. Es verwendet auch den Doppelpunktoperator, um diese Sequenz explizit zu erstellen, anstatt eine for-Schleife zu verwenden. Diese for Schleife wird einfach nicht benötigt. numel bestimmt die Gesamtzahl der Elemente für eine Eingabematrix. Ich mag es nicht, length als eine persönliche Vorliebe zu verwenden, weil es die Anzahl der Elemente in der größten Dimension findet. Das mag für Vektoren gut funktionieren, aber es hat wirklich einige schwer zu erkennende Fehler in Code gemacht, den ich in der Vergangenheit geschrieben habe.

+0

Vielen Dank für Ihre Hilfe. Ich bin gewohnt, Schleifen in anderen Programmiersprachen und musste daher eine for-Schleife verwenden. Danke – theprogrammer094

+0

@ rohitkrishna094 Geändert. Vielen Dank. BTW, wenn Sie dieses Problem mit Ihrem aktuellen Code vermeiden möchten, können Sie ** vor dem Ausführen Ihres Codes ** explizit deaktivieren. Entweder "lösche y;" oder "y = [];" vor dem Ausführen dieses Stückes Code und es wird gut .... aber ich würde immer noch den Doppelpunkt-Operator verwenden, um diese Sequenz zu erstellen. – rayryeng

+0

Oh ok. Ich werde es mir merken, danke. – theprogrammer094