Хотя порядок матриц должен быть точным, следующий код отменяет исключение. Это может быть крошечная вещь, которую я не могу заметить, но не могу понять.Матричное умножение в php
<?php
$mat1 = array(5,1);
$mat2 = array(1,5);
function matrixmult($m1,$m2){
$r=count($m1);
$c=count($m2[0]);
$p=count($m2);
if(count($m1[0])!=$p){throw new Exception('Incompatible matrixes');}
$m3=array();
for ($i=0;$i< $r;$i++){
for($j=0;$j<$c;$j++){
$m3[$i][$j]=0;
for($k=0;$k<$p;$k++){
$m3[$i][$j]+=$m1[$i][$k]*$m2[$k][$j];
}
}
}
}
return($m3);
}
matrixmult($mat1,$mat2);
?>
Вы не сможете умножить матрицу 1x2 на матрицу 1x2; $ mat2 должен быть матрицей 2x1: '$ mat2 = array (array (1), array (5));' –
Mark. У него также отсутствует оболочка 'array()' вокруг них. Он, по сути, определяет векторы здесь, это не двумерные массивы. – Julian
См. Также: [Matrix artihmetic в PHP?] (Http://stackoverflow.com/q/428473/562769) –