Построить формулу определителя
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
- 1126 reads