Построить формулу определителя
Primary tabs
<?php
const N = 4;
function getLines(array $indexRows, int $position)
{
$data = [];
foreach ($indexRows as $row) {
$indices = array_diff(
range(1, N),
$row,
);
foreach ($indices as $index) {
$newRow = $row;
$newRow[$position] = $index;
$data[] = $newRow;
}
}
$position++;
return $position > N ?
$data :
getLines($data, $position);
}
function getSign(array $permutation)
{
$inversions = 0;
foreach ($permutation as $index => $val)
{
for ($i = 1; $i < $index ; $i++) {
if ($permutation[$i] > $val) {
$inversions++;
}
}
}
return $inversions % 2 === 0 ? '+' : '-';
}
echo "\n";
for ($i = 1; $i <= N; $i++) {
echo "| ";
for ($j = 1; $j <= N; $j++) {
echo "a_{{$i} {$j}} ";
}
echo " |" . ($i === (int)(N/2) + 1 ? ' =' : '') . "\n";
}
echo "\n=";
$string = '';
foreach (getLines([[]], 1) as $line) {
$sign = getSign($line);
$string .= empty($string) && $sign === '+' ? ' ' : " $sign ";
foreach ($line as $key => $val) {
$last = $key === N ? '' : ' * ';
$string .= "a_{{$key} {$val}}$last";
}
}
echo "$string\n";
Вывод скрипта:
| a_{1 1} a_{1 2} a_{1 3} a_{1 4} |
| a_{2 1} a_{2 2} a_{2 3} a_{2 4} |
| a_{3 1} a_{3 2} a_{3 3} a_{3 4} | =
| a_{4 1} a_{4 2} a_{4 3} a_{4 4} |
= a_{1 1} * a_{2 2} * a_{3 3} * a_{4 4} - a_{1 1} * a_{2 2} * a_{3 4} * a_{4 3} - a_{1 1} * a_{2 3} * a_{3 2} * a_{4 4} +
a_{1 1} * a_{2 3} * a_{3 4} * a_{4 2} + a_{1 1} * a_{2 4} * a_{3 2} * a_{4 3} - a_{1 1} * a_{2 4} * a_{3 3} * a_{4 2} -
a_{1 2} * a_{2 1} * a_{3 3} * a_{4 4} + a_{1 2} * a_{2 1} * a_{3 4} * a_{4 3} + a_{1 2} * a_{2 3} * a_{3 1} * a_{4 4} -
a_{1 2} * a_{2 3} * a_{3 4} * a_{4 1} - a_{1 2} * a_{2 4} * a_{3 1} * a_{4 3} + a_{1 2} * a_{2 4} * a_{3 3} * a_{4 1} +
a_{1 3} * a_{2 1} * a_{3 2} * a_{4 4} - a_{1 3} * a_{2 1} * a_{3 4} * a_{4 2} - a_{1 3} * a_{2 2} * a_{3 1} * a_{4 4} +
a_{1 3} * a_{2 2} * a_{3 4} * a_{4 1} + a_{1 3} * a_{2 4} * a_{3 1} * a_{4 2} - a_{1 3} * a_{2 4} * a_{3 2} * a_{4 1} -
a_{1 4} * a_{2 1} * a_{3 2} * a_{4 3} + a_{1 4} * a_{2 1} * a_{3 3} * a_{4 2} + a_{1 4} * a_{2 2} * a_{3 1} * a_{4 3} -
a_{1 4} * a_{2 2} * a_{3 3} * a_{4 1} - a_{1 4} * a_{2 3} * a_{3 1} * a_{4 2} + a_{1 4} * a_{2 3} * a_{3 2} * a_{4 1}
- Log in to post comments
- 1351 reads