Metoda nejmenších čtverců slouží k nalezení vektoru \\mathbb{x} soustavy \\mathbb{Ax} = \\mathbb{y} v momentě, kdy přesné řešení soustavy neexistuje (nebo by bylo příliš složité). Kvalita řešení je definována jako součet čtverců vzdáleností mezi vektory \\mathbb{Ax} a \\mathbb{y}.

Kriteriální funkce má tedy tvar:

F(x) = \\vert \\vert \\mathbb{Ax} - \\mathbb{y} \\vert \\vert^2 = \\mathbb{x^{T}A^{T}Ax} - 2\\mathbb{y^{T}Ax} + \\mathbb{y^{T}y}

Protože je matice \\mathbb{A^{T}A} positivně definitní, tak nám stačí pro nalezení minima funkci F zderivovat podle \\mathbb{x} a výsledek porovnat s nulou.

{{\\partial F} \\over {\\partial x}} = 2 \\mathbb{A^{T}Ax} - 2\\mathbb{A^{T}y}
 2 \\mathbb{A^{T}Ax} - 2\\mathbb{A^{T}y} = 0
 \\mathbb{x} = (\\mathbb{A^{T}A})^{-1} \\mathbb{A^{T} y}
Body proložené přímkou pomocí metody nejmenších čtverců
Body proložené přímkou pomocí metody nejmenších čtverců

Operace  \\mathbb{x} = (\\mathbb{A^{T}A})^{-1}\\mathbb{A^{T}} se nazývá pseudoinverze.


Příklad

Proložte body \\{(1, 1); (2, 1); (3, 2)\\} přímkou y = k \\cdot x + q tak, aby byl součet čtverců svislých vzdáleností minimální.

Protože aproximujeme data přímkou, jsou zde dvě neznámé k a q. Matice \\mathbb{A} obsahuje sloupec vodorovných souřadnic jednotlivých bodů (x) a sloupec jedniček (koeficienty u q). Sloupcový vektor \\mathbb{y} obsahuje svislé souřadnice jednotlivých bodů.


\\mathbb{x} = \\begin{pmatrix}
k \\\\ q
\\end{pmatrix}
\\mathbb{A} = 
\\begin{pmatrix}
1 & 1 \\\\
2 & 1 \\\\
3 & 1
\\end{pmatrix}
\\mathbb{y} = 
\\begin{pmatrix} 
1 \\\\
1 \\\\
2
\\end{pmatrix}

Dosadíme do vzorce


{
\\begin{pmatrix}
\\begin{pmatrix}
      1   &  2 &    3 \\\\
     1   &  1   &  1
\\end{pmatrix}
\\cdot
\\begin{pmatrix}
1 & 1 \\\\ 
2 & 1 \\\\
3 & 1
\\end{pmatrix} 
\\end{pmatrix}} ^{-1} 
\\cdot
\\begin{pmatrix}
      1   &  2 &    3 \\\\
     1   &  1   &  1
\\end{pmatrix}
\\cdot
 \\begin{pmatrix}
1 \\\\ 1 \\\\ 2
\\end{pmatrix}
=
\\begin{pmatrix}
    1/2  & -1 \\\\
   -1  &  7/3
\\end{pmatrix}
\\cdot
\\begin{pmatrix}
     9 \\\\
     4
\\end{pmatrix}
 = 
\\begin{pmatrix}
{1 / 2} \\\\
 {1 / 3}
\\end{pmatrix}

Přímka bude mít rovnici y = {1 \\over 2}x + {1 \\over 3}.

Řešení v MATLABu


A = [1 1; 2 1; 3 1]
y = [1; 1; 2];
x = A\\y

position = A(1:length(A), 1);

hold on;
plot(position, y, 'r+');
plot(position, x(1) * position + x(2));
hold off;








Doporučujeme