요르단 분해


18

중요 사항 :이 과제는 제곱 행렬에만 적용되므로 "매트릭스"라는 용어를 사용할 때마다 제곱 행렬을 참조한다고 가정합니다. 간결하게하기 위해 "사각형"설명을 생략합니다.

배경

행렬식 계산, 선형 시스템 풀기 또는 스칼라 값 함수를 행렬로 확장하는 등의 행렬 관련 연산은 대각선 행렬 (주 대각선에없는 요소가 0 인)을 사용하여보다 쉽게 ​​수행 할 수 있습니다. 원래 매트릭스 (입력 행렬, 즉 A상기 대각 행렬 D일부 가역 행렬이 존재 P되도록 D = P^(-1) * A * P, 또한, DA의 고유 값, 결정, 및 추적과 같은 중요한 특성을 공유한다). 고유치와 고유 행렬 (해결 의해 주어진 행렬의 특성 다항식의 뿌리 det(A-λI) = 0에 대해 λ, I동일한 측정 기준을 가진 행렬이다 A), 대각이 간단하다 :D는 주 대각선에 고유 값을 갖는 행렬이며, 고유 값에 P해당하는 고유 벡터로 구성된 행렬입니다 (동일한 순서로). 이 과정을 고유 분해 라고 합니다 .

그러나 고유 값이 반복되는 행렬은 이러한 방식으로 대각선화할 수 없습니다. 운 좋게도 모든 행렬 의 요르단 정규 형식 은 쉽게 계산할 수 있으며 일반 대각 행렬보다 다루기가 어렵지 않습니다. 또한 고유 값이 고유 한 경우 Jordan 분해가 고유 분해와 동일하다는 멋진 특성이 있습니다.

요르단 분해 설명

A고유 값이 모두 1의 기하 다중성을 갖는 정사각 행렬 의 경우, Jordan 분해 과정은 다음과 같이 설명 할 수 있습니다.

  1. 반복되는 고유 값이 연속적으로 나타나는 다중도 λ = {λ_1, λ_2, ... λ_n}의 고유 값 목록을 보자 A.
  2. 대각 행렬 만들기 J요소가의 요소 인 을 λ동일한 순서로 만듭니다.
  3. 다중도가 1보다 큰 각 고유 값에 대해 1 값에 J대해 마지막 대각선을 제외하고의 주 대각선에서 고유 값의 각 반복 오른쪽에 를 .

결과 행렬 J 은 Jordan 정규 형식입니다 A(고유 값의 순서에 따라 주어진 행렬에 대해 여러 Jordan 표준 형식이있을 수 있음).

효과적인 예

A다음 행렬로 보자 .

매트릭스

A다중성을 갖는의 고유 값 은 λ = {1, 2, 4, 4}입니다. 이것을 대각선 행렬에 넣으면 다음과 같은 결과를 얻습니다.

2 단계

다음 1으로 반복되는 고유 값 중 하나를 제외한 모든 오른쪽에 s를 배치 합니다. 이후 4유일하게 반복되는 고유 값이, 우리는 하나의 배치 1처음 4 옆에 :

요르단 양식

이것은 요르단의 정상적인 형태입니다. A (단일 행렬에는 여러 가지 유효한 요르단 표준 형식이있을 수 있지만 설명의 목적으로 그 세부 사항에 대해 글을 쓰고 있습니다).

작업

정사각 행렬 A을 입력으로 받으면 유효한 Jordan 표준 형식의을 출력하십시오 A.

  • 입력 및 출력은 임의의 합리적인 형식 (2D 배열 / 목록 / 무엇이든, 목록 / 배열 / 열 또는 행 벡터 중 무엇이든, 내장 행렬 데이터 유형 등) 일 수 있습니다.
  • 의 원소와 고유 값 A은 항상 범위 내의 정수입니다 [-200, 200].
  • 단순성을 위해, 모든 고유 값은 1의 기하학적 다중성을 가질 것이다 (따라서 상기 프로세스는 유지된다).
  • A 기껏해야 10x10 행렬과 최소한 2x2 행렬이됩니다.
  • 고유 값 및 / 또는 고유 벡터를 계산하거나 고유 분해, Jordan 분해 또는 다른 종류의 분해 / 대각선 화를 수행하는 내장은 허용되지 않습니다. 행렬 산술, 행렬 역전 및 기타 행렬 내장이 허용됩니다.

테스트 사례

[[1, 0], [0, 1]] -> [[1, 1], [0, 1]]
[[3, 0], [0, 3]] -> [[1, 1], [0, 1]]
[[4, 2, 2], [1, 2, 2],[0, 3, 3]] -> [[6, 0, 0], [0, 3, 0], [0, 0, 0]]
[[42, 48, 40, 64, 64], [41, 47, 31, 58, 42], [-55, -47, -27, -74, -46], [-46, -58, -46, -70, -68], [30, 20, 12, 34, 18]] -> [[10, 0, 0, 0, 0], [0, -18, 0, 0, 0], [0, 0, 6, 1, 0], [0, 0, 0, 6, 1], [0, 0, 0, 0, 6]]

답변:


4

매쓰, 140 (139) 105 바이트

