행렬은 공간을 네 부분으로 가른다
행렬 A에 벡터를 집어넣으면 다른 벡터가 나와요. 그런데 들어가는 모든 입력이 똑같이 대접받는 건 아니에요. 어떤 방향은 멀쩡히 살아 나오고, 어떤 방향은 통째로 0으로 짜부라져요. 그래서 행렬 하나가 공간을 네 조각으로 갈라요. 출력 쪽엔 도달 가능한 결과 전부인 열공간(상)이 있고, 입력 쪽엔 0으로 죽는 방향들인 영공간이 있어요. 살아남는 방향의 수(랭크)와 죽는 방향의 수(널리티)를 더하면 항상 입력 차원이 돼요. 이 그림 하나면 A x = b가 왜 해가 없기도, 딱 하나이기도, 무한히 많기도 한지가 전부 풀려요. 역행렬만으로는 보이지 않던 구조예요.
입력 벡터 x를 끌어 보세요. 이 행렬 A는 두 열이 같은 방향을 가리키는 납작한 행렬이라(det=0), 어디로 끌든 출력 A x는 딱 한 직선 위에만 떨어져요. 그 직선이 바로 열공간이에요. 왜냐하면 A x는 결국 첫 열의 몇 배 더하기 둘째 열의 몇 배, 곧 두 열의 조합인데, 두 열이 평행하니 그 조합이 만들 수 있는 건 그 평행 방향 직선뿐이거든요. 출력은 절대 그 선을 벗어나지 못해요. 도달 가능한 결과 전부가 이 1차원 직선에 갇힌 거예요. 이게 상(image), 곧 열공간이에요.
같은 납작한 행렬에서, 이번엔 입력 쪽을 봐요. 0으로 죽는 입력이 따로 있어요. x를 끌어 보면, 어떤 직선 위에 올렸을 때 출력 A x가 정확히 원점에 붙어 버려요. 그 직선이 영공간이에요. 그 방향으로 들어온 입력은 통째로 0에 짜부라져 흔적도 안 남아요. 그 직선에서 살짝만 벗어나면 출력이 곧장 열공간 위로 튀어 올라요. 한 점도 아니고 직선 전체가 0으로 가는 거예요. 그래서 A x = 0의 해가 x = 0 하나가 아니라 무한히 많아요. 바로 이 0이 아닌 영공간이 있다는 사실이, 곧이어 해가 왜 여러 개일 수 있는지의 열쇠가 돼요.
이제 슬라이더로 행렬을 살아 있는 상태에서 납작한 상태로 무너뜨려 봐요. 슬라이더를 한쪽 끝에 두면 A는 온전한 랭크 2예요. 단위정사각형이 멀쩡한 평행사변형으로 변하고, 0으로 가는 입력은 x = 0 하나뿐이라 널리티는 0이에요. 슬라이더를 돌려 한 열을 다른 열 쪽으로 눕히면 두 열이 평행해지고(det이 0으로), 평행사변형이 선분 하나로 짜부라져요. 그 순간 랭크는 1, 널리티는 1이 돼요. 한 직선이 통째로 0으로 가니까요. 어느 쪽이든 랭크 더하기 널리티는 늘 2예요. 입력 차원이 두 자식한테 정확히 나뉘는 거예요. 살아남은 차원(랭크)과 죽은 차원(널리티), 그 합은 항상 들어온 차원 n과 같아요. 이게 랭크-널리티 정리예요.
입력 평면을 다시 봐요. 영공간만 있는 게 아니에요. 행공간도 입력 쪽에 있어요. 행공간은 행렬의 두 행이 펼치는 방향인데, 납작한 행렬에선 이것도 한 직선이에요. 토글로 두 직선을 켜 보면, 행공간과 영공간이 정확히 90도로 만나요. 둘은 직각으로 서로를 보완하는 짝이에요. 왜냐하면 A x의 각 성분은 한 행과 x의 내적인데, x가 영공간에 있으면 그 내적이 0, 곧 x가 모든 행에 수직이라는 뜻이거든요. 그래서 모든 입력 벡터는 두 조각으로 갈라져요. 행공간 성분은 출력에 살아남고, 영공간 성분은 0으로 사라져요. 살리는 절반과 죽이는 절반이 직각으로 갈린 거예요.
이제 네 부분공간 그림으로 A x = b를 풀어요. 슬라이더로 목표 b를 옮겨 보세요. b가 열공간 직선 위에 없으면, 그 b에 도달할 입력 자체가 없어요. 해가 0개예요. b를 열공간 위로 올리면 갑자기 해가 나타나는데, 하나가 아니에요. 특수해 한 개에 영공간 전체를 더한 것, 곧 영공간 방향으로 평행이동한 직선 전체가 다 해예요. 무한히 많죠. 특수해는 b에 도달하는 한 입력이고, 거기에 0으로 죽는 방향을 아무리 더해도 출력은 그대로 b니까요. 만약 영공간이 0뿐인 온전한 랭크 행렬이었다면 해는 딱 하나, 그게 역행렬이 주던 답이에요. 0개·1개·무한개, 이 세 갈래가 전부 네 부분공간의 모양에서 곧장 나와요.