also erstmal danke für die antwort das funktioniert so
komisch ist nur das ich das anfangs so programmiert hatte und das nicht funktioniert hatte
jetzt nach ändern geht es aber auf einmal
wird wohl ein anwenderproblem gewesen sein :-)
Kann er ab bestimmten Bedienungen nicht mehr weiter rechnen ?
Oder liegt es daran ,dass ich zwischen denn && ( ) setzen muss ,habe ich zwar versucht
hat nicht funktioniert.
Index exceeds matrix dimensions. Errorr in .. (line 18 ) if..
hast du es mal mit dem Debugger versucht?
Ohne die Dimensionen der Variablen zu kennen, kann man an sich nur raten, aber ich versuch's mal:
Wenn laengex die Länge von x ist, dann ist c in der letzten Iteration also laengex, und c+1 somit laengex+1. Dieser Index übersteigt aber die Länge von x.
Vielleicht reicht es schon aus, die Schleife nur bis laengex-1 laufen zu lassen?
vielen Dank !! mit den Tipp von laengex-1 daran lag es.
Ich schreib mal meinen vollständigen Code hier rein:
Code:
function[Fixation,Sacration] = funfprozent(x,y) % x = DP_EyeData_Original_LeftEye_PupilX(x,1) % y = DP_EyeData_Original_LeftEye_PupilY(y,1)
% Längenbestimmen von X und Y
laengex = length(x);
laengey = length(y);
if laengex == laengey
%Erstellung für Sacrationen und Fixationen
Sacration(1:laengex,1) = 0;
Fixation(1:laengex,1) = 0;
for c = 1:laengex-1 if0.975 * x(c,1) < x(c+1,1) && x(c+1,1) < x(c,1)*1.025 && 0.975*y(c,1) < y(c+1,1) && y(c+1,1) < y(c,1)* 1.025
Fixation(c+1,1) = 1;
Sacration(c+1,1) = 0;
else
Fixation(c+1,1) = 0;
Sacration(c+1,1) = 1;
end end else fprintf('Anzahl der Länge von x und y stimmt nicht überein. \n');
end
Ja , vielen Dank nochmals
das Programm läuft fehlerfrei und die Ergebnisse stimmen auch überein.
Jedoch möchte ich gerne alles richtig bzw. wie ein Professionellen Programmierer programmieren lernen.
Zitat
Ansonsten: wenn man if innerhalb einer for-Schleife verwendet, kann der Code oft durch logische Indizierung kompakter formuliert werden.
Eine sehr wichtige Regel für "professionelle" Programmierer ist:
Zitat:
Avoid pre-mature optimization!
Eine Schleifen-Lösung ist leichter in andere Programmiersprachen übertragbar und entspricht eher der üblichen Pseudo-Code-Schreibweise von Algorithmen. Da Matlab seit Version 6.5 Schleifen optimieren kann, ist die Vektorisierung nicht mehr unbedingt Pflicht. Oft sieht dier Code aber leichter lesbar aus dadurch.
Pre-mature optimization heißt, dass man versucht gleich möglichst schnellen Code zu schreiben, wobei die Übersichtlichkeit leidet und das Debuggen erschwert wird. Das oberste Ziel ist es aber, einen fehlerfreien Code zu schreiben. Wenn er dann erfolgreich (!) getestet wurde, ist die Zeit gekommen mit dem Profiler die Code-Abschnitte zu finden, die die meiste Laufzeit benötigen. Jede Minute, die man zur Verbesserung von Code-Teilen aufwende, die nur 0.1% der Laufzeit benötigen, ist verlorene Zeit, denn sie kann im allerbesten Fall den Code um 0.1% beschleunigen.
Code ohne ausführliche Kommentare ist nach einigen Monaten unbenutzbar.
Zum Code selbst: Fixation und Sacration enthalten die gleichen Informationen. Es wäre deshalb einfacher, nut einen Vektor zu erstellen und den anderen hinterher z.B. per "1-Fixation" zu "kopieren".
Es bringt nichts, die mit 0 vorbelegten Werte in der Schleife mit 0 zu überschreieben. Die entsprechenden Code-Zeilen rauben nur Zeit.
Und nun noch die Vektorisierung mit logischen Indizes:
Code:
if laengex == laengey
%Erstellung für Sacrationen und Fixationen
Sacration = zeros(laengex, 1); % Die andere Version ist auch ok.
Fixation(1:laengex,1) = 0;
m = 0.975 * x(1:laengex-1) < x(2:laengex) & ...
x(2:laengex) < x(1:laengex-1) * 1.025 & ... 0.975 * y(1:laengex-1) < y(2:laengex) & ...
y(2:laengex) < y(1:laengex-1)* 1.025;
Fixation(2:laengex) = m;
Sacration(2:laengex) = ~m; % Oder: 1 - m else fprintf('Anzahl der Länge von x und y stimmt nicht überein. \n');
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.