|
|
For-Schleife ersetzen wegen Echtzeitfähigkeit |
|
Archie1981 |
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 02.04.08
|
|
|
|
Wohnort: HDH / Ulm
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.04.2008, 14:18
Titel: For-Schleife ersetzen wegen Echtzeitfähigkeit
|
|
Hallo.
Ich implemetiere zur Zeit eine Embedded Matlab Function die später unter Echtzeitbedingungen laufen soll.
Daher sollte man ja bei der Programmierung auf Schleifen verzichten.
Bisher speichere ich Werte einer Funktion in einem Vektor und schiebe diese Werte (innerhalb einer for-Schleife) wie in einem FIFO-Speicher in jedem Schritt um eine Stelle nach hinten.
Meine Frage:
Hat jemand eine Idee wie ich diese For-Schleife ersetzen kann??
|
|
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 23.04.2008, 15:20
Titel:
|
|
Hallo Archie,
Mir fallen so auf Anhieb folgende Möglichkeiten ein:
1)Eine Stelle nach hinten Schieben:
2)Vieleicht auch so:
3) mit Speicher-Reservierung
|
|
|
tompie |
Forum-Guru
|
|
Beiträge: 260
|
|
|
|
Anmeldedatum: 19.09.07
|
|
|
|
Wohnort: München
|
|
|
|
Version: immer alles
|
|
|
|
|
|
Verfasst am: 23.04.2008, 16:04
Titel:
|
|
Zitat: |
tmpVektor=zeros(length(Vektor)+1,1);
tmpVektor(2:end)=Vektor(1:end)
Vektor=tmpVektor;
clear Vektor; |
hmm...
besser
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 23.04.2008, 16:07
Titel:
|
|
Danke tompie, das ist wirklich besser.
blödes Copy-Paste Fehler.
|
|
|
Archie1981 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 02.04.08
|
|
|
|
Wohnort: HDH / Ulm
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.04.2008, 07:41
Titel:
|
|
Hi denny
erst mal vielen Dank für Deine Hilfe!!!
Deine Ideen sind richtig gut. Hab Sie alle durchprobiert. einziges Problem ist, das der Vektor jedes mal um eine Stelle größer wird, das sollte nicht sein.
Funktionieren tuts damit:
mit Deinen anderen Vorschlägen ist es sicher auch noch möglich das zu realisieren, aber da es so funktioniert.... lass ich es.
Danke nochmal.
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 24.04.2008, 08:17
Titel:
|
|
Hallo,
Ach so, hab dein code irgendwie falsch verstanden, mir schien dass dein Array immer größer wird.
Die Größe von Array darf bei dir also sich nicht ändern?
|
|
|
Archie1981 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 02.04.08
|
|
|
|
Wohnort: HDH / Ulm
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.04.2008, 12:39
Titel:
|
|
Hi.
Nein, der Vektor darf seine größe nicht ändern, weil er später mit einem zweiten Vektor mit fester größe multipliziert wird.
hatte vorher ein versuch mit der function circshift gestartet. allerdings taucht dann eine for-schleife innerhalb dieser funktion auf.
(edit circshift)
was ist bei dem befehl "end" in
ist da vielleicht eine for schleife "versteckt"?
|
|
|
tompie |
Forum-Guru
|
|
Beiträge: 260
|
|
|
|
Anmeldedatum: 19.09.07
|
|
|
|
Wohnort: München
|
|
|
|
Version: immer alles
|
|
|
|
|
|
Verfasst am: 24.04.2008, 13:11
Titel:
|
|
Hallo Archie,
end bezeichnet einfach immer das letzte Element eines Vektors. Vektor(end:-1:2) bezeichnet also die Elemente von Vektor in umgekehrter Reihenfolge ohne das erste Element. Vektor(end-1:-1:1) bezeichnet entsprechend die Elemente von Vektor in umgekehrter Reihenfolge ohne das letzte Element. Es wird also das vorletzte Element ins letzte kopiert (end-1 --> end), das drittletzte in das vorletzte (end-2 --> end-1) usw.
Du kannst auch schreiben
das geht auch, da Matlab erkennt, daß die Elemente nicht überschrieben werden sollen. Aus pädagogischen Gründen ist aber die Variante
sinnvoller, Du sollst ja hier was lernen
Gruß tompie
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.05.2008, 11:37
Titel:
|
|
Lass doch einfach eine Index-Variable im Kreis laufen (RingPuffer):
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.05.2008, 12:47
Titel:
|
|
kleiner Fehler, muss oben natürlich
heissen[/quote]
|
|
|
Archie1981 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 02.04.08
|
|
|
|
Wohnort: HDH / Ulm
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.05.2008, 06:44
Titel:
|
|
Die Indexvariable im Kreis laufen zu lassen wäre sicher auch eine Möglichkeit. Aber da die Reihenfolge, in der die Werte in dem Vektor stehen, entscheidend ist kommt das für mich nicht in Frage.
|
|
|
|
|
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 - 2024
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.
|
|