Highcharts Demo
author(s): Torstein Hønsi
by mizobata
HTML
<script src="https://code.highcharts.com/highcharts.js"></script>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/regression/1.4.0/regression.min.js"></script>-->
<script>
(function(global,factory){if(typeof define==="function"&&define.amd){define(["module"],factory)}else if(typeof exports!=="undefined"){factory(module)}else{var mod={exports:{}};factory(mod);global.regression=mod.exports}})(this,function(module){"use strict";function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i]}return arr2}else{return Array.from(arr)}}var DEFAULT_OPTIONS={order:2,precision:2,period:null};function determinationCoefficient(data,results){var predictions=[];var observations=[];data.forEach(function(d,i){if(d[1]!==null){observations.push(d);predictions.push(results[i])}});var sum=observations.reduce(function(a,observation){return a+observation[1]},0);var mean=sum/observations.length;var ssyy=observations.reduce(function(a,observation){var difference=observation[1]-mean;return a+difference*difference},0);var sse=observations.reduce(function(accum,observation,index){var prediction=predictions[index];var residual=observation[1]-prediction[1];return accum+residual*residual},0);return 1-sse/ssyy}function gaussianElimination(input,order){var matrix=input;var n=input.length-1;var coefficients=[order];for(var i=0;i<n;i++){var maxrow=i;for(var j=i+1;j<n;j++){if(Math.abs(matrix[i][j])>Math.abs(matrix[i][maxrow])){maxrow=j}}for(var k=i;k<n+1;k++){var...
CSS
#container {
min-width: 310px;
max-width: 800px;
height: 400px;
margin: 0 auto
}
JavaScript
const MATRIX_SIZE = 4; // 行列数
const N = 4; // 次数(N-1)
const ADD = 0.1; // 刻み値
const X_MAX = 1.03;
// パワーカーブ基準データ
const powerCurve = [
{ DISPLACEMENT: 23330, X_VAL: 0.85, Y_VAL: 1 },
{ DISPLACEMENT: 23330, X_VAL: 5.98, Y_VAL: 274 },
{ DISPLACEMENT: 23330, X_VAL: 7.61, Y_VAL: 549 },
{ DISPLACEMENT: 23330, X_VAL: 8.76, Y_VAL: 823 },
{ DISPLACEMENT: 23330, X_VAL: 9.68, Y_VAL: 1097 },
{ DISPLACEMENT: 23330, X_VAL: 10.46, Y_VAL: 1372 },
{ DISPLACEMENT: 23330, X_VAL: 11.14, Y_VAL: 1646 },
{ DISPLACEMENT: 23330, X_VAL: 11.76, Y_VAL: 1920 },
{ DISPLACEMENT: 23330, X_VAL: 12.31, Y_VAL: 2194 },
{ DISPLACEMENT: 23330, X_VAL: 12.83, Y_VAL: 2469 },
{ DISPLACEMENT: 23330, X_VAL: 13.31, Y_VAL: 2743 },
{ DISPLACEMENT: 23330, X_VAL: 13.75, Y_VAL: 3017 },
{ DISPLACEMENT: 23330, X_VAL: 14.18, Y_VAL: 3292 },
{ DISPLACEMENT: 23330, X_VAL: 14.58, Y_VAL: 3566 },
{ DISPLACEMENT: 23330, X_VAL: 14.95, Y_VAL: 3840 },
{ DISPLACEMENT: 23330, X_VAL: 15.32, Y_VAL: 4115 },
{ DISPLACEMENT: 23330, X_VAL: 15.66, Y_VAL: 4389 },
{ DISPLACEMENT: 23330, X_VAL: 16, Y_VAL: 4663 },
{ DISPLACEMENT: 23330, X_VAL: 16.32, Y_VAL: 4937 },
{ DISPLACEMENT: 23330, X_VAL: 16.63, Y_VAL: 5212 },
{ DISPLACEMENT: 23330, X_VAL: 16.92, Y_VAL: 5500 },
{ DISPLACEMENT: 23330, X_VAL: 18.11, Y_VAL: 6500 },
{ DISPLACEMENT: 23330, X_VAL: 19.29, Y_VAL: 7800 },
{ DISPLACEMENT: 23330, X_VAL: 19.79, Y_VAL: 8450 },
{ DISPLACEMENT: 23330, X_VAL: 20.21, Y_VAL: 9100 },
{ DISPLACEMENT: 23330, X_VAL: 20.61, Y_VAL: 9750 },
{ DISPLACEMENT: 23330, X_VAL: 20.92, Y_VAL: 10480 },
{ DISPLACEMENT: 23330, X_VAL: 21.16, Y_VAL: 11050 },
{ DISPLACEMENT: 23330, X_VAL: 21.39, Y_VAL: 11700 },
{ DISPLACEMENT: 23330, X_VAL: 21.79, Y_VAL: 13000 }
]
const xData = powerCurve.map(val => val.X_VAL)
const yData = powerCurve.map(val => val.Y_VAL)
const xyData = powerCurve.map(val => [val.X_VAL, val.Y_VAL])
const fromGauss = latestSquares(xData, yData, xData[xData.length - 1])
const fromGaussLong =...