Взвешенный линейный метод наименьших квадратов. Как провести через первую точку на линии?

Я использую alglib для вычисления наклона и перехвата значений, используя линейное уравнение наименьших квадратов, следующим образом:

int info;
double[] c;
alglib.lsfitreport rep;
var fmatrix = new double[,] { { 1, 0 }, { 1, 0.05 }, { 1, 0.1 }, { 1, 0.2 } };
var y = new double[] { 32046, 32260, 32296, 32678 };
var w = new double[] { 1, 1, 1, 1 };

alglib.lsfitlinearw(y, w, fmatrix, out info, out c, out rep);

var intercept = c[0];
var slope = c[1];

"fmatrix" содержит значения моей оси x (второе из каждой пары:- 0, 0,05, 0,1, 0,2); "y", очевидно, содержит мои значения по оси Y; "w" - это весовые коэффициенты - в данном случае все 1, поэтому в этом примере весовые коэффициенты не применяются.

Теперь мне нужно применить несколько разных "принуждений". Мне удалось найти, как "протолкнуть источник", изменив первое значение каждой пары fmatrix с "1" на "0", то есть:

var fmatrix = new double[,] { { 0, 0 }, { 0, 0.05 }, { 0, 0.1 }, { 0, 0.2 } };

Однако мне также нужно провести через первую точку (x=0, y=32046). Есть идеи как этого добиться? Математика не моя сильная сторона, и я не совсем понимаю документацию функции: http://www.alglib.net/translator/man/manual.csharp.html

1 ответ

Решение

Извиняюсь, мне удалось это выяснить. Я должен вычесть значение Y первой точки из всех значений Y в массиве. Затем я выполняю расчет, используя "силу через начало".

Функция, конечно, вернет значение перехвата 0, которое я должен игнорировать и вместо этого использовать первое значение Y в качестве перехвата.

Другие вопросы по тегам