`
wangfu_02
  • 浏览: 71978 次
社区版块
存档分类
最新评论

.net实现Excel中的几个函数

    博客分类:
  • .net
阅读更多

这几天做一个数值的线性回归分析,用.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结合EXCEL统计生产报表

    在VB.NET项目中,软件构思通常包括以下几个步骤: 1. 首先在Excel中创建一个预设格式的模板,如《统计表》,包含所需的各种格式和固定信息。 2. 在VB.NET窗体上设计用户界面,例如放置两个DateTimePicker控件来选择...

    C#采用ADO.NET读取Excel 0307 数据不完整的问题

    在探讨"C#采用ADO.NET读取Excel 0307 数据不完整的问题"时,我们首先需要理解几个关键概念:ADO.NET、OLEDB、Excel文件的版本差异以及数据类型的自动识别机制。 ### ADO.NET与OLEDB ADO.NET是Microsoft提供的一套...

    vb.net 开发中使用excel 插件学习方法及代码.txt

    在正式开始之前,我们需要了解几个基础概念: - **Excel.Application**:代表Excel应用程序的对象。 - **Excel.Workbook**:代表工作簿对象。 - **Excel.Worksheet**:代表工作表对象。 - **CommandBar**:代表工具...

    .net 程序生成Excel文件

    在.NET编程环境中,生成Excel文件是一...合并单元格是Excel操作中的常见需求,以上代码展示了如何在EPPlus和NPOI中实现这一功能。如果需要使用`AppLibrary.dll`,请确保正确引用该库,并参考其提供的API文档进行操作。

    Excel API 网络函数库.zip

    在Excel API中,有以下几个重要的知识点: 1. **VBA(Visual Basic for Applications)**:这是Excel API的基础,是一种内置于Office应用中的编程语言。VBA允许用户编写宏,自定义工作簿、工作表和图表的行为,实现...

    .net 将EXCEL数据导入sql server

    这个过程通常涉及到几个关键步骤和技术,包括数据读取、数据转换以及数据导入。 首先,对于Excel数据的读取,我们可以使用.NET中的Microsoft.Office.Interop.Excel库,这是一个允许.NET应用程序与Office应用进行...

    ASP.NET中把Gridview导出为EXCEL

    导出过程通常分为以下几个步骤: 1. **创建导出按钮**:在Gridview中添加一个“导出”按钮,当用户点击这个按钮时,触发相应的事件处理程序。 2. **捕获事件**:在按钮的Click事件中编写代码,执行导出操作。可以...

    .net中使用excel

    为了与Excel进行交互,我们需要创建几个主要的对象实例: - `Excel.Application`: 表示Excel应用程序本身。 - `Excel.Workbooks`: 代表一个或多个工作簿集合。 - `Excel.Workbook`: 代表单个工作簿。 - `Excel....

    ASP.NET实现上传Excel功能

    在ASP.NET中实现上传Excel功能,通常涉及到几个关键步骤,包括前端页面的构建、文件上传的处理以及Excel数据的读取和转换。以下是对这些步骤的详细解释: 首先,前端页面需要提供一个用户界面来选择要上传的Excel...

    ASP.NET学习大全

    DataGrid导出EXCEL的几个方法(WebControl).txt DataGrid的打印预览和打印.txt GridView排序.txt GRID控件删除之前确认.txt javascript小技巧.doc MVC在Web系统中的模式与应用.doc NET中各种数据库连接大全.doc ...

    asp.net学习大全(超全面的资料整合)

    DataGrid导出EXCEL的几个方法(WebControl).txt DataGrid的打印预览和打印.txt GridView排序.txt GRID控件删除之前确认.txt javascript小技巧.doc MVC在Web系统中的模式与应用.doc NET中各种数据库连接大全.doc ...

    asp.net。导出excel表

    本文将深入探讨几种在ASP.NET中实现Excel导出的方法,包括直接使用数据集(DataSet)、利用ActiveX控件、通过DataGrid控件以及使用DataView对象进行操作。 ### 一、使用DataSet导出Excel 这种方法是最直接的,它...

    asp.net中操作Excel助手相关代码

    在探讨***中操作Excel助手相关代码之前,我们需要了解几个基础知识点:***是什么、OLEDB是什么以及Excel文件的基本格式和版本。 ***是一个用于构建动态网站、Web应用程序和Web服务的框架,它由微软开发。***使用...

    asp.net中EXCEL数据导入到数据库的方法

    ***中实现Excel数据导入到数据库的操作是一项非常实用的技能,尤其对于需要处理大量数据迁移的场景来说,能够大大提高工作效率。本文将详细解析在***环境下,如何将Excel文件中的数据导入到SQL Server数据库中。 ...

    vb.net百度翻译源码,解析HTML文件并且调用百度API翻译.zip

    本项目提供了一个完整的源码示例,它结合了这两个功能,帮助开发者理解如何在VB.NET中实现类似的功能。 首先,让我们详细探讨解析HTML文件。在VB.NET中,我们可以使用`System.Net.WebClient`类下载HTML内容,然后...

    Asp.net mvc 在线预览、在线预览Word、Excel、PDF等

    本主题聚焦于如何在Asp.NET MVC中实现在线预览功能,特别是针对Word、Excel和PDF等常见文档格式。这是一项重要的需求,因为用户在不下载文件的情况下能够查看文档内容,提升了用户体验和工作效率。 首先,我们要...

    vb编程遍历Excel中所有单元格,读取出所有单元格内容

    在这个过程中,我们使用了以下几个重要的对象和属性: * Excel.Application 对象:用于创建新的 Excel 进程。 * Workbooks 集合:用于获取 Excel 文件中的所有工作簿。 * Sheets 集合:用于获取 Excel 文件中的所有...

    NET Excel导入数据库及常见问题

    本方法主要依赖于以下几个关键技术点: 1. **上传XLS文件**:用户选择Excel文件进行上传。 2. **使用OleDb连接Excel**:通过OLE DB提供程序读取Excel文件内容。 3. **将Excel数据导入Dataset**:利用ADO.NET的...

    Matlab与VB.NET混合编程中数据存储方式的研究.pdf

    在开发过程中,开发者需要注意几个问题。首先,在选择存储格式时需要考虑到数据的后续处理需求。如果数据需要进行复杂的分析,那么选择Excel格式会更为合适。如果仅需要进行基本的存储和读取操作,文本格式可能更为...

    我的第一个.NET应用程序

    在深入学习.NET编程时,开发者会接触以下几个核心知识点: 1. **C#语法**:C#是一种面向对象的编程语言,它支持类、接口、继承、多态等特性。了解基本的数据类型、控制流语句、函数、类和对象是开始的基础。 2. **...

Global site tag (gtag.js) - Google Analytics