Je construis une page .net pour imiter une feuille de calcul. La feuille contient cette formuleComment recréer une formule Excel qui appelle TREND() en C#?
=ROUND(TREND(AA7:AE7,AA$4:AE$4,AF$4),1)
Quelqu'un peut-il fournir le C# équivalent de TREND()
? Sinon, si quelqu'un peut fournir un raccourci autour d'elle, c'est bien aussi; Je ne suis pas assez familier avec les maths pour savoir s'il y a un moyen plus facile.
Voici quelques exemples si cela vous aide.
AA7: ae7 6 8 10 12 14
ou 10.2 13.6 17.5 20.4 23.8
AA $ 4: AE 4 600 800 1000 1200 1400
$
AF 4 $ 650
edit: Voici ce que j'ai trouvé et il semble produire les mêmes nombres que mon tableur.
public static partial class Math2
{
public static double[] Trend(double[] known_y, double[] known_x, params double[] new_x)
{
// return array of new y values
double m, b;
Math2.LeastSquaresFitLinear(known_y, known_x, out m, out b);
List<double> new_y = new List<double>();
for (int j = 0; j < new_x.Length; j++)
{
double y = (m * new_x[j]) + b;
new_y.Add(y);
}
return new_y.ToArray();
}
// found at http://stackoverflow.com/questions/7437660/how-do-i-recreate-an-excel-formula-which-calls-trend-in-c
// with a few modifications
public static void LeastSquaresFitLinear(double[] known_y, double[] known_x, out double M, out double B)
{
if (known_y.Length != known_x.Length)
{
throw new ArgumentException("arrays are unequal lengths");
}
int numPoints = known_y.Length;
//Gives best fit of data to line Y = MC + B
double x1, y1, xy, x2, J;
x1 = y1 = xy = x2 = 0.0;
for (int i = 0; i < numPoints; i++)
{
x1 = x1 + known_x[i];
y1 = y1 + known_y[i];
xy = xy + known_x[i] * known_y[i];
x2 = x2 + known_x[i] * known_x[i];
}
M = B = 0;
J = ((double)numPoints * x2) - (x1 * x1);
if (J != 0.0)
{
M = (((double)numPoints * xy) - (x1 * y1))/J;
//M = Math.Floor(1.0E3 * M + 0.5)/1.0E3; // TODO this is disabled as it seems to product results different than excel
B = ((y1 * x2) - (x1 * xy))/J;
// B = Math.Floor(1.0E3 * B + 0.5)/1.0E3; // TODO assuming this is the same as above
}
}
}
J'ai trouvé une fonction d'ajustement de sqaures avec un ensemble de {x, y} et renvoie M et B. Je peux ensuite utiliser M et B avec un nouvel ensemble de valeurs x pour générer des valeurs y comme résultat de tendance . Est-ce que tout est correct? – lincolnk
Pour être honnête, je ne suis pas familier avec les fonctions LINEST ou TREND. Il se passe beaucoup de choses lors de l'utilisation de ceux-ci, et de la documentation, ils semblent être un peu peu fiables (garbage in-garbage out). Je pense que vous devez comprendre ce que font les fonctions Excel et simplement essayer de reproduire les résultats en C#. D'après ce que je peux dire, pas une tâche facile. –
Le lien n'est plus valide – Rocklan