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

Probleme mit Vektor

 

andyxp
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.08.10
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 20.08.2010, 09:14     Titel: Probleme mit Vektor
  Antworten mit Zitat      
Hallo Leute,

ich habe folgendes Problem:

Ich habe einen Roboter der mir Daten sendet wenn ich diese abfrage.
Ich benötige aber z.B. nur die ersten fünf, also frage ich in einer schleife nach den ersten fünf werten.

a = [ 1 2 3 4 5 ]
Ich benötige auch exakt diese Reihenfolge, weil jede Zahl eine Bedeutung hat.

Das ganze in eine Scheife verpackt um mir permanent z.B. die Drehzahl auszugeben.

Mein Problem jetzt ist: der Roboter sendet unkontrolliert Fehler mit.
Sobald der Fehler im Vektor auftritt verschiebt sich das ganze
z.B.
a = [ 1 2 9 3 4 ]
a = [ 5 1 2 3 4 ]
a = [ 5 1 9 2 3 ]
....

Jetzt habe ich es schon geschafft diese Zahl zu finden und zu löschen, aber die Verschiebung bleibt.

a = [ 1 2 () 3 4 ]
a = [ 5 1 2 3 4 ]
a = [ 5 1 () 2 3 ]

Wie kann ich diese Zahl finden, löschen und die anderen Werte aufrücken lassen? So dass ich immer die 1 als ersten Wert habe.

Danke
Private Nachricht senden Benutzer-Profile anzeigen


Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 20.08.2010, 09:33     Titel:
  Antworten mit Zitat      
Hi,

du kannst das so machen:
Code:

a = [1 2 3 4 5];
a1 = [9 5 1 3 4] ;
a2 = [5 1 3 4 2];
A1 = intersect(a,a1)
% usw
A2 = intersect(a,a2)
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
andyxp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.08.10
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 20.08.2010, 10:03     Titel:
  Antworten mit Zitat      
Hallo Vito,

danke für deine schnelle Antwort.
Das würde funktionieren wenn ich immer die gleiche Drehzahl hätte, sobald ich eine andere habe wechseln auch die Werte im Vektor.
Der genaue Vektor sieht so aus:
a = [123 1 85 16 1 240 90 150 215]
Die einzigen Werte die immer gleich sind, sind 123 und 215
123 = Start
215 = Ende
Die anderen Werte entschlüsseln sich zu Drehzahl, welcher Motor und Ist Drehzahl.

Mein Fehlercode ist die Nummer 92, sobald diese kommt will ich die 92 und die folgende Zahl löschen.

Hätte mein Problem wohl noch genauer erklären können.

Gruß Andy
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 20.08.2010, 10:16     Titel:
  Antworten mit Zitat      
Hi,
noch ne Vorschlag Wink
Code:

a = [123 1 85 16 1 240 90 150 215]; %
a1 = [123 1 85 16 1 240 92 150 215]; % der Fehler
% wenn ich dich recht verstanden habe möchtest du alle nachfolgende Zahlen
% löschen sobald der Wert 92 im Vektor vorkommt, wenn dem so ist dann
% kannst du das so lösen:
Fehler92 = find(a1==92); % gibt den Indizie
a1(Fehler92:length(a1))=[] % wird alle nachfolgende Zahlen aus dem Vektor gelöscht
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Frank

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2010, 10:24     Titel: a
  Antworten mit Zitat      
hallo Vito
Zitat:

sobald diese kommt will ich die 92 und die folgende Zahl löschen.


ich glaub du hast zu viel gelöscht Wink
viele grüsse
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 20.08.2010, 11:19     Titel:
  Antworten mit Zitat      
Hi,

ist doch kein Problem, dann so
Code:

Fehlernext = Fehler92+1;
a1(Fehler92:Fehlernext)=[]
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
andyxp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.08.10
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.08.2010, 13:27     Titel:
  Antworten mit Zitat      
Hallo Vito,

sitze gerade wieder am Roboter, die 92 und die folgende Zahl löscht er, das klappt.
Mein Problem aber weiterhin, das Matlab den Rest des Vektors leer lässt und ich deshalb eine Verschiebung habe.

Siehe hier:

eingang = 123 219 85 16 1 246 124 217 125


eingang = 123 220 85 16 1 245 215


eingang = 125 123 221 85 16 1 246 88 181

