- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试将数学公式转换为 PHP 代码。
您可以在此处查看已接受答案中的公式:Applying a Math Formula in a more elegant way (maybe a recursive call would do the trick) .
我不是专业的编码员,所以我正在尽力翻译它,但我的技能有限,并且遇到了一些问题。
让我们开始吧。
有一个包含玩家堆栈的向量:我认为二维数组应该在这里完成工作。我会添加一个 key 来识别每个玩家。
$array = array(1 => 2000, 3 => 5000 ...);
现在他想创建一个值矩阵,我进行了研究,发现了一个名为 Math_Matrix 的 PEAR 包,安装了它,但我想知道如何创建这种矩阵。
我担心我无法翻译整个代码,因为他使用了递归调用等高级方法。
你能帮帮我吗?
编辑:旧赏金奖励
我尝试了您的建议,但由于我的编程技能差,我觉得浪费了我的时间。
如果有人想通过在 PHP 中翻译该公式来帮助我,我决定提供 50 赏金。
请注意,如果您认为用 Python 进行翻译更容易/更合适/其他,请提供一种将 Python 脚本包含在 PHP 脚本中的方法,因为我计划在网站中使用此公式。
最佳答案
给你。
我将此代码放入公共(public)域。
# 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;
}
例子:
$mystacks=array(10,40,30,20);
print_r(equitymatrix($mystacks));
关于矩阵的使用:
在 PHP 中,矩阵可以表示为数组的数组。你可以看到在函数 makematrix
中,它返回一个长度为 height
的数组,每个元素都是 width
零的数组。您的问题使用以下内容矩阵运算,两者都很简单:
matrixadd
)。在这里,只需将一个矩阵的元素添加到另一个矩阵的对应元素。matrixmultiply
)涉及将矩阵的每个元素乘以该数字。关于php - 如何在 Haskell 或 Python 中翻译这个数学公式? (已用 PHP 翻译),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605183/
我得到了以下 Excel 公式来计算法国系统贷款利息: =+G15*B15/(1-(1+G15)^(-H15)) 地点: G15 = 1.33% B15 = importe H15 = plazo 由
我必须构建一个像这样的序列 (amount-(amount/36*1)) + (amount-(amount/36*1 + amount-amount/36*2)) + (amount-(amount
在R语言的绘图函数中,如果文本参数是合法的R语言表达式,那么这个表达式就被用Tex类似的规则进行文本格式化。 y <- function(x) (exp(-(x^2)/2))/sqrt(2
我喜欢转换旧的 BASIC 游戏——我遇到了一个有这个奇怪公式的游戏。目前我正在用 Pascal 编写,但我可以用任何语言编写。翻遍代码后,我找不到这个 var 是否在使用,但仍然想知道当时 BASI
我需要在 C 中实现这个数学公式: 我写了一段代码: #include int c(int n, int k) { if(k == 0) return n; if(c
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
是否有任何常规范式来表示可以被计算机读取的数学公式? 我正在研究一些数学问题,并有某种 TDD 方法来解决它。每次我陷入一个证明(或者只是我还没有证明,但是对结果应该是什么的一些直觉)时,我倾向于编写
我正在尝试用 C 语言实现一个数学公式来计算特定 Runescape 级别所需的 XP,但我没有得到正确的输出。 1 级给出“75”XP,99 级给出“11059837”。我的实现有什么问题吗?我想不
我想在绘图中添加一个包含 Latex 公式的 geom_text(),以描述 2 个矩阵中每个值的平均百分比: library(latex2exp) library(ggplot2) library(
我是一名优秀的程序员,十分优秀!