Das Ergebnis sollte ähnlich der Abbildung "punkte.png" sein.
Dieser Code erzeugt zwischen zwei Funktionen y_up und y_down beliebig viele Punkte. Die Anzahl der Punkt zwischen den Funktionen wird von der Auflösung k bestimmt. Die Funktionen bilden einen Kreis nach. Meine Frage bezieht sich auf den mittleren Codeabschnitt:
Code:
for m = 1:k
for n = 1:k
if h{m,n}(2) >= real(y_up(n))-1e-8% 1e-8 ist zu Verhinderung von Rundungsfehlern
h{m,n}=[];
end
In diesem Codeabschnitt werden alle Punkte überhalb von y_up und alle Punkte unterhalb von y_down gelöscht ( [] nicht [0,0] ). Ab einer gewissen Auflösung (k > 200) nimmt die Berechnungzeit sehr stark zu. Schuld sind die verschlachtelten Schleifen.
Meine Frage nun:
Wie kann man die Zellen in Abhängigkeit der beiden Funktionen y_up und y_down löschen ( [] nicht [0,0] ) ohne Schleifen zu verwenden?
In diesem Codeabschnitt werden alle Punkte überhalb von y_up und alle Punkte unterhalb von y_down gelöscht ( [] nicht [0,0] ). Ab einer gewissen Auflösung (k > 200) nimmt die Berechnungzeit sehr stark zu. Schuld sind die verschlachtelten Schleifen.
Meine Frage nun:
Wie kann man die Zellen in Abhängigkeit der beiden Funktionen y_up und y_down löschen ( [] nicht [0,0] ) ohne Schleifen zu verwenden?
Wie liegen denn die Werte in h{m,n}(2) und in y_up und y_down vor? Sind sie dort sortiert spaltenweise sortiert? Wenn ja, würde es reichen, den Wert zu finden, ab welchem die Grenzwerte über- bzw. unterschritten werden?
Alternativ würde ich die Erstellung der ersten Punktmatrix anders machen.
Du kennst die obere und untere Grenzefunktion. Diese entsprechend der Auflösung k abtasten. Somit erhält man zwei gleich lange Vektoren.
Zwischen den Vektoren musst du dann nur entsprechend Spalte für Spalte im Zeilenabstand k die Wertepaare Speichern.
(Oder alternativ gleich mit einer 0-1 Matrix arbeiten, die du nur mit der Auflösung k multiplizierst, wenn es geplottet werden soll.)
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Die Variable h ist ein CellArray mit der Dimension m*n bzw. k*k (quadratisch). Jeder Zelle enthält einen Koordinatenpunkt [x_k , y_k]. Der Befehl h{m,n}(2) spricht also die y-Koordinate eines Punktes an. Die Funktionen y_up und y_down geben die obere und die untere Grenzfunktion wieder. Beide Funktionen sind eindimensionale Matrizen der der Form 1*m.
Diese Matrix sieht wie folgt aus (Die Kommas sind natürlich Punkt in MATLAB):
[3,2 3,6 3,83 3,95 4 3,95 3,83 3,6 3,2 2]
Die Grenzfunktion löscht alle y-Koordinaten in der h-Matrix, welche größer sind als der ansprechende y-Wert der y_up-Matrix.
Das angepasste CellArray h sieht wie folgt aus (beide Grenzfunktionen berücksichtigt):
Es ist zu erkennnen, dass es sich um Punkte in einem Kreis handelt. Diese Punkt benutzte ich später um die Distanz zwischen jeden Punkt zu bestimmen.
Vielen Dank und viele Grüße
Dustin
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.