// kanniprabu 的函数是错误的。
// 你可以使用 Excel 函数 COVARIANCE.P 检查这个函数
function getCovariance( $valuesA, $valuesB )
{
$countA = count($valuesA);
$countB = count($valuesB);
if ( $countA != $countB ) {
trigger_error( '数组大小不同:countA='. $countA .', countB='. $countB, E_USER_WARNING );
return false;
}
if ( $countA < 0 ) {
trigger_error( '空数组', E_USER_WARNING );
return false;
}
// 如果可用,请使用库函数
if ( function_exists( 'stats_covariance' ) ) {
return stats_covariance( $valuesA, $valuesB );
}
$meanA = array_sum( $valuesA ) / floatval( $countA );
$meanB = array_sum( $valuesB ) / floatval( $countB );
$add = 0.0;
for ( $pos = 0; $pos < $countA; $pos++ ) {
$valueA = $valuesA[ $pos ];
if ( ! is_numeric( $valueA ) ) {
trigger_error( '数组 A 在位置 '. $pos . ' 上的非数值,值为:'. $valueA, E_USER_WARNING );
return false;
}
$valueB = $valuesB[ $pos ];
if ( ! is_numeric( $valueB ) ) {
trigger_error( '数组 B 在位置 '. $pos . ' 上的非数值,值为:'. $valueB, E_USER_WARNING );
return false;
}
$difA = $valueA - $meanA;
$difB = $valueB - $meanB;
$add += ( $difA * $difB );
} // for
return $add / floatval( $countA );
}