|
|
Linear Least Square bei einer Matrix |
|
vincevince |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 16.04.20
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.04.2020, 21:39
Titel: Linear Least Square bei einer Matrix
|
|
|
|
|
Hallo Zusammen,
ich habe schon ein bisschen programmer Erfahrung, bin aber neue bei MATLAB. Ich moechte in einer Matrixgleichung mit Linear Least Squares Variablen optimieren, habe da allerdings mehrere Probleme. Meine Idee ist: Ich habe eine Matrix A mit nxn mit bekannten Eintraegen, sowie einen bekannten Vektor y mit y_1,....,y_n, weiter habe ich einen unbekannten Vektor x mit x_1,...x_n. n_max ist ca 1000. Ich moechte folgendes Problem Loesen: |A*x-y|^2=0, indem ich den Vektor x (bzw seine Eintraege) minimiere. Klingt mathematisch relativ einfach aber beim implementieren hapert es bei mir. Meine erste Idee war die Eintraege von x als Variablen lassen und zuerst die rechen Operationen auszufuehren und dann minimieren. Allerdings kann man bei MATLAB Variablen nicht deklarieren ohne sie zu initialisieren (bzw. ich zumindest habe die Moeglichkeit nicht gefunden).
Kann mir jemand ein Paar Tipps geben, bzw. mir weiterhelfen? Gibt es von MATLAB selbst Funktionen die so etwas loesen koennen? Und ich hoffe auch, dass alles verstaendlich war!
Vielen Dank!
Gruss,
Vincent
PS: Ich wollte die Formel in math schreiben, allerdings ist dies in diesem Froum kein LaTeX.
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 16.04.2020, 22:36
Titel:
|
|
Hallo,
x = A\y macht das schon. Bei quadratischen Matrizen vollen Ranges sollte es ja eine Lösung geben, ansonsten berechnet MATLAB die kleinste Quadrate-Lösung.
Etwas weitergehend dann lsqlin.
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 ;)
|
|
|
vincevince |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 16.04.20
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.04.2020, 12:42
Titel:
|
|
Hallo Harald,
vielen dank für die Antwort! Ich habe jetzt mal viel rum gespielt und es klappt soweit. Allerdings verstehe ich die Funktion x = lsqlin(C,d,A,b) nicht ganz, warum muss ich A und b als Argument mit geben? So wie ich das verstanden habe beschränkt dies mein system (Art upper bound) und mit A kann ich ein paar Informationen mitgeben. Allerdings brauche ich das nicht, meine einzige Bedingung wäre, dass alle Einträge von x größer 0 sind. Mir ist auch aufgefallen, dass meine Matrix nxm und nicht nxn ist, aber das sollte an der Funktion ja auch nichts ändern.
Vielen Dank!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.04.2020, 12:55
Titel:
|
|
Hallo,
Zitat: |
Allerdings verstehe ich die Funktion x = lsqlin(C,d,A,b) nicht ganz, warum muss ich A und b als Argument mit geben? |
Weil lsqlin dazu gedacht ist, Nebenbedingungen mitzugeben. Wenn man keine hat, reicht \
Zudem aus der Doku:
Zitat: |
If you do not need certain constraints such as Aeq and beq, set them to [] |
Zitat: |
Allerdings brauche ich das nicht, meine einzige Bedingung wäre, dass alle Einträge von x größer 0 sind. |
Das wäre dann ein Fall für lb.
Zitat: |
Mir ist auch aufgefallen, dass meine Matrix nxm und nicht nxn ist, aber das sollte an der Funktion ja auch nichts ändern. |
Nein. Auch das steht in der Doku ;)
Zitat: |
C is M-by-N, where M is the number of equations, and N is the number of elements of x. |
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 ;)
|
|
|
vincevince |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 16.04.20
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.04.2020, 13:31
Titel:
|
|
okidoki, schonmal vielen Dank für die große Hilfe!! Ich habe das jetzt mal probiert, allerdings ist x immer noch negativ (bzw. einzelne Einträge). Ich habe b und C folgendermaßen initialisiert, das sollte soweit passen oder?
wo liegt mein Denkfehler?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.04.2020, 13:43
Titel:
|
|
Hallo,
das mit den Nullen und inf ist so nicht sinnvoll, stattdessen überspringen wie das andere Paar auch. Und lb sollte besser ein Vektor sein:
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 ;)
|
|
|
|
|
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.
|
|