Verfasst am: 03.06.2012, 16:05
Titel: For Schleife Doppeltdurchlaufen
Hey!
Mir ist gerade etwas sehr seltsames passiert: aus irgendeinem Grund wird mein For-schleife manchmal zweimal durchlaufen... hier das programm dazu
Code:
%n,m ungerade
[a,b] =size(A);
for u = 1+((n-1)/2):a-((n-1)/2) for v = 1+((m-1)/2):b-((m-1)/2)
for k = (-(n-1)/2) : ((n-1)/2) for l = (-(m-1)/2) : ((m-1)/2)
w(1,s) = A(u+k,v+l);
s = s+1;
end end
%Einträge des Vektors nach ihrer Größe sortieren und dies als neuen Vektor
%w speichern
w = sort(w);
%mittlersten Eintrag als neuen Eintrag der Matrix wählen
%Fehler: for Schleife wird manchmal doppelt ausgeführt, dadurch ist d/2
%keine ganze Zahl
d = length(w)+1;
B(u,v) = w(1,d/2);
end end
Die mittleren For-schleifen(k und l) werden manchmal(aber nicht immer) 2mal durchlaufen - wie kann denn das bitte vorkommen?? Und woran kann das liegen? der Vektor w wird dadurch doppelt so groß und das Programm funktioniert dann nicht weiter..
Ich bitte um Hilfe, weil das bringt mich wirklich zum verzweifeln =/
Das ist keine Verständnisfrage sondern die eines komplexen Systems.
Meine Anregung:
Gib die Variable A mit ins Forum damit wir den Programmablauf
nachvollziehen können.
Außerdem sagt meine Erfahrung das "Verzweiflung" meistens einhergeht
mit "Zu schnell" > Also setze Breakpoints und überwache alle Variablen
Schritt für Schritt.
Eine Systemfehler den du zugegeben nicht offen aussprichts ist unwahrscheinlich. Wahrscheinlicher ist, dass die For-Schleife die die mittleren enthält zu oft durchlaufen wird (Wie unterscheiden sich die Variablen im Normal und im Fehlerfall)
Oder: Die Stelle hier: W(1,s) >> ich kenn ja den Rest dieser Variable
nicht aber falls die Dimension wo jetzt die 1 steht noch weiter geht,
dann könnte es sein das lenght(w) die Länge DIESER Dimension liefert
Falls sie nicht weiter geht ist sie übrigens überflüssig!
Gruß
Blues
Ente
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.06.2012, 21:04
Titel: ..
hey,
danke für die Antwort
Hier das gesamte Programm:
Code:
function[B] = median(A,n,m)
%MEDIANFILTER Summary of this function goes here
% A Matrix, die bearbeitet werden soll, W Gewichtsmatrix, n Filtergröße
%m,n müssen ungerade sein und der Filter darf nicht größer als A sein
[a,b] =size(A);
%Vektor w mit Einträgen der Filterregion füllen
for u = 1+((n-1)/2):a-((n-1)/2) for v = 1+((m-1)/2):b-((m-1)/2)
for k = (-(n-1)/2):((n-1)/2) for l = (-(m-1)/2):((m-1)/2)
w(1,s) = A(u+k,v+l);
s = s+1;
end end
%Einträge des Vektors nach ihrer Größe sortieren und dies als neuen Vektor
%w speichern
w = sort(w);
%mittlersten Eintrag als neuen Eintrag der Matrix wählen
%Fehler: for Schleife wird manchmal doppelt ausgeführt, dadurch ist d/2
%keine ganze Zahl
d = length(w)+1
B(u,v) = w(1,d/2);
end end
Ja ich hab das Problem schon bereits gefunden: es passiert genau in der For-Schleife k und l: sie werden doppelt durchlaufen und dadurch wird der Vektor w doppelt so lang.
Das passiert aber nicht immer, sondern für mich in keinem zu verstehnden Systm. Manchmal funktioniert es 2 u,v Schritte lang, manchmal nicht ...
Meine Testfunktion:
Code:
A = [3,3,3; 7,7,7; 4,4,4];
n = 3;
m = 3;
median(A,n,m);
%alle 3 Ebenen in 2-dim Matrizen speichern
for j=1:m
for k=1:n
C(j,k) = B(j,k,1);
end end for j=1:m
for k=1:n
D(j,k) = B(j,k,2);
end end for j=1:m
for k=1:n
E(j,k) = B(j,k,3);
end end
Bei der ersten Testmatrix A funktioniert alles und bei C_ nicht mehr, ab der 3. Runde der u,v For-Schleife.
Es wird einfach dann zweimal l=-1:1, k=-1:1 durchlaufen.
Woran könnte das nun liegen??
Ente
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.06.2012, 22:38
Titel: alles klar..
Omg, also wirklich so dämlich... ich hab einfach die Laufvariable s nicht wieder 1 gesetzt und die eine Testmatrix durchläuft es nur einmal..
hach, tut mir leid für die blöde Frage, sowas dummes =/ =/
Die Formatierung im Forum funktioniert übrigens mit dem / Slash, nicht mit \. Ich habe das mal oben verbessert.
Gruß, Jan
Einstellungen und Berechtigungen
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.