publicclassLeastSquares{publicstaticvoidmatching(double[] x,double[] y,double[] input,double fully){double k =getK(x, y);double b =getB(x, y);System.out.println("線性回歸系數 k 值:\t"+ k +"\n"+"線性回歸系數 b 值:\t"+
b);double maxy =0;//用來記錄最大偏差//尋找最大偏差for(int i =0; i < input.length; i++){if(Math.abs(k * input[i]+ b - y[i])> maxy){maxy = Math.abs(k * input[i]+ b - y[i]);}}System.out.println("最大偏差為:"+ maxy);//求靈敏度double s =0;double sum =0;for(int i =1; i < y.length; i++){sum += y[i]- y[i-1];}s = sum /(y.length -1)/20;System.out.println("靈敏度為:"+ Math.abs(s));//求非線性誤差System.out.println("非線性誤差為:"+ Math.abs(maxy/fully*100)+"%");}//返回 x 的系數 k 公式:k = (n sum( xy ) - sum( x ) sum( y )) / (n sum( x^2 )-sum(x) ^ 2)publicstaticdoublegetK(double[] x,double[] y){int n = x.length;return(double)((n *pSum(x, y)-sum(x)*sum(y))/(n *sqSum(x)- Math.pow(sum(x),2)));}//返回常量系數系數 b 公式:b = sum( y ) / n - k * sum( x ) / npublicstaticdoublegetB(double[] x,double[] y){int n = x.length;double k =getK(x, y);returnsum(y)/ n - k *sum(x)/ n;}//求和privatestaticdoublesum(double[] ds){double s =0;for(double d : ds){s = s + d;}return s;}//求平方和privatestaticdoublesqSum(double[] ds){double s =0;for(double d : ds){s =(double)(s + Math.pow(d,2));}return s;}//返回對應項相乘后的和privatestaticdoublepSum(double[] x,double[] y){double s =0;for(int i =0; i < x.length; i++){s = s + x[i]* y[i];}return s;}publicstaticvoidmain(String[] args){double[] x1 ={52.5,55,60,65,70,75,80,85,90,95,100};double[] y1 ={0,-0.54,-1.46,-2.32,-3.20,-4.06,-4.90,-5.72,-6.51,-7.31,-8.01};double[] inputs1 = x1;System.out.println("Pt100 熱電阻測溫實驗擬合直線:");matching(x1, y1,inputs1,y1[y1.length-1]);}}