Mam zestaw punktów (x,y)
i potrzebuję znaleźć linię najlepszego dopasowania, która przechodzi przez pochodzenie za pomocą MATLAB.Dopasowywanie linii, która przechodzi przez początek (0,0) do danych
Odpowiedz
W krótkim: Twoja funkcja musi być w formie y=ax+0
, co sprawia polyfit
bezużyteczne. Ale można skorzystać z metody najmniejszych kwadratów:
a = x(:)\y(:);
Objaśnienie:
Masz n
równań i jedna zmienna a
, co jest potrzebne, aby znaleźć:
a*x1 = y1;
a*x2 = y2;
...
a*xn = yn;
Operator \
znajduje rozwiązanie najmniejszych kwadratów.
Alternatywnie, można znaleźć rozwiązanie ręcznie:
a = (x'*x) \ (x'*y);
lub w pseudokodzie:
(x1*y1 + x2*y2 + ... xn*yn)
a = ----------------------------
(x1*x1 + x2*x2 + ... xn*xn)
Jest to użyteczne, jeśli nie Matlab - na przykład w kodzie C.
Przykład i fragment kodu:
function FindLSSolution()
a = 2.5;
x = rand(100,1)*10;
y = a*x + randn(100,1);
figure;scatter(x,y);
A = x(:)\y(:);
hold on;plot(x, A*x,'g');
end
'a = pinv (x) * y' Czy to też się stanie? –
@dr_rk, Tak, ale nie jest to zalecane, ponieważ jest wolniejsze i mniej stabilne numerycznie –
jeśli masz "dopasowanie krzywej Toolbox" można użyć
f = fit(x, y, 'a*x');
Jak można zdefiniować kryterium dla "Najlepsze dopasowanie"? Najmniejszy błąd kwadratowy? –
Tak, to prawda - dziękuję za wskazanie tego jako ważne. –