|
Breningar |

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.12.2016, 11:21
Titel: Dimensionen von Matrizen
|
 |
|
 |
|
Moin,
ich fummel hier jetzt schon ne Ewigkeit an meinem kleinen Programm rum und habe nur Probleme ¯\_(ツ)_/¯
Ich versuche mal so genau zu beschreiben, wo es harkt:
Was mir aktuell wieder Kopfschmerzen bereitet sind die Dimensionen von Variablen, die ich gespeichert habe.
Ich habe einen Vektor in Simulink aus einem Skalar generiert
Daraus ergibt sich dann eine 1x1 double timeseries mit Data1 bis Data 4:
Soweit der leichte Teil, jetzt möchte ich diese Daten (nennen wir sie mal phi(k) ) aber nehmen und mit Matrizen verrechnen. Genauer gesagt soll phi(k) in einem Kalmanfilter die Werte der Matrix H vorgeben. Da ich nur genau einen skalaren Messwert für den Filter habe, gibt mir also auch phi(k) die Größe der Matrizen im Filter vor. Soweit am Rande dazu.
Nun habe ich aber das Problem, dass ich aus phi(k) keine Matrix erstellt bekomme. Ich verstehe das Problem daran nicht und sowohl die Mathworkshilfe, als auch Google haben mir bislang nicht weitergeholfen (vielleicht bin ich auch zu doof oder noch zu unerfahren auf dem Gebiet um das über Google zu verstehen).
Ich habe mir in Simulink dann einen Matlabfunktionsblock erstellt, mit phi(k) als Eingang und wollte dann im Block ganz simpel den eye-Befehl für eine Einheitsmatrix nehmen und dann mit phi (phi_u) multiplizieren:
Jetzt bekomme ich aber den Fehler "Size mismatch (size [4 x 4] ~= size [4 x 1])". Ja gut, ist ja irgendwo logisch, dass die beiden unterschiedliche Größen haben, aber ich muss doch trotzdem einen Vektor (4x1-Matrix) mit einer 4x4-Matrix multiplizieren dürfen/können?
Ich habe auch schon probiert phi_u zu transponieren, aber dann hab ich eben "Size mismatch (size [4 x 4] ~= size [1 x 4])" ist ja auch logisch, das ändert ja nix am Problem. Dann habe ich die Einheitsmatrix manuell geschrieben [1 0 0 0;0 1 0 0; 0 0 1 0; 0 0 0 1] aber natürlich ändert auch das nix.
So um Unklarheiten zu vermeiden: Ich möchte eine Matrix die mit den Daten von phi wie nachfolgend gefüllt ist: [Data1 0 0 0; 0 Data2 0 0; 0 0 Data3 0; 0 0 0 Data4]
Ich hoffe ihr könnt mir wieder helfen und ich vermute mal stark, dass die Lösung wieder simpel ist, ich aber nur wieder etwas übersehen habe :/ so ist es ja immer
Vielen Dank und LG
Bren
|
|
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.12.2016, 13:02
Titel:
|
 |
huch, ich vermute mal, dass das Thema eher in die Abteilung Programmierung passt, oder?
|
|
|
Verschoben: 07.12.2016, 14:37 Uhr von Jan S Von Matlab intern nach Programmierung |
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 07.12.2016, 14:40
Titel: Re: Dimensionen von Matrizen
|
 |
Hallo Breningar,
".*" ist die elemtweise Multiplikation. Die Matrix-Multiplikation ist "*"
Noch einfacher:
Gruß, Jan
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.12.2016, 15:15
Titel:
|
 |
Vielen Dank,
ja die Version mit * habe ich auch probiert, kam bei mir auf das gleiche Ergebniss heraus, nämlich Fehler. Das mit dem diag-Befehl ist genau meine Lösung, vielen Dank. Ich wusste da war was, ich habe den Befehl auch schon mal gesehen und zum Üben genutzt, aber dann wieder vergessen.
Also danke
LG Bren
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 07.12.2016, 20:37
Titel:
|
 |
Hallo Breningar,
Zitat: |
ja die Version mit * habe ich auch probiert, kam bei mir auf das gleiche Ergebniss heraus, nämlich Fehler. |
Man kann eine 4x4 Matrix mit einem 4x1 Vektor multiplizieren. Ohne Fehler.
Die "See also" Zeile in der Dokumentation ist bei solchen Problemen hilfreich. Auch eine Suche in der Dokumentation mit
docsearch
ist oft zielführend.
Gruß, Jan
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.12.2016, 09:40
Titel:
|
 |
