Подгонка линии, проходящей через начало координат (0,0) к данным

У меня есть набор точек (x,y), и мне нужно найти линию наилучшего соответствия, которая проходит через начало координат, используя MATLAB.


person dr_rk    schedule 19.09.2012    source источник
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
comment
@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