关闭

最小二乘法C#源码转

265人阅读 评论(0) 收藏 举报
  1. #region 最小二乘法拟合
  2. ///<summary>
  3. ///用最小二乘法拟合二元多次曲线
  4. ///例如y=ax+b
  5. ///其中MultiLine将返回a,b两个参数。
  6. ///a对应MultiLine[1]
  7. ///b对应MultiLine[0]
  8. ///</summary>
  9. ///<param name="arrX">已知点的x坐标集合</param>
  10. ///<param name="arrY">已知点的y坐标集合</param>
  11. ///<param name="length">已知点的个数</param>
  12. ///<param name="dimension">方程的最高次数</param>
  13. public static double[] MultiLine(double[] arrX, double[] arrY, int length, int dimension)//二元多次线性方程拟合曲线
  14. {
  15. int n = dimension + 1; //dimension次方程需要求 dimension+1个 系数
  16. double[,] Guass = new double[n, n + 1]; //高斯矩阵 例如:y=a0+a1*x+a2*x*x
  17. for (int i = 0; i < n; i++)
  18. {
  19. int j;
  20. for (j = 0; j < n; j++)
  21. {
  22. Guass[i, j] = SumArr(arrX, j + i, length);
  23. }
  24. Guass[i, j] = SumArr(arrX, i, arrY, 1, length);
  25. }
  26. return ComputGauss(Guass, n);
  27. }
  28. private static double SumArr(double[] arr, int n, int length) //求数组的元素的n次方的和
  29. {
  30. double s = 0;
  31. for (int i = 0; i < length; i++)
  32. {
  33. if (arr[i] != 0 || n != 0)
  34. s = s + Math.Pow(arr[i], n);
  35. else
  36. s = s + 1;
  37. }
  38. return s;
  39. }
  40. private static double SumArr(double[] arr1, int n1, double[] arr2, int n2, int length)
  41. {
  42. double s = 0;
  43. for (int i = 0; i < length; i++)
  44. {
  45. if ((arr1[i] != 0 || n1 != 0) && (arr2[i] != 0 || n2 != 0))
  46. s = s + Math.Pow(arr1[i], n1) * Math.Pow(arr2[i], n2);
  47. else
  48. s = s + 1;
  49. }
  50. return s;
  51. }
  52. private static double[] ComputGauss(double[,] Guass, int n)
  53. {
  54. int i, j;
  55. int k, m;
  56. double temp;
  57. double max;
  58. double s;
  59. double[] x = new double[n];
  60. for (i = 0; i < n; i++) x[i] = 0.0;//初始化
  61. for (j = 0; j < n; j++)
  62. {
  63. max = 0;
  64. k = j;
  65. for (i = j; i < n; i++)
  66. {
  67. if (Math.Abs(Guass[i, j]) > max)
  68. {
  69. max = Guass[i, j];
  70. k = i;
  71. }
  72. }
  73. if (k != j)
  74. {
  75. for (m = j; m < n + 1; m++)
  76. {
  77. temp = Guass[j, m];
  78. Guass[j, m] = Guass[k, m];
  79. Guass[k, m] = temp;
  80. }
  81. }
  82. if (0 == max)
  83. {
  84. // "此线性方程为奇异线性方程"
  85. return x;
  86. }
  87. for (i = j + 1; i < n; i++)
  88. {
  89. s = Guass[i, j];
  90. for (m = j; m < n + 1; m++)
  91. {
  92. Guass[i, m] = Guass[i, m] - Guass[j, m] * s / (Guass[j, j]);
  93. }
  94. }
  95. }
  96. //结束for (j=0;j<n;j++)
  97. for (i = n - 1; i >= 0; i--)
  98. {
  99. s = 0;
  100. for (j = i + 1; j < n; j++)
  101. {
  102. s = s + Guass[i, j] * x[j];
  103. }
  104. x[i] = (Guass[i, n] - s) / Guass[i, i];
  105. }
  106. return x;
  107. }//返回值是函数的系数
  108. #endregion
0
0
查看评论

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

根据http://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95里面的说法
  • fenglifeng1987
  • fenglifeng1987
  • 2014-09-01 15:52
  • 2628

算法#03--详解最小二乘法原理和代码

最小二乘法的目标:求误差的最小平方和,对应有两种:线性和非线性。线性最小二乘的解是closed-form(如下文),而非线性最小二乘没有closed-form,通常用迭代法求解(如高斯牛顿迭代法,本文不作介绍)。
  • tclxspy
  • tclxspy
  • 2016-04-22 08:13
  • 3518

(C#)曲线拟合的最小二乘法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 数值分析实验报告 { class Gauss曲线拟合的最小二乘法 { sta...
  • zxg1258
  • zxg1258
  • 2011-12-31 22:33
  • 5649

最小二乘法及其C++实现

监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性...
  • t94127
  • t94127
  • 2017-03-19 17:05
  • 1171

java 实现最小二乘法

一、线性的 /** * 最小二乘法 y=ax+b * * @author Administrator * */public class Theleastsquaremethod {private static double a;private static double b;private stat...
  • asd8705
  • asd8705
  • 2015-01-27 20:19
  • 2914

最小二乘法代码(matlab 中polyfit函数原型)

//函数功能:进行最小二乘曲线拟合(拟合y=a0+a1*x+a2*x^2+……+a[poly_n]*x^poly_n),计算出对应的系数a?//参数说明:// n: 给定数据点的个数// x[]: 存放给定n个数据点的X坐标// y[]: 存放给定...
  • zbw822
  • zbw822
  • 2011-12-16 21:06
  • 3657

最小二乘法拟合圆

有一系列的数据点 {xi,yi}\{x_i, y_i\},我们知道这些数据点近似的落在一个圆上,根据这些数据估计这个圆的参数就是一个很有意义的问题。今天就来讲讲如何来做圆的拟合。圆拟合的方法有很多种,最小二乘法属于比较简单的一种。今天就先将这种。我们知道圆方程可以写为: (x−xc)2+(y−y...
  • liyuanbhu
  • liyuanbhu
  • 2016-03-14 22:05
  • 16836

数据分析---最小二乘法和梯度下降法

最近在整理数据优化方面的知识,看的多了最小二乘法和梯度下降法之类的词语经常出现,很多算法都有用到类似方法,或者很多算法看起来和这些似曾相识,比如BP神经网络,支持向量机,等等分类回归方法。可见这最小二乘法和梯度下降法是很基础的方法,很值得好好复习下,不然很多东西剪不断,理还乱。   ...
  • hugolyl
  • hugolyl
  • 2016-02-15 16:06
  • 5476

最小二乘法的一般形式和矩阵形式原理推导和代码实现

转自:作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591 1.线性代数模型 首先给出最小二乘解的矩阵形式的公式: 推导过程: 条件: 矩阵必须是列满秩矩阵,否...
  • poxiaozhuimeng
  • poxiaozhuimeng
  • 2014-11-14 14:04
  • 5050

最小二乘法(转)

在估计方法中,最大似然和最小二乘是经常被使用到的,其中的最小二乘更是回归的基础。楼主在刚接触最小二乘的时候曾经想过一个问题,为什么非要用平方?绝对值不行么?……很多问题萦绕脑中。最近借着做专题的时间,抽空又看了一下这个知识点,略微整理了一下分享给大家: 1、什么是最小二乘思想? 简单地说...
  • lanxin0802
  • lanxin0802
  • 2017-03-24 11:21
  • 268
    个人资料
    • 访问:36828次
    • 积分:916
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:53篇
    • 译文:2篇
    • 评论:7条
    文章分类
    最新评论