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

歡迎訪問 生活随笔!

生活随笔

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

C#

用最小二乘法拟合任意次函数曲线(C#)

發布時間:2023/12/18 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用最小二乘法拟合任意次函数曲线(C#) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

///<summary>
???///用最小二乘法擬合二元多次曲線
???///</summary>
???///<param name="arrX">已知點的x坐標集合</param>
???///<param name="arrY">已知點的y坐標集合</param>
???///<param name="length">已知點的個數</param>
???///<param name="dimension">方程的最高次數</param>
???
????public static double[] MultiLine(double[] arrX, double[] arrY, int length, int dimension)//二元多次線性方程擬合曲線
????{
???????int n = dimension + 1;?????????????????//dimension次方程需要求 dimension+1個 系數
???????double[,] Guass=new double[n,n+1];?????//高斯矩陣 例如:y=a0+a1*x+a2*x*x
???????for(int i=0;i<n;i++)
???????{
???????????int j;
???????????for(j=0;j<n;j++)
???????????{
???????????????Guass[i,j] = SumArr(arrX, j + i, length);
???????????}
???????????Guass[i,j] = SumArr(arrX,i,arrY,1,length);??????????
???????}

??????return ComputGauss(Guass,n);

????}

????public static double SumArr(double[] arr, int n, int length) //求數組的元素的n次方的和
????{
???????double s = 0;
???????for (int i = 0; i < length; i++)
???????{
???????????if (arr[i] != 0 || n != 0)?????????
???????????????s = s + Math.Pow(arr[i], n);
???????????else
???????????????s = s + 1;
???????}
???????return s;
????}
????public static double SumArr(double[] arr1, int n1, double[] arr2, int n2, int length)
????{
???????double s=0;
???????for (int i = 0; i < length; i++)
???????{
???????????if ((arr1[i] != 0 || n1 != 0) && (arr2[i] != 0 || n2 != 0))
???????????????s = s + Math.Pow(arr1[i], n1) * Math.Pow(arr2[i], n2);
???????????else
???????????????s = s + 1;
???????}
???????return s;
?
????}

????public static double[] ComputGauss(double[,] Guass,int n)
????{
???????int i, j;
???????int k,m;
???????double temp;
???????double max;
???????double s;
???????double[] x = new double[n];

???????for (i = 0; i < n; i++)??????????x[i] = 0.0;//初始化
???????

???????for (j = 0; j < n; j++)
???????{
???????????max = 0;?????????

???????????k = j;????
???????????for (i = j; i < n; i++)
???????????{
???????????????if (Math.Abs(Guass[i, j]) > max)
???????????????{
???????????????????max = Guass[i, j];
???????????????????k = i;
???????????????}
???????????}


???????????
???????????if (k != j)
???????????{
???????????????for (m = j; m < n + 1; m++)
???????????????{
???????????????????temp = Guass[j, m];
???????????????????Guass[j, m] = Guass[k, m];
???????????????????Guass[k, m] = temp;

???????????????}
???????????}

???????????if (0 == max)
???????????{
???????????????// "此線性方程為奇異線性方程"?

???????????????return x;
???????????}

???????????
???????????for (i = j + 1; i < n; i++)?
???????????{

???????????????s = Guass[i, j];
???????????????for (m = j; m < n + 1; m++)
???????????????{
???????????????????Guass[i, m] = Guass[i, m] - Guass[j, m] * s / (Guass[j, j]);

???????????????}
???????????}


???????}//結束for (j=0;j<n;j++)

???????
???????for (i = n-1; i >= 0; i--)
???????{???????????
???????????s = 0;
???????????for (j = i + 1; j < n; j++)
???????????{
???????????????s = s + Guass[i,j] * x[j];
???????????}

???????????x[i] = (Guass[i,n] - s) / Guass[i,i];

???????}

??????return x;
???}//返回值是函數的系數

例如:y=a0+a1*x 返回值則為a0 a1

例如:y=a0+a1*x+a2*x*x 返回值則為a0 a1 a2

總結

以上是生活随笔為你收集整理的用最小二乘法拟合任意次函数曲线(C#)的全部內容,希望文章能夠幫你解決所遇到的問題。

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