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

Index in Schleife

 

Franziska1995
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2018, 14:43     Titel:
  Antworten mit Zitat      
Ich habe eine Frage die in aehnliche Richtung geht.
nachfolgend sehen Sie meinen Code. Dadurch, dass ich meinen Vektor immer kuerze, aendert sich mein Index nicht. Jetzt weiss ich nihct, wie ich die unterschiedlichen Werte fuer pos sinnvoll speichern kann, sodass sie in Ubers nihct ueberschrieben sondern nebeneinander angezeigt werden.
Ein weiteres Problem ist, dass mein Break irgendwie an der falschen Stelle sitzt, sodass er immer wieder versucht noch etwas in Ubers zu schreiben.

Gnaz herzlichen Dank fuer die Hilfe


Code:
Ubers = zeros (1,length(vektorStates(1,:)));
pos=0;
i=1;
while i < length(vektorStates(1,:))
   
   
    if vektorStates(i) == 1;
        Phase = 2;
        pos = find(vektorStates == Phase,1,'first')-1;%findet Index
        vektorStates(1:pos)=[];%loescht Werte kleiner Index
    else Phase = 1;
        pos = find(vektorStates == Phase,1,'first')-1+pos;
        vektorStates(1:pos)=[];%loescht Werte kleiner Index
    end
    Ubers(i)= pos;
    if i+pos>length(vektorStates(1,:))
        break
    end
    end

_________________

Dankeschön

Liebe Grüße
Franziska
Private Nachricht senden Benutzer-Profile anzeigen


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 06.08.2018, 14:51     Titel:
  Antworten mit Zitat      
Hallo Franziska,

dann füg doch noch eine Zählvariable für Ubers ein und beschreibe dein Ubers erst nach der if-Abfrage für das break.

Code:
Ubers = zeros (1,length(vektorStates(1,:)));
pos=0;
i=1;
zaehler = 1;
while i < length(vektorStates(1,:))
    if vektorStates(i) == 1;
        Phase = 2;
        pos = find(vektorStates == Phase,1,'first')-1;%findet Index
        vektorStates(1:pos)=[];%loescht Werte kleiner Index
    else Phase = 1;
        pos = find(vektorStates == Phase,1,'first')-1+pos;
        vektorStates(1:pos)=[];%loescht Werte kleiner Index
    end
   
    if i+pos>length(vektorStates(1,:))
        break
    end
    Ubers(zaehler) = pos;
    zaehler = zaehler + 1;
end
 


Bei deinen Abfragen wie
Code:
while i < length(vektorStates(1,:))
und
Code:
if vektorStates(i) == 1;
kannst du auch das i einfach durch eine 1 ersetzen. Ändert sich ja eh nicht Wink

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Franziska1995
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2018, 15:37     Titel:
  Antworten mit Zitat      
Das mit dem zaehler funktioniert super, dafuer schonmal herzlichen Dank, jedoch das mit dem Abbruch funktioniert immer noch nicht, denn wenn ich es vor ubers setze, dann springt er garnicht zu ubers.

Code:
In an assignment  A(:) = B, the number of elements in A and B must be the same.

Error in Phasen (line 45)
    Ubers(zaehler) = pos;


Das ist dann die Fehlermeldung die ich bekomme.
_________________

Dankeschön

Liebe Grüße
Franziska
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 06.08.2018, 18:23 Uhr von Jan S
Von Beitrag Werte aus for Schleife in Vektor speichern aus dem Forum Programmierung
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.08.2018, 18:33     Titel:
  Antworten mit Zitat      
Hallo Franziska1995,

Bitte hänge keine neuen Fragen an bestehende Themen an. Andernfalls wird der "beantwortet"-Status sinnfrei und es ist nicht mehr klar, zu welcher Frage eine Antwort gehört. Darum ist "Thread-Hijacking" nicht hilfreich.
Code:
length(vektorStates(1,:))

Das ist deutlich ineffizienter als:
Code:
size(vektorStates, 2)

Denn im ersteren Fall wird ein Vektor erzeugt, die Inhalte aus de Matrix kopiert, nur um dann die Anzahl der Elemente zu bestimmen. Das geht mit dem size Befehl einfacher. Wenn es sowieso ein Vektor ist, wäre auch numel hilfreich.

Man kann aus nicht-funktionierendem Code prinzipiell nicht zuverlässig erraten, was der Code tun soll. KannSt Du erklären, was das Programm tun soll?

Einen Vektor immer wieder zu kürzen ist jedenfalls wie das iterative Wachsen von Arrays extrem ineffizient, weil es enorm viel Speicher erfordern kann. Meist ist es effizienter eine logical Vektor zum Maskieren der Inputs zu verwenden.

Gruß, Jan
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.