Total[DiagonalMatrix@@@{{#},{1-Sign[Differences@#^2],1}}]&@(x/.Solve[#~CharacteristicPolynomial~x==0,x])&

방금 DiagonalMatrix초 대각선을 따라 0과 1을 쉽게 배치 할 수 있는 내장 기능 을 찾았습니다 .

용법

예


무엇에 대해 Last@JordanDecomposition@#&? 아니면 부정 행위입니까?
Ruslan

@Ruslan 예, 규칙 중 하나는 Jordan 분해를 수행하는 내장이 허용되지 않는다는 것입니다. 그래도 고마워.
마일

2

세이지, 79 바이트

lambda A:block_diagonal_matrix([jordan_block(*r)for r in A.charpoly().roots()])

온라인으로 사용해보십시오

다른 사람은 솔루션을 게시하지 않으므로 계속해서 게시 할 수도 있습니다.

A.charpoly.roots()A의 고유 다항식 (일명 고유 값 및 다중도) 의 근 (및 대수 다중도)을 계산합니다 . jordan_block주어진 루트와 다중성에서 Jordan 블록을 구성합니다. block_diagonal_matrix대각선에 요르단 블록이있는 행렬을 형성합니다. 이것은 요르단 보통 양식의 정의입니다.


2

J , 78 71 바이트

1(#\.|."_1#{."1],.2=/\,&_)@>@{[:p.@>[:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\

온라인으로 사용해보십시오!

이 작업의 두 가지 어려운 부분은 고유 값을 가져오고 대각 화를 수행하여 모두 동일한 바이트 수를 차지한다는 것입니다. 이것들은 규칙에 의해 허용되지 않았지만 궁금한 점이 있으면 J는 QR 분해를 위해 내장되어 있습니다 (128!:0 ) 및 고유 값을 찾는 데 사용할 수있는 LAPACK 애드온을 있습니다.

설명 (구식)

이 동사에는 두 가지 주요 부분이 있습니다. 고유 값 찾기와 대각 화 수행. 먼저, 고유 값을 찾으려면 입력 행렬에 대한 특성 다항식의 근을 찾아야합니다. 예제와 동일한 입력 매트릭스를 사용하여

   ] m =: _4 ]\ 5 4 2 1 0 1 _1 _1 _1 _1 3 0 1  1 _1 2
 5  4  2  1
 0  1 _1 _1
_1 _1  3  0
 1  1 _1  2

행렬 M 의 특성 다항식은 | M - λI | = 0 여기서 IM 과 차원이 같은 항등 행렬입니다 . M - λI 표현식 은 M 에있는 각 요소를 대각선에있는 경우 -1 로 상자에 넣음으로써 J에서 모델링 할 수 있습니다. 그렇지 않으면 0입니다. 각 상자는 계수 형태의 다항식을 나타냅니다.

   (],&.>[:-@=#\) m
┌────┬────┬────┬────┐
│5 _1│4 0 │2 0 │1 0 │
├────┼────┼────┼────┤
│0 0 │1 _1│_1 0│_1 0│
├────┼────┼────┼────┤
│_1 0│_1 0│3 _1│0 0 │
├────┼────┼────┼────┤
│1 0 │1 0 │_1 0│2 _1│
└────┴────┴────┴────┘

-/ .*그러나 J의 결정자는 박스 다항식이 아닌 숫자에서 작동합니다. 곱셈 대신 컨볼 루션 ( [:+//.*/)을 사용하여 찾을 수있는 다항식 곱이 필요합니다 . 접힌 뺄셈은 여전히 ​​사용되며이 두 동사는 상자 내에서 작동해야하므로 ( &.) 아래의 unbox ( >)가 사용됩니다.

   ([:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\) m0
┌───────────────┐
│32 _64 42 _11 1│
└───────────────┘

특성 다항식의 계수입니다. 근은 p.계수와 근 형태 간의 다항식 표현을 변환하는 것을 사용하여 찾을 수 있습니다 .

   ([:p.@>[:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\) m0
┌─┬───────┐
│1│4 4 2 1│
└─┴───────┘

뿌리는 M[4, 4, 2, 1] 의 고유 값입니다. .

둘째, 대각선 화를 수행해야합니다. 각 연속 값 쌍이 동일한 지 테스트합니다.

   (2=/\]) 4 4 2 1
1 0 0

0이 추가되고 해당 값은 고유 값과 함께 열화됩니다.

   (],.0,~2=/\]) 4 4 2 1
4 1
4 0
2 0
1 0

그런 다음 각 행은 고유 값의 수와 동일한 길이로 채워져 정사각 행렬을 형성합니다.

   (#{."1],.0,~2=/\]) 4 4 2 1
4 1 0 0
4 0 0 0
2 0 0 0
1 0 0 0

마지막으로 각 행은 오른쪽으로 이동하고 값은 오른쪽에서 떨어지고 0은 왼쪽으로 밉니다. 첫 번째 행은 0 번, 두 번째 행, 세 번째 행 등으로 이동합니다.

   (-@i.@#|.!.0"_1#{."1],.0,~2=/\]) 4 4 2 1
4 1 0 0
0 4 0 0
0 0 2 0
0 0 0 1

결과는 M 의 요르단 분해입니다 .



1

MATL , 29 바이트, 비경쟁

1$Yn1$ZQYotdUZS~0hXdF1hYSwXd+

온라인으로 사용해보십시오!

이것은 첫 번째 MATL 제출이므로 개선이 필요합니다. 나는 그것을 배우는 동안 시간을 ​​보냈고 결국에는 이것이 2016 년 5 월 7 일부터 MATL을 사용하여 작동하지 않았을 수도 있음을 기억했습니다. 물론, 두 번째 커밋을 확인했습니다. 그 날에 그것은 실행되지 않았다.

사용 diag하고 싶었지만 MATL은 단일 인수 버전 만 지원하는 것 같습니다. 두 번째 주장은 초 대각선 (또는 다른 문제에 대한 다른 대각선)을 따라 값을 배치하는 데 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.