2010-04-27 60 views
0

通過使用Excel的LinESt函數來實現C#(3.0)中的多線性迴歸。 基本上我想實現如何在C#3.0中創建double [,] x_List?

=LINEST(ACL_returns!I2:I10,ACL_returns!J2:K10,FALSE,TRUE) 

所以我有數據如下

double[] x1 = new double[] { 0.0330, -0.6463, 0.1226, -0.3304, 0.4764, -0.4159, 0.4209, -0.4070, -0.2090 }; 
double[] x2 = new double[] { -0.2718, -0.2240, -0.1275, -0.0810, 0.0349, -0.5067, 0.0094, -0.4404, -0.1212 }; 
double[] y = new double[] { 0.4807, -3.7070, -4.5582, -11.2126, -0.7733, 3.7269, 2.7672, 8.3333, 4.7023 }; 

我必須寫其簽名的功能將是

Compute(double[,] x_List, double[] y_List) 
{ 
    LinEst(x_List,y_List, true, true); < - This is the excel function that I will call. 
} 

我的問題是如何通過使用double [] x1和double [] x2我會使double [,] x_List?

我正在使用C#3.0和框架3.5。

在此先感謝

回答

0

實際上它應該是

double[,] xValues = new double[x1.Length, x2.Length]; 
int max = (new int[]{ x1.Length,x2.Length}).Max(); 
for (int i = 0; i < max; i++) 
{ 
xValues[0, i] = x1.Length > i ? x1[i] : 0; 
xValues[1, i] = x2.Length > i ? x2[i] : 0; 
} 

薩米爾是正確的,我應該迭代器,而不是每次迭代的外部調用Max()一次,我已經修正這一點。

1
double[,] xValues = new double[x1.Length, x2.Length]; 

for (int i = 0; i < x1.Length; i++) 
{ 
    xValues[i, 0] = x1[i]; 
    xValues[i, 1] = x2[i]; 
} 
0

多維數組的一面在你的答案和bablo中都是不正確的。此外,在Bablo答案的每一次迭代中對Max的調用似乎非常緩慢,尤其是對於大量元素。

int max = (new int[] { x1.Length, x2.Length }).Max(); 
double[,] xValues = new double[2, max]; 

for (int i = 0; i < max; i++) 
{ 
    xValues[0, i] = x1.Length > i ? x1[i] : 0; 
    xValues[1, i] = x2.Length > i ? x2[i] : 0; 
}