2009-12-02 9 views
5

Für eine Hausaufgabe in der linearen Algebra, habe ich die folgende Gleichung mit MATLAB \ Operator (das ist der empfohlene Weg, es zu tun ist) gelöst:Wie verwende ich die Näherung der kleinsten Quadrate in MATLAB?

 
A = [0.2 0.25; 0.4 0.5; 0.4 0.25]; 
y = [0.9 1.7 1.2]'; 
x = A \ y 

die folgende Antwort erzeugt:

 
x = 
1.7000 
2.0800 

Für den nächsten Teil der Zuweisung, soll ich die gleiche Gleichung mit der Näherung der kleinsten Quadrate lösen (und dann mit dem vorherigen Wert vergleichen, um zu sehen, wie genau die Approximation ist).

Wie kann ich einen Weg finden, dies in MATLAB zu tun?

Vorherige Arbeit: Ich habe die Funktion lsqlin gefunden, die in der Lage zu sein scheint, Gleichungen des obigen Typs zu lösen, aber ich verstehe nicht, welche Argumente es in welcher Reihenfolge zu liefern.

Antwort

6

mldivide, ("\") tatsächlich tut das auch. Nach dem documentation:

Wenn A eine m-mal-n-Matrix mit m ~ = n und B ist ein Spaltenvektor mit m Komponenten oder eine Matrix mit mehreren solchen Spalten ist, dann X = A \ B ist die Lösung im Sinne der kleinsten Quadrate für das unter- oder überbestimmte Gleichungssystem AX = B. Mit anderen Worten minimiert X die Norm (A * X - B), die Länge des Vektors AX - B. Der Rang k von A wird aus der QR-Dekomposition mit Spaltenschwenkung bestimmt (siehe Algorithmus für Details). Die berechnete Lösung X hat höchstens k von null verschiedene Elemente pro Spalte. Wenn k < n, ist dies normalerweise nicht die gleiche Lösung wie x = pinv (A) * B, die eine Lösung der kleinsten Quadrate zurückgibt.

Also wirklich, was Sie in der ersten Aufgabe getan haben, war die Gleichung mit LSE zu lösen.

+0

Natürlich ist die tatsächliche Zuordnung weniger kompliziert erweist, als wenn wir. Sie haben recht, dass der Operator '\ 'tatsächlich eine Approximation der kleinsten Quadrate beinhaltet. Wir haben jetzt die richtige Antwort bekommen, danke! – Jakob

+0

Das soll "\ operator" sein, aber es scheint, dass die Codeformatierung Backticks den Backslash ganz verschluckt hat (oder vielleicht habe ich gerade einen Tastendruck verpasst). – Jakob

2

Bezieht sich Ihre Zuweisung explizit auf die Kleinste-Quadrate-Näherung oder nur auf eine andere in MATLAB verfügbare Funktion? Wenn Sie eine andere Funktion verwenden können, ist eine Option LSQR:

x = lsqr(A,y); 
Verwandte Themen