Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化
生活随笔
收集整理的這篇文章主要介紹了
Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
因為作為資源上傳不方便我們獲取且我想免費分享給有需要的小伙伴,以后所有實驗報告都通過文章形式記錄輸出了,僅供參考,歡迎交流。(最小二乘法代碼在文末)
電橋特性曲線:
Java實現最小二乘法線性擬合及計算靈敏度、非線性誤差的代碼:
/*** @Author: Yeman* @Date: 2021-10-29-23:03* @Description:*/ public class LeastSquares {public static void matching(double[] x, double[] y, double[] input) {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("靈敏度為:" + s);//求線性誤差System.out.println("非線性誤差為:" + maxy/y[10]);}/** 返回x的系數k 公式:k = ( n sum( xy ) - sum( x ) sum( y ) ) / ( n sum( x^2 ) - sum(x) ^ 2 )*/public static double getK(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 ) / n*/public static double getB(double[] x, double[] y) {int n = x.length;double k = getK(x, y);return sum(y) / n - k * sum(x) / n;}/** 求和*/private static double sum(double[] ds) {double s = 0;for (double d : ds){s = s + d;}return s;}/** 求平方和*/private static double sqSum(double[] ds) {double s = 0;for (double d : ds) {s = (double) (s + Math.pow(d, 2));}return s;}/** 返回對應項相乘后的和*/private static double pSum(double[] x, double[] y) {double s = 0;for (int i = 0; i < x.length; i++) {s = s + x[i] * y[i];}return s;}public static void main(String[] args) {double[] x = {0,20,40,60,80,100,120,140,160,180,200};double[] y1 = {0,4.1,8.1,12.2,17.1,21.7,25.8,29.9,34.1,37.8,43.3};double[] y2 = {0,7.5,15.1,22.9,30.7,38.6,46.3,54.2,62.0,69.9,77.8};double[] y3 = {0,15.0,31.3,47.0,62.6,78.3,93.8,109.6,125.5,141.2,157.3};double[] inputs = x;System.out.println("===單臂電橋:");matching(x, y1,inputs);System.out.println("======半橋:");matching(x, y2,inputs);System.out.println("======全橋:");matching(x, y3,inputs);} }總結
以上是生活随笔為你收集整理的Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中缀转后缀表达式,带括号的后缀表达式综合
- 下一篇: 不想上班的说说怎么写244个