对于一个教育网站,我的目的是让学生在价值系列和他们的整理中有所作为。例如,学生可以输入两个计算相关性的数组:
$array_x = array(5,3,6,7,4,2,9,5);
$array_y = array(4,3,4,8,3,2,10,5);
echo Correlation($array_x, $array_y); // 0.93439982209434
代码完美运行,可以在这篇文章的底部找到。然而,我现在面临挑战。我想要的是以下内容:
- 学生输入一个 $array_x (5,3,6,7,4,2,9,5)
- 学生输入相关性(0.9)
- 学生输入 $array_y 的边界(例如,介于 1 和 10 之间或介于 50 和 80 之间)
- 该脚本返回一个随机数组(例如:4,3,4,8,3,2,10,5),它具有(大约)给定的相关性
因此,换句话说,代码必须像这样工作:
$array_x = array(5,3,6,7,4,2,9,5);
$boundaries = array(1, 10);
$correlation = 0.9;
echo ySeries($array_x, $boundaries, $correlation); // array(4,3,4,8,3,2,10,5)
在 Stackexchange 数学论坛上,@ilya 回答(作为图像插入,因为公式的乳胶格式似乎不适用于 stackoverflow):
PS 用于计算相关性的代码:
function Correlation($arr1, $arr2) {
$correlation = 0;
$k = SumProductMeanDeviation($arr1, $arr2);
$ssmd1 = SumSquareMeanDeviation($arr1);
$ssmd2 = SumSquareMeanDeviation($arr2);
$product = $ssmd1 * $ssmd2;
$res = sqrt($product);
$correlation = $k / $res;
return $correlation;
}
function SumProductMeanDeviation($arr1, $arr2) {
$sum = 0;
$num = count($arr1);
for($i=0; $i < $num; $i++) {
$sum = $sum + ProductMeanDeviation($arr1, $arr2, $i);
}
return $sum;
}
function ProductMeanDeviation($arr1, $arr2, $item) {
return (MeanDeviation($arr1, $item) * MeanDeviation($arr2, $item));
}
function SumSquareMeanDeviation($arr) {
$sum = 0;
$num = count($arr);
for($i = 0; $i < $num; $i++) {
$sum = $sum + SquareMeanDeviation($arr, $i);
}
return $sum;
}
function SquareMeanDeviation($arr, $item) {
return MeanDeviation($arr, $item) * MeanDeviation($arr, $item);
}
function SumMeanDeviation($arr) {
$sum = 0;
$num = count($arr);
for($i = 0; $i < $num; $i++) {
$sum = $sum + MeanDeviation($arr, $i);
}
return $sum;
}
function MeanDeviation($arr, $item) {
$average = Average($arr);
return $arr[$item] - $average;
}
function Average($arr) {
$sum = Sum($arr);
$num = count($arr);
return $sum/$num;
}
function Sum($arr) {
return array_sum($arr);
}