Para un sitio web educativo, mi propósito es dejar que los estudiantes se entretengan con las series de valores y su colección. Por ejemplo, los estudiantes pueden entrar en dos matrices para los que se calcula la correlación:Cómo calcular una serie aleatoria de valores (B) que tienen una correlación dada con una serie dada (A)
$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
El código para esta aplicación funciona perfectamente y se pueden encontrar en la parte inferior de este post. Sin embargo, ahora estoy enfrentando un desafío. Lo que quiero es la siguiente:
- estudiante introduce un $ matriz_x (5,3,6,7,4,2,9,5)
- estudiante introduce una correlación (0,9)
- entradas del estudiante los límites de $ array_y (por ejemplo, entre 1 y 10 o entre 50 y 80)
- el script devuelve un conjunto aleatorio (por ejemplo: 4,3,4,8,3,2,10,5) que tiene (aproximadamente) la correlación dada
Entonces, en otras palabras, el código debería funcionar como:
$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)
En el foro Stackexchange matemáticas, respondió @ilya (inserta como una imagen, ya que no parece formato de látex fomulas hacer para trabajar en stackoverflow):
P. S. El código utilizado para el cálculo de la correlación:
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);
}
Lo que es interesante acerca de este problema es que está buscando una forma de proporcionar a los estudiantes una herramienta que, si estoy leyendo la pregunta correctamente, no tiene una solución matemática predefinida (que es digamos, no hay una ecuación o función que algún tipo griego o francés haya inventado hace más de 500 años). Si bien el objetivo de querer llevarlo a cabo es noble (y voy a pensar en ello), básicamente estás proporcionando una herramienta/función que el estudiante no podría lograr en su estado (en otras palabras, pueden ' t conecta los números para confirmar que ya has hecho una lista propia para confirmar). – Anthony
Si entiendo tu comentario correctamente, el objetivo de esta herramienta sería, por ejemplo, demostrar que si la serie A está entre 300 y 500, podría correlacionarse con una serie B si los límites de B son de 1 a 10 o mucho más , digamos de 700 a 1000. Estudié economía yo mismo, y muchos cálculos se entendieron mejor al tener herramientas que te permiten tocar algunas propiedades para ver el resultado en el otro. Ese sería el propósito de esta herramienta, en lugar de probar el teorema de algunos griegos o franceses :-) – Pr0no
Definitivamente entiendo el beneficio de jugar con un teorema desde todos los ángulos. Definitivamente me ha ayudado a captar mejor la geometría avanzada (re: basic trig), entre otros modelos/sistemas. Me pregunto si tu pregunta no es tanto un problema de programación como matemático.En algunas ocasiones me di cuenta de mis propios dilemas y descubrí que preguntar en [math] (math.stackexchange.com) me ayudó a construir una mejor base para construir el código. Como dije, creo que la pregunta es válida y el objetivo es noble, pero la respuesta es probablemente más fundamental que la codificación. – Anthony