这几天做一个数值的线性回归分析,用.net实现了几个有关于计算线性回归的几个函数
分位值函数PERCENTILE
算法说明:
//Excel中 percentile(array,p)算法是:
//将数组array从小到大排序,计算(n-1)*p的整数部分为i,小数部分为j,其中n为数组大小,
//则percentile的值是:(1-j)*array第i+1个数+j*array第i+2个数。
//例如:{1,3,4,5,6,7,8,9,19,29,39,49,59,69,79,80}计算30%的分位数:
//(16-1)*30%=4.5, i= 4, j =0.5
//percentile(a,30%)=(1-0.5)*6+0.5*7=6.5
//ref http://office.microsoft.com/zh-cn/excel-help/HP005209211.aspx
/// <summary>
/// Excel中PERCENTILE的算法,求分位值
/// </summary>
/// <param name="array">数据数组</param>
/// <param name="p">要求的分位值的值</param>
/// <returns></returns>
public static double PERCENTILE(ArrayList array,double p)
{
array.Sort(); //从小到大排序
double d = (array.Count - 1) * p;
string s = d.ToString("F");
int iLen = s.LastIndexOf(".");
int i=int.Parse(s.Substring(0, iLen));
string sValue = "0." + s.Substring(iLen + 1, s.Length-iLen-1);
double j=Double.Parse(sValue);
double fristNumber = Double.Parse(array[i].ToString());
double nextNumber = Double.Parse(array[i+1].ToString());
double valueNumber = (1 - j) * fristNumber + j * nextNumber;
return Math.Round(valueNumber,4);
}
/// <summary>
/// 求一个数的对数,保留6位小数
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
public static double LN(double d)
{
return Math.Round(Math.Log(d),6);
}
/// <summary>
/// Excel中的SLOPE函数,求斜率,保留6位小数
/// </summary>
/// <param name="yArray">y点的数据数组</param>
/// <param name="xArray">x点的数据数组</param>
/// <returns></returns>
public static double SLOPE(double[] yArray, double[] xArray)
{
//算法说明
//先求xArray和yArray的分别平均值
//然后
if (xArray == null)
throw new ArgumentNullException("xArray");
if (yArray == null)
throw new ArgumentNullException("yArray");
if (xArray.Length != yArray.Length)
throw new ArgumentException("Array Length Mismatch");
if (xArray.Length < 2)
throw new ArgumentException("Arrays too short.");
double n = xArray.Length;
double sumxy = 0;
double sumx = 0;
double sumy = 0;
double sumx2 = 0;
for (int i = 0; i < xArray.Length; i++)
{
sumx += xArray[i];
sumy += yArray[i];
}
////求平均值
sumx = sumx / n;
sumy = sumy / n;
for (int i = 0; i < xArray.Length; i++)
{
sumxy += (xArray[i]-sumx) * (yArray[i]-sumy);
sumx2 += (xArray[i]-sumx) * (xArray[i]-sumx);
}
return Math.Round(sumxy / sumx2, 6);
}
/// <summary>
/// Excel中的INTERCEPT函数,求截距,保留6位小数
/// </summary>
/// <param name="yArray">y点的数据数组</param>
/// <param name="xArray">x点的数据数组</param>
/// <returns></returns>
public static double INTERCEPT(double[] yArray, double[] xArray)
{
if (xArray == null)
throw new ArgumentNullException("xArray");
if (yArray == null)
throw new ArgumentNullException("yArray");
if (xArray.Length != yArray.Length)
throw new ArgumentException("Array Length Mismatch");
if (xArray.Length < 2)
throw new ArgumentException("Arrays too short.");
double n = xArray.Length;
double sumxy = 0;
double sumx = 0;
double sumy = 0;
double sumx2 = 0;
for (int i = 0; i < xArray.Length; i++)
{
sumxy += xArray[i] * yArray[i];
sumx += xArray[i];
sumy += yArray[i];
sumx2 += xArray[i] * xArray[i];
}
double k = Math.Round(((sumxy - sumx * sumy / n) / (sumx2 - sumx * sumx / n)), 6); //斜率
//直线方程:y=kx+b b=y-kx
return Math.Round((sumy - k * sumx) / n,6);
}
/// <summary>
/// Excel中的EXP函数,求e的n次幂,保留6位小数
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static double EXP(double value)
{
return Math.Round(Math.Exp(value), 6);
}
分享到:
相关推荐
在VB.NET项目中,软件构思通常包括以下几个步骤: 1. 首先在Excel中创建一个预设格式的模板,如《统计表》,包含所需的各种格式和固定信息。 2. 在VB.NET窗体上设计用户界面,例如放置两个DateTimePicker控件来选择...
在探讨"C#采用ADO.NET读取Excel 0307 数据不完整的问题"时,我们首先需要理解几个关键概念:ADO.NET、OLEDB、Excel文件的版本差异以及数据类型的自动识别机制。 ### ADO.NET与OLEDB ADO.NET是Microsoft提供的一套...
在正式开始之前,我们需要了解几个基础概念: - **Excel.Application**:代表Excel应用程序的对象。 - **Excel.Workbook**:代表工作簿对象。 - **Excel.Worksheet**:代表工作表对象。 - **CommandBar**:代表工具...
在.NET编程环境中,生成Excel文件是一...合并单元格是Excel操作中的常见需求,以上代码展示了如何在EPPlus和NPOI中实现这一功能。如果需要使用`AppLibrary.dll`,请确保正确引用该库,并参考其提供的API文档进行操作。
在Excel API中,有以下几个重要的知识点: 1. **VBA(Visual Basic for Applications)**:这是Excel API的基础,是一种内置于Office应用中的编程语言。VBA允许用户编写宏,自定义工作簿、工作表和图表的行为,实现...
这个过程通常涉及到几个关键步骤和技术,包括数据读取、数据转换以及数据导入。 首先,对于Excel数据的读取,我们可以使用.NET中的Microsoft.Office.Interop.Excel库,这是一个允许.NET应用程序与Office应用进行...
导出过程通常分为以下几个步骤: 1. **创建导出按钮**:在Gridview中添加一个“导出”按钮,当用户点击这个按钮时,触发相应的事件处理程序。 2. **捕获事件**:在按钮的Click事件中编写代码,执行导出操作。可以...
为了与Excel进行交互,我们需要创建几个主要的对象实例: - `Excel.Application`: 表示Excel应用程序本身。 - `Excel.Workbooks`: 代表一个或多个工作簿集合。 - `Excel.Workbook`: 代表单个工作簿。 - `Excel....
在ASP.NET中实现上传Excel功能,通常涉及到几个关键步骤,包括前端页面的构建、文件上传的处理以及Excel数据的读取和转换。以下是对这些步骤的详细解释: 首先,前端页面需要提供一个用户界面来选择要上传的Excel...
DataGrid导出EXCEL的几个方法(WebControl).txt DataGrid的打印预览和打印.txt GridView排序.txt GRID控件删除之前确认.txt javascript小技巧.doc MVC在Web系统中的模式与应用.doc NET中各种数据库连接大全.doc ...
DataGrid导出EXCEL的几个方法(WebControl).txt DataGrid的打印预览和打印.txt GridView排序.txt GRID控件删除之前确认.txt javascript小技巧.doc MVC在Web系统中的模式与应用.doc NET中各种数据库连接大全.doc ...
本文将深入探讨几种在ASP.NET中实现Excel导出的方法,包括直接使用数据集(DataSet)、利用ActiveX控件、通过DataGrid控件以及使用DataView对象进行操作。 ### 一、使用DataSet导出Excel 这种方法是最直接的,它...
在探讨***中操作Excel助手相关代码之前,我们需要了解几个基础知识点:***是什么、OLEDB是什么以及Excel文件的基本格式和版本。 ***是一个用于构建动态网站、Web应用程序和Web服务的框架,它由微软开发。***使用...
***中实现Excel数据导入到数据库的操作是一项非常实用的技能,尤其对于需要处理大量数据迁移的场景来说,能够大大提高工作效率。本文将详细解析在***环境下,如何将Excel文件中的数据导入到SQL Server数据库中。 ...
本项目提供了一个完整的源码示例,它结合了这两个功能,帮助开发者理解如何在VB.NET中实现类似的功能。 首先,让我们详细探讨解析HTML文件。在VB.NET中,我们可以使用`System.Net.WebClient`类下载HTML内容,然后...
本主题聚焦于如何在Asp.NET MVC中实现在线预览功能,特别是针对Word、Excel和PDF等常见文档格式。这是一项重要的需求,因为用户在不下载文件的情况下能够查看文档内容,提升了用户体验和工作效率。 首先,我们要...
在这个过程中,我们使用了以下几个重要的对象和属性: * Excel.Application 对象:用于创建新的 Excel 进程。 * Workbooks 集合:用于获取 Excel 文件中的所有工作簿。 * Sheets 集合:用于获取 Excel 文件中的所有...
本方法主要依赖于以下几个关键技术点: 1. **上传XLS文件**:用户选择Excel文件进行上传。 2. **使用OleDb连接Excel**:通过OLE DB提供程序读取Excel文件内容。 3. **将Excel数据导入Dataset**:利用ADO.NET的...
在开发过程中,开发者需要注意几个问题。首先,在选择存储格式时需要考虑到数据的后续处理需求。如果数据需要进行复杂的分析,那么选择Excel格式会更为合适。如果仅需要进行基本的存储和读取操作,文本格式可能更为...
在深入学习.NET编程时,开发者会接触以下几个核心知识点: 1. **C#语法**:C#是一种面向对象的编程语言,它支持类、接口、继承、多态等特性。了解基本的数据类型、控制流语句、函数、类和对象是开始的基础。 2. **...