|
|
Verschiebungsfunktion von Vektoren |
|
Klausi24 |

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.07.2011, 10:20
Titel: Verschiebungsfunktion von Vektoren
|
 |
Hallo zusammen,
ich habe folgendes Problem mit der Circshift Funktion:
Beispiel:
Der Vektor A ist der Vektor B um den Faktor f verschoben. Wenn ich ein Wert von f=6 annehmen ist das Ergebnis A=[5 1 2 3 4]. Es wird immer nach rechts verschoben und das fortlaufend
Die Verschiebung soll allerdings umgekehrt (Verschiebungsrichtung) werden, sobald die 1 an der Position 5 steht.
Das Ergebnis wäre bei der f=6 dann A=[4 5 1 2 3]. Es soll erst 4 Positionen nach rechts verschoben werden, dann zwei Positionen nach links.
Das soll auch in der laufenden Verschiebung realisiert werden.
Ist das möglich? Das ist echt kniffelig das ganze.
Hoffe das man mein Problem verstehen kann.
Vielen Dank im voraus für eure Hilfe.
Gruß Klausi
|
|
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.07.2011, 13:49
Titel:
|
 |
Mhh hat keiner eine Idee? Vielleicht einen Ansatz der weiterentwickelt werden kann?
Das ist echt knifflig verdammt.
|
|
|
MatLabNooB |

Forum-Guru
|
 |
Beiträge: 262
|
 |
|
 |
Anmeldedatum: 27.03.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.07.2011, 16:24
Titel:
|
 |
Hi, hier wäre eine möglichkeit:
gruß
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.07.2011, 18:48
Titel:
|
 |
Hey Matlabnoob,
vielen vielen Dank...das sieht echt gut aus...und klappt dazu auch noch!
Danke nochmal
Gruß Klausi
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 08:24
Titel:
|
 |
Hey ein Problem habe ich da noch.
Das Programm wird in eine Schleife eingebunden. f verändert sich damit kontinuierlich und und der zu Verschiebene Vektor.
Zum Beispiel sieht im zweiten Gesamtschleifen Durchlauf der Vektor
B=[4 5 1 2 3] aus.
Dann darf nciht mehr um Shiftmax= length(A)-1 vor einem Richtungswechsel verschoben werden, sondern nur noch um zwei Positionen bis B[23451] vorhanden ist.
Ich habe schon überlegt einen Wert im Vektor zu suchen und daran die "Verschiebesituation" zu ermitteln. Damit könnte man dann die max. Länge definieren--> Shiftmax=length(A)-Position(1) Allerdings kann es mehrere Postitionen mit den gleichen Werten geben. Zum Beispiel kann die eins öfters vorkommen.
Weiß da jemand einen Rat wie man das ganze Lösungen könnte?!
Beste Grüße, der Klausi
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 09:02
Titel:
|
 |
Bei mehreren 1er nimmst du doch sicherlich die letzte 1, die also bei Rechtsschieben dem Ende des Vektors am nächsten ist. Das wäre dann so:
Jetzt kannst du Shiftmax wie angegeben bestimmen.
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 09:15
Titel:
|
 |
Hey DSP,
danke für die Antwort. Ne leider ist es nicht immer die letzte eins. Zu Beginn ist es halt die erste Position im Vektor. Im Laufe der Schleife kann diese dann sonst wo sein. Es können dann "Einsen" vor und nach dieser Position sein.
Kann man zum Beispiel die erste Position [1 2 3 4 5] anfangs irgendwie markieren und diese so verfolgen. Allerdings müssen es reelle, summierbare Zahlen bleiben.
Danke nochmal!
Gruß Klausi
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 09:25
Titel:
|
 |
Rechtsschieben soll doch so lange erfolgen, bis eine 1 am Ende ist. In dem Fall wird die Anzahl des Schiebens durch die letzte 1 im Vektor bestimmt. Wenn das erreicht wird, wird die Richtung umgedreht. Was passiert nun, wenn eine andere 1 beim Linksschieben am Ende steht? Willst du nur die 1 betrachten, die als erstes am Ende angekommen ist?
Edit: Du kennst doch durch die Anzahl der Schiebeoperationen ganz genau wo sich welche Zahl befindet.
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 09:48
Titel:
|
 |
nehmen wir einfach den folgenden Vektor an. Fettmarkiert ist die Anfangsposition, die die maximale Verschiebung angibt.
1. Durchlauf
f=1
[1 3 1 2 1]
Ergebnis: [1 1 3 1 2]
2. Durchlauf
f=2
Ausgehend vom Ergebnis von 1. soll um zwei Verschoben werden:
Ergebnis: [1 2 1 1 3]
3. Durchlauf:
f=3
Es wird das Ergebnis aus 2. genommen und um drei verschoben. Es darf aber nur um 1. nach rechts verschoben werden, weil die Fettmarkierte Position auf STelle 4 ist. Danach ändert sich die Richtung und es wird zwei nach links verschoben .
ERgebnis: [ 2 1 1 3 1]
Und das ganze soll mit allen Zahlenmöglichkeiten funktionieren. Man kann nicht immer vn der letzten zahl ausgehen.
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 10:11
Titel:
|
 |
