class Program
{
static void Main(string[] args)
{
double[] array1 = { 3, 2, 4, 5, 6 };
double[] array2 = { 9, 7, 12, 15, 17 };
Console.WriteLine(GetCorrel(array1, array2));
}
/// <summary>
/// 获取两个数组的相关系数,同Excel的Correl函数
/// </summary>
/// <param name="array1"></param>
/// <param name="array2"></param>
/// <returns></returns>
private static double GetCorrel(double[] array1, double[] array2)
{
double[] array_xy = new double[array1.Length];
double[] array_xpow2 = new double[array1.Length];
double[] array_ypow2 = new double[array1.Length];
double sum_x = 0;
double sum_y = 0;
double sum_xy = 0;
double sum_xpow2 = 0;
double sum_ypow2 = 0;
for (int i = 0; i < array1.Length; i++)
{
array_xy[i] = array1[i] * array2[i];
array_xpow2[i] = Math.Pow(array1[i], 2.0);
array_ypow2[i] = Math.Pow(array2[i], 2.0);
sum_x += array1[i];
sum_y += array2[i];
sum_xy += array_xy[i];
sum_xpow2 += array_xpow2[i];
sum_ypow2 += array_ypow2[i];
}
double Ex2 = Math.Pow(sum_x, 2.00);
double Ey2 = Math.Pow(sum_y, 2.00);
return (array1.Length * sum_xy - sum_x * sum_y) / Math.Sqrt((array1.Length * sum_xpow2 - Ex2) * (array1.Length * sum_ypow2 - Ey2));
}
}