|
Lars_1991 |
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2019, 15:34
Titel: Variablen speichern
|
|
Hallo liebes Forum
Ich habe eine for Schleife:
ich möchte gern diese Parameter abspeichern, damit ich sie mir später ansehen kann und plotten kann.
Kann mir jemand helfen?
Meine ausgeworfene Fehlermeldung lautet, dass die Matrixdimensionen nicht zusammenpassen
"Unable to perform assignment because the size of the left side is 1-by-360 and the size of the right side is 5-by-1."
Vielleicht ist ja jemand bereit mir zu helfen.
Mit freundlichen Grüßen
Lars
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 07.11.2019, 17:42
Titel:
|
|
Hallo,
ohne ein nachvollziehbares Beispiel schwierig.
Ist M_z eine Matrix? Dann würde ich von der Verwendung von length abraten und stattdessen size empfehlen.
Läuft der Code denn fehlerfrei, wenn du nicht vorbelegst? Sicherheitshalber vor neuen Versuchen
clear
Falls ja, kannst du an der Größe der Variable am Ende ja sehen, wie du sie vorbelegen musst.
Ansonsten: die Fehlermeldung ist ja recht klar, und die komplette Fehlermeldung sagt vermutlich auch noch aus, in welcher Zeile das Problem auftritt. So blöd es klingt, kurz gesagt wäre der Rat: dann mach die Dimensionen halt passend ;)
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 ;)
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.11.2019, 21:38
Titel:
|
|
Hallo Harald,
ich schicke dir den vollständigen Code mal rüber. nein der Code läuft nicht...eben weil die Dimensionen noch nicht passen.
Es gibt ein Beispiel, wo es die gleiche Herangehensweise ist.
https://www.cbcity.de/das-extended-kalman-filter-einfach-erklaert
M_z ist eine Matrix genau. Ok, danke für den Tipp mit der "size" Funktion.
Du meinst vor der Speicherung clear reinzuschreiben?
Danke und einen schönen Abend.
Beschreibung: |
|
Download |
Dateiname: |
EKF_CTRV_LARSs.mlx |
Dateigröße: |
61.13 KB |
Heruntergeladen: |
350 mal |
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 08.11.2019, 08:00
Titel:
|
|
Der Code liefert einen anderen Fehler:
Andreas
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.11.2019, 08:49
Titel:
|
|
Hallo,
Andreas, das lag an (warum auch immer) auskommentierten Zeilen.
Korrekturvorschlag Zeile 164: s_x_p = zeros(5,length(M_z));
Korrekturvorschlag Zeile 181: s_x_p(:,k) = diag(x_p)
Jetzt gibt es einen Fehler in Zeile 183, aber mir ist nicht recht klar, was die Absicht hinter der Zeile ist. Warum insbesondere das komplizierte Function Handle Konstrukt? Ist das nicht einfach s(1:5) ?
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 ;)
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.11.2019, 09:27
Titel:
|
|
Guten Morgen,
Der Fehler mit dem aaskommentierten v war ein Versehen von mir....möchte da eigentlich noch was ändern, sodass ich nur noch ein v auswählen muss und das Programm dann selbst die nächsten Schritte vollzieht....Wunschdenken
Die Korrektur von Harald hat zumindest erstmal geklappt...jetzt springt der Fehler weiter.
Muss ich die Speichervariablen alle nach dem Beispiel s_x_p anpassen?
Ich weiß die frage wurde sicher schon oft gestellt und es gibt auch eine Matlab Hilfe aber in einfachen Worten, was ist der Vorzug eines function Handles? Ich habe das ehrlich gesagt einfach bei einem Beispiel gesehen und dann so übernommen...
Grüße
Lars
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.11.2019, 13:37
Titel:
|
|
Hallo,
was ist der aktuelle Fehler? Matrixmultiplikation? Wie gesagt: da weiß ich nicht, was die Absicht der Zeile ist, und kann damit auch nicht Tipps zur Fehlerbehebung geben.
Function Handles würde ich vor allem dann verwenden, wenn eine Funktion eine andere Funktion als Input erwartet, z.B. bei fzero, oder auch zur Definition von Funktionen als Einzeiler.
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 ;)
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.11.2019, 14:18
Titel:
|
|
|
|
|
Hallo,
also der Code läuft jetzt zumindest mal. Es wirft nur mit Sicherheit noch nicht das richtige aus.
Der Code basiert auf den Gleichungen, siehe Anhang. Somit muss wahrscheinlich eine echte Matrix Multiplikation stattfinden und keine Elementweise Multiplikation.
Eine Veränderung, die ich gern noch umsetzen würde, ist, dass beim Starten des Filters, also erster Umlauf, in der ersten Zeile der Zustandsvektor x_init als Prediction (Vorhersage) genommen wird aber im nächsten Umlauf dann durch das berechnete x_e Estimation (Schätzung) ersetzt wird. Und dann immer so weiter.
Das gleich soll eigentlich für P geschehen. Also erster Umlauf mein P, welches ich vorher definiert habe (siehe Code) und dann im weiteren durch das, im letzten Schritt berechnete P_k ersetzt wird.
Wie mache ich das am besten.
Also meinst du Harald, kann man das auch ganz normal mit den Variablen füllen und nicht das function handle benutzen?
Ich werde das nochmal klären. erstmal Danke dafür
Grüße
Lars
Beschreibung: |
|
Download |
Dateiname: |
Bildschirmfoto 2019-11-08 um 13.49.04.png |
Dateigröße: |
1.07 MB |
Heruntergeladen: |
352 mal |
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2019, 12:32
Titel:
|
|
Hat keine eine Idee?
Oder braucht es noch Zusatzinformationen? Ich würde mich über Vorschläge freuen
Liebe Grüße
Lars
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.11.2019, 13:13
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Es wirft nur mit Sicherheit noch nicht das richtige aus. |
Dann müsstest du das schrittweise durchgehen und ganz genau sagen, an welcher Stelle was statt was herauskommen sollte. Wie schon gesagt: ich kenne mich mit Kalman-Filtern (und der in den Gleichungen verwendeten Syntax) nicht aus.
Zitat: |
Eine Veränderung, die ich gern noch umsetzen würde, ist, dass beim Starten des Filters, also erster Umlauf, in der ersten Zeile der Zustandsvektor x_init als Prediction (Vorhersage) genommen wird aber im nächsten Umlauf dann durch das berechnete x_e Estimation (Schätzung) ersetzt wird |
Dann verwende doch nur x_e, setze das vor der Schleife, und überschreibe es in der Schleife.
Zitat: |
Das gleich soll eigentlich für P geschehen. |
Dann genauso wie für x_e.
Zitat: |
kann man das auch ganz normal mit den Variablen füllen und nicht das function handle benutzen? |
Definitiv ja.
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 ;)
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.11.2019, 15:28
Titel:
|
|
Hallo Harald,
Danke für den Hinweis...hab jetzt meine Eingangsvariable x_e so benannt wie sie im Algorithmus auftaucht. wird diese dann automatisch nach dem ersten Umlauf überschrieben? Das gleiche habe ich mit P gemacht. Es ändert sich zwar nichts Grundlegendes aber ich erforsche das mal in den kommenden Tagen und melde mich dann nochmal
Ich muss noch herausfinden, welcher Art von Matrix/Vektor ausgegeben werden soll.
Das mit dem Funktion handle werde ich mir dann nochmal überlegen, wenn es eh auch klassisch geht
Ich wünsche noch einen schönen restlichen Sonntag.
Liebe Grüße
Lars
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.11.2019, 15:41
Titel:
|
|
Hallo,
Zitat: |
wird diese dann automatisch nach dem ersten Umlauf überschrieben? |
Wenn du das so gemacht hast, wie ich meine: ja. Probier es aber doch einfach aus? Lass den Code im Debugging-Modus zeilenweise durchlaufen und schau dir die Variablen im Workspace an.
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 ;)
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.11.2019, 12:59
Titel:
|
|
|
|
|
Hallo Harald,
ich habe jetzt nochmal ein bisschen was verändert und damit beschäftigt, welche Dimensionen meine Ergebnisse haben sollen und welche ich derzeit habe.
Hier der Code für den Algorithmus:
Eine Zeile an der ich mir noch die Zähen ausbeiße, ist die Zeile:
der Vektor x_e soll vom Format 5x1 sein. So wie er oben berechnet wird, kommt eine 5x5 Matrix raus. Da der Vektor x_e ja immer wieder überschrieben wird, funktioniert der Filter nicht richtig. Die Dimensionen der anderen Vektoren und Matrizen lauten:
x_p = 5x1
K = 5x5
M_z = 360x5
J_H_1 = 5x1
Ich denke das Fehler in der M_z Matrix liegt.
Jetzt meine Frage:
mich interessiert aus M_z immer nur die jeweilige Zeile, passend zum k, also die Dimension 1x5. hat jemand eine Idee, wie man zeilenweise Daten extrahieren kann und trotzdem der Wert nach dem Umlauf verändert?
Ich stelle meinen vollständigen Code nochmal zur Verfügung.
Bei Fragen bitte gern melden!!!
Ich bin fast am Ziel und würde mich über eure Hilfe freuen.
Liebe Grüße
Lars
Beschreibung: |
|
Download |
Dateiname: |
EKF_CTRV_LARS.mlx |
Dateigröße: |
124.38 KB |
Heruntergeladen: |
332 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.11.2019, 20:02
Titel:
|
|
Hallo,
Zitat: |
hat jemand eine Idee, wie man zeilenweise Daten extrahieren kann |
so, wie du das machst.
Das ist aber auch schon das Problem: du mischt an der Stelle einen Zeilenvektor mit den Spaltenvektor. Evtl. transponieren?
Zitat: |
trotzdem der Wert nach dem Umlauf verändert? |
Der Wert von was? Mit Umlauf meinst du Iterationen?
Das Extrahieren einer Zeile ändert nichts am weiteren Verhalten der Matrix.
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 ;)
|
|
|
Lars_1991 |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 62
|
|
|
|
Anmeldedatum: 04.11.19
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.11.2019, 20:42
Titel:
|
|
Hallo Harald,
Zitat: |
Das ist aber auch schon das Problem: du mischt an der Stelle einen Zeilenvektor mit den Spaltenvektor. Evtl. transponieren? |
Eigentlich ist das kein Problem bei der Berechnung.
Zitat: |
Der Wert von was? Mit Umlauf meinst du Iterationen?
Das Extrahieren einer Zeile ändert nichts am weiteren Verhalten der Matrix.
|
Umlauf = Iteration (k= 1:360). Die beiden Werte, die ich und dem screenshot markiert habe, sollen nach jedem Umlauf die beiden oberen, zu dem die Pfeile gehe überschrieben werden.
Das Extrahieren der Zeile hat funktioniert...die Dimension ist ja (1x5)
Liebe Grüße
Lars
Beschreibung: |
|
Download |
Dateiname: |
Bildschirmfoto 2019-11-12 um 20.07.18.png |
Dateigröße: |
165.66 KB |
Heruntergeladen: |
337 mal |
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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 - 2024
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.
|
|