Вступление
Сегодня мы позаботимся о несчастье первокурсников по линейной алгебре: определенность матрицы! По-видимому, это еще не проблема, поэтому здесь мы идем:
вход
- A симметричная матрица в любом удобном формате (конечно, вы также можете взять только верхнюю или нижнюю часть матрицы) A
- Опционально: размер матрицы
Что делать?
Задача проста: если задана вещественная матрица Matrix, решите, является ли она положительно определенной, путем вывода истинного значения, если это так, и значения Falsey, если нет.
Вы можете предположить, что ваши встроенные модули действительно работают точно и, следовательно, не должны учитывать числовые проблемы, которые могут привести к неправильному поведению, если стратегия / код «доказуемо» должны дать правильный результат.
Кто выигрывает?
Это код-гольф , поэтому выигрывает самый короткий код в байтах (на язык)!
Что такое положительно-определенная матрица?
Существует, по-видимому, 6 эквивалентных формулировок, когда симметричная матрица положительно определена. Я воспроизведу три более простых и отсылаю вас к Википедии для более сложных.
- Если то положительно определен. Это можно переформулировать следующим образом: если для каждого ненулевого вектора (стандартное) скалярное произведение числа и положительно, то положительно определено.v v v
- Пусть быть собственные из , если сейчас (то есть все собственные значения положительны) тогда положительно определен. Если вы не знаете, что такое собственные значения, я предлагаю вам использовать ваш любимый поисковик, чтобы выяснить это, потому что объяснение (и необходимые стратегии вычислений) слишком длинны, чтобы содержаться в этом посте.A ∀ i ∈ { 1 , … , n } : λ i > 0 A
- Если существует разложение Холецкого группы , т. Е. Существует нижнетреугольная матрица такая, что то положительно определен. Обратите внимание, что это эквивалентно раннему возвращению «false», если в любой момент вычисление корня во время алгоритма завершается неудачей из-за отрицательного аргумента.
Примеры
Для правдивого вывода
Для вывода фальси
(по крайней мере одно собственное значение равно 0 / положительное полуопределено)
(собственные значения имеют разные знаки / неопределенные)
(все собственные значения меньше 0 / отрицательно определены)
(все собственные значения меньше 0 / отрицательно определены)
(все собственные значения меньше 0 / отрицательно определены)
(три положительных, одно отрицательное собственное значение / неопределенное)
Ответы:
C 108 байтов
-1 байт благодаря Logern
-3 байт благодаря floorcat
Попробуйте онлайн!
Выполняет исключение по Гауссу и проверяет, являются ли все диагональные элементы положительными (критерий Сильвестра). Аргумент
n
- это размер матрицы минус один.источник
i=0
цикл for, сделаете рекурсивный вызовf(M,n-1,0)
и начальный вызов с 0 в качестве третьего аргумента.MATLAB / Octave ,
191712 байтПопробуйте онлайн!
Функция eig предоставляет собственные значения в порядке возрастания, поэтому, если первое собственное значение больше нуля, остальные тоже.
источник
f=
в начале - анонимные функции обычно принимаются в качестве ответов.8.9219e-17
а не 0.Желе ,
1110 байтИспользует критерий Сильвестра .
Попробуйте онлайн!
Как это устроено
источник
R , 29 байт
Попробуйте онлайн!
Альтернатива с использованием cholesky:
R ,
3433 байтаПопробуйте онлайн!
-1 байт благодаря @Giuseppe
источник
Haskell , 56 байт
Попробуйте онлайн!
В основном порт Nwellnhof ответ . Выполняет исключение по Гауссу и проверяет, являются ли элементы на главной диагонали положительными.
Сбой первого вывода False из-за ошибок округления, но теоретически он будет работать с бесконечной точностью.Благодаря предложению Кертиса Бектела , теперь все результаты верны.источник
inputs :: [[[Rational]]]
чтобы получить правильные ответыWolfram Language (Mathematica) , 20 байтов
Попробуйте онлайн!
источник
MATL , 4 байта
Попробуйте онлайн!
[3 -2 2; -2 4 0; 2 0 2]
0
источник
[1 2 3j]
что ФальсиMathematica,
2928 байтОпределение 2.
источник
Юлия 1,0 , 28 байт
Попробуйте онлайн!
Юлия 0,6,8 байта
Попробуйте онлайн!
источник
MATL , 6 байтов
Это можно сделать, используя еще меньше байтов, @Mr. Xcoder удалось найти 5-байтовый ответ MATL !
объяснение
Попробуйте онлайн!
источник
Клен , 33 байта
(т.е. мои 2 цента)
источник
JavaScript (ES6),
99 9588 байтПопробуйте онлайн!
источник