У меня есть набор точек (x,y)
, и мне нужно найти линию наилучшего соответствия, которая проходит через начало координат, используя MATLAB.
Подгонка линии, проходящей через начало координат (0,0) к данным
comment
Как вы определяете критерий наилучшего соответствия? Ошибка наименьших квадратов?
- person Eitan T   schedule 19.09.2012
comment
Да, верно - спасибо, что указали на это как на важное.
- person dr_rk   schedule 20.09.2012
Ответы (3)
Короче: ваша функция должна иметь вид y=ax+0
, что делает polyfit
бесполезным. Но вы можете использовать метод наименьших квадратов:
a = x(:)\y(:);
Объяснение:
У вас есть n
уравнений и одна переменная a
, которую необходимо найти:
a*x1 = y1;
a*x2 = y2;
...
a*xn = yn;
Оператор \
находит решение методом наименьших квадратов.
Кроме того, вы можете найти решение вручную:
a = (x'*x) \ (x'*y);
или в псевдокоде:
(x1*y1 + x2*y2 + ... xn*yn)
a = ----------------------------
(x1*x1 + x2*x2 + ... xn*xn)
Это полезно, если вы не используете Matlab — например, в коде C.
Пример и фрагмент кода:
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
person
Andrey Rubshtein
schedule
19.09.2012
@dr_rk, Да, но не рекомендуется, потому что он медленнее и менее стабилен численно
- person Andrey Rubshtein; 19.09.2012
если у вас есть "Curve Fitting Toolbox", вы можете использовать
f = fit( x, y, 'a*x' );
person
Daniel
schedule
19.09.2012
Линия наилучшего соответствия, как правило, проходит через центроид данных (усреднение x и усреднение y). Итак, найдите центроид и проведите линию от начала координат через центроид.
person
David Chandler
schedule
27.02.2021