php python math haskell matrix

¿Cómo traducir esta fórmula matemática en Haskell o Python?(Fue traducido en PHP)



math matrix (3)

Aqui tienes.

Pongo este código en el dominio público.

# Function to make an array of ''width'' zeros function makerow($width){ $row=array(); for($x=0;$x<$width;$x++){ $row[$x]=0; } return $row; } # Function to make a width*height matrix function makematrix($width,$height){ $matrix=array(); for($y=0;$y<$height;$y++){ $matrix[$y]=array(); for($x=0;$x<$width;$x++){ $matrix[$y][$x]=0; } } return $matrix; } # Adds one matrix to another function matrixadd(&$matrixdest,&$matrixsrc){ for($i=0;$i<count($matrixdest);$i++){ for($j=0;$j<count($matrixdest[$i]);$j++){ $matrixdest[$i][$j]+=$matrixsrc[$i][$j]; } } } # Multiplies a matrix by a scalar function matrixmultiply(&$matrix,$scalar){ for($i=0;$i<count($matrix);$i++){ for($j=0;$j<count($matrix[$i]);$j++){ $matrix[$i][$j]*=$scalar; } } } # Calculates the equity of each place. Rows indicate players; # columns indicate places (0 is 1st place, 1 is second, and so on) # The parameter ''places'' is optional. If not given, uses the # number of stacks. function equitymatrix(&$stacks, $places=-1){ if($places==-1){ # replace places with the stack count $places=count($stacks); } if(count($stacks)<=1){ return array(array(1)); } $totalStacks=0; for($i=0;$i<count($stacks);$i++){ $totalStacks+=$stacks[$i]; } # Optimize for case where there is only one place if($places==1){ $matrix=makematrix(1,count($stacks)); for($i=0;$i<count($stacks);$i++){ $matrix[$i][0]=$stacks[$i]*1.0/$totalStacks; } return $matrix; } # Optimize for case where there are two places if($places==2){ $matrix=makematrix(2,count($stacks)); for($i=0;$i<count($stacks);$i++){ $matrix[$i][0]=$stacks[$i]*1.0/$totalStacks; } for($i=0;$i<count($stacks);$i++){ for($j=0;$j<count($stacks);$j++){ if($i!=$j){ $matrix[$i][1]+=$matrix[$j][0]*($stacks[$i]*1.0/($totalStacks-$stacks[$j])); } } } return $matrix; } # Calculate the probabilities of each player getting first place $probabilities=array(); for($i=0;$i<count($stacks);$i++){ $probabilities[$i]=$stacks[$i]*1.0/$totalStacks; } #echo(count($stacks)." ".$places."/n"); $subequities=array(); for($i=0;$i<count($stacks);$i++){ $substacks=array(); # Assume that player i would be in first place # Create a new array with i''s stack removed for($j=0;$j<count($stacks);$j++){ if($j!=$i){ array_push($substacks,$stacks[$j]); } } # Find the subequity of the remaining players $subequities[$i]=equitymatrix($substacks, min($places,count($substacks))); for($j=0;$j<count($subequities[$i]);$j++){ array_unshift($subequities[$i][$j],0); } # Add player i back $newrow=makerow($places); $newrow[0]=1; array_splice($subequities[$i],$i,0,array($newrow)); } $equities=makematrix($places,count($stacks)); for($i=0;$i<count($stacks);$i++){ # Multiply the probabilities matrixmultiply($subequities[$i],$probabilities[$i]); # Add the subequity matrixadd($equities,$subequities[$i]); } return $equities; }

Ejemplo:

$mystacks=array(10,40,30,20); print_r(equitymatrix($mystacks));

En cuanto al uso de matrices:

En PHP, una matriz se puede representar como una matriz de matrices. Se puede ver en la función makematrix , que devuelve una matriz de height de longitud, siendo cada elemento una matriz de ceros de width . Su problema utiliza las siguientes operaciones de matriz, las cuales son simples:

  • Sumando dos matrices ( matrixadd ). Aquí, simplemente agregue los elementos de una matriz a los elementos correspondientes de la otra matriz.
  • Multiplicar una matriz por un solo número (un escalar) ( matrixmultiply ) simplemente implica multiplicar cada elemento de la matriz por ese número.

Estoy tratando de convertir una fórmula matemática en código PHP.

Puede ver la fórmula en la respuesta aceptada aquí: Aplicar una fórmula matemática de una manera más elegante (tal vez una llamada recursiva haría el truco) .

No soy un programador profesional, así que trato de traducirlo pero mis habilidades son limitadas y he encontrado varios problemas.

Empecemos.

Hay un vector que contiene las pilas de jugadores: creo que una matriz bidimensional debería hacer el trabajo aquí. Yo añadiría una clave para identificar a cada jugador.

$array = array(1 => 2000, 3 => 5000 ...);

Ahora él quiere crear una Matriz de valores, hice mis investigaciones y encontré un paquete PEAR llamado Math_Matrix, lo instalé pero me pregunto cómo crear ese tipo de matriz.

Me preocupa que no pueda traducir todo el código porque utiliza métodos avanzados como llamadas recursivas, etc.

¿Usted me podría ayudar?

EDITAR: OLD BOUNTY REWARD

Intenté lo que sugeriste, pero siento que pierdo el tiempo debido a mis deficientes habilidades de programación.

HE DECIDIDO OFRECER A 50 BUTTES SI ALGUIEN QUIERE AYUDARME A TRADUCIR LA FORMULA EN PHP.

Tenga en cuenta que si piensa que la traducción en Python es más fácil / más adecuada / otra, proporcione una forma de incluir el script de Python en un script de PHP, ya que planeo usar esta fórmula en un sitio web.


Si tiene Matlab instalado, con la caja de herramientas de matemáticas simbólicas,

Puedes usar la función ccode para traducir esta fórmula (o cualquier otra) a c-code (que es muy similar a php).


Supongo que la pregunta más grande es para qué planeas usar esto. Al final realmente recomendaría no usar PHP. No está diseñado para este tipo de trabajo y terminará causando mucho trabajo para usted más tarde.

Si solo está buscando un medio para calcularlo, recomendaría usar Octave (la versión OpenSource de MATLAB). Si realmente desea compilar un programa a su alrededor, debería mirar Python utilizando el módulo NumPy: http://numpy.scipy.org/

Si tiene la capacidad, recomendaría usar mod_python para ejecutar NumPy para manejar esto. Probablemente sería el medio más simple de hacerlo, ya que NumPy puede manejar matrices de forma nativa. De no ser así, debería mirar las siguientes clases que existen para manejar matrices en PHP. Algunas personas han desarrollado algunas clases diseñadas específicamente para manipular matrices.

http://www.phpkode.com/scripts/item/matrix-new/ http://www.phpclasses.org/package/2859-PHP-Perform-operations-with-matrices.html