Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Regelungstechnik 2

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

For Schleife zur Kombination von Vektor und Matrix

 

Nordsee
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2020, 16:15     Titel: For Schleife zur Kombination von Vektor und Matrix
  Antworten mit Zitat      
Hallihallo,

ich habe ein Problem einen Vektor und eine Matrix zu kombinieren.

Die 4. Zeile der Matrix ist mit Einsen und Nullen versehen.

Mein Ziel ist es, dass die 22 Werte des Vektors nacheinander hinter die "Einser Pakete" geschrieben werden. Die Anzahl der "Einser Pakete" sind ebenfalls 22.

Z.B A = [0 0 0 1 1 1 0 0 1 1 0 0 ]
--> [0 0 0 1 1 1 3 0 1 1 2 0 ]

B = [3 2 ]


Lösen wollte ich das mit einer For Schleife und while Bedingung.

Code:

A = Matrix
B = Vektor

for k = 2:(length(A)-1)
for i = 2:(length(B)-1)
    while A(4,k) == 1 && A(4,k+1) == 0
    A(4,k+1) = B(i)
    end
end
end
 


Mein Ergebins schaut so aus, dass nur der erste Wert des Vektors in die Matrix hinter jedes einzelne "Einser Paket" geschrieben wird.

Ich würde mich über eine Antwort freuen.
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 21.991
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.08.2020, 17:21     Titel:
  Antworten mit Zitat      
Hallo,

das sollte ohne Schleifen gehen:

Code:
toInsert = [false, (A(1:end-1) == 1 & A(2:end) == 0)];
A(toInsert) = B


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nordsee
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2020, 16:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Antwort.

Leider kommt diese Fehlermeldung:
"Unable to perform assignment because the left and right sides have a different number of elements"

Der Auswahlbefehl der ersten Zeile deines Codes wird richtig ausgeführt.
Es scheitert dann in der 2. Zeile.

Die Matrix hat 705 Spalten und der Vektor nur 22 Spalten
Ich habe den Vektor auch noch auf 705 Elemente mit Nullen aufgefüllt, aber es kommt die gleiche Fehlermeldung.

Hast du vielleicht eine Idee wie man das lösen kann?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.991
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.08.2020, 17:42     Titel:
  Antworten mit Zitat      
Hallo,

für das gegebene Beispiel klappt es fehlerfrei. Wenn es für dein echtes A und B eine Fehlermeldung gibt, dann wäre der erste Schritt zu schauen, was dort anders ist als im Beispiel.

Anscheinend passen die Anzahl der true in toInsert und die Länge von B nicht zusammen, obwohl beides nach deiner Aussage
Zitat:
Mein Ziel ist es, dass die 22 Werte des Vektors nacheinander hinter die "Einser Pakete" geschrieben werden. Die Anzahl der "Einser Pakete" sind ebenfalls 22.

22 sein müsste.

Wie vergleichen sich denn sum(toInsert) und length(B) ?

Du schreibst immer mal wieder was von Matrizen. Hat eine der Variablen A und B auch mehrere Zeilen und wenn ja: welche?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nordsee
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2020, 18:25     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort.
Ich habe nochmal deine Anmerkungen überprüft und jetzt funktioniert es.
Ich habe mir die Zeile der Matrix als neue Variable ausgeben lassen und somit hatte ich die gleichen Dimensionen.

Vielen Dank Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.972
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.08.2020, 15:04     Titel: Re: For Schleife zur Kombination von Vektor und Matrix
  Antworten mit Zitat      
Hallo Nordsee,

Noch ein paar Tipps:

while erzeugt Schleifen. Es funktioniert zwar in deinem Fall, aber der Befehl für die Bedingung wäre if .
length ist bei Matrizen tückisch, weil er immer die längste Dimension nimmt. Verwende lieber size(A, 2) um die Anzahl der Spalten zu ermitteln.
Mit Haralds Vorschlag geht das am effizientesten. Aber hier der Code mit Schleifen:
Code:
A = Matrix
B = Vektor
iB = 1;
for k = 2:size(A, 2) - 1
  if A(4,k) == 1 && A(4,k+1) == 0
    A(4, k+1) = B(iB);
    iB = iB + 1;
  end
end

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.