[Zero to ML Master #19] 연립방정식 풀이법 — 대입법·인수분해와 그래프 교점으로 보는 해의 개수 (파이썬 SymPy)

오톨로리즘·3일 전
post-thumbnail

가감법, 대입법, 등치법… 중학교 때 연립방정식 풀이법을 세 가지나 배웠죠. 그런데 이 셋이 사실 같은 일을 한다는 것, 알고 계셨나요? 🤔 모두 미지수를 하나씩 없애는(소거하는) 도구일 뿐입니다.

이번 글에서는 그 목적 하나만 붙잡고, 직선과 원이 섞인 1차-2차 연립방정식을 대입법으로 풀어 봅니다. 그리고 "해가 몇 쌍인가?"라는 대수 질문이 "두 그래프가 몇 번 만나는가?"라는 기하 질문과 완전히 같다는 것을 확인하고, 2차-2차 연립까지 파이썬 SymPy로 검산합니다. 머신러닝에서 Ax=bAx = b를 푸는 감각의 출발점이에요.

📘 이 글은 위키독스 도서 Zero to 머신러닝 딥러닝 Master 의 01-06-01 연립방정식의 의미와 풀이법 — 대수와 기하를 잇는 다리 을 블로그용으로 다듬은 글입니다.
💻 실습 코드: GitHub · 🏠 mldict.net · ✍️ 기술 블로그

💻 이 글의 코드: 01-06-01-solving-linear-systems · Open in Colab — 핵심 코드와 실제 실행 결과는 글 아래 💻 GitHub 실습 섹션에 있습니다.

⬅️ 이전 글: #18 행렬식(det)이 0이면 왜 역행렬이 없을까 — 연립방정식·행렬식·역행렬 한 번에 이해하기 (파이썬 NumPy) \
➡️ 다음 글: #20 행렬식(Determinant) 쉽게 이해하기 — 넓이·부피 배율, 사러스 법칙과 여인수 전개 (파이썬 NumPy)

TL;DR — 3줄 요약

  • 가감법·대입법·등치법은 모두 미지수를 하나로 줄이기(소거) 위한 도구입니다.
  • 1차-2차 연립방정식은 예외 없이 1차식을 2차식에 대입해 미지수 하나짜리 방정식으로 만들어 풉니다. 해의 개수(0·1·2쌍)는 직선과 원의 교점 개수와 정확히 같습니다.
  • 2차-2차 연립은 한쪽이 (x−y)(x+y)=0(x-y)(x+y)=0처럼 인수분해되면 1차-2차 연립 두 번으로 쪼개 풀 수 있고(최대 4쌍), SymPy의 solve로 손 계산을 검산합니다.

🔗 지난 글 복습: #18 행렬식(det)이 0이면 왜 역행렬이 없을까에서 연립방정식을 Ax=bAx = b로 쓰고, 해가 1개인지를 행렬식 하나로 판정했습니다. 이번 글은 그 장의 첫 절로, 행렬 이전의 손 풀이와 그래프 해석을 단단히 다집니다.


✏️ 꼭 알아야 할 TIP ⭐ 필수

연립방정식 = 미지수를 하나씩 죽이는 게임 🎯\
가감법·대입법·등치법은 전부 미지수를 하나로 줄이기 위한 도구일 뿐입니다. 특히 1차-2차 연립방정식은 예외 없이 "1차식을 2차식에 대입한다" 딱 한 가지 방법으로 풀립니다. 그리고 방정식을 푸는 것은 사실 두 그래프(직선·원 등)가 만나는 교점을 찾는 것과 똑같습니다. 대수(식)와 기하(그림)를 왔다갔다 하며 해석하는 것 — 이것이 고등학교 수학의 핵심입니다. 📊

📋 선행지식

· 중학교 연립방정식 — 가감법·대입법·등치법으로 1차-1차 연립방정식 풀기\
· 인수분해 — x2−y2=(x−y)(x+y)x^2-y^2=(x-y)(x+y) 같은 기본 공식\
· 이차방정식의 근의 공식, 판별식 D=b2−4acD=b^2-4ac\
· 원의 방정식 기초 — x2+y2=r2x^2+y^2=r^2은 원점이 중심이고 반지름이 rr인 원

🎯 학습 목표

☐ 1차-1차 연립방정식에서 가감법·대입법·등치법이 결국 "미지수 소거"를 위한 도구임을 설명할 수 있다\
☐ 1차-2차 연립방정식을 대입법으로 정확히 풀 수 있다\
☐ 연립방정식의 해를 두 그래프의 교점으로 시각적으로 해석할 수 있다\
☐ 왜 1차-2차 연립의 해가 0쌍·1쌍·2쌍이 될 수 있는지 그래프로 설명할 수 있다\
☐ 2차-2차 연립방정식에서 "한쪽은 0, 다른 쪽은 인수분해" 꼴을 왜 쓰는지 설명하고 풀 수 있다\
☐ Python(SymPy)으로 연립방정식을 기호적으로 풀고 검산할 수 있다

📊 핵심 학습 내용

단계학습 내용결과
11차-1차 연립방정식 복습 — 미지수 소거가감법·대입법의 진짜 목적 이해
21차-2차 연립방정식 — 무조건 대입법직접 풀이 가능
3해의 개수 ↔ 그래프의 교점대수를 기하로 해석
42차-2차 연립방정식 — 인수분해 꼴최대 4쌍의 해 이해
5SymPy로 검산하기직접 구현·검증

🎯 🌐 핵심 비유 — 번역기 비유

두 사람이 서로 다른 언어(문자 xx, 문자 yy)로 말하고 있으면 대화(연립방정식 풀이)가 안 됩니다.

대입법은 한쪽 말을 다른 쪽 언어로 번역해주는 번역기입니다. "xx는 사실 2y2y야"라고 번역기를 하나 만들어 두면, 이제 두 번째 방정식에서 xx가 나올 때마다 2y2y로 바꿔 넣을 수 있고, 그러면 문장(방정식) 전체가 yy라는 한 가지 언어로만 이루어지게 됩니다. 언어가 하나로 통일되면 방정식은 우리가 이미 풀 줄 아는 평범한 방정식이 됩니다. 🗣️➡️🗣️


🟢 1단계 — 복습: 1차-1차 연립방정식과 "미지수 소거"

중학교에서 배운 연립방정식을 떠올려봅시다. 미지수가 x,yx,y 두 개인 방정식 두 개를 동시에 만족하는 해를 찾는 것이었습니다.

{x−y=3x+y=7\begin{cases} x - y = 3 \\ x + y = 7 \end{cases}

이걸 풀 때 가감법·대입법·등치법 중 무엇을 쓰든, 결국 하는 일은 딱 하나입니다 — 미지수를 하나 없애서 방정식 하나에 미지수 하나만 남기는 것입니다. 위 예시는 두 식을 더하면 yy가 사라지고 2x=102x=10이 되어 x=5,y=2x=5, y=2를 구할 수 있습니다.

💡 더 쉽게 이해하기 — 저울 맞추기

미지수가 2개인 방정식은 저울 위에 알 수 없는 추가 2종류 놓인 것과 같습니다. 한 번에 두 종류를 다 알아내긴 어렵지만, 한 종류를 먼저 다른 종류로 "바꿔치기"(대입)하거나 서로 더하고 빼서(가감) 한 종류를 저울에서 완전히 없애버리면, 남은 한 종류의 무게는 쉽게 잴 수 있습니다.

📌 핵심: 가감법·대입법·등치법은 서로 다른 방법처럼 보이지만, "미지수를 죽인다"는 같은 목적을 가진 도구입니다. 이 목적을 기억하면 다음 단계(1차-2차 연립)에서 왜 항상 대입법만 쓰는지 자연스럽게 이해됩니다.


🔵 2단계 — 1차-2차 연립방정식: 무조건 대입법

이제 미지수 x,yx,y에 대해 한 식은 1차(직선), 다른 한 식은 2차(원 등)인 연립방정식을 봅시다.

{x−2y=0x2+y2=5\begin{cases} x - 2y = 0 \\ x^2 + y^2 = 5 \end{cases}

가감법을 쓰려 해도 두 번째 식은 x,yx,y가 제곱으로 얽혀 있어서 단순히 더하고 빼는 것으로는 미지수를 없앨 수 없습니다. 이럴 때 예외 없이 쓰는 방법이 대입법입니다.

📝 진행 과정

  1. 1차식을 "x=⋯x=\cdots" 또는 "y=⋯y=\cdots" 형태로 정리한다 → x=2yx=2y
  2. 이것을 2차식의 xx 자리에 그대로 집어넣는다(대입)
  3. 2차식이 미지수 하나짜리 방정식으로 바뀐다
  4. 그 방정식을 풀어 yy 값을 구한다
  5. 구한 yy를 1차식에 다시 넣어 xx 값을 구한다

수학적 의미\
x=2yx=2y를 x2+y2=5x^2+y^2=5에 대입하면: (2y)2+y2=5  ⇒  4y2+y2=5  ⇒  5y2=5  ⇒  y2=1  ⇒  y=±1(2y)^2+y^2=5 \;\Rightarrow\; 4y^2+y^2=5 \;\Rightarrow\; 5y^2=5 \;\Rightarrow\; y^2=1 \;\Rightarrow\; y=\pm1\
\
변수 정의 — x,yx,y: 두 미지수 / x=2yx=2y: 1차식(직선의 방정식) / x2+y2=5x^2+y^2=5: 2차식(원의 방정식, 반지름 5\sqrt5)\
\
직관 — 대입 후 남는 것은 yy 하나짜리 이차방정식입니다. 미지수가 하나로 줄었으니 우리가 이미 아는 방법(인수분해, 근의 공식)으로 풀 수 있습니다. y=1y=1일 때 x=2(1)=2x=2(1)=2, y=−1y=-1일 때 x=2(−1)=−2x=2(-1)=-2이므로 해는 (2,1)(2,1)과 (−2,−1)(-2,-1), 총 두 쌍입니다.

📊 시각화 — 직선과 원의 교점

📊 시각화 — 직선과 원의 교점

[시각화] 직선 x=2yx=2y와 원 x2+y2=5x^2+y^2=5이 두 점 (2,1), (-2,-1)에서 만납니다

from sympy import symbols, Eq, solve

x, y = symbols('x y')

# 1차식: x - 2y = 0  /  2차식: x^2 + y^2 = 5
eq1 = Eq(x - 2*y, 0)
eq2 = Eq(x**2 + y**2, 5)

solutions = solve([eq1, eq2], [x, y])
print("해:", solutions)

🔗 GitHub에서 코드 보기 — 01_06_01_solving_linear_systems.py L12–L21

실행 결과

해: [(-2, -1), (2, 1)]

손으로 계산한 결과와 정확히 일치합니다. ✅

⚠️ 실수하기 쉬운 부분

1차식을 2차식에 대입해야지, 거꾸로 2차식을 1차식에 넣으려 하면 안 됩니다. 2차식을 억지로 조작하면 오히려 미지수가 늘어나거나 계산이 복잡해집니다. "낮은 차수를 높은 차수에 넣는다"는 순서를 반드시 기억하세요.


🔵 3단계 — 해의 개수 ↔ 그래프의 교점: 대수를 기하로 해석하기

방금 예시에서는 해가 두 쌍 나왔지만, 항상 그런 것은 아닙니다. 방정식을 도형(그래프)으로 바꿔서 생각하면 그 이유가 명확해집니다.

💡 더 쉽게 이해하기 — 방정식 = 그림 찾기 놀이

연립방정식을 푸는 것은 "이 두 그림(직선, 원 등)이 만나는 지점을 모두 찾아라"라는 게임과 같습니다. 대수적으로 계산한 (x,y)(x,y) 해 하나하나가, 그래프 위에서는 교점의 좌표 하나하나에 정확히 대응합니다. 그래서 해가 몇 쌍 나오는지는 곧 그래프가 몇 번 만나는지와 같은 질문입니다.

직선과 원은 서로 0번, 1번, 2번 만날 수 있습니다. 그래서 1차-2차 연립방정식의 해는 항상 0쌍, 1쌍, 또는 2쌍 중 하나입니다. 이 판단 기준은 원의 중심에서 직선까지의 거리 dd와 반지름 rr을 비교하는 것 하나로 정리됩니다.

🗺️ Mermaid 시각화 — 직선과 원이 만나는 세 가지 경우

🗺️ Mermaid 시각화 — 직선과 원이 만나는 세 가지 경우

[시각화] 원의 중심과 직선 사이의 거리 dd를 반지름 rr과 비교하면, 교점(=해)의 개수가 0개·1개·2개 중 하나로 정확히 갈립니다

🗺️ 연립방정식을 기하로 해석하는 흐름

연립방정식을 기하로 해석하는 흐름 — 연립방정식 → 함수·도형 → 두 그래프의 교점 → 대수적 해 = 교점 좌표

from sympy import symbols, Eq, solve

x, y = symbols('x y')
circle = Eq(x**2 + y**2, 1)   # 반지름 1인 원

# 경우 1: 교점 0개 — 원에서 먼 직선
line0 = Eq(y, x + 3)
print("0개 예상:", solve([line0, circle], [x, y]))

# 경우 2: 교점 1개 — 원에 접하는 직선
line1 = Eq(y, 1)
print("1개 예상:", solve([line1, circle], [x, y]))

# 경우 3: 교점 2개 — 원을 가로지르는 직선
line2 = Eq(y, x)
print("2개 예상:", solve([line2, circle], [x, y]))

🔗 GitHub에서 코드 보기 — 01_06_01_solving_linear_systems.py L25–L40

실행 결과 (책 원문)

0개 예상: []
1개 예상: [(0, 1)]
2개 예상: [(-sqrt(2)/2, -sqrt(2)/2), (sqrt(2)/2, sqrt(2)/2)]

💡 같은 코드를 이 글을 쓰며 직접 실행(Linux · Python 3.13 · SymPy 1.14.0)하면 첫 줄이 []가 아니라 복소수 해 두 쌍 [(-3/2 - sqrt(7)*I/2, 3/2 - sqrt(7)*I/2), (-3/2 + sqrt(7)*I/2, 3/2 + sqrt(7)*I/2)]로 나옵니다. symbols('x y')는 기본적으로 복소수까지 허용하기 때문이에요. 그래프 위의 교점(실수 해)만 찾고 싶다면 x, y = symbols('x y', real=True)로 선언하세요 — 책과 같이 []가 나옵니다. 실제로 y=x+3y = x + 3을 원에 대입하면 x2+3x+4=0x^2 + 3x + 4 = 0이 되고 판별식이 D=9−16=−7<0D = 9 - 16 = -7 < 0이라, 교점 0개 = 실수 해 없음입니다. 아래 💻 GitHub 실습의 실행 결과도 함께 보세요.

예상한 그대로 해의 개수가 0개, 1개, 2개로 나뉘는 것을 확인했습니다. "해가 몇 쌍인가"라는 대수적 질문이 "그래프가 몇 번 만나는가"라는 기하적 질문과 완전히 같다는 것을 SymPy로도 검증한 셈입니다. 🎯


🔴 4단계 — 2차-2차 연립방정식: 인수분해가 핵심

두 식이 모두 2차인 연립방정식은 고등학교 1학년 과정에서 특별한 조건을 만족할 때만 출제됩니다. 두 식 중 적어도 하나는 "한쪽 변이 0이고, 다른 쪽 변이 인수분해되는 꼴"이어야 합니다.

💡 더 쉽게 이해하기 — 갈림길에서 분신술 쓰기

인수분해가 되는 2차식 (x−y)(x+y)=0(x-y)(x+y)=0은 사실 "x−y=0x-y=0 이거나 x+y=0x+y=0"이라는 두 갈래 길을 하나로 합쳐놓은 것입니다. 이 2차식을 분신술처럼 두 개의 1차식으로 쪼갠 뒤, 각각을 나머지 식과 따로 연립해서 풀고, 마지막에 두 결과를 합치면 됩니다.

예를 들어 다음 연립방정식을 봅시다.

{x2−y2=0x2+y2=4\begin{cases} x^2 - y^2 = 0 \\ x^2 + y^2 = 4 \end{cases}

수학적 의미 — 왜 인수분해 꼴이어야 하는가\
한쪽 변이 0이어야만 "A×B=0  ⟺  A=0A\times B=0 \iff A=0 또는 B=0B=0"이라는 인수분해의 성질을 쓸 수 있습니다. x2−y2=0x^2-y^2=0은 (x−y)(x+y)=0(x-y)(x+y)=0으로 인수분해되므로, x−y=0x-y=0 또는 x+y=0x+y=0 둘 중 하나가 반드시 성립합니다.\
\
변수 정의 — x2−y2=0x^2-y^2=0: 인수분해 가능한 2차식(사실은 직선 두 개) / x2+y2=4x^2+y^2=4: 원(반지름 2)\
\
직관 — 결국 "2차-2차 연립"처럼 보이지만, 실제로는 1차-2차 연립을 두 번 푸는 것과 같습니다. 인수분해로 얻은 직선 두 개가 각각 원과 만나는 점을 모두 찾으면 됩니다.

🗺️ 인수분해로 2차-2차 연립을 쪼개는 흐름

인수분해로 2차-2차 연립을 쪼개는 흐름 — (x−y)(x+y)=0 → 두 직선 → 원과 연립 → 최대 4쌍의 해

📊 시각화 — 두 직선과 원, 최대 4개의 교점

📊 시각화 — 두 직선과 원, 최대 4개의 교점

[시각화] 두 직선 x=yx=y, x=−yx=-y이 원과 만나 총 4개의 교점이 생깁니다

from sympy import symbols, Eq, solve, factor

x, y = symbols('x y')

# 2차-2차 연립방정식
eq1 = Eq(x**2 - y**2, 0)
eq2 = Eq(x**2 + y**2, 4)

# 1) eq1이 인수분해되는지 확인
print("인수분해:", factor(x**2 - y**2))   # (x-y)(x+y)

# 2) SymPy에게 통째로 풀어달라고 해도 같은 결과가 나오는지 검증
solutions = solve([eq1, eq2], [x, y])
print("해:", solutions)

🔗 GitHub에서 코드 보기 — 01_06_01_solving_linear_systems.py L44–L57

실행 결과

인수분해: (x - y)*(x + y)
해: [(-sqrt(2), -sqrt(2)), (-sqrt(2), sqrt(2)), (sqrt(2), -sqrt(2)), (sqrt(2), sqrt(2))]

우리가 손으로 예측한 대로 정확히 4쌍의 해가 나왔습니다. "2차-2차 연립 = 1차-2차 연립 두 번"이라는 직관이 코드로도 확인됩니다. ✅

🐞 디버깅 포인트

2차-2차 연립에서 factor()로 인수분해가 안 된다면, 아무 식이나 인수분해되도록 억지로 조작하면 안 됩니다. 대신 두 식을 서로 빼거나 더해서 새로운 식을 만들어 보고, 그 식이 인수분해되는지 확인하세요. 고1 과정 문제는 항상 이런 조작을 통해 인수분해 가능한 형태가 나오도록 설계되어 있습니다.


🔵 5단계 — 큰 그림: 대수 ↔ 기하, 방정식 ↔ 함수

지금까지 배운 내용을 한 문장으로 정리하면 이렇습니다 — 고등학교 수학은 식(대수)으로 되어 있는 것을 그림(기하)으로 옮기고, 다시 그림을 식으로 옮기는 연습입니다. 방정식, 부등식, 함수를 배우는 이유가 결국 여기로 모입니다.

🔀 프레임워크 관점 — 대수적 풀이 vs 그래프적 풀이

접근대수적 풀이그래프적 풀이
방법대입·가감·인수분해로 식 조작두 그래프를 그려 교점 확인
장점정확한 좌표값을 구할 수 있음해의 개수를 한눈에 직관적으로 파악
파이썬 도구sympy.solvematplotlib로 그래프 시각화

이후 배우게 될 부등식, 이차함수, 원의 방정식 모두 이 대수 ↔ 기하 상호 해석의 틀 안에서 이해하면 훨씬 쉬워집니다.


✍️ 실습

실습 1\
연립방정식 y=x+1,  x2+y2=25y=x+1,\; x^2+y^2=25를 대입법으로 손으로 풀어보고, SymPy로 검산해보세요.

실습 2\
y=2y=2와 x2+y2=4x^2+y^2=4를 연립해 교점이 몇 개인지(0개, 1개, 2개 중 무엇인지) 미리 예측한 뒤 직접 풀어 확인해보세요.

실습 3\
x2−4y2=0x^2-4y^2=0을 인수분해해서 두 직선으로 나누고, 각각을 x2+y2=9x^2+y^2=9와 연립해 총 몇 쌍의 해가 나오는지 확인해보세요.


📝 연습문제

[개념 문제] 1차-2차 연립방정식을 풀 때 왜 항상 "1차식을 2차식에 대입"해야 하는지, 거꾸로 하면 안 되는 이유와 함께 설명하세요.\

해설 보기

대입의 목적은 미지수를 하나로 줄이는 것입니다. 1차식은 x=⋯x=\cdots 또는 y=⋯y=\cdots 형태로 쉽게 정리되므로, 이를 2차식에 넣으면 2차식이 미지수 하나짜리 방정식으로 바뀝니다. 반대로 2차식을 1차식에 넣으려 하면 애초에 2차식을 한 미지수에 대해 깔끔하게 정리하기 어려워 계산이 복잡해집니다.

[계산 문제] x+y=4,  x2+y2=10x+y=4,\; x^2+y^2=10을 대입법으로 푸시오.\

해설 보기

x=4−yx=4-y를 대입: (4−y)2+y2=10⇒16−8y+y2+y2=10⇒2y2−8y+6=0⇒y2−4y+3=0⇒(y−1)(y−3)=0(4-y)^2+y^2=10 \Rightarrow 16-8y+y^2+y^2=10 \Rightarrow 2y^2-8y+6=0 \Rightarrow y^2-4y+3=0 \Rightarrow (y-1)(y-3)=0. 따라서 y=1y=1이면 x=3x=3, y=3y=3이면 x=1x=1. 해는 (3,1),(1,3)(3,1),(1,3)입니다.

[구현 문제] SymPy를 사용해 x−y=1,  xy=6x-y=1,\; xy=6의 해를 구하는 코드를 작성하시오.\

해설 보기

from sympy import symbols, Eq, solve; x,y=symbols('x y'); solve([Eq(x-y,1), Eq(x*y,6)],[x,y]) → 결과는 (3,2)(3,2)와 (−2,−3)(-2,-3)입니다.

[사고 확장 문제] 원과 원을 연립하면 해가 최대 몇 쌍까지 나올 수 있을지, 그래프적으로 추론해 보시오.\

해설 보기

두 원은 서로 최대 2번까지만 만날 수 있으므로(원이 정확히 겹치는 경우 제외), 해는 최대 2쌍입니다. 원과 원이 만나는 두 점을 지나는 직선을 "근축(radical axis)"이라 부르며, 실제로 두 원의 방정식을 빼면 이 직선의 방정식이 나옵니다 — 이는 2차-2차 연립을 1차-2차 연립으로 바꾸는 또 다른 예시입니다.


📚 이번 장에서 배운 내용

미지수 소거

가감법·대입법·등치법은 모두 미지수를 하나로 줄이기 위한 도구다.

1차-2차 연립

예외 없이 "1차식을 2차식에 대입"해서 미지수 하나짜리 방정식으로 만든다.

대수 ↔ 기하

해의 개수는 두 그래프가 만나는 교점의 개수와 정확히 일치한다.

2차-2차 연립

한쪽이 0, 인수분해되는 꼴이면 두 개의 1차-2차 연립으로 쪼개 풀 수 있다.

📌 핵심 문장 3가지

  1. 연립방정식을 푸는 모든 방법의 목적은 미지수를 하나씩 없애는 것이다.
  2. 1차-2차 연립방정식은 반드시 1차식을 2차식에 대입해서 푼다.
  3. 연립방정식의 해는 두 그래프(직선·원 등)의 교점이며, 2차-2차 연립은 인수분해로 여러 개의 1차-2차 연립으로 쪼개 풀 수 있다.

✅ 개념 체크리스트

☐ 가감법·대입법·등치법이 왜 같은 목적을 가지는지 설명할 수 있다\
☐ 1차-2차 연립방정식을 대입법으로 직접 풀 수 있다\
☐ 해의 개수를 그래프의 교점 개수로 해석할 수 있다\
☐ 2차-2차 연립방정식에서 인수분해가 왜 필요한지 설명할 수 있다\
☐ SymPy로 연립방정식을 풀고 손 계산과 비교·검산할 수 있다

🚫 실수 방지 체크리스트

☐ 1차식을 2차식에 대입했는가(반대로 하지 않았는가)\
☐ 대입 후 얻은 이차방정식을 인수분해나 근의 공식으로 정확히 풀었는가\
☐ 구한 yy(또는 xx) 값을 반드시 1차식에 다시 넣어 나머지 미지수를 구했는가\
☐ 2차-2차 연립에서 인수분해 전에 "한쪽이 0"인지 확인했는가\
☐ 수식의 변수명과 코드의 변수명이 서로 일치하는가

🔗 추가 학습 추천

matplotlib으로 직선과 원을 실제로 그려 교점을 눈으로 확인해보고, 두 원을 연립하는 문제를 만들어 "근축(radical axis)" 개념까지 SymPy로 확인해보세요.


💻 GitHub 실습 — 코드로 직접 확인하기

📂 이 장의 코드 폴더: book/01-ml-math-basics-python/01-06-linear-systems-det-inverse/01-06-01-solving-linear-systems

책에 실린 코드를 장(절)별로 모아 둔 폴더입니다. 아래 파일을 열어 보거나, Colab에서 바로 실행해 보세요.

파일용도링크
01_06_01_solving_linear_systems.py책의 코드 블록 3개를 순서대로 모은 실행 스크립트 (# %% 셀 구분)코드 보기
01_06_01_solving_linear_systems.ipynb같은 코드를 블록당 셀 1개로 담은 주피터 노트북보기 · Colab
README.md코드 블록 목록 · 실행 방법 · 검증 결과보기
🎬 medium-series/17-solving-systems/Medium 시리즈 예제 — 같은 주제를 블로그용으로 다듬은 실습폴더 · Colab

🧪 저장소 검증 상태: ✅ 실행 OK

🔑 핵심 코드 1 — 해의 개수 = 교점의 개수 — 직선과 원 세 가지 경우

📄 01_06_01_solving_linear_systems.py L25–L40 · Block 2 (🔵 3단계 — 해의 개수 ↔ 그래프의 교점: 대수를 기하로 해석하기)

from sympy import symbols, Eq, solve

x, y = symbols('x y')
circle = Eq(x**2 + y**2, 1)   # 반지름 1인 원

# 경우 1: 교점 0개 — 원에서 먼 직선
line0 = Eq(y, x + 3)
print("0개 예상:", solve([line0, circle], [x, y]))

# 경우 2: 교점 1개 — 원에 접하는 직선
line1 = Eq(y, 1)
print("1개 예상:", solve([line1, circle], [x, y]))

# 경우 3: 교점 2개 — 원을 가로지르는 직선
line2 = Eq(y, x)
print("2개 예상:", solve([line2, circle], [x, y]))

▶ 실행 결과 — 위 코드를 실행한 출력 (직접 실행: Linux · Python 3.13.5 · numpy 2.5.3 · sympy 1.14.0, 앞 블록부터 순서대로 실행)

0개 예상: [(-3/2 - sqrt(7)*I/2, 3/2 - sqrt(7)*I/2), (-3/2 + sqrt(7)*I/2, 3/2 + sqrt(7)*I/2)]
1개 예상: [(0, 1)]
2개 예상: [(-sqrt(2)/2, -sqrt(2)/2), (sqrt(2)/2, sqrt(2)/2)]

🔑 핵심 코드 2 — 2차-2차 연립방정식 — factor()로 쪼개고 solve()로 4쌍 검산

📄 01_06_01_solving_linear_systems.py L44–L57 · Block 3 (🔴 4단계 — 2차-2차 연립방정식: 인수분해가 핵심)

from sympy import symbols, Eq, solve, factor

x, y = symbols('x y')

# 2차-2차 연립방정식
eq1 = Eq(x**2 - y**2, 0)
eq2 = Eq(x**2 + y**2, 4)

# 1) eq1이 인수분해되는지 확인
print("인수분해:", factor(x**2 - y**2))   # (x-y)(x+y)

# 2) SymPy에게 통째로 풀어달라고 해도 같은 결과가 나오는지 검증
solutions = solve([eq1, eq2], [x, y])
print("해:", solutions)

▶ 실행 결과 — 위 코드를 실행한 출력 (직접 실행: Linux · Python 3.13.5 · numpy 2.5.3 · sympy 1.14.0, 앞 블록부터 순서대로 실행)

인수분해: (x - y)*(x + y)
해: [(-sqrt(2), -sqrt(2)), (-sqrt(2), sqrt(2)), (sqrt(2), -sqrt(2)), (sqrt(2), sqrt(2))]

☁️ Colab에서 바로 실행

👉 Open in Colab — 01_06_01_solving_linear_systems.ipynb · 설치 없이 브라우저에서 셀을 위에서부터 순서대로 실행하세요.

🖥️ 내 컴퓨터에서 실행하기

git clone https://github.com/otoloism/Zero_to_ML_Master.git
cd Zero_to_ML_Master
python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r book/requirements.txt   # 책 전체용 (PyTorch 등 포함, 용량 큼)
# 이 장만 실행한다면 이것만으로 충분합니다: pip install sympy
cd book/01-ml-math-basics-python/01-06-linear-systems-det-inverse/01-06-01-solving-linear-systems
python 01_06_01_solving_linear_systems.py

⭐ GitHub Star / Fork

⭐ 코드가 도움이 되셨다면 GitHub 저장소에 Star를 눌러 주세요. 새 장의 코드가 올라올 때 가장 먼저 알 수 있습니다.
🍴 직접 고쳐 보며 실험하고 싶다면 Fork 해서 내 저장소에서 마음껏 바꿔 보세요. 오류 제보·개선 제안은 Issues로 환영합니다!


🔮 다음 글 예고

다음 글은 01-06-02 행렬식(Determinant) — 정사각행렬 속에 숨은 넓이와 부피 🧮 입니다. 오늘 손으로 푼 연립방정식을 행렬 AA로 묶으면, 해가 하나로 정해지는지를 넓이·부피가 변하는 비율인 행렬식이 알려 줍니다.

⬅️ 이전 글: #18 행렬식(det)이 0이면 왜 역행렬이 없을까 — 연립방정식·행렬식·역행렬 한 번에 이해하기 (파이썬 NumPy) \
➡️ 다음 글: #20 행렬식(Determinant) 쉽게 이해하기 — 넓이·부피 배율, 사러스 법칙과 여인수 전개 (파이썬 NumPy)


📚 더 깊이 공부하고 싶다면

이 시리즈는 수학을 놓았던 비전공자가 AI를 직접 구현하기까지의 공부 기록을 그대로 옮긴 연재입니다. 원문 책, 코드, 개념 사전을 함께 보면 훨씬 빨리 늡니다. 🚀

바로가기이런 분께
📘 책 (위키독스, 무료)Zero to 머신러닝 딥러닝 Master5권 · 20개 장 · 163개 절 전체를 순서대로 읽고 싶은 분
📄 이 글의 원문01-06-01 연립방정식의 의미와 풀이법 — 대수와 기하를 잇는 다리연습문제·해설까지 전부 보고 싶은 분
💻 실습 코드 (GitHub)otoloism/Zero_to_ML_Master.py·.ipynb를 Colab에서 바로 돌려보고 싶은 분
🏠 머신러닝 백과사전mldict.net본문 속 핵심 개념을 카드로 다시 확인하고 싶은 분
✍️ 기술 블로그wikidocs.net/blog/@mldict새 글 알림을 가장 먼저 받고 싶은 분

⭐ 도움이 되셨다면 velog 팔로우와 GitHub Star를 눌러 주세요. 다음 글을 쓰는 가장 큰 힘이 됩니다. 궁금한 점은 댓글로 편하게 남겨 주세요! 🙌

profile
자유주의자

0개의 댓글