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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

最小二乘法C#实现,简单代码

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

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


直接給出該式的參數解:

?和?
其中,為t值的算術平均值。也可解得如下形式:


b1為斜率,b0為截距,可以先根據x,y數組,以及上面的公式先計算出斜率,再計算截距。
因為原來參考代碼中,返回為一個數組,根據與原來代碼的兼容性,調用LinearResult(double[],double[])方法返回是一個數組。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;
? ? ? ? }
? ? }

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。