2013-04-06 307 views
3

我需要从LINEST Excel函数中获取信息。我想知道是否有类似功能的函数库,或者是否有可能以某种方式在C#中使用本机Excel函数?我正在使用MVS 2010并使用Windows Forms可能很重要。我写了一个最小二乘估计函数,该函数仅计算双因子模型的参数,但我需要为具有多于两个因子的模型计算参数。用于C#的LINEST函数模拟器

P.S.其实我没有谷歌的答案,我看到有人使用包Microsoft.Office.Excel计算必要的信息,但没有这样的导入在我的IDE。我不想发明一个轮子,所以我完全欣赏任何信息。谢谢。

更新: 最后我添加了一个Microsoft.Office.Excel参考我的项目,解决我的问题。源代码如下所示。结果是2D Excel类似的数组。代码写得很匆忙,所以它不太好,需要修改。我只希望它能帮助别人。 /w的我,如果你需要帮助

 Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel.WorksheetFunction wsf = xl.WorksheetFunction; 

     List<double> x = new List<double> { 107, 109, 110, 113, 120, 122, 123, 128, 136, 140, 145, 150 }; 
     List<double> y = new List<double> { 102, 105, 108, 110, 115, 117, 119, 125, 132, 130, 141, 144 }; 

     object result = wsf.LinEst(y.ToArray(), x.ToArray(), true, true); 

     Array resArray = (Array)result; 

     double[,] linest = new double[5, 2]; 
     int i = 0, j = 0; 
     Console.WriteLine("{0,15:f10}", resArray.Length); 
     foreach (var element in resArray) 
     { 
      if (i == 0 || i == 2 || i == 4 || i == 6 || i == 8) 
      { 
       linest[j, 0] = (double)element;      
      } 
      else 
      { 
       linest[j, 1] = (double)element; 
       j++; 
      } 
      i++;     
     } 

     Console.WriteLine(); 
     for (i = 0; i < linest.GetLength(0); i++) 
     { 
      for (j = 0; j < linest.GetLength(1); j++) 
       Console.Write("{0,25:f13}", linest[i, j]); 
      Console.WriteLine(); 
     } 

回答

1

尝试在数学净NUMERICS的线性代数库,并避免使用Excel完全。

+0

这不是我需要的东西,因为计算R2,F和T测试以及其他东西对我来说非常重要。然而,我搜索了这样的图书馆,发现有很多这样的图书馆,那么你能告诉我一个适合我的图书馆吗?如果没有人会帮助我,我将不得不听从你的建议。谢谢。 – 2013-04-06 14:33:36

+0

接受你的答案,因为你是唯一决定帮助我的人。祝你今天愉快! ;) – 2013-04-06 17:20:37

+1

看看这个博客。我会写更多,但从手机发布。 http://christoph.ruegg.name/blog/2012/9/9/linear-regression-mathnet-numerics.html – 2013-04-06 23:15:15