행렬에 벡터를 곱하면 새로운 벡터가 나온다. 계산은 행과 열을 곱해서 더하면 되지만, 그 결과를 이해하려면 다른 질문이 필요하다. 입력의 어떤 방향이 출력에 남고, 어떤 방향이 사라질까? 출력만 보고 입력을 되찾을 수 있을까?
이번 글은 직접 작성한 「2 Matrix」 손글씨 노트 8페이지를 중심으로, ENAI601 Module 1 — Linear Algebra 교안, 9월 9일 수업, 9월 16일 도입부 복습을 대조해 정리했다. 앞 글의 벡터·정사영에서 출발해, 행렬을 선형변환으로 읽고 복원·근사·이차형식으로 이어 간다. 이 글에서는 실수 벡터와 실수 행렬을 사용한다.
왼쪽 역행렬과 Moore–Penrose 의사역행렬, PSD의 대칭성에 관한 설명은 필기에 적어 둔 질문을 풀어 쓴 보충 학습이다. 교안에서 직접 다룬 범위와 구분해 표시했다.
| 필기의 출발점 | 이 글에서 확인할 것 |
|---|---|
| 1쪽: 행과 열의 관점 | 출력 하나를 계산하는 방법과 가능한 출력 전체의 관계 |
| 2–3쪽: rank·null space·inverse | pivot, 자유변수, 복원 가능성의 연결 |
| 4쪽: left inverse·least squares | 정확한 복원과 가장 가까운 근사의 차이 |
| 5–6쪽: eigenvector·spectral theorem | 고유방향을 검사하는 것으로 모든 방향을 설명하는 이유 |
| 7–8쪽: PSD·PD·outer product·각도 | 대칭성, 영벡터 예외, 행렬식 판정의 한계 |
1. 행 관점과 열 관점은 서로 다른 질문에 답한다
필기의 첫 행렬은 출력 두 개와 입력 세 개를 연결한다.
행 관점: 출력 하나를 어떻게 계산하는가?
첫 번째 출력은 첫 번째 행과 입력 전체의 내적이다. 두 번째 출력은 두 번째 행과 입력 전체의 내적이다.
각 행은 하나의 출력을 만들기 위한 가중치 묶음이다. 예를 들어 입력 이면 첫 번째 출력은 −5, 두 번째 출력은 2다.
열 관점: 입력 하나가 출력 전체에 어떻게 기여하는가?
이번에는 입력 성분별로 항을 모아 보자.
각 열벡터는 해당 입력 성분이 출력 공간에 더하는 방향이다. , , 는 그 방향들의 계수다. 일반적으로는
이다. 수업에서 강조한 “행렬 곱은 열의 선형결합”이라는 설명이 여기서 나온다. 행 관점은 출력 성분 하나의 계산, 열 관점은 가능한 출력들의 공간을 이해할 때 유용하다.
Shape를 먼저 확인한다
입력 차원은 열의 개수 이고 출력 차원은 행의 개수 이다. 벡터의 shape를 열로 쓰면 에서 로 바뀐다.
행렬 에 대해서도 각 열을 하나씩 입력하면 된다.
AC는 먼저 , 다음 를 적용하는 합성이다. 일반적으로 AC와 CA는 다르며, 한쪽만 정의될 수도 있다. 행렬 덧셈은 두 행렬의 shape가 같을 때 같은 위치의 원소끼리 더한다.
2. 선형변환: 덧셈과 스칼라배를 보존한다
행렬 로 정의한 변환은 선형이다.
입력을 먼저 조합하고 변환하든, 각각 변환한 뒤 같은 계수로 조합하든 결과가 같다. 따라서 원점은 반드시 원점으로 간다.
고정된 벡터 를 더하는 변환은 가 0이 아닌 경우 affine transformation이다.
이 변환은 일반적으로 원점을 보존하지 않는다. 나중에 제약식을 볼 때 선형 부분공간과 원점에서 이동한 집합을 구별하는 데 도움이 된다.
3. Range는 가능한 출력 전체다
입력을 자유롭게 바꿀 때 만들 수 있는 출력의 집합이 range, 또는 column space다.
필기의 예제처럼 두 열이 종속인 행렬을 생각하자.
두 번째 열은 첫 번째 열의 2배다. 어떤 입력을 넣어도 출력은 (1,2) 방향의 직선에 놓인다.
출력 성분은 두 개지만 독립적인 출력 방향은 하나다. 예를 들어 은 이 직선 밖에 있으므로 를 만족하는 입력이 없다.
range가 부분공간인 이유도 선형성으로 확인할 수 있다. 가능한 두 출력 , 를 선형결합하면 다시 라는 가능한 출력이 된다. 영벡터 A0도 포함한다.
4. Null space는 사라지는 입력 전체다
Null space, 또는 kernel은 출력이 영벡터가 되는 입력들의 집합이다.
range는 출력 공간, null space는 입력 공간에 놓인다. 일 때 이므로, null space는 같은 출력을 만드는 입력들의 차이도 설명한다.
위의 에서는 다음이 성립한다.
원래 입력에 방향을 얼마나 더해도 출력이 바뀌지 않는다. 출력만으로 그 방향의 입력 정보를 복원할 수 없다.
필기의 2×3 예제: 자유변수로 모든 해를 표현하기
연립방정식으로 쓰면 , 이다. 세 번째 성분을 로 놓으면
이다. 자유변수가 하나이므로 null space의 차원은 1이다. 여기서 null space는 “입력 벡터 하나”가 아닌 그런 입력들의 집합이다. 또한 선형결합해도 여전히 0으로 가므로 부분공간이다.
5. Rank는 pivot의 개수이자 독립적인 출력 방향의 수다
rank는 range의 차원이다.
열벡터가 개이므로 독립적인 방향은 개를 넘을 수 없고, 그 열들이 사는 출력 공간이 차원이므로 개도 넘을 수 없다. 영행렬의 rank는 0이며, 가능한 최대값 을 가지면 full rank다.
필기에서는 행 소거 후 pivot을 세는 계산으로 연결했다.
첫 번째 열과 세 번째 열에 pivot이 있으므로 rank는 2다. 두 번째 열은 첫 번째 열의 2배다. range의 기저를 원래 행렬에서 고르면
가 된다. 행 소거는 pivot 열의 위치를 알려 주지만, 원래 column space의 기저는 원래 행렬의 그 열에서 가져온다.
행 연산을 가역행렬 의 곱으로 쓰면 다. 따라서 rank와 열들 사이의 선형관계는 보존되지만, column space 자체는 에 의해 바뀔 수 있다. 예를 들어 의 두 번째 행에서 첫 번째 행의 2배를 빼면 range가 (1,2) 방향에서 (1,0) 방향으로 바뀐다. 두 경우 모두 차원은 1이다. 한편 과 은 동치이므로 null space는 그대로다.
Rank–nullity는 입력 변수의 개수를 센다
피벗 변수의 수와 자유변수의 수를 더하면 전체 입력 변수의 수 이다. 는 rank 2와 nullity 1로 3=2+1을 만족한다. 행의 수 을 왼쪽에 넣으면 안 된다.
row rank와 column rank도 같다. 다만 행들이 사는 공간과 열들이 사는 공간이 같다는 뜻은 아니다. 행공간은 , 열공간은 의 부분공간이다.
| 조건 | 에서의 의미 |
|---|---|
| full column rank: rank = | null space가 {0}. 해가 존재하면 유일 |
| full row rank: rank = | range가 전체. 모든 에 대해 해가 존재 |
| 정방행렬이고 rank = | 모든 에 대해 유일한 해. 역행렬 존재 |
6. 역행렬과 행렬식: 되돌릴 수 있는 변환인가?
정방행렬 에 대해 다음을 만족하는 행렬이 있으면 가역이라고 한다.
가역이면 출력 로부터 입력을 되찾을 수 있다.
교안의 예제는 다음과 같다.
행렬의 determinant는 다음 식이다.
위의 에서는 12−2=10이다. 정방행렬에서 다음 조건들은 동치다.
9월 9일 수업에서는 행렬식의 기하학적 의미도 설명했다. 2차원 단위 정사각형에 를 적용하면 두 열벡터가 만드는 평행사변형이 된다. 행렬식의 절댓값은 넓이의 배율이다. 더 높은 차원에서는 부피의 배율로 확장된다. 부호는 방향의 보존 또는 반전을 나타낸다.
행렬식이 0이면 차원이 눌려 넓이·부피가 0이 된다. 그러면 서로 다른 입력들이 겹쳐져 원래 입력을 유일하게 복원할 수 없다.
직사각형 행렬은 왜 따로 생각해야 할까?
필기에서 이어지는 질문은 “정방행렬이 아니어도 입력을 복구할 수 있을까?”다. 여기부터 왼쪽 역행렬·최소제곱 부분은 보충 학습이다.
행이 더 많은 tall matrix라도 full column rank이면 서로 다른 입력이 같은 출력으로 겹치지 않는다. 입력을 더 큰 출력 공간 안에 일대일로 넣는 것이다. 다만 출력 공간의 모든 벡터를 만들지는 못한다.
반대로 열이 더 많은 wide matrix는 이므로 nullity가 양수다. 입력 전체를 일대일로 복구할 수 없다. full row rank이면 모든 출력을 만들 수 있고 오른쪽 역행렬은 가질 수 있다.
7. 왼쪽 역행렬은 원래 만들어 낸 출력을 정확히 복원한다
full column rank인 에 대해, 의 왼쪽에 곱해서 항등행렬을 만드는 을 생각하자.
그러면 실제로 가 만든 출력 에서는 Ly=x다. 이것이 left inverse(왼쪽 역행렬)의 복원 의미다.
하지만 임의의 에 대해 라고 결론 내릴 수는 없다. tall matrix에서 AL은 이고 rank가 최대 이므로, 이면 ₘ이 될 수 없다.
필기의 간단한 예제를 쓰면
이다. 입력은 두 성분인데 출력은 세 성분이다. 출력은 xy평면 안에만 놓이고, 그 평면 안에서는 입력을 잃지 않는다.
왼쪽 역행렬은 하나가 아닐 수 있다
임의의 c,d에 대해 다음 행렬은 모두 의 왼쪽 역행렬이다.
원래 가 만드는 출력은 세 번째 성분이 0이므로 c,d가 무엇이든 복원값이 같다. 그러나 처럼 range 밖의 벡터에 적용하면 결과가 달라진다.
따라서 왼쪽 역행렬이라는 조건만으로 임의의 관측값에 대한 최소제곱해가 정해지지는 않는다. 그 역할을 하는 특별한 선택이 의사역행렬이다.
8. 최소제곱과 의사역행렬: 만들 수 없는 출력에 가장 가깝게 가기
현실의 관측값 는 의 range 밖에 있을 수 있다. 그때는 의 정확한 해를 찾는 대신
를 푼다. 가능한 출력 중 에 가장 가까운 점을 고르는 문제다. 벡터 글의 정사영이 여기서 다시 등장한다.
잔차가 의 각 열과 직교해야 하므로
를 얻는다. 이것이 normal equations(정규방정식)다. 잔차를 b−A ̂로 정의했으므로 부호도 이 식과 일치한다.
Full column rank일 때의 공식
가 full column rank이면 0이 아닌 에서 이 값이 양수다. 따라서 는 PD이자 가역이다. 이때
이다. 는 Moore–Penrose pseudoinverse이며, 이 경우에는 왼쪽 역행렬이기도 하다. 하지만 앞의 모든 이 인 것은 아니다.
필기의 b=(3,5,100) 예제
의 두 열은 이미 정규직교하므로 다.
자체를 복원한 것이 아니라, xy평면에서 에 가장 가까운 출력의 두 좌표를 얻었다. 세 번째 성분 100은 의 어떤 입력으로도 만들 수 없는 잔차다.
는 입력을 복원하는 지만, 는 출력 공간에서 xy평면으로 정사영하는 행렬이다.
Rank가 부족해도 의사역행렬은 존재한다
일반 실수 행렬의 Moore–Penrose 의사역행렬은 유일하다. 다음 네 조건을 만족한다.
rank가 부족하면 공식은 사용할 수 없다. 대신 SVD로 정의할 수 있다. 이면
이며, 는 0이 아닌 특이값만 역수로 바꾸고 전치한 크기에 배치한다. 0인 특이값은 0으로 남긴다.
는 최소제곱해들 중 유클리드 노름이 가장 작은 해다. rank가 부족하면 계수는 여러 개일 수 있어도 정사영된 출력 는 유일하다. 일반적으로 는 입력 공간의 row space로의 정사영이며, 원래 입력 전체를 되돌리는 항등행렬은 아니다.
| 연산 | 의미 |
|---|---|
| 에 대한 최소 노름 최소제곱 계수 | |
| 를 column space에 정사영한 출력 | |
| 를 row space에 정사영한 입력 성분 |
NumPy의 lstsq는 최소제곱해를, pinv는 SVD를 이용한 의사역행렬을 계산한다. 실제 수치 계산에서는 정규방정식의 역행렬을 직접 만들기보다 이러한 수치 선형대수 루틴을 사용한다. 아주 작은 특이값을 0으로 취급할지에 따라 수치적 rank와 결과가 달라질 수 있으므로 임계값도 의미가 있다.
9. 고유벡터와 고유값: 특정 방향의 배율
정방행렬 의 고유벡터는 다음을 만족하는 0이 아닌 벡터다.
실수 고유벡터와 실수 고유값을 생각하면, 변환 결과가 원래 벡터와 같은 직선 위에 있다. 양의 고유값은 같은 방향의 배율, 음의 고유값은 방향 반전까지 포함한 배율이고, 0이면 그 방향이 사라진다.
영벡터는 어떤 행렬에서도 위 식을 만족하므로 고유벡터에서 제외한다. 또 일반 실수 행렬의 고유값·고유벡터는 복소수가 될 수도 있다. 이때는 실수 평면의 화살표 그림만으로 해석하기 어렵다.
왜 특성방정식이 null space 문제일까?
고유벡터는 0이 아니므로 의 null space에 영벡터 이외의 벡터가 있어야 한다. 즉 가 특이행렬이어야 한다. 따라서 고유값을 찾는 식은 특성방정식이다.
교안의 대칭행렬을 예로 들면
이고 특성다항식은
이다. 따라서
두 배율 모두 양수지만 방향별로 크기가 꽤 다르다. 고유값의 합과 곱으로 계산을 검산할 수도 있다. 고유값은 대수적 중복도를 포함해서 센다.
를 찾은 뒤에는 을 풀어 고유벡터를 구한다. 고유벡터의 0이 아닌 스칼라배도 같은 고유값의 고유벡터다. 특정 길이 하나로 유일하게 정해지는 것이 아니라, 그 방향을 나타낸다.
특성다항식은 또는 로 쓸 수 있다. 둘은 배 차이이므로 근은 같다. 다만 최고차항과 상수항의 부호를 계산할 때는 어느 쪽을 썼는지 일관되게 유지한다.
10. 대칭행렬: 직교하는 고유방향으로 좌표를 바꾸기
실수 대칭행렬은 전치해도 같다.
교안에서 강조하는 성질은 다음과 같다.
- 고유값이 모두 실수다.
- 서로 다른 고유값에 대응하는 고유벡터들은 직교한다.
- 고유값이 중복되어도, 각 고유공간에서 적절히 기저를 고르면 전체 공간의 정규직교 고유기저를 만들 수 있다.
마지막 성질까지 포함한 spectral theorem을 행렬로 쓰면 다음과 같다.
의 열은 정규직교 고유벡터이고, 의 대각선에 대응 고유값들이 놓인다. 의 열들이 전체 공간의 기저이므로 임의의 를 이 좌표로 표현할 수 있다.
앞 글에서 본 “정규직교기저와 내적하면 계수를 얻는다”는 계산이 그대로 다시 나온다.
중복 고유값에 속하는 벡터들이 처음부터 모두 직교한다는 뜻은 아니다. 그 고유공간 안에서 직교기저를 선택할 수 있다는 뜻이다.
“고유벡터끼리는 직교한다”의 정확한 조건
실수 대칭행렬 에 대해 Sv=λv, Sw=μw라 하자. 그러면
이므로 이다. 이면 을 얻는다. 대칭성으로 를 쓸 수 있었던 것이 핵심이다.
같은 고유값의 고유벡터들은 임의로 골랐을 때 직교할 필요가 없다. 예를 들어 에서는 모든 0이 아닌 벡터가 고유값 1의 고유벡터다. 그중 (1,0), (1,1)은 직교하지 않는다. spectral theorem은 이런 고유공간 안에서도 정규직교기저를 선택할 수 있다는 정리다.
일반 행렬의 대각화는 고유벡터를 충분히 확보했을 때 로 쓴다. 실수 대칭행렬에서는 를 정규직교행렬 로 고를 수 있어 라는 추가 이점이 생긴다.
11. 이차형식: 고유방향별 제곱 크기에 가중치를 주기
필기 5–6페이지에서 PSD를 이해하기 위해 전개한 식이다.
는 , 는 이므로 결과는 스칼라다. 행렬 곱 Sx가 벡터를 만들고, 여기에 를 내적한다.
대칭행렬을 고유기저로 분해하면 이 식의 의미가 선명해진다.
정규직교 고유방향별 성분의 제곱에 고유값을 가중치로 곱한 합이다. 직교하는 좌표를 선택해서 교차항을 없앤 것이다.
원래 좌표에서 의 예제를 전개하면 다음과 같다.
교차항은 있지만 완전제곱으로 정리하면 0이 아닌 에서 항상 양수임을 알 수 있다. 원래 좌표에서 교차항이 있다는 사실만으로 이차형식의 부호를 판단하면 안 된다.
고유벡터 하나에만 를 대입하면 그 방향의 부호를 검사한다. 그러나 PSD 정의는 모든 에 관한 것이다. spectral theorem 덕분에 모든 를 이 고유기저의 선형결합으로 표현할 수 있고, 교차항이 사라진 가중 제곱합으로 계산할 수 있다. 그래서 모든 고유값이 0 이상이라는 조건이 모든 에서의 부호 조건으로 확장된다.
12. PSD와 PD: 모든 방향에서의 부호 조건
이 수업에서는 실수 대칭행렬에 대해 PSD와 PD를 정의한다.
첫 번째가 positive semidefinite(양의 준정부호), 두 번째가 positive definite(양의 정부호)다. PD에서도 을 넣으면 결과는 0이므로 정의에서 제외한다.
고유방향의 제곱합 표현으로부터 판정 조건을 얻는다.
| 행렬 | 이차형식 | 판정 |
|---|---|---|
| PD | ||
| PSD, PD는 아님 | ||
| indefinite: 방향에 따라 양수·음수 |
PSD는 원소들이 모두 0 이상이라는 조건이 아니다. 위에서 계산한 는 음수 원소 −2를 포함하지만 PD다. 반대로 모든 원소가 양수여도 다음 행렬은 PSD가 아니다.
또한 행렬식이 양수라는 조건만으로도 부족하다. 예를 들어 는 행렬식이 1이지만 모든 0이 아닌 방향에서 이차형식이 음수다.
PD이면 고유값이 모두 양수이므로 행렬식도 양수이고 역행렬이 존재한다. 반대로 PSD이면서 가역이면 PD다. PSD의 고유값들은 0 이상이고, 가역성은 그중 0이 없다는 뜻이기 때문이다. 가역이라는 조건만으로 PD가 되는 것은 아니다.
13. 왜 BᵀB와 outer product는 PSD일까?
교안의 마지막 연결은 행렬을 특정 형태로 만들면 PSD임을 바로 보일 수 있다는 것이다. 임의의 실수 행렬 에 대해
이므로 는 대칭 PSD다. 가 full column rank이면 0이 아닌 를 영벡터로 보내지 않으므로 PD다. 도 같은 방식으로 PSD이며, PD가 되려면 가 full row rank여야 한다.
열벡터 로 만든 outer product는 그 특수한 경우다.
내적 는 스칼라지만 외적 는 행렬이다. 여기서 outer product는 3차원 cross product와 다른 연산이다.
가 0이 아니면 의 rank는 1이다. 이 2 이상이면 에 수직인 0이 아닌 방향이 존재하므로 그 방향에서 이차형식은 0이다. 따라서 보통 PSD이며, 에서는 PD가 될 수 없다.
필기의 를 실제로 곱하면
이다. 처음 range와 null space를 설명할 때 사용한 가 다시 나온다. 가능한 출력은 방향 하나뿐이고, 에 수직인 (−2,1) 방향은 사라진다. 그 방향에서 이차형식도 0이므로 PSD지만 PD는 아니다. 이 행렬의 고유값은 5와 0이다.
14. 왜 PSD를 대칭행렬에 대해 정의할까?
필기 마지막 페이지에 남겨 둔 질문이다. 여기서는 수업의 정의에서 출발해 보충해서 생각해 본다.
임의의 실수 정방행렬 은 대칭 부분 와 반대칭 부분 로 나눌 수 있다.
는 스칼라이므로 전치해도 같아야 한다. 그런데 를 쓰면 부호가 반대가 된다.
따라서
이다. 이차형식은 반대칭 부분을 보지 못한다. 이차형식의 부호를 설명하는 대표 행렬을 대칭 부분으로 잡으면 실수 고유값·정규직교 고유기저·곡률을 일관되게 연결할 수 있다. 이것이 이번 수업의 PSD 정의에서 대칭성을 명시하는 이유다.
비대칭행렬의 고유값만 검사하면 안 되는 이유
은 두 고유값이 모두 1이다. 하지만 을 넣으면
가 된다. “고유값이 모두 양수이므로 PD”라는 판정은 여기서 적용할 수 없다. 앞에서 사용한 판정의 조건은 실수 대칭행렬이었다.
반대로 대칭이 아니어도 이차형식이 항상 양수인 경우는 있다.
이 경우 대칭 부분이 다. 이번 글에서는 교안의 관례에 따라 자체를 PSD/PD 행렬로 분류하지 않고, 의 이차형식은 의 이차형식과 같다고 표현한다. 부호 부등식 자체와 대칭행렬을 대상으로 한 용어의 정의를 구분한다.
15. x와 Ax의 각도로 PSD를 읽을 때의 주의점
9월 9일 수업은 이차형식을 와 사이의 내적으로 해석했다. 필기 7–8페이지도 이 설명을 따라간다.
와 가 모두 0이 아닌 경우, 내적이 음수가 아니면 둘 사이의 각도는 90도를 넘지 않는다. 즉 출력이 입력의 정반대쪽으로 크게 꺾이는 방향이 없다는 직관이다. 행렬이 모든 벡터를 같은 각도로 회전시킨다는 뜻은 아니다.
단, 이면 각도는 정의되지 않는다. PSD 행렬은 null space를 가질 수 있으므로 이 예외를 반드시 포함해야 한다. 예를 들어 에 을 넣으면 이다. 내적은 0이지만 이를 “각도가 90도”라고 읽으면 안 된다.
실수 대칭 PSD에서는 더 강한 사실도 성립한다.
모든 항이 0 이상이므로 합이 0이려면 양의 고유값에 해당하는 계수가 모두 0이어야 한다. 따라서 가 0이 아닌 PSD의 경우에는 실제로 각도가 90도보다 작다. 수업의 “90도를 넘지 않는다”는 설명은 맞는 필요조건이며, 영벡터 예외를 보완하면 더 정확해진다.
또 이 각도 조건만으로 대칭성을 유도할 수는 없다. 앞 절의 은 비대칭이지만 0이 아닌 모든 에서 이다. 각도는 이차형식의 부호를 설명하는 직관이고, PSD의 전체 정의를 대체하지 않는다.
16. 최적화로 이어지는 이차함수
대칭행렬 를 사용한 이차함수에서는
이다. 가 PSD이면 convex, PD이면 strictly convex다. 이 이차함수에서 PSD는 아래로 휘는 고유방향이 없다는 뜻이고, PD는 모든 0이 아닌 방향에서 양의 곡률을 갖는다는 뜻이다.
최소제곱 목적함수도 같은 구조다.
가 full column rank이면 가 PD여서 최소제곱 계수는 유일하다. rank가 부족하면 null space 방향으로 움직여도 가 같아서 목적함수 값이 변하지 않는다. rank, 복원 가능성, 최소제곱해의 유일성, PSD/PD가 같은 구조를 다른 관점에서 설명하고 있다.
17. 계산으로 확인하기
아래 코드는 필기의 null space·왼쪽 역행렬·의사역행렬 예제와 비대칭 반례를 확인한다. NumPy가 설치된 Python에서 독립적으로 실행할 수 있다. 부동소수점 계산이므로 0인지 검사할 때는 근사 비교를 쓴다.
import numpy as np
np.set_printoptions(precision=4, suppress=True)
# 1. Full row rank지만 입력 방향 하나를 잃는 2x3 행렬
C = np.array([[1., 0., 1.], [0., 1., 1.]])
z = np.array([-1., -1., 1.])
print("C rank / nullity:", np.linalg.matrix_rank(C),
C.shape[1] - np.linalg.matrix_rank(C))
print("C @ z:", C @ z)
assert np.allclose(C @ z, 0)
# 2. 정확한 복원과 range 밖의 최소제곱 근사
E = np.array([[1., 0.], [0., 1.], [0., 0.]])
b = np.array([3., 5., 100.])
E_plus = np.linalg.pinv(E)
x_hat, _, _, _ = np.linalg.lstsq(E, b, rcond=None)
p = E @ x_hat
r = b - p
print("x_hat:", x_hat)
print("projection:", p)
print("residual:", r)
print("E+ E is identity:", np.allclose(E_plus @ E, np.eye(2)))
print("E E+ is identity:", np.allclose(E @ E_plus, np.eye(3)))
assert np.allclose(E.T @ r, 0)
assert np.allclose(E_plus @ b, x_hat)
# 3. 다른 왼쪽 역행렬은 range 밖의 b에서 결과가 다르다
L = np.array([[1., 0., 1.], [0., 1., 0.]])
assert np.allclose(L @ E, np.eye(2))
print("another left inverse applied to b:", L @ b)
# 4. Outer product는 PSD이며, 직교하는 입력 방향을 지운다
u = np.array([1., 2.])
B = np.outer(u, u)
print("outer-product eigenvalues:", np.linalg.eigvalsh(B))
assert np.allclose(B @ np.array([-2., 1.]), 0)
# 5. 비대칭행렬에서는 양의 고유값만으로 충분하지 않다
M = np.array([[1., 4.], [0., 1.]])
x = np.array([1., -1.])
print("nonsymmetric eigenvalues:", np.linalg.eigvals(M))
print("x^T M x:", x @ M @ x)
assert np.isclose(x @ M @ x, -2)
출력은 다음과 같다. 매우 작은 반올림 오차의 부호 표시는 환경에 따라 달라질 수 있다.
C rank / nullity: 2 1
C @ z: [0. 0.]
x_hat: [3. 5.]
projection: [3. 5. 0.]
residual: [ 0. 0. 100.]
E+ E is identity: True
E E+ is identity: False
another left inverse applied to b: [103. 5.]
outer-product eigenvalues: [0. 5.]
nonsymmetric eigenvalues: [1. 1.]
x^T M x: -2.0
18. 다시 풀어 볼 질문
- 행 소거 후의 열벡터를 그대로 원래 column space의 기저로 써도 될까?
- full column rank 행렬은 모든 3차원 출력을 만들 수 있을까?
- 를 만족하는 은 항상 Moore–Penrose 의사역행렬일까?
- 최소제곱 계수 ̂가 여러 개이면 정사영된 출력도 여러 개일까?
- 대칭 PSD 행렬에서 이면 가 반드시 영벡터일까?
- 고유값이 모두 1인 비대칭행렬은 반드시 이차형식이 양수일까?
해설: 1. 일반적으로 안 된다. pivot 위치를 찾고 원래 행렬의 해당 열을 선택한다. 2. 안 된다. range는 3차원 공간 안의 2차원 부분공간이다. 3. 아니다. 왼쪽 역행렬은 여러 개일 수 있다. 4. 아니다. 출력은 유일하며 계수 차이가 null space에 있다. 5. 아니다. 가 null space에 있을 수 있다. 다만 은 성립한다. 6. 아니다. 본문의 과 이 반례다.
참고한 자료와 보충 설명의 범위
- 개인 손글씨 노트 「2 Matrix」 1–8페이지: 행·열 해석, pivot과 rank, null space 예제, 왼쪽 역행렬·최소제곱·의사역행렬, PSD·PD, 마지막의 대칭성과 각도 질문.
- ENAI601, Module 1 — Linear Algebra 접근성 버전 교안: Matrices부터 Range and Nullspace, Inverse, Determinant, Eigenvalues & Eigenvectors, Symmetric Matrices, PSD/PD, outer product까지.
- 2026-09-09 수업: 열의 선형결합, rank–nullity, 행렬식·고유값, 대칭행렬과 PSD/PD, 와 의 내적을 통한 기하학적 해석.
- 2026-09-16 수업 도입부: 행렬 연산·range·null space·역행렬·PD의 복습.
- NumPy
lstsq공식 문서, NumPypinv공식 문서: 보충 계산 예제의 API와 최소 노름 해·SVD 계산 방식 확인.
왼쪽 역행렬의 비유일성 반례, Moore–Penrose 조건, 이차형식의 대칭 부분, 각도의 영벡터 예외와 엄밀한 조건, 최적화 연결은 필기의 질문을 바탕으로 보강했다. 예제의 차원·기호는 교안과 직접 계산으로 확인했다. 그림은 예제의 좌표와 행렬에서 새로 작성했으며, 필기·강의자료 원문을 첨부하지 않았다.