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

Linear Least Square bei einer Matrix

 

vincevince
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.04.20
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 16.04.2020, 21:39     Titel: Linear Least Square bei einer Matrix
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2020, 22:36     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
vincevince
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.04.20
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 19.04.2020, 12:42     Titel:
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2020, 12:55     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
vincevince
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.04.20
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 19.04.2020, 13:31     Titel:
  Antworten mit Zitat      
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?
Code:

b=inf(n,1);
C=zeros(n);
x = lsqlin(A,y(:,2),C,b,[],[],0,[]);
 

wo liegt mein Denkfehler?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2020, 13:43     Titel:
  Antworten mit Zitat      
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:
Code:
x = lsqlin(A,y(:,2),[],[],[],[],zeros(n,1),[]);


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
 
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button 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.