[공통수학1 시리즈 2편] 다항식의 연산과 배열
1편에서 공통수학1의 전체 구조를 살펴 보았다면, 이번 편에서는 첫 번째 단원인 다항식의 연산을 깊이 있게 다룹니다. 특히 다항식을 컴퓨터의 배열로 표현했을 때, 왜 교환법칙과 결합법칙이 성립하는지 그 수학적 원리를 파헤쳐봅니다.
1. 다항식과 배열의 만남
고등학교에서 다항식의 덧셈과 뺄셈을 배울 때, “교환법칙과 결합법칙이 성립한다”는 사실을 당연하게 받아들이는 경우가 많습니다. 하지만 왜 성립하는지, 그리고 이것이 컴퓨터에서 어떻게 표현되는지 이해하면 수학의 구조를 더 깊이 파악할 수 있습니다.
1.1 다항식을 배열로 표현하기
다항식을 배열(array)로 표현하면 연산의 본질이 명확해집니다. 각 배열의 인덱스는 의 차수를, 값은 계수를 나타냅니다.
예시:
- → 최고차항부터
[3, 2, 5] - →
[1, 4, 1]
배열 표현의 핵심은 같은 차수의 계수가 같은 위치에 저장된다는 것입니다. 이를 통해 덧셈, 뺄셈, 곱셈 등의 연산을 단순한 배열 연산으로 처리할 수 있습니다.
1차원 배열의 의미:
다항식을 배열 [3, 2, 5]로 표현하는 것은 수학적으로 순서쌍(ordered tuple) 또는 벡터(vector)로 볼 수 있습니다.
- 순서쌍: - 각 위치가 특정 의미를 가짐
- 벡터: - 공간에서의 점 또는 방향을 표현
이 관점에서 다항식의 덧셈은 벡터의 덧셈과 동일합니다:
컴퓨터 과학에서는 이러한 1차원 배열을 리스트(list) 또는 배열(array)라고 부릅니다.
🎯 직접 실습해보기: 아래 도구에서 다항식을 입력하고 배열로 변환되는 과정을 실시간으로 확인할 수 있습니다.
1변수 다항식 → 배열 변환기
단일 화면 애니메이션으로 계수 배열 추출
형식: ax² + bx + c
1.2 배열로 덧셈하기
왜 배열로 덧셈을 할까요?
전통적인 다항식 덧셈은 “동류항끼리 모아서 더한다”는 규칙을 따릅니다. 예를 들어:
이를 풀려면:
- 과 를 찾아 더하기 →
- 와 를 찾아 더하기 →
- 와 을 더하기 →
배열에서는 이 과정이 훨씬 단순해집니다.
각 항의 차수(제곱의 수)가 배열의 인덱스가 되고, 계수가 값이 됩니다. 따라서 같은 인덱스 위치의 값끼리 더하기만 하면 됩니다.
- 첫 번째 원소: (의 계수)
- 두 번째 원소: (의 계수)
- 세 번째 원소: (상수항)
즉, 배열의 덧셈은 같은 위치(인덱스)에 있는 숫자끼리 더하는 것입니다.
이 결과는 에 해당합니다.
이 방식의 장점:
- 컴퓨터가 처리하기 쉬움: 배열은 메모리에 연속으로 저장되므로 빠른 접근 가능
- 병렬 처리 가능: 각 위치의 덧셈이 독립적이라 GPU 등으로 동시 계산 가능
- 일반화 용이: 3차, 4차, n차 다항식 모두 동일한 방식으로 처리
NumPy는 Python의 과학 계산 라이브러리로, 배열 연산을 효율적으로 처리합니다. 아래 코드에서는 np.array()로 다항식을 배열로 표현하고, + 연산자로 자동으로 요소별 덧셈을 수행합니다.
💻 Python 코드 보기 (NumPy)
import numpy as np
# NumPy 배열로 다항식 표현 (더 효율적)
P = np.array([3, 2, 5]) # 3x² + 2x + 5
Q = np.array([1, 4, 1]) # x² + 4x + 1
# NumPy의 벡터화 연산 (자동으로 요소별 덧셈)
result = P + Q
print(f"P + Q = {result}") # [4 6 6] → 4x² + 6x + 6
print(f"결과 다항식: {result[0]}x² + {result[1]}x + {result[2]}")
# np.polyadd() 함수 사용 (다항식 덧셈 전용)
result2 = np.polyadd(P, Q)
print(f"np.polyadd 결과: {result2}") # [4 6 6]2. 연산법칙의 비밀
2.1 왜 교환법칙·결합법칙이 성립할까?
교환법칙 ():
배열 덧셈은 요소별(element-wise)로 이루어집니다. 각 위치의 계수끼리 더할 때, 순서가 이든 이든 결과는 같습니다.
이것이 성립하는 이유는 실수의 교환법칙에서 비롯됩니다. 각 계수가 실수이므로, 실수 덧셈의 교환법칙이 보장됩니다.
결합법칙 ():
배열 연산의 결합적 성질 역시 실수의 결합법칙에서 유래합니다.
NumPy의 array_equal() 함수를 사용하면 두 배열이 같은지 쉽게 검증할 수 있습니다. 벡터화 연산으로 인해 (A + B) + C와 A + (B + C)가 동일한지 직접 확인할 수 있습니다.
💻 Python 코드 보기 (NumPy)
import numpy as np
A = np.array([2, 3, -1, 4]) # 2x³ + 3x² - x + 4
B = np.array([1, -2, 3, 1]) # x³ - 2x² + 3x + 1
C = np.array([0, 1, 0, 2]) # x² + 2
# (A + B) + C
left = (A + B) + C
# A + (B + C)
right = A + (B + C)
# NumPy의 array_equal로 검증
print(np.array_equal(left, right)) # True
print(f"(A + B) + C = {left}")
print(f"A + (B + C) = {right}")
# 교환법칙도 동시에 검증
print(f"A + B == B + A: {np.array_equal(A + B, B + A)}") # True수학적 근거 정리:
| 법칙 | 배열 연산 | 실수 연산 기반 |
|---|---|---|
| 교환법칙 | 실수: | |
| 결합법칙 | 실수: |
2.2 예시 문제로 검증하기
문제 1: 다음 두 다항식을 배열로 표현하고 덧셈하시오.
해설:
- → 최고차항부터:
[2, 3, -1, 4] - →
[1, -2, 3, 1] - →
[2+1, 3+(-2), -1+3, 4+1]=[3, 1, 2, 5] - 다항식으로 환원:
문제 2: 다음 등식이 성립함을 배열 연산으로 설명하시오.
해설:
- 좌변:
[2, 3, 1]+[1, -2, 4]=[3, 1, 5] - 우변:
[1, -2, 4]+[2, 3, 1]=[3, 1, 5] - 배열 덧셈의 교환법칙에 의해 성립
🧠 직접 풀어보기: 아래 퀴즈에서 다항식 배열 변환을 연습할 수 있습니다.
다항식 배열 변환 퀴즈
문제별 계수 배열 입력과 즉시 피드백
다항식 배열 변환 퀴즈
3. 뺄셈의 원리
3.1 -(배열) = (-1) × 배열
뺄셈은 사실 덧셈의 특수한 형태입니다. 다항식의 뺄셈은 음수를 곱한 후 덧셈하는 것과 같습니다.
핵심 개념:
배열로 표현하면:
- 일 때
즉, 배열의 각 원소에 -1을 곱하면 됩니다.
구체적 예시:
→ [3, 2, 5]
→ [1, 4, 1]
계산 과정:
-
Q의 부호 반전:
- 배열로:
-[1, 4, 1] = [-1, -4, -1]
-
덧셈 수행:
P: [3, 2, 5] -Q: + [-1, -4, -1] ------------------ 결과: [2, -2, 4] -
다항식으로 변환:
[2, -2, 4]→
왜 이렇게 하는가?
이 방식의 장점은 뺄셈도 덧셈과 동일한 알고리즘으로 처리할 수 있다는 것입니다. 컴퓨터는 복잡한 뺄셈 연산 대신, 간단한 “부호 바꾸기 + 덧셈” 두 가지 기본 연산만으로 뺄셈을 구현합니다.
NumPy에서는 - 연산자나 np.polysub() 함수를 사용하여 간단하게 뺄셈을 수행할 수 있습니다. -Q는 배열의 각 원소에 -1을 곱한 것과 동일합니다.
💻 Python 코드 보기 (NumPy)
import numpy as np
P = np.array([3, 2, 5]) # 3x² + 2x + 5
Q = np.array([1, 4, 1]) # x² + 4x + 1
# NumPy의 뺄셈 연산자
result = P - Q
print(f"P - Q = {result}") # [ 2 -2 4] → 2x² - 2x + 4
# 또는 np.polysub() 함수 사용
result2 = np.polysub(P, Q)
print(f"np.polysub 결과: {result2}") # [ 2 -2 4]
# -Q는 자동으로 각 원소에 -1을 곱함
negative_Q = -Q
print(f"-Q = {negative_Q}") # [-1 -4 -1]
# P + (-Q)로도 동일한 결과
result3 = P + (-Q)
print(f"P + (-Q) = {result3}") # [ 2 -2 4]3.2 직접 연습하기
문제 3: , 일 때, 를 배열 연산으로 구하시오.
해설:
- →
[1, 3, -2] - →
[2, -1, 5] - →
[2, 6, -4] - →
[2-2, 6-(-1), -4-5]=[0, 7, -9] - 결과:
NumPy를 사용하면 뺄셈도 마찬가지로 간단하게 처리할 수 있습니다. 스칼라 곱셈(예: 2A)도 * 연산자로 자동으로 수행됩니다.
💻 Python 코드 보기 (NumPy)
import numpy as np
# 다항식 뺄셈
P = np.array([3, 2, 5]) # 3x² + 2x + 5
Q = np.array([1, 4, 1]) # x² + 4x + 1
diff = P - Q
print(f"P - Q = {diff}") # [ 2 -2 4] → 2x² - 2x + 4
# 문제 3: 2A - B 계산
A = np.array([1, 3, -2]) # x² + 3x - 2
B = np.array([2, -1, 5]) # 2x² - x + 5
# 스칼라 곱셈 (2 * A)도 자동 수행
result = 2 * A - B
print(f"2A - B = {result}") # [0 7 -9] → 7x - 9💡 핵심 정리: 다항식의 연산 법칙(교환법칙, 결합법칙, 분배법칙)이 성립하는 이유는 각 계수가 실수이고, 실수의 연산 법칙이 성립하기 때문입니다. 배열 표현은 이 사실을 직관적으로 보여줍니다.
🎯 연습하기: 아래 도구에서 두 다항식의 덧셈과 뺄셈을 직접 연습할 수 있습니다.
다항식 덧셈/뺄셈 연습
3단계(배열 변환 → 배열 연산 → 과정 확인)
다항식 덧셈/뺄셈 연습
주어진 다항식을 배열로 변환하세요
A(x) = 0
B(x) = 0
Q1. A(x)를 배열로 표현하시오
Q2. B(x)를 배열로 표현하시오
4. 다음 단계: 2변수로의 확장
지금까지 1변수 다항식을 배열로 표현하고, 교환법칙과 결합법칙이 성립하는 이유를 살펴 보았습니다. 이제 이 개념을 2변수, 3변수로 확장할 준비가 되었습니다.
4.1 왜 2변수가 필요한가?
현실 세계의 많은 현상은 단순히 하나의 변수로 설명할 수 없습니다. 예를 들어:
| 분야 | 예시 | 변수 |
|---|---|---|
| 물리학 | 전기장 분포 | |
| 경제학 | 비용 함수 | (두 재료의 사용량) |
| 이미지 처리 | 픽셀 밝기 | 2차원 좌표 |
| 기상학 | 기온 분포 |
4.2 2변수 다항식의 배열 표현
처럼 두 개의 변수를 가진 다항식은 2차원 배열(행렬)로 표현됩니다.
행렬 표현:
- 행: 순서
- 열: 순서
핵심 인사이트: 1변수 다항식이 1차원 배열(벡터)로 표현된다면, 2변수 다항식은 2차원 배열(행렬)로 표현됩니다.
4.3 다음 편에서 계속
**공통수학1 시리즈 3편: 2변수 다항식과 행렬**에서:
- 2변수 다항식의 구조와 행렬 표현
- 행렬 덧셈을 통한 다항식 연산
- 이미지 처리, 물리 시뮬레이션 등 실제 활용 사례
를 심도 있게 다루겠습니다.
5. 마치며
이번 편에서는 다항식을 배열로 표현했을 때 왜 교환법칙과 결합법칙이 성립하는지 그 수학적 원리를 살펴 보았습니다. 다항식의 연산 법칙은 결국 실수의 연산 법칙을 따르기 때문이며, 배열 표현은 이 사실을 직관적으로 시각화해 줍니다.
이제 1변수 다항식의 배열 표현과 연산 법칙을 완전히 이해했습니다. 다음 편에서는 이 개념을 2변수로 확장하여 행렬을 통한 다항식 표현과 연산을 배워 보겠습니다.
💬 댓글
이 글에 대한 의견을 남겨주세요