Ja, im Command Window mit den Variablen aus dem Workspace hat alles prima funktioniert. Im Matlab function block in Simulink hat die gleiche Operation nicht funktioniert :/
Vielleicht war da auch ein anderes Problem, aber ich kann es mir fast nicht vorstellen.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 09.12.2016, 11:36
Titel:
|
 |
Hallo Breningar,
Immer wenn man im Forum "funktioniert nicht" schreibt, ist es erforderlich die Fehlermeldung dazu zu posten. Andernfalls fehlte die Information, worum es überhaupt geht.
Gruß, Jan
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.12.2016, 12:08
Titel:
|
 |
Ja die Fehlermeldung war in meinem ersten Post im Text eingebunden und vielleicht nicht gleich ersichtlich.
Zitat: |
Size mismatch (size [4 x 4] ~= size [4 x 1]) |
Das ist ja das, was mich so verwirrt. Es ist ja im Grunde, wie du gesagt hast, problemlos möglich 4x4 und 4x1-Matrizen zu multiplizieren. Nur scheinbar nicht in meinem Fall und ich habe nicht herausbekommen warum. Die gleiche Rechenoperation mit den gleichen Variablen und Werten hat im Command Window manuell funktioniert.
Vermutlich liegt der Fehler noch wo anders, aber das war eben die einzige Fehlermeldung und die verwirrt mich dabei. Aber das ist nun auch nicht mehr wichtig, der diag-Befehl hat ja mein Problem gelöst.
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.12.2016, 15:45
Titel:
|
 |
|
 |
|
Falls hier nochmal jemand drüber stolpert, ich habe jetzt mein riesen Dimensionsproblem endlich entschlüsselt, vielleicht hilft es ja dem einen oder anderen.
Ich habe Vektor x als 4x1 Matrix und Matrix Q als 4x4 Matrix.
Beispielsweise x=[1;2;3;4], Q=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]
So, versuche ich jetzt x*Q bekomme ich den Fehler "Inner matrix dimensions must agree.".
Jetzt nehme ich aber Q*x bekomme ich problemlos eine 4x1 Matrix als Ergebnis (so wie es auch soll). Sprich Matlab braucht definitiv die Variablen in der richtigen Reihenfolge, sonst wird das nix.
Andersheraum ist es das Gleiche: y ist diesmal eine 1x4 Matrix y=[1 2 3 4], Q bleibt gleich:
y*Q ergibt dann ein Ergebnis in vorm einer 1x4 Matrix, Q*y wirft wieder den Fehler "Inner matrix dimensions must agree." aus.
Für Laien und Anfänger sicherlich ein frustrierender Fehler, an den zumindestens ich nicht gedacht habe und der die Fehlersuche erschwert. Ich bin da eben nur durch Zufall beim rumprobieren drauf gestoßen. Im Skript habe ich immer Fehler bekommen, beim Testen im Command Window habe ich die einzelnen Zeilen aber andersherum eingeben und ein Ergebnis bekommen. Da ich das anfangs nicht bemerkt habe, habe ich natürlich ewig nach dem Fehler gesucht.
Das Problem von oben beruht auch auf diesem simplen Fehler.
Die richtige Lösung wäre ganz einfach:
LG Bren
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.12.2016, 16:24
Titel:
|
 |
Hallo,
Zitat: |
Sprich Matlab braucht definitiv die Variablen in der richtigen Reihenfolge, sonst wird das nix. |
Liegt an der Mathematik dahinter: Matrixmultiplikation ist halt nicht kommutativ.
Bei MATLAB Function-Blöcken ist zudem das Problem, dass die Größe von Vektoren / Matrizen vorab bekannt sein muss. Dazu hilft es, Variablen am Anfang zu initialisieren, auch wenn das in MATLAB nicht nötig wäre.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.12.2016, 23:24
Titel:
|
 |
Hallo Breningar,
Ja, bei der Matrix-Multiplikation kommt es auf die reihenfolge an. Das gilt nicht nur für Matlab, sondern es ist auch mathematisch so definiert.
Gruß, Jan
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.12.2016, 11:13
Titel:
|
 |
Hallo Jan,
so schnell können kleine Fehler zu Problemen führen. Grundsätzlich habe ich das in der Schule/Uni in Matrizenrechnung auch gelernt, nur vermute ich, dass ich irgendwann angefangen habe, meine Vektoren und Matrizen unbewusst schon so umgestellt habe, dass es eben funktioniert hat. Nur bewusst habe ich dann nicht mehr darüber nach gedacht, ob nun Q*x oder x*Q richtig ist.
Naja nun ist auch gut, ich habe wieder was gelernt und mein Problem ist gelöst.
LG Bren
|
|
|
|
|
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 - 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.
|
|