P = (C{1,o}) % "o" soll 1-unendlich sein
. % weiterrechnen mit P
.
.
.
.
if(anzEinser >= 1),
X = M , % wenn if-bedingung erfüllt soll für jeden schleifendurchlauf
end % ein X gespeichert werden. fortlaufend in eine Tabelle
der Lesbarkeit halber bitte das nächste Mal den Code mit [ code ] und [ /code ] umschließen. (die beiden Leerzeichen weglassen. Das Knöpfle oben generiert den Block am Ende Deines aktuell eingegebenen Textes, nicht an die Stelle des Cursors.
andi_1 hat Folgendes geschrieben:
Code:
P = (C{1,o})% "o" soll 1-unendlich sein
. % weiterrechnen mit P if(anzEinser >= 1),
X = M , % wenn if-bedingung erfüllt soll für jeden schleifendurchlauf end% ein X gespeichert werden. fortlaufend in eine Tabelle
Wird anzEinser bei der Berechnung von P... erzeugt?
Code:
if anzEinser >= 1
X(end+1) = M;
end
%bzw. falls M ein Zeilenvektor
X(end+1,:) = M;
%bzw. falls M ein Spaltenvektor
X(:,end+1) = M;
%bzw. falls M eine Matrix:
X(:,:,end+1) = M;
Diese Lösungen haben einen Geschwindigkeitsnachteil, weil X dynamisch vergrößert wird. Wenn die Menge im Vorhinein abschätzbar ist, mit X = zeros(ungefähreZeilenanzahl, ungefähreSpaltenzahl) vereinbaren. Und dann eine Laufvariable festlegen, die inkrementiert wird, wie unten:
Wie und wann wird M & anzEinser eigentlich erzeugt?
Hier nur das Beispiel für M = Skalar, Rest analog oben.
Code:
i = 1;
X = zeros(Zeilen, Spalten);
%bzw.
X = zeros(Zeilen, Spalten, ungefähreAnzahlM);
whiletrue
P = (C{1,o})% "o" soll 1-unendlich sein
. % weiterrechnen mit P if(anzEinser >= 1),
X(i) = M , % wenn if-bedingung erfüllt soll für jeden schleifendurchlauf
i = i+1;
end% ein X gespeichert werden. fortlaufend in eine Tabelle
Sollte die vorher vereinbarte Größe von X nur minimal zu klein sein, dann geht das schon i.O.. Bei signifikantem Unterschied noch nachjustieren, weil jeder Zugriff über die bisherige Grenze wieder eine dynamische Vergrößerung darstellt.
Sollte X mit weniger gefüllt werden, kannst Du mit X(find(X,1,'last')) = []; die Matrix wieder stutzen.
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
sw = 1% schwelle (lage)
sw1 = 1% schwelle (höhe)
sw2 = 2% offset über mittl. höhe
radius = 1.5% radius um mittelpunkt
P = (C{1,o})% C in einzelne tabelle umwandeln
Q = P(1:3,1:3)% erste 3 werte (maxima) in tabelle schreiben
Q1(:,1)=Q(:,1); % höhen abschneiden
Q1(:,2)=Q(:,2);
R = pdist(Q1,'euclid'); % abstandsmatrix bestimmen aus lage
% 3 minima sollen lagetechnisch innerhalb einer schwelle liegen
if(R(1,1)<sw), % alle 3 abstände in der abstandsmatrix auf schwelle untersuchen
Q3(1,:) = Q(1,1:3)% wenn unterhalb der schwelle werte zwischen denen sich die abstände befinden in Q3 schreiben
Q3(2,:) = Q(2,1:3),
end if(R(1,2)<sw),
Q3(1,:) = Q(1,1:3)
Q3(3,:) = Q(3,1:3),
end if(R(1,3)<sw)
Q3(2,:) = Q(2,1:3)
Q3(3,:) = Q(3,1:3),
end
Q2(:,1)=Q3(:,3)% Höhen aus Q3 in eigene tabelle (Q2) schreiben
R1 = pdist(Q2,'euclid'); % abstandsmatrix aus höhen bestimmen
% 3 minima die lagetechnisch innerhalb einer schwelle liegen sollen auch höhentechnisch innerhalb einer schwelle liegen
if(R1(1,1)<sw1), % alle 3 abstände in der abstandsmatrix auf schwelle untersuchen
Q4(1,:) = Q3(1,1:3)% wenn unterhalb der schwelle werte zwischen denen sich die abstände befinden in Q4 schreiben
Q4(2,:) = Q3(2,1:3),
end if(R1(1,2)<sw1),
Q4(1,:) = Q3(1,1:3)
Q4(3,:) = Q3(3,1:3),
end if(R1(1,3)<sw1),
Q4(2,:) = Q3(2,1:3)
Q4(3,:) = Q3(3,1:3), % Q4 enthält punkte, die lagetechnisch und höhentechnisch innerhalb der beiden schwellen sw und sw1 liegen end
B = sum(Q4) ./sum(Q4~=0); % mittel aus Q4 bestimmen. dabei zeilen in denen zwangsläufig 0 steht, ausser acht lassen
kann mir denn jemand helfen? "o" soll hochgezählt werden. wenn die funktion samt aller if-bedingungen durchlaufen wurde, soll für jedes "o" ein B in die tabelle W geschrieben werden.
für die matlab-cracks hier dürfte das doch kein problem sein...
gruß
P = (C{1,o})% "o" soll mittels schleife hochgezählt werden
.
.
% operationen mit P (sämtliche if-anweisungen werden durchlaufen). am ende bekomme ich ausgerechnet aus P ein B. wenn sämtliche if-anweisungen nicht erfüllt wurden,bekomme ich kein B. Dieses B soll nun fortlaufend in die tabelle W geschrieben werden. B (3x1)
.
.
W = B
P = (C{1,o})% "o" soll mittels schleife hochgezählt werden
.
.
% operationen mit P (sämtliche if-anweisungen werden durchlaufen). am ende bekomme ich ausgerechnet aus P ein B. wenn sämtliche if-anweisungen nicht erfüllt wurden,bekomme ich kein B. Dieses B soll nun fortlaufend in die tabelle W geschrieben werden. B (3x1)
.
.
W = B
Das ist nun eine andere Frage als ich zuerst vermutete. Hier kannst Du trivial eine Schleife um alles packen:
Code:
k = 1;
for o=1:(floor(inf('double'))-1)% ich weiß nicht, inwiefern abgerundet werden sollte, ansonsten nur -1
P = (C{1,o});
...
W(:,:,o) = B; % (würde aber immer Nullen erzeugen, wenn ein Index übersprungen wurde
W(k:k+2,1) = B; % jetzt werden alle B untereinander geschrieben
k = k+3;
W(1:3,k) = B; % jetzt werden alle B nebeneinander geschrieben
k = k+1;
end
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
was meinst du soll abgerundet werden? und wenn ich nicht abrunden will, wie sieht der code dann aus mit "nur -1"?
meinst du es könnte ein problem sein, wenn meine if-anweisungen durch keine else-anweisungen abgefangen sind. wenn ich den code für die einzelen o's durchlafen lassen, bekomme ich manchmal fehlermeldungen, weil eine anweisung, die auf einer nicht erfüllten if-anweisung beruht, nicht ausgeführt werden kann.
meinst du es könnte ein problem sein, wenn meine if-anweisungen durch keine else-anweisungen abgefangen sind. wenn ich den code für die einzelen o's durchlafen lassen, bekomme ich manchmal fehlermeldungen, weil eine anweisung, die auf einer nicht erfüllten if-anweisung beruht, nicht ausgeführt werden kann.
Ja, das ist definitiv ein Problem. Denn eine if-Anweisung ist abgerabeitet, wenn das zugehörige end erreicht ist. Wenn also Q4 nicht initialisiert wird, dann ist ein Lese-Zugriff auf Q4 bei
B = sum(Q4) ./sum(Q4~=0);
mit Fehlermeldung versehen.
Stattdessen vielleicht
Wie ich gerade feststellte, war es eine dumme Idee, inf('double')-1 zu machen. Denn das ergibt wieder inf. Von inf kommt man nicht mehr weg. Wenn es wirklich ewig gehen soll, und Du den Index brauchst, dann verwende eher
Code:
for o=1:1.796e+308 % das ist aber verdammt lange. Und Deine Matrizen bringen wahrscheinlich Memory-Fehler. % Besser ist da ein
o = 1;
whiletrue ...
o = o+1;
if Ende erreicht % also hier eine Abbruchbedingung am Ende der Schleife definieren break;
end end
PS: Falls Du feststellst, dass sich alle Nase lang was ändert: ich korrigiere meine Fehler mit "edit", solange Du nicht neues schreibst.
_________________
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
Zuletzt bearbeitet von yankemen am 30.07.2010, 14:11, insgesamt einmal bearbeitet
meinst du es könnte ein problem sein, wenn meine if-anweisungen durch keine else-anweisungen abgefangen sind. wenn ich den code für die einzelen o's durchlafen lassen, bekomme ich manchmal fehlermeldungen, weil eine anweisung, die auf einer nicht erfüllten if-anweisung beruht, nicht ausgeführt werden kann.
Die Erzählung der Fehlermeldung ist nicht hilfreich. Bitte poste die Orginal-Meldung und die entsprechende Zeile.
Ich selbst kann leider in Deinem Programm nicht erkennen, was Du erreichen möchtest. Eine Schleife bis Inf laufen zu lassen ist auch nicht sehr logisch - mal abgesehen davon, dass es nicht geht.
so wie ich seinen Code verstehe, liegt das Problem mit den if-Bedingungen darin, dass eventuell Q4 nicht erzeugt wird, aber anschließend abgefragt wird.
Ich kann Dich aber nur unterstützen, dass Leute mit Fehlermeldungen diese auch posten.
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
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.