利用最小二乘法拟合任意次函数曲线(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#)的更多相关文章
- 最小二乘法拟合java实现源程序(转)
因为我所在的项目要用到最小二乘法拟合,所有我抽时间将C++实现的程序改为JAVA实现,现在贴出来,供大家参考使用./** * <p>函数功能:最小二乘法曲线拟合</p> * @ ...
- tkinter内嵌Matplotlib系列(二)之函数曲线绘制
目录 目录 前言 (一)对matplotlib画布的封装: (二)思路分析: 1.需求说明: 2.框架的设置: 3.文件说明: (三)各文件的源代码 1.main.py 2.widget.py 3.f ...
- matlab-非线性方程求根函数及函数曲线绘制
Matlab中提供了很多求解非线性方程(y=f(x))的函数,刚開始使用,真的很困惑.全部.这里依据matlab的help文档对这些函数做一些小小的总结 fsolve函数 用来求解非线性方程组:F(x ...
- 简单而粗暴的方法画任意阶数Bezier曲线
简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...
- 利用arguments求任意数量数字的和/最大值/最小值
文章地址 https://www.cnblogs.com/sandraryan/ arguments是函数内的临时数据,用完销毁,有类似于数组的操作,但不是数组. 举个栗子1:利用arguments求 ...
- Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子
参考:https://blog.csdn.net/liruizhuang/article/details/5876455 <?xml version="1.0" encodi ...
- 【matlab】绘制双三次插值函数曲线
想要的效果: 编程时要用到分段函数曲线的绘制方法:..+.*(分段条件). 需要注意的是:函数表达式中的乘除和乘方都要加“.”.因为一般的函数都是数在乘变量运算. x=-:; a=-0.5; w=ab ...
- Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数
Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...
- 利用jquery的淡入淡出函数(fadeIn和fadeOut)--实现轮播
首先说下,我在网上找的例子全是用的UL 实现,其实大可不必,只要是能包含img标签的HTML标签都可以做轮播效果.利用jquery的淡入淡出函数(fadeIn和fadeOut).废话也不多说,边上代码 ...
随机推荐
- windows 空闲超时 非管理员如何破解
windows 空闲超时 非管理员如何破解
- web网站如何实现兼容手机
web网站如何实现兼容手机 一.总结 一句话总结:加上这句话即可:<meta name="viewport" content="width=device-width ...
- git入门基础
git基础 参考: 官网git基础 git 文件的生命周期 文件的生命周期图: git中的文件可以分为4个阶段. Untracked : 这是目录中没有被跟踪的文件,即不在git项目中,使用 git ...
- Spring mvc redirect跳转路径问题
SpringMVC重定向视图RedirectView小分析 前言 SpringMVC是目前主流的Web MVC框架之一. 本文所讲的部分内容跟SpringMVC的视图机制有关,SpringMVC的视图 ...
- qt-4.8.4安装和环境变量配置
在Linux中分别安装应用于不同平台的Qt:PC.嵌入式X86:ARM. 这三者PC版.嵌入式X86版和ARM版的差别主要体如今:当configure时分别加了不同的參数,详细差别是: PC平台(X1 ...
- eclipse配置本地服务
1.下载安装eclipse 2.下载tomcat文件,并解压 3.下载tomcat插件 com.sysdeo.eclipse.tomcat_3.3.0 将com.sysdeo.eclipse.tomc ...
- 浅谈CAS(Compare and Swap) 原理
浅谈CAS原理java并发编程也研究了一段时间了,对CAS的原理总是不太理解,今天再研究了一下,记录一些自己的理解. 说到CAS,再java中的某些情况下,甚至jdk1.5以后的大多数情况,并发 ...
- boost::any在降低模块之间耦合性的应用
作者:朱金灿 来源:http://blog.csdn.net/clever101 在开发大型系统中,遵循这样一个原则:模块之间低耦合,模块内高内聚.比如系统中模块有界面模块和算法模块两种,一般是界面模 ...
- 【最大M子段和】dp + 滚动数组
题目描述 给定 n 个数求这 n 个数划分成互不相交的 m 段的最大 m 子段和. 给出一段整数序列 A1,A2,A3,A4,...,Ax,...,An ,其中 1≤x≤n≤1,000,000, -3 ...
- js Map 遍历
1. 在知道的key的情况下遍历map自然就跟数组一样的访. 2.在不知道key的情况下遍历map(此情况更多吧) 2.1 for(var key in Map){ }; //第一种 ...