Я пытаюсь рассчитать наиболее подходящую кривую для данных, используя полином 3-6 порядка. Я нашел этот учебник: Кубическая регрессия (линия наилучшего соответствия) в JavaScript
Во-первых, я не могу добиться, чтобы мои результаты хотя бы отдаленно соответствовали кривой. jsbin здесь: http://jsbin.com/qukuqigobu/1/edit?html,js,console,output
var data_x = [500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000];
var data_y = [50,80,100,160,210,265,340,390,440,470,500,500,495,460];
var cubic = function(params,x) {
return params[0] * x*x*x +
params[1] * x*x +
params[2] * x +
params[3];
};
var objective = function(params) {
var total = 0.0;
for(var i=0; i < data_x.length; ++i) {
var resultThisDatum = cubic(params, data_x[i]);
var delta = resultThisDatum - data_y[i];
total += (delta*delta);
}
return total;
};
var initial = [1,1,1,1];
var minimiser = numeric.uncmin(objective,initial);
console.log("initial:");
for(var j=0; j<initial.length; ++j) {
console.log(initial[j]);
}
console.log("minimiser:");
for(var j=0; j<minimiser.solution.length; ++j) {
console.log(minimiser.solution[j]);
}
Мои выходные коэффициенты:
1
-17358.001260500238
80977844.06724495
-96625621220.328
Однако при использовании ЛИНЕЙН в Excel они таковы:
-4.68257E-09
4.26789E-05
-0.01
45.39760539
Я рассчитал значения Y из X в Excel, используя это, чтобы подтвердить хорошую корреляцию. Результаты минимизации не работают.
Это первый шаг, но в идеале я хотел бы иметь возможность делать то же самое и для многочленов 4-го, 5-го и 6-го порядка.
Любая помощь приветствуется. Спасибо.