|
|
Vermeidung meiner for-Schleife |
|
stick_thai |

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 09:38
Titel: Vermeidung meiner for-Schleife
|
 |
|
 |
|
Moin zusammen,
ich habe ein Problem mit einer for-Schleife, die ich gerne aus meinem Matlab-Code beseitigen würde. Aber leider weiß ich nicht, wie ich das anstellen soll.
Die Situation ist folgende: Ich habe 2 Vektoren wie folgt:
Zitat: |
A = [1;2;4;1;2;4;8;3;1];
b = [8;2];
|
Dabei ist Vektor b der Indexvektor von A der mir besagt, dass "irgendwo" in der Nähe dieses Index ein lokales Maximum liegen muss (in dem Fall eigentlich bei Index 7 und 3). Leider ist nicht bekannt, ob "irgendwo" 2, 3 oder 4 Indizes weiter bedeutet. Darum habe ich mir eine for-Schleife geschrieben, die von den Indizes im Vektor b nach links und rechts im A-Vektor geht und nach größeren Werten sucht. Das Startmaximum ist der Wert des Indexs in b. Wird rechts oder links ein größerer Wert gefunden, wird in dieser Richtung weiter gesucht. Dies wird in beide Richtungen solange getan, bis die Werte wieder kleiner werden.
Da ich dies nicht nur für ein A-b-Vektorpaar machen muss, sondern sehr häufig, würde ich das gerne eleganter lösen.
Vielleicht kann mir dabei jemand einen Tipp geben?
Danke und Gruß,
stick_thai.
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 11:38
Titel:
|
 |
Hallo Stick_thai,
kansst Du Deine FOR-Schleife einfach mal posten?
Es wäre schon notwendig zu wissen, wie groß der zu untersuchende Vektor ist - 2, 3, 4 oder 3000?? Wenn Du das nicht klar einschränkst, ist das Ergebnis der Programms im Grunde zufällig.
Wenn diese Maximal-Wert festgelegt ist, kannst Du aus dem Vektor eine Matrix erstellen, die die jeweiligen Blöcke als Zeilen hat. In dieser Matrix kannst Du dann per DIFF-Befehl nach den lokalen Minima/Maxima suchen.
Gruß, Jan
|
|
|
stick_thai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 13:01
Titel:
|
 |
Hi Jan,
also hier wäre die for-Schleife:
Könntest du mir kurz erklären, was du damit meinst:
Zitat: |
Es wäre schon notwendig zu wissen, wie groß der zu untersuchende Vektor ist - 2, 3, 4 oder 3000? |
Gruß,
stick_thai
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 13:22
Titel: Re: Vermeidung meiner for-Schleife
|
 |
Hallo stick_thai,
Zitat: |
Leider ist nicht bekannt, ob "irgendwo" 2, 3 oder 4 Indizes weiter bedeutet. |
Es wäre wichtig die maximale Entfernung zu kennen. Heißt "irgendwo" also "maximal 4 Elemente entfernt", oder können es auch 5 oder 100 sein?
Gruß, Jan
|
|
|
stick_thai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 13:32
Titel:
|
 |
Hi Jan,
also mehr als 4 Indizes entfernt wird es mit Sicherheit nicht sein. Es könnte allerdings sein, dass innerhalb dieser Entfernung ein Wert liegt, der höher ist, z.B. gerade in 4 Indizes Entfernung. Dazwischen allerdings gibt es einige Werte, die wiederum niedriger als der mit dem ursprünglichen Index angegebene Wert liegt. Darum bringt eine einfache Maximasuche jeweils 4 nach rechts und links keinen Erfolg.
Gruß,
stick_thai
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 14:31
Titel:
|
 |
Hallo stick_thai,
dann fasse ich mal zusammen, was ich bisher verstanden habe:
Ist das so richtig? Etwas Anpassung ist bestimmt nötig, weil mir nicht klar ist, welche Fälle genau zu welcher Ausgabe führen sollen.
Das ist zwar nicht sehr flexibel, sollte aber schneller sein als die Schleifen-Method.
Flexibeler kann man das wie gesagt mit DIFF lösen, indem man rechts oder links nach dem ersten bzw letzten positiven (oder nicht negativen?) Wert sucht, etwa: find(diff(x(5:9)) >= 0).
Die erste Entscheidung, ob man rechts oder links sucht würde ich auf alle Fälle nicht mit in die Schleife packen.
Gruß, Jan
|
|
|
stick_thai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.09.2010, 14:49
Titel:
|
 |
Hallo Jan,
das sieht schon mal interessant aus. Ich werde mal schauen, wie ich das bei mir integrieren kann. Danke vielmals!
Gruß,
stick_thai.
|
|
|
stick_thai |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.09.2010, 09:21
Titel:
|
 |
Hallo Jan,
danke für deinen Tipp, hat gut funktioniert.
Gruß,
stick_thai.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|