WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Vektorabschnitte bearbeiten ohne Schleife

 

Ferp
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2011, 11:08     Titel: Vektorabschnitte bearbeiten ohne Schleife
  Antworten mit Zitat      
Guten Tag allerseits!

Heute habe ich folgendes Problem ^^
Ich habe einen Geschwindigkeits-, einen Koordinaten- und einen Zeitvektor. (Alles Zeilenvektoren der gleichen Länge.)
Im Geschwindigkeitsvektor möchte ich ab einer definierten Stelle
1. eine größere Anzahl von Zeilen überspringen und
2. das Minimum um den Ist-Punkt finden.
3. Soll die Koordinate des Minimums gespeichert werden
4. Soll die vergangene Zeit vom Minimum bis 2 Zeilen weiter ermittelt werden.
5. Soll daraus die Beschleunigung ermittelt werden
Das Ganze (1. bis 5.) soll solange wiederholt werden, bis der Vektor zuende ist.
Am Ende werden Durchschnittswerte berechnet.

Im Moment behelfe ich mir mit einer Schleife. Dies ist allerdings keine Option, da viel zu zeitaufwendig.
Code:

%Zusätzliche Laufvariable für While
x = 1;
y = 0;

while min1 + 8 + y*30 <= length(Koordinatenvektor(:,1))
   
 [c,zeile_tiefpkt_alle] = min(Geschwvektor(min-4 + y*30 : min+4 + y*30, 1));
    zeile_tiefpkt_alle = zeile_tiefpkt_alle + min-4 + y*30 -1;
   
    Koordinaten_Beschleunigungsstart(x,1) = Koordinatenvektor(zeile_tiefpkt_alle,1);
   
    dv(x,1) = v(zeile_tiefpkt_alle + 2,1) - n(zeile_tiefpkt_alle,1);
    dt2_alle(x,1) = Zeitvektor(zeile_tiefpkt_alle + steps,1) - Zeitvektor(zeile_tiefpkt_alle,1);
    a_alle(x,1) = dv(x,1) / dt2_alle(x,1);

x=x+1;
y=y+1;
       
    end
 


Mein Problem ist etwas umfangreicher und der Code ist hier vereinfacht. Es können also kleine Fehler vorhanden sein.
Gibt es eine schleifenlose Lösung für dieses Problem?

Erledigt. Du kannst den Titel aber auch selber editieren, Jan S
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.11.2011, 11:56     Titel: Re: Vektorabschnitte bearbeiten ohne Schleife
  Antworten mit Zitat      
Hallo Ferp,

Was bedeutet eigentlich "^^"?

Es ist nahezu unmöglich vereinfachten Copde zu optimieren. Dabei gehen im Allgemeinen die ausgelassenen Details vollkommen unter.
Eine Lösung ohne Schleife ist nicght generell schneller. Es wäre deshalb unbedingt notwendig herauszubekommen, wieso die Schleifen-Lösung langsam ist. Sind alle Outputs hinreichend pre-allociert? Wurden alle wiederholten Berechnungen aus der Schleife herausgezogen oder zumindest in temporäre Variablen geschrieben (z.B. "min-4 + y*30" sollte nicht mehrfach berechnet werden)?
Code:
[c,zeile_tiefpkt_alle] = min(Geschwvektor(min-4 + y*30 : min+4 + y*30, 1))

Dies sieht so aus, als würdest Du "min" als Variable und als Funktion benutzen. Das geht nicht.
Wenn man einen vektor als Spaltenvektor definiert hat, ist "x(index,1)" übrigens langsamer als "x(index)".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ferp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 01.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2011, 14:11     Titel:
  Antworten mit Zitat      
^^ <-- soll ein Schmunzeln (der Augenpartie) darsetellen.. Vllt ist es so besser erkennbar:
^_^

Ich benutze im Originalcode min nicht als Variable. Ich probiere erstmal, deinen Vorschlag, (index,1) durch (index) zu ersetzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.