Ich sitze nun seit ewigkeiten an meinem Skript und bekomme an einer Stelle die Fehlermeldung: ??? Index exceeds matrix dimensions.
Das Skript soll vergleichen ob Werte der Variable all1_sac (j,1) zwischen zwei Werten in all1 ( all1(i,2) & all1(i+3,2)) liegen und dann die Werte der beiden folgenden Spalten in dieser Zeile in all1_sac übertragen.
Problematisch ist das all1 irgendwann endet, all1_sac aber noch Werte vergleichen will. Der Wert in all1_sac übersteigt in diesem Fall immer den letzten Wert von all1. Ich habe versucht das mit elseif & brake zu lösen, was in vorherigen Schleifen, die genau so aufgebaut sind und nur auf andere Varialbelen zugreifen funktioniert hat. Jetzt bleibt die Fehlermeldung jedoch bestehen. Und das macht mich WAHNSINNIG!
Ok. Ich würde mich also sehr über Fehlerhinweise freuen oder auch über elegantere Lösungen, da mein Repertoire noch nicht wirklich groß ist.
Code:
% Teil des Skripts mit Fehlermeldung:
for j=1:length(all1_sac)
all1_sac(j,2)=0;
for i=1:length(all1) if(all1_sac(j,1)>= all1(i,2)) && (all1_sac(j,1) <=all1(i+3,2))
all1_sac(j,2)=all1(i,3);
all1_sac(j,3)=all1(i,4);
elseif all1_sac(j,1)> all1(length(all1),2) break end end end
das Problem scheint mir zu sein:
Die innere for-Schleife geht von 1 bis length(all1). Das dürfte hier die Zeilenanzahl von all1 sein. Der Klarheit halber würde ich size(all1, 1) verwenden.
Du iterierst nun also über alle Zeilen, willst aber dann noch 3 Zeilen weiter gehen: all1(i+3,2). Das kann nicht klappen.
Nun weiß ich natürlich nicht, was du machen willst. Eine Abhilfe wäre:
du musst bei FOR-Loop halt die Grenze kleiner setzen.
Wenn du den Ausdruck in der IF-Bedingung betrachtest und zwar die Stelle
all1(i+3,2). Das nämlich verursacht den Fehler.
Also muss du dein Loop also anderes Laufen lassen
Code:
% besser SIZE für Matrizen zu nutzen, % Da LENGTH die Seite auswählt, welche am längsten ist for j=1:size(all1_sac, 1)
all1_sac(j,2)=0;
% hier die Grenze anders setzen % wenn i+3 dann muss man 3 abziehen
for i=1:size(all1, 1) - 3 if(all1_sac(j,1)>= all1(i,2)) && (all1_sac(j,1) <=all1(i+3,2))
all1_sac(j,2)=all1(i,3);
all1_sac(j,3)=all1(i,4);
elseif all1_sac(j,1)> all1(length(all1),2) break end end end
for j=1:size(all1_sac, 1)
all1_sac(j,2)=0;
if j <= size(all1, 1) if(all1_sac(j,1)>= all1(j,2)) && (all1_sac(j,1) <=all1(j+3,2))
all1_sac(j,2)=all1(j,3);
all1_sac(j,3)=all1(j,4);
end end end
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
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.