日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#实现最小二乘法

發(fā)布時間:2023/12/18 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#实现最小二乘法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

根據(jù)http://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95里面的說法:

?

線性函數(shù)模型

?

典型的一類函數(shù)模型是線性函數(shù)模型。最簡單的線性式是?,寫成矩陣式,為

?

直接給出該式的參數(shù)解:

??和???

其中,為t值的算術(shù)平均值。也可解得如下形式:

?

b1為斜率,b0為截距,可以先根據(jù)x,y數(shù)組,以及上面的公式先計(jì)算出斜率,再計(jì)算截距。

因?yàn)樵瓉韰⒖即a中,返回為一個數(shù)組,根據(jù)與原來代碼的兼容性,調(diào)用LinearResult(double[],double[])方法返回是一個數(shù)組。result[0]為斜率,result[1]為截距。

?

?
  • class Linear

  • {

  • public double[] LinearResult(double[] arrayX, double[] arrayY)

  • {

  • double[] result = { 0, 0 };

  • ?
  • if (arrayX.Length == arrayY.Length)

  • {

  • double averX = arrayX.Average();

  • double averY = arrayY.Average();

  • result[0] = Scale(averX, averY, arrayX, arrayY);

  • result[1] = Offset(result[0],averX,averY);

  • }

  • ?
  • return result;

  • }

  • ?
  • private double Scale(double averX, double averY, double[] arrayX, double[] arrayY)

  • {

  • double scale = 0;

  • if (arrayX.Length == arrayY.Length)

  • {

  • double Molecular = 0;

  • double Denominator = 0;

  • for (int i = 0; i < arrayX.Length; i++)

  • {

  • Molecular += (arrayX[i] - averX) * (arrayY[i] - averY);

  • Denominator += Math.Pow((arrayX[i] - averX), 2);

  • }

  • scale = Molecular / Denominator;

  • }

  • ?
  • return scale;

  • }

  • ?
  • private double Offset(double scale, double averX,double averY)

  • {

  • double offset = 0;

  • offset = averY - scale * averX;

  • return offset;

  • }

  • }

  • ?/// <summary> ? ? ? ?/// 計(jì)算一元一次方程系數(shù)(利用最小二乘法) ? ? ? ?/// 20200320新增 ? ? ? ?/// </summary> ? ? ? ?/// <param name="xValues"></param> ? ? ? ?/// <param name="yValues"></param> ? ? ? ?/// <returns></returns> ? ? ? ?private double[] CalCoefficientOfLinearEquation(double[] xValues, double[] yValues) ? ? ? ?{ ? ? ? ? ? ?if (xValues.Length != yValues.Length) ? ? ? ? ? ? ? ?return null; ? ? ? ? ? ?int valCount = xValues.Length; ? ? ? ? ? ?//計(jì)算X2=∑(xi)^2 , X=∑ xi , Yx=∑(xi*yi) , Y=∑ yi ? ? ? ? ? ?double X2 = 0; ? ? ? ? ? ?double X = 0; ? ? ? ? ? ?double Yx = 0; ? ? ? ? ? ?double Y = 0; ? ? ? ? ? ?for (int i = 0; i < valCount; i++) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?X2 += Math.Pow(xValues[i], 2); ? ? ? ? ? ? ? ?X += xValues[i]; ? ? ? ? ? ? ? ?Yx += xValues[i] * yValues[i]; ? ? ? ? ? ? ? ?Y += yValues[i]; ? ? ? ? ? ?} ? ? ? ? ? ?//計(jì)算線性方程系數(shù)y=ax+b ? ? ? ? ? ?double a = (Yx * valCount - X * Y) / (X2 * valCount - X * X); ? ? ? ? ? ?double b = (X2 * Y - Yx * X) / (X2 * valCount - X * X); ? ? ? ? ? ?//返回系數(shù)的數(shù)組 ? ? ? ? ? ?double[] temp = new double[] { a, b }; ? ? ? ? ? ?return temp; ? ? ? ?}

    總結(jié)

    以上是生活随笔為你收集整理的C#实现最小二乘法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。