Я хотел бы написать код, чтобы сделать гауссово исключение, я получил это:РНР
function gauss($A, $x) {
for ($i=0; $i < count($A); $i++) {
$A[$i][] = $x[$i];
}
$n = count($A);
for ($i=0; $i < $n; $i++) {
$maxEl = abs($A[$i][$i]);
$maxRow = $i;
for ($k=$i+1; $k < $n; $k++) {
if (abs($A[$k][$i]) > $maxEl) {
$maxEl = abs($A[$k][$i]);
$maxRow = $k;
}
}
for ($k=$i; $k < $n+1; $k++) {
$tmp = $A[$maxRow][$k];
$A[$maxRow][$k] = $A[$i][$k];
$A[$i][$k] = $tmp;
}
for ($k=$i+1; $k < $n; $k++) {
$c = -$A[$k][$i]/$A[$i][$i];
for ($j=$i; $j < $n+1; $j++) {
if ($i==$j) {
$A[$k][$j] = 0;
} else {
$A[$k][$j] += $c * $A[$i][$j];
}
}
}
}
$x = array_fill(0, $n, 0);
for ($i=$n-1; $i > -1; $i--) {
$x[$i] = $A[$i][$n]/$A[$i][$i];
for ($k=$i-1; $k > -1; $k--) {
$A[$k][$n] -= $A[$k][$i] * $x[$i];
}
}
if (!in_array(false, $x, true)){
if($x[0] >= 0 && $x[1] >= 0 && $x[2] >= 0){
return $x;
}
}
}
Все в порядке, но когда я кладу значение, как это:
$A = array(array(1,1,0),array(3,5,4),array(1,0,0));
$x = array(2,30,0);
| 1 1 0 | 2 |
| 1 0 0 | 0 |
| 3 5 4 | 30 |
Результат должен быть: (0,2,5), но моя функция возвращает null.
Я не знаю, что с ним не так.
Я не проверил вашу Gaussian процедуры ликвидации в деталях, но я уже заметил, что вы позволяете только функцию верните вектор '$ x', если все значения' '= 0'. Разве это не условие, которое далеко? Как насчет законных решений с отрицательными значениями '$ x'? – cars10m