Die 125 fällt immer in den Vektor der nächsten Schleife.
Wie kann ich das denn lösen?

Gruß Andy
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 23.08.2010, 13:51     Titel:
  Antworten mit Zitat      
Hi,

können wir die leeren Stellen mit Nullen füllen? So
Code:

a = [123 219 85 16 1 246 124 217 125 ];
a1 = [123 219 85 16 1 246 92 217 125 ];
Fehler92 = find(a1==92); % gibt den Indizie
Vektor gelöscht
Fehlernext = Fehler92+1;
a1(Fehler92:Fehlernext)= 0
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
andyxp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.08.10
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.08.2010, 14:06     Titel:
  Antworten mit Zitat      
Das geht leider nicht.
Das Problem ist, das die 92 zusätzlich auftaucht und sich deswegen alles verschiebt.

Code:
a0 = [123 219 85 16 1 246 124 217 125 ];
a1 = [123 219 85 16 1 246 124 92  217 ];
a2 = [125 123 219 85 16 1 246 124 217 ];  


Ich will die 92 löschen, aber Matlab sagen, das der Vektor trotzdem aus 9 besteht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 23.08.2010, 14:13     Titel:
  Antworten mit Zitat      
Hi,

ich verstehe dein Problem nicht, denn du willst ja immer die 92 und die nachfolgende Zahl löschen. Genau das wird ja gemacht und die Länge des Vektors wird beihalten. Oder stört dich das mit den Nullen? Du kannst da auch beliebige Zahl reinschreiben.

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
andyxp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.08.10
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.08.2010, 14:28     Titel:
  Antworten mit Zitat      
Hi,

das mit der 92 finden ist alles super, das klappt.

Das Problem ist, wenn die 92 zusätzlich auftaucht, dann besteht der Vektor aus 10 Zahlen, da aber nur 9 vorgegeben sind, fällt der 10 Wert (hier 125) in den Vektor der nächsten Schleife.
Und schon funktioniert meine Abfrage nicht mehr, da ich den 6 und 7 Wert benötige zur Ausgabe meiner Drehzahl, etc.
Die beiden Werte sind dann ja an Position 7 und 8.

Ich möchte die 92, 92+1 löschen und die 125 wieder in den Vektor holen.

Ich hoffe du konntest mein Problem jetzt verstehen.

Danke Dir
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 23.08.2010, 14:46     Titel:
  Antworten mit Zitat      
Hi,

probier mal das Copy/Paste
Code:

a = [123 219 85 16 1 246 124 217 125 ];  
a1 = [123 219 85 16 1 246 90 55 2 174 92] ;
Fehler92 = find(a1==92);  
Fehlernext = Fehler92+1;
[m n] = size(a1);
if n == 9  
    a1(Fehler92:Fehlernext)= 0
elseif n ~= 9
    a1(Fehler92:9)=0
end
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
andyxp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.08.10
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.08.2010, 14:57     Titel:
  Antworten mit Zitat      
Dann macht er mir nen ganzen Vektor voller 0

Kann ich irgendwie festlegen das immer 125 die letzte Zahl des Vektors sein soll?
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 23.08.2010, 15:16     Titel:
  Antworten mit Zitat      
Hi,

machmal bitte Copy/Paste
Code:

a = [123 219 85 16 1 246 124 217 125 ];  
a1 = [123 219 85 16 1 246 92 12 55 34];
a2 = [123 219 85 16 1 246 92 12];
A = {a1,a2};
Fehler92 = find(a1==92);  
Fehlernext = Fehler92+1;
[m n] = size(a1);
for k = 1:2
if n == 9  
    A{k}(Fehler92:Fehlernext)= 0
elseif n ~= 9
    A{k}(Fehler92:Fehlernext)=[]
    A{k}(9) = 125
end
end
 

Ich habe einmal dein Vektor weniger als 9 Elemente genommen und einmal 10. Und mit A{1} oder A{2} kannst du die Ergebnisse aufrufen.

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 23.08.2010, 16:03     Titel:
  Antworten mit Zitat      
Moin moin,

ich habe mich jetzt nicht en detail mit den Lösungsvorschlägen befasst, aber
Code:
sollte Dich der Lösung elegant näher bringen. Mehr siehe Hilfe/ doc.

Ciao,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.