Для тих, хто має трохи лінійну алгебру, проблема є такою ж простою: визначити власні значення та власні вектори заданої складної матриці 2x2. Ви можете пропустити заздалегідь деталі Challenge для вводу / виводу тощо. Для тих, кому потрібно трохи оновити власні системи, читайте далі.
Фон
Характеристичне рівняння матричного А визначається
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, діалоговому вікні або як повернене значення функції.
Ви можете використовувати будь-який зручний (але однозначний) формат рядка або списку для введення та виводу. Ви також можете вибрати між парами поплавців або складними типами для представлення окремих чисел.
Ви не повинні використовувати вбудовані функції для вирішення власних систем (наприклад, математики 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]]