2011-11-23 39 views
0

我想使用Excel的內建函數LINEST()在.net中進行迴歸分析。 我能夠使用具有squred矩陣陣列的功能,但是,當它不是方形矩陣的順序說[12,3],然後它給出誤差爲:在.net中使用LinEst()

LINEST WorksheetFunction類的方法失敗

請幫我解決這個問題,因爲這對我來說是非常重要的。 這是我的完整代碼:

 System.Data.DataTable dt = new System.Data.DataTable(); 
     SqlCommand cmd =new SqlCommand("Select QtytoTransfer from DEmo ",con); 

     SqlDataAdapter adp = new SqlDataAdapter(cmd); 
     adp.Fill(dt); 

     List<double> yDatapoints =new List<double>(); 

     foreach (DataRow dr in dt.Rows) 
     { 
      yDatapoints.Add(Convert.ToDouble(dr["QtytoTransfer"].ToString())); 
     } 



     System.Data.DataTable dt1 = new System.Data.DataTable(); 

     SqlCommand sqlcmd = new SqlCommand("Select CurrentQoh,QtySold,GameTime from DEmo ", con); 

     SqlDataAdapter adp1 = new SqlDataAdapter(sqlcmd); 
     adp1.Fill(dt1); 

     double[,] xAll = new double[dt1.Rows.Count, dt1.Columns.Count]; 
     for (int i = 0; i < dt1.Rows.Count; ++i) 
     { 
      for (int j = 0; j < dt1.Columns.Count; ++j) 
      { 
       xAll[i, j] = Convert.ToDouble(dt1.Rows[i][j].ToString()); 
      } 
     } 

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

     Microsoft.Office.Interop.Excel.WorksheetFunction wsf = xl.WorksheetFunction; 
     object[,] reslut = (object[,])wsf.LinEst(yDatapoints.ToArray(), xAll, missing, true); 
+0

這真的是一個很大的幫助,因爲我必須在明天實現這個功能。任何人都可以通過這個指導我嗎? – Surbhi

+1

您可以請發表您調用LinEst(對象,對象,對象,對象)的代碼:對象功能... – cgon

+0

我發佈了我的完整代碼。 xAll是非平方秩序矩陣[12,3] – Surbhi

回答

2

如果您xAll有[12.3]你yDataPoints長度的尺寸應該是3()LINEST的正常運作。

using System; 

namespace InteropExcel { 
    class Program { 
     static void Main(string[] args) { 
      Random rand = new Random(); 
      double[] yDatapoints = new double[3]; 
      for (int i = 0; i < 3; i++) { 
       yDatapoints[i]=rand.Next(20, 60); 
      } 
      double[,] xAll = new double[12, 3]; 
      for (int i = 0; i < 12; i++) { 
       for (int j = 0; j < 3; j++) { 

        xAll[i, j] = rand.Next(2, 100); 
       } 
      } 
      Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); 
      Microsoft.Office.Interop.Excel.WorksheetFunction wsf = xl.WorksheetFunction; 
      object[,] result = (object[,])wsf.LinEst(yDatapoints, xAll, Type.Missing, true); 



     } 
    } 
} 

xAll的列大小應該等於yDataPoints數組的長度。請嘗試讓我知道。

+0

yDataPoints的維數爲[12,1]。我找出解決方案,因爲我使用yDataPoints作爲List類型,xAll作爲數組。現在,當我將yDataPoints轉換爲數組[12,1]時,該函數正在工作。現在更大的任務是如何解釋這個結果?如果你有任何線索? – Surbhi

+0

感謝您的幫助。 – Surbhi