Sorry, vielleicht steh ich ja auf dem Schlauch...
Erst hast du folgendes Bsp genannt:
B=[4 5 1 2 3] mit find(B==1) finde ich die Position der 1 und kann damit shiftmax bestimmen
Nun dieses Bsp...heißt dass, du willst immer die erste 1 im Vektor nehmen und so lange nach Rechtsschieben bis sie am Ende ist. Dann umdrehen und die restlichen Schiebeoperationen durchführen bis f erreicht ist.
Beim zweiten Bsp ist
. Willst du immer die erste 1 im Vektor betrachten und daran die Richtung vorgeben...alle anderen einer im Vektor sind somit für die Richtung nicht von belang
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 11:38
Titel:
|
 |
|
 |
|
Kein Problem, kann auch sein das ich vieles voraussetze was nur in meinem Kopf schwirrt . Würde ich immer die erste eins nehmen dann würde es ja in dem zweiten Durchlauf schon nicht mehr klappen.
Es handelt sich im Prinzip um eine Ping Pong Funktion. Betrachtet wird im ersten Schleifendurchlauf die erste Position des Vektors. hier jetzt einfach Y das für einen belibigen Wert steht. Es werden nachher verschiedenste reelle Zahlen dafür stehen...deshalb geht die Funktion suche nach erstem letztem Wert nicht.
Startvektor: [Y x x x x ]
Dann wird dieser um f=3 verschoben. (maximal dürfte sich y um 4 verschieben. Bei 5 würde es schon wieder umkehren)
Ergebniss der Schleife ist:
[xxxyx]
Dieses Ergebnis (immer Bezug auf das vorhergehende Schleifenergebnis) wird im nächsten Schleifendurchlauf nochmals um f=3 verschoben. Y kann dabei nur um einen nach rechts und wird dann wieder zwei nach links verschoben Ergebniss: [xxyxx]. (Maximal kann y sich um einen nach rechts verschieben, dann wird umgedreht)
Es geht hier also nicht um irgendwelche Zahlenwerte, esdas programm darf sich höchstens um vier postionen nach rechts verschieben, dann muss es sich wieder nach links averschieben. Aber höchstens vier mal, dann wierd wieder gewechselt. . Allerdings Ist die maximale Verschiebung immer von dem der y postion abhängig. Vielen dank für deine Hilfe und deine GEduld.
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 11:52
Titel:
|
 |
Hallo
du muss ja nicht unbedingt Ausgangsvektor verschieben sondern du kannst auch Indexvektor nehmen. Dort kannst du dann die Position von 1 überprüfen.
Also ich meine folgendes
Außerdem, wenn du genau kennst wie viele Male nach rechts und wie viele Male nach Rechts gehts warum vorgibst du nicht gleich Richtungen
so z.B:
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.07.2011, 12:22
Titel:
|
 |
Programmaufbau ist folgendermaßen. Es gibt eine innere Schleife (verschiebung) und eine äußere (die verändert f).
Nach durchlaufen der inneren Schleife ergibt sich ein neuer Vektor. In der übergeordneten Schleife wird ein neues f berechnet. Dieses f wird wieder für die Schleife verwendet. Ausgangsvektor für die innere Schleife ist das Ergebnis des vorherigen schleifen durchlaufs. Das ganze wird etlichhundertemale durchlaufen. Ich kann also nicht genau für jede schleife angeben wie sich der vektor zu verschieben hat. Im Prinzip muss die Innere Schleife immer den Vektor als ERgebnis ausspucken, die zulsetzt verwendete direction und die position des fiktiven wertes"y". Die darauffolgende innere schleife mit neuem f muss auf dieser grundlage dann eine nächste verschiebung vornehmen usw. usw. bis die übergehordnete schleife X durchl durchläufe gemacht hat.
|
|
|
Klausi24 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 13
|
 |
|
 |
Anmeldedatum: 20.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.07.2011, 11:45
Titel:
|
 |
Hey liebe Leute,
was meint ihr, ist dass oben genannte generell möglich? Ich komme da nicht zu einem clue.
Gibts eine Möglichkeit, ein Element in einem Vektor zu markieren. Zum Beispiel, das fünfte Elemten eines Vektors wird mit einem Befehl "rot". Dieses Element wird innerhalb des Vektors wie oben beschrieben, zusammen mit dem kompletten Vekto,r verschoben. Ist es dann möglich die Postion des Elemtes welches rot ist zu finden? Mit der find Funktion zum Beispiel?
Bsp Pseudocode:
Markiere erstes Element im Vektor rot.
Verschiebe den Vektor nach Verschiebemechanismus
Finde die Position, an der sich das "Rote" Element befindet.
Vielleicht hat ja noch einer eine Idee. Danke auf jedenfall schonmal für die Hilfe!
LG Klausi
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 19.07.2011, 15:46
Titel:
|
 |
Die 1 spielt ping-pong und m sagt dir am Ende, an welche Stelle sie steht, als die Spieler aufgehört haben...und das alles ohne markieren. Man muss doch nur mitzählen
Edit: Deine vorherigen Bsp. bzgl. mehreren 1er ist mir aber immer noch nicht klar. Du musst doch irgendeine 1 am Start definieren, die hin und her wandern soll. Wenn ich in diesem Bsp. shiftCnt mit 1 initialisiere, wandert eben die 2 hin und her.
|
|
|
|
|
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.
|
|