2010-04-27 4 views
0

Mise en œuvre de la régression multi-linéaire en C# (3.0) à l'aide de la fonction LinESt de Excel. Fondamentalement, je suis en train de réaliserComment faire double [,] x_List en C# 3.0?

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

J'ai donc les données ci-dessous

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 }; 

Je dois écrire une fonction dont la signature sera

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

Ma question est de savoir comment par en utilisant double [] x1 et double [] x2 je vais faire double [,] x_List? J'utilise C# 3.0 et framework 3.5.

Merci à l'avance

Répondre

0

En fait, il devrait être

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; 
} 

Samir a raison, que je devrais appeler Max() une fois en dehors de la iterator plutôt que chaque itération, je l'ai modifié cela.

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

Le côté du tableau multidimensionnel est incorrect à la fois dans votre réponse et dans les bablo. En outre, l'appel à Max à chaque itération dans la réponse de bablo semble très lent, surtout avec un grand nombre d'éléments.

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; 
}