Одним из способов было бы использование наименьших квадратов для нахождения A и B, чтобы минимизировать
Q = Sum{ (A*x[i]+B - y[i])'*(A*x[i] + B - y[i])}
(Здесь 'обозначает транспонирование, и я предполагаю, что у вас есть векторы x [0] .. x [N-1] и y [0] .. y [N-1])
Хотя вы можете сделать это с помощью стандартного линейного решателя наименьших квадратов, есть еще один способ:
Вычислить среднееxbar x и средний ybar y, т.е.
xbar = Sum{ x[i]}/N
ybar = Sum{ y[i]}/N
. Вычислить следующие матрицы
C = Sum{ (x[i]-xbar)*(x[i]-xbar)'}
D = Sum{ (y[i]-ybar)*(x[i]-xbar)'}
. Вычислить A и B
A = D*inv(C)
B = A*xbar-ybar
. Обратите внимание, чтомы можем вычислить только A, если C обратимо.Это означает, что векторы x [] должны охватывать пространство, в котором они лежат. Если они этого не делают, то A не определяется однозначно.
Доказательство того, что приведенный выше рецепт решает проблему, не являетсяэто освещение;дайте мне знать, если хотите это увидеть.