用最小二乘法拟合任意次函数曲线(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#)相关推荐
- 用最小二乘法拟合二元多次曲线
引用 http://blog.sina.com.cn/s/blog_6e51df7f0100thie.html 对代码稍作修改和注释,防止链接失效. 1 ///<summary> 2 // ...
- python 水位流量关系曲线_应用最小二乘法拟合水位流量关系曲线
· 水文水资源 · 吉 林 水 利 · 的 年 第 期 应用最小二乘法 拟合水位流量关系曲线 长春 水 文分站 郭永杰 关键词 水 文 水利计算 水祖流量关 系 最 小 二 乘法 数 学拟合 水位流量 ...
- python 高斯函数拟合_在python中拟合任意高斯函数,消耗大量内存
我试图(在python中)将一系列任意数量的高斯函数(由一个仍在改进的简单算法确定)拟合到一个数据集.对于我当前的样本数据集,我有174个高斯函数.我有一个进行拟合的过程,但基本上是复杂的猜测和检查, ...
- 使用最小二乘法拟合由分段函数构成的广义贝塔分布的参数
本文记录了用MATLAB中的lsqcurvefit函数拟合广义贝塔分布中的α和β参数的过程 广义贝塔分布的CDF(累积分布函数)如下: 其中l和r为偏离中心的程度,正规贝塔分布中没有l和r参数 而 即 ...
- 用jupyter book导入excel数据做最小二乘多项式及任意非线性函数拟合
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.从excel导入数据 二.多项式拟合 三.任意函数拟合 一.从excel导入数据 import matplotlib.p ...
- 用 ATL ActiveX 绘制任意平面函数的曲线
作者: 杨老师 下载源代码 关键词:脚本.ATL.ActiveX.脚本引擎.表达式计算.IActiveScript.IActiveScriptSite 一.前言 这是非常有挑战性的题目.对于用户输入的 ...
- 用ATL ActiveX 绘制任意平面函数的曲线
一.前言 这是非常有挑战性的题目.对于用户输入的任意一个平面函数f(x),绘制出其函数曲线.这里最关键的技术难点就是如何实现计算表达式的值.在<编译原理>和<数据结构>的书中, ...
- matlab 最小二乘法拟合_机器学习十大经典算法之最小二乘法
点击上方"计算机视觉cv"即可"进入公众号" 重磅干货第一时间送达 最小二乘法概述 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找 ...
- 最小二乘法拟合直线 C++/OpenCV
问题: 我们在拥有一系列散列的点(x1,y1),(x2,y2)... (xm,ym),这些点在一条直线附近,通过点拟合直线. 我在工程中是要拟合一系列线段,其实一条线段就对应着两个要拟合的点,算法上稍 ...
最新文章
- 如何破解Red Hat Enterprise 4的root密码(救援有密码)
- 如何入门Web前端 你可以从这几方面入手
- 安装库_Python快速安装库的靠谱办法
- LeetCode 2136. 全部开花的最早一天(贪心)
- LeetCode 1864. 构成交替字符串需要的最小交换次数
- 马来西亚国家银行暂无发行央行数字货币计划
- AcWing 1057. 股票买卖 IV
- 小程序登录及用户信息和手机号的获取
- 《深入理解Java虚拟机》第1,2章
- iOS 内存管理arc
- 利用vuex和localStorage实现vue菜单权限管理(笔记)
- apache server和tomcat集群配置一:水平负载
- Hilbert变换及谱分析
- 后ERP时代Oracle EBS的机遇与挑战,云和奥创沉心钻研十年谈
- 【年中总结】衣带渐宽终不悔
- bootstrap案例解析
- GPS nmealib学习笔记 .
- 浙大OJ网址及ACM题目分类
- 如何解决KEIL 5 编译KEIL4的带有RTX系统的工程解决方法
- 什么是集成成像(Integral Image)
热门文章
- python基础语法whike循环_python基础语法 - 循环
- 2018中国计算机图形学大会,第十二届中国计算机图形学大会 (Chinagraph2018)
- udp 传输文件 java_Java 网络编程 之 UDP 文件传输
- mysql转sqlserver_mysql转sqlserver工具
- python所有算法_Python实现的各种常见分布算法示例
- 全国大学生数学建模2019年C题机场的出租车问题论文与代码
- flutter打包的app有多大_Flutter原生混合开发
- 蒙文字体怎么安装_焘哥带你玩转字体(三)字体的安装及显示问题
- pythonrequest得替代_Python爬虫通过替换http request header来欺骗浏览器实现登录功能...
- html循环自动点击事件,js循环遍历ul中li的点击事件,给给选中li添加css