C# 如何实现Excel vba 里的trend 函数?

问题描述

遇到项目,需要把Excel的宏改C#vba里有个trend函数TREND(known_y's,known_x's,new_x's,constant)函数用于执行线性回归。使用最小二乘准则,TREND尝试根据此准则得到最佳拟合。known_y's表示“因变量”的数据,known_x's表示一个或多个“自变量”的数据。TREND帮助文件讨论了可能省略第二个或第三个参数的极少数情况。TREND(known_y's,known_x's,new_x's,constant)参数known_y's、known_x's和new_x's必须是具有相关尺寸的数组或单元格区域。如果known_y's包含1列m行,则known_x's包含c列m行,其中c大于或等于1。请注意,c是预测值变量的数目;m是数据点数目。new_x's必须包含c列r行,其中r大于或等于1。(如果数据排列在行中而不是排列在列中,则必须保持类似的尺寸关系。)constant是一个逻辑参数,必须设置为TRUE或FALSE(或者0或1,Excel分别将其解释为FALSE或TRUE。)TREND的最后三个参数都是可选的;有关省略第二个参数、第三个参数或将这两个参数都省略掉的选项.对这个线性回归很是迷糊,不知道c#里该怎么实现这个算法。网上也找了资料,但是算出来结果都不对。请高手给个代码参考。。感激不尽!

解决方案

解决方案二:

解决方案三:
http://stackoverflow.com/questions/7437660/how-do-i-recreate-an-excel-formula-which-calls-trend-in-c
解决方案四:
引用2楼caozhy的回复:

http://stackoverflow.com/questions/7437660/how-do-i-recreate-an-excel-formula-which-calls-trend-in-c

