Для тех, у кого небольшой фон линейной алгебры, задача настолько проста: определить собственные значения и собственные векторы заданной сложной матрицы 2x2. Вы можете перейти к разделу The Challenge, чтобы узнать подробности ввода / вывода и т. Д. Если вам нужно немного освежить в eigensystems, читайте дальше.
Фон
Характеристическое уравнение матричного А определяется
det| A - λI | = 0
где λ - комплексный (скалярный) параметр, I - единичная матрица, а det | ... | это определитель . В левой части вычисляется многочлен от λ , характеристический многочлен , который является квадратичным в случае матриц 2x2. Решения этого характеристического уравнения на собственные значения из А , который мы будем обозначать λ 1 и λ 2 .
Теперь собственные векторы v i из A удовлетворяют
A vi = λi vi
Для каждого λ i это дает систему из двух уравнений с двумя неизвестными (составляющими v i ), которая может быть решена довольно легко. Вы заметите, что система на самом деле не указана, и величина собственных векторов не определяется уравнениями. Обычно мы хотим, чтобы собственные векторы были нормализованы, то есть √ (| x | 2 + | y | 2 ) = 1 , где x и y - компоненты вектора, | x | 2 является х , умноженные на комплексно сопряженное.
Обратите внимание, что собственные значения могут быть вырожденными, то есть λ 1 = λ 2 . В этом случае вы можете или не сможете удовлетворить единую систему уравнений с двумя линейно независимыми собственными векторами.
Соревнование
Учитывая матрицу 2x2 со сложными элементами, определите ее два (возможно, идентичных) собственных значения и нормализованный собственный вектор для каждого собственного значения. Результирующие числа должны быть с точностью не менее 3 (десятичных) значащих цифр. Можно предположить, что действительная и мнимая части любого матричного элемента находятся в диапазоне [-1,1] .
Вы можете написать функцию или программу, используя ввод через STDIN, аргумент командной строки, приглашение или аргумент функции. Вы можете вывести результат в STDOUT, в диалоговое окно или в качестве возвращаемого значения функции.
Вы можете использовать любую удобную (но однозначную) строку или формат списка для ввода и вывода. Вы также можете выбирать между парами чисел с плавающей точкой или сложных типов для представления отдельных чисел.
Вы не должны использовать встроенные функции для решения собственных систем (таких как Mathematica Eigenvectors
или Eigensystem
) или решения уравнений.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Примеры
Каждый пример состоит из трех строк: входные данные, собственные значения и соответствующие собственные векторы в одинаковом порядке. Отметим, что собственные векторы определяются только до их фазы, и что в случае вырожденных собственных значений собственные векторы могут фактически быть произвольными (как в первом примере).
[[1.0, 0.0], [0.0, 1.0]]
[1.0, 1.0]
[[1.0, 0.0], [0.0, 1.0]]
[[0.0, 0.4], [-0.1, -0.4]]
[-0.2, -0.2]
[[0.894427, -0.447214], [0.894427, -0.447214]]
[[0.3, 0.1], [0.4, -0.9]]
[-0.932456, 0.332456]
[[-0.0808731, 0.996724], [0.951158, 0.308703]]
[[0.5, -1.0], [0.8, -0.5]]
[0.74162i, - 0.74162i]
[[0.745356, 0.372678 - 0.552771i], [0.745356, 0.372678 + 0.552771i]]
[[-0.0539222 + 0.654836i, -0.016102 + 0.221334i], [0.739514 - 0.17735i, -0.0849216 + 0.77977i]]
[0.238781 + 0.984333i, -0.377625 + 0.450273i]
[[0.313668 + 0.322289i, 0.893164], [-0.236405 - 0.442194i, 0.865204]]
[[-0.703107 - 0.331792i, 0.286719 - 0.587305i], [-0.418476 + 0.396347i, -0.885934 + 0.50534i]]
[-1.13654 - 0.32678i, -0.4525 + 0.500329i]
[[0.833367, -0.248208 - 0.493855i], [-0.441133 - 0.408236i, 0.799215]]
[[-0.156312 + 0.788441i, 0.045056 - 0.579167i], [0.130741 - 0.97017i, 0.049183 - 0.590768i]]
[-0.181759 + 1.11738i, 0.0746298 - 0.919707i]
[[0.86955, -0.493846 + 0.000213145i], [0.318856 - 0.0181135i, 0.94763]]
источник