Характеристический полином квадратной матрицы А определяется как многочлен р А (х) = Det ( я х- ) , где я это единичная матрица , и опр на определитель . Обратите внимание, что это определение всегда дает нам монический многочлен такой, что решение является единственным.
Ваша задача для этой задачи состоит в том, чтобы вычислить коэффициенты характеристического полинома для целочисленной матрицы, для этого вы можете использовать встроенные модули, но это не рекомендуется.
правила
- вход представляет собой целочисленную матрицу NxN (N ≥ 1) в любом удобном формате
- Ваша программа / функция будет выводить / возвращать коэффициенты в возрастающем или убывающем порядке (укажите, какие)
- коэффициенты нормированы так, что коэффициент x N равен 1 (см. контрольные примеры)
- вам не нужно обрабатывать неверные данные
Testcases
Коэффициенты приведены в порядке убывания (то есть. X N , x N-1 , ..., x 2 , x, 1):
[0] -> [1 0]
[1] -> [1 -1]
[1 1; 0 1] -> [1 -2 1]
[80 80; 57 71] -> [1 -151 1120]
[1 2 0; 2 -3 5; 0 1 1] -> [1 1 -14 12]
[4 2 1 3; 4 -3 9 0; -1 1 0 3; 20 -4 5 20] -> [1 -21 -83 559 -1987]
[0 5 0 12 -3 -6; 6 3 7 16 4 2; 4 0 5 1 13 -2; 12 10 12 -2 1 -6; 16 13 12 -4 7 10; 6 17 0 3 3 -1] -> [1 -12 -484 3249 -7065 -836601 -44200]
[1 0 0 1 0 0 0; 1 1 0 0 1 0 1; 1 1 0 1 1 0 0; 1 1 0 1 1 0 0; 1 1 0 1 1 1 1; 1 1 1 0 1 1 1; 0 1 0 0 0 0 1] -> [1 -6 10 -6 3 -2 0 0]
[ 1.00000000e+00 -1.51000000e+02 1.12000000e+03]
, например?Ответы:
SageMath , 3 байта
5 байтов сохранено благодаря @Mego
Попробуйте онлайн!
Принимает
Matrix
как вход.fcp
обозначает ф actorization от гр haracteristic р olynomial,который короче обычного встроенного
charpoly
.источник
октава ,
164 байта@BruteForce только что сказал мне, что одна из функций, которые я использовал в моем предыдущем решении, на самом деле может выполнять всю работу:
Попробуйте онлайн!
16 байт: это решение вычисляет собственные значения входной матрицы, а затем переходит к построению полинома из заданных корней.
Но, конечно, есть и скучный
(нужен
symbolic
матрица типов в Octave, но работает с обычными матрицами в MATLAB.)Попробуйте онлайн!
источник
Пари / ГП , 8 байт
Попробуйте онлайн!
Пари / ГП , 14 байтов
Попробуйте онлайн!
источник
x
на матрицу соответствующего размера? Ницца!R , 53 байта
Попробуйте онлайн!
Возвращает коэффициенты в порядке возрастания; то есть
a_0, a_1, a_2, ..., a_n
.Вычисляет полином, находя собственные значения матрицы.
R + Pracma , 16 байт
pracma
является библиотекой "PRACtical MAth" для R и имеет довольно много полезных функций.источник
Mathematica, 22 байта
-7 байтов от алефальфа
-3 байт от
Попробуйте онлайн!
и ... конечно ...
Mathematica, 29 байт
Попробуйте онлайн!
оба ответа выводят полином
источник
Haskell ,
243 223222 байтаПопробуйте онлайн!
Спасибо @ ÖrjanJohansen за помощь в игре в гольф!
объяснение
При этом используется алгоритм Фаддеева – ЛеВерье для расчета коэффициентов. Вот негольфированная версия с более подробными именами:
Примечание: я взял это прямо из этого решения
источник
c=z pure[1..]a
.f a|let c=z pure[0..]a;g(u,d)k|m<-[z(+)a b|(a,b)<-a#u&[[s[d|x==y]|y<-c]|x<-c]]=(m,-s[a#m!!n!!n|n<-c]`div`(k+1))=snd<$>scanl g(0<$c<$c,1)c
, что нечто подобное должно работать и на другом.Python 2 + NumPy , 23 байта
Попробуйте онлайн!
источник
MATL , 4 байта
Попробуйте онлайн!
Это всего лишь порт ответа Октавы , поэтому он возвращает коэффициенты в порядке убывания, т.е.
[a_n, ..., a_1, a_0]
источник
CJam (48 байт)
Набор онлайн-тестов
рассечение
Это очень похоже на мой ответ на определитель целочисленной матрицы . У него есть некоторые изменения, потому что знаки разные, и потому что мы хотим сохранить все коэффициенты, а не только последний.
источник