谢谢版主给的参考。但是TREND(known_y's,known_x's,new_x's,constant)known_x's和new_x's都是单行多列的。不知道怎么弄?烦请指导下
解决方案五:
求解答啊,求解答
解决方案六:
版主给的帖子里不是有老外给出实现方式了吗,实测好用!///<summary>///GetsthevalueatagivenXusingthelineofbestfit(LeastSquareMethod)todeterminetheequation///</summary>///<paramname="points">Pointstocalculatethevaluefrom</param>///<paramname="x">Functioninput</param>///<returns>ValueatXinthegivenpoints</returns>publicstaticfloatLeastSquaresValueAtX(List<PointF>points,floatx){floatslope=SlopeOfPoints(points);floatyIntercept=YInterceptOfPoints(points,slope);return(slope*x)+yIntercept;}///<summary>///Getstheslopeforasetofpointsusingtheformula:///m=∑(x-AVG(x)(y-AVG(y))/∑(x-AVG(x))²///</summary>///<paramname="points">PointstocalculatetheSlopefrom</param>///<returns>SlopeOfPoints</returns>privatestaticfloatSlopeOfPoints(List<PointF>points){floatxBar=points.Average(p=>p.X);floatyBar=points.Average(p=>p.Y);floatdividend=points.Sum(p=>(p.X-xBar)*(p.Y-yBar));floatdivisor=(float)points.Sum(p=>Math.Pow(p.X-xBar,2));returndividend/divisor;}///<summary>///GetstheY-Interceptforasetofpointsusingtheformula:///b=AVG(y)-m(AVG(x))///</summary>///<paramname="points">Pointstocalculatetheinterceptfrom</param>///<returns>Y-Intercept</returns>privatestaticfloatYInterceptOfPoints(List<PointF>points,floatslope){floatxBar=points.Average(p=>p.X);floatyBar=points.Average(p=>p.Y);returnyBar-(slope*xBar);}

时间: 2024-12-22 07:43:03

C# 如何实现Excel vba 里的trend 函数?的相关文章

C#调用Excel VBA宏

近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的, 也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之 后,获取返回值再进行相应的处理.为了使用方便,我写了一个执行Excel VBA宏的帮助类 .放在博客里做个备份也希望对有类似需求的朋友有所帮助. 帮助类仅提供了一个方 法:RunExcelMacro 参数说明: string excelFilePath Excel文件 路径 string macroName 宏名

利用excel vba编程在窗体上画椅子

  利用excel vba编程在窗体上画椅子           步骤 打开excel,进入Visual Basic编辑器. 插入模块. 模块编程.在模块1内编程,声明4个函数,并编写一句显示窗体的程序--"画". 插入窗体. 调整窗体大小.height属性调为399.75,width属性调为219.75. 窗体编程.双击窗体进入编程界面,编写窗体单击事件触发的程序,调用模块1里声明的1个结构.4个函数编写程序.为图中每个点写好坐标. 关闭vbe,启动宏. 执行宏. 执行宏--&quo

利用excel vba编程在窗体上画一个六边形

  利用excel vba编程在窗体上画一个六边形.这篇教程是向朋友们分享利用excel vba编程在窗体上画一个六边形方法,教程很不错,适合新手来学习,推荐大家来看看吧. 步骤1 打开excel表格,进入vbe窗口. 插入模块. 在模块1内编程,声明4个函数.1个结构,并编写一句显示窗体的程序--"画". 插入窗体. 这是插入的窗体,调整大小如图. 双击窗体进入编程界面,编写窗体单击事件触发的程序,调用模块1里声明的4个函数.1个结构编写程序. 关闭vbe窗口,在excel表格界面启

excel vba编程在窗体上画一座房子

  excel vba编程在窗体上画一座房子.这篇教程是向大家介绍利用excel vba编程在窗体上画一座房子方法,教程比较基础,制作出来的效果非常不错,推荐来看看吧. 步骤 打开excel表格,进入vbe窗口. 插入模块. 在模块1内编程,声明4个函数.1个结构,并编写一句显示窗体的程序--"画". 插入窗体. 这是插入的窗体. 双击窗体进入编程界面,编写窗体单击事件触发的程序,调用模块1里声明的1个结构编写程序.这是房顶和房子的前面各4个点的坐标,房子的侧面5点的坐标. 这是门和窗

Excel VBA是什么?

  Excel相信我们都很熟悉,也经常和它打交道,Excel基本是用来处理表单数据的,里面自带一些工具和函数,熟练运用工具和函数可以让Excel变得比较高效.但是,也有时面对一些繁琐的数据我们也很无奈,那么VBA可以帮大家解决这个问题,VBA处理数据既高效也比较自如,下面小编为大家详细介绍一下VBA到底是什么,怎么用? 工具/原料 office Excel软件(一般都有VBA模块) 有VB基础就更好了 方法/步骤 1.VBA到底是什么 VBA是Visual Basic for Applicati

excel vba如何打开,关闭多个工作薄

  用excel VBA 编写打开和关闭多个工作薄,相应的代码如下: 1.打开指定工作簿 dim wb as workbook set wb = " 文件路径及文件名" workbooks.open filename:= wb 2.关闭所有工作簿并保存 workbooks.close 3.打开多个工作薄的程序代码: Sub OpenWorkbooks() On Error Resume Next Dim SelectFiles As Variant '显示打开文件对话框 SelectF

excel vba是什么?

  故障分析:excel VBA其实就是大家代码编辑程序,有的人被人认为是宏,但是excel vba是包括宏程序的.下面还是一起来看看excel vba是什么?如何打开? 一.excel vba是什么? excel VBA中的vba是Visual Basic For Application的缩写.一般用来实现简单或中等的办公自动化应用.因为易学并且能很好的被office系列应用程序支持,因此得到了很广泛的应用. 二.excel vba怎么打开? 先安装一个vba编辑器,在"Office共享功能&

为excel vba中添加、删除模块并插入全过程图文详解

  为excel vba中添加.删除模块并插入全过程图文详解         方法/步骤 1.点按快速启动栏excel 程序图标 进入excel 界面 点击选中任意单元格 然后按alt+f11 进入vbe界面 2.点击菜单栏 插入命令 在弹出的活动菜单中点按模块命令 3.另一种方式插入模块的方法可以在工程资管管理器中鼠标点击空白处 右键单击鼠标 在弹出的快捷菜单中选择插入命令 二级菜单中选择模块命令 4.如图所示模块1.模块2分别是通过菜单栏插入命令 和工程资源管理器点击右键创建的模块 5.如果

Excel表格里的数据导入SQLSERVER数据库

  在查询分析器里,操作数据库对象选择Lee直接写 SQL语句: 如果是导入数据到现有表,则采用 INSERT INTO 表 SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$) 的形式 如果是导入数据并新增表,则采用 SELECT * INTO 表 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel