1편에서 공통수학1의 전체 구조를 살펴 보았다면, 이번 편에서는 첫 번째 단원인 다항식 의 덧셈과 뺄셈을 배열 관점에서 살펴봅니다. 특히 다항식을 컴퓨터의 계수 배열 로 표현했을 때, 왜 교환법칙 과 결합법칙 이 자연스럽게 성립하는지 이해하고, 이 생각이 2변수 다항식으로 어떻게 이어지는지 맛보기까지 보겠습니다.
1. 다항식과 배열의 만남
고등학교에서 다항식의 덧셈과 뺄셈을 배울 때, "교환법칙과 결합법칙이 성립한다"는 사실을 당연하게 받아들이는 경우가 많습니다. 하지만 왜 성립하는지, 그리고 이것이 컴퓨터에서 어떻게 표현되는지 이해하면 수학의 구조를 더 깊이 파악할 수 있습니다.
1.1 다항식을 배열로 표현하기
다항식 을 배열(array) 로 표현하면 연산의 본질이 명확해집니다. 각 배열의 인덱스는 차수 를, 값은 계수를 나타냅니다.
예시:
P ( x ) = 3 x 2 + 2 x + 5 P(x) = 3x^2 + 2x + 5 P ( x ) = 3 x 2 + 2 x + 5 → 최고차항부터 [3, 2, 5]
Q ( x ) = x 2 + 4 x + 1 Q(x) = x^2 + 4x + 1 Q ( x ) = x 2 + 4 x + 1 → [1, 4, 1]
배열 표현의 핵심은 같은 차수의 계수가 같은 위치에 저장 된다는 것입니다. 이를 통해 덧셈, 뺄셈, 곱셈 등의 연산을 단순한 배열 연산으로 처리할 수 있습니다.
1차원 배열의 의미:
다항식을 배열 [3, 2, 5] 로 표현하는 것은 수학적으로 순서쌍(ordered tuple) 또는 벡터 (vector)로 볼 수 있습니다.
순서쌍 : ( 3 , 2 , 5 ) (3, 2, 5) ( 3 , 2 , 5 ) - 각 위치가 특정 의미를 가짐
벡터 : v ⃗ = ( 3 , 2 , 5 ) \vec{v} = (3, 2, 5) v = ( 3 , 2 , 5 ) - 공간에서의 점 또는 방향을 표현
이 관점에서 다항식의 덧셈은 벡터 의 덧셈과 동일합니다:
a ⃗ + b ⃗ = ( a 1 + b 1 , a 2 + b 2 , a 3 + b 3 ) \vec{a} + \vec{b} = (a_1 + b_1, a_2 + b_2, a_3 + b_3) a + b = ( a 1 + b 1 , a 2 + b 2 , a 3 + b 3 )
컴퓨터 과학에서는 이러한 1차원 배열을 리스트(list) 또는 배열(array) 라고 부릅니다.
🎯 직접 실습해보기: 아래 도구에서 다항식을 입력하고 배열로 변환되는 과정을 실시간으로 확인할 수 있습니다.
다항식 입력 정규화된 식 3x2 + 2x + 5
▶️ 변환하기
다항식을 입력하고 변환 버튼을 누르면 단계별로 계수를 추출합니다.
입력 다항식 3x2 + 2x + 5
[ 3 , 2 , 5 ]
[3, 2, 5]
추출된 계수 배열
식의 구조를 먼저 보고 어떤 계수가 필요한지 확인합니다.
1.2 배열로 덧셈하기
왜 배열로 덧셈을 할까요?
전통적인 다항식 덧셈은 "동류항 끼리 모아서 더한다"는 규칙을 따릅니다. 예를 들어:
( 3 x 2 + 2 x + 5 ) + ( x 2 + 4 x + 1 ) (3x^2 + 2x + 5) + (x^2 + 4x + 1) ( 3 x 2 + 2 x + 5 ) + ( x 2 + 4 x + 1 )
이를 풀려면:
3 x 2 3x^2 3 x 2 과 x 2 x^2 x 2 를 찾아 더하기 → 4 x 2 4x^2 4 x 2
2 x 2x 2 x 와 4 x 4x 4 x 를 찾아 더하기 → 6 x 6x 6 x
5 5 5 와 1 1 1 을 더하기 → 6 6 6
배열에서는 이 과정이 훨씬 단순해집니다.
각 항의 차수(제곱의 수)가 배열의 인덱스 가 되고, 계수가 값 이 됩니다. 따라서 같은 인덱스 위치의 값끼리 더하기 만 하면 됩니다.
[ 3 , 2 , 5 ] + [ 1 , 4 , 1 ] = [ 4 , 6 , 6 ] \begin{aligned}
&[3, 2, 5] \\
+\ &[1, 4, 1] \\
\hline
=\ &[4, 6, 6]
\end{aligned} + = [ 3 , 2 , 5 ] [ 1 , 4 , 1 ] [ 4 , 6 , 6 ]
첫 번째 원소: 3 + 1 = 4 3 + 1 = 4 3 + 1 = 4 (x 2 x^2 x 2 의 계수)
두 번째 원소: 2 + 4 = 6 2 + 4 = 6 2 + 4 = 6 (x x x 의 계수)
세 번째 원소: 5 + 1 = 6 5 + 1 = 6 5 + 1 = 6 (상수항)
즉, 배열의 덧셈은 같은 위치(인덱스)에 있는 숫자끼리 더하는 것입니다.
이 결과는 4 x 2 + 6 x + 6 4x^2 + 6x + 6 4 x 2 + 6 x + 6 에 해당합니다.
이 방식의 장점:
컴퓨터가 처리하기 쉬움 : 배열은 메모리에 연속으로 저장되므로 빠른 접근 가능
병렬 처리 가능 : 각 위치의 덧셈이 독립적이라 GPU 등으로 동시 계산 가능
일반화 용이 : 3차, 4차, n차 다항식 모두 동일한 방식으로 처리
NumPy 는 Python의 과학 계산 라이브러리로, 배열 연산을 효율적으로 처리합니다. 아래 코드에서는 np.array()로 다항식을 배열로 표현하고, + 연산자로 자동으로 요소별 덧셈을 수행합니다.
💻 Python 코드 보기 (NumPy)
# 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 왜 교환법칙·결합법칙이 성립할까?
교환법칙 (A + B = B + A A + B = B + A A + B = B + A ):
배열 덧셈은 요소별(element-wise) 로 이루어집니다. 각 위치의 계수끼리 더할 때, 순서가 p i + q i p_i + q_i p i + q i 이든 q i + p i q_i + p_i q i + p i 이든 결과는 같습니다.
[ 3 , 2 , 5 ] + [ 1 , 4 , 1 ] = [ 1 , 4 , 1 ] + [ 3 , 2 , 5 ] = [ 4 , 6 , 6 ] [3, 2, 5] + [1, 4, 1] = [1, 4, 1] + [3, 2, 5] = [4, 6, 6] [ 3 , 2 , 5 ] + [ 1 , 4 , 1 ] = [ 1 , 4 , 1 ] + [ 3 , 2 , 5 ] = [ 4 , 6 , 6 ]
이것이 성립하는 이유는 실수의 교환법칙 에서 비롯됩니다. 각 계수가 실수이므로, 실수 덧셈의 교환법칙이 보장됩니다.
결합법칙 (( A + B ) + C = A + ( B + C ) (A + B) + C = A + (B + C) ( A + B ) + C = A + ( B + C ) ):
배열 연산의 결합적 성질 역시 실수의 결합법칙에서 유래합니다.
NumPy의 array_equal() 함수를 사용하면 두 배열이 같은지 쉽게 검증할 수 있습니다. 벡터화 연산으로 인해 ( A + B ) + C (A + B) + C ( A + B ) + C 와 A + ( B + C ) A + (B + C) A + ( B + C ) 가 동일한지 직접 확인할 수 있습니다.
💻 Python 코드 보기 (NumPy)
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
수학적 근거 정리:
법칙
배열 연산
실수 연산 기반
교환법칙
[ p i ] + [ q i ] = [ q i ] + [ p i ] [p_i] + [q_i] = [q_i] + [p_i] [ p i ] + [ q i ] = [ q i ] + [ p i ]
실수: a + b = b + a a + b = b + a a + b = b + a
결합법칙
( [ a i ] + [ b i ] ) + [ c i ] = [ a i ] + ( [ b i ] + [ c i ] ) ([a_i] + [b_i]) + [c_i] = [a_i] + ([b_i] + [c_i]) ([ a i ] + [ b i ]) + [ c i ] = [ a i ] + ([ b i ] + [ c i ])
실수: ( a + b ) + c = a + ( b + c ) (a + b) + c = a + (b + c) ( a + b ) + c = a + ( b + c )
2.2 예시 문제로 검증하기
문제 1: 다음 두 다항식을 배열로 표현하고 덧셈하시오.
A ( x ) = 2 x 3 + 3 x 2 − x + 4 A(x) = 2x^3 + 3x^2 - x + 4 A ( x ) = 2 x 3 + 3 x 2 − x + 4
B ( x ) = x 3 − 2 x 2 + 3 x + 1 B(x) = x^3 - 2x^2 + 3x + 1 B ( x ) = x 3 − 2 x 2 + 3 x + 1
해설:
A A A → 최고차항부터: [2, 3, -1, 4]
B B B → [1, -2, 3, 1]
A + B A + B A + B → [2+1, 3+(-2), -1+3, 4+1] = [3, 1, 2, 5]
다항식으로 환원: 3 x 3 + x 2 + 2 x + 5 3x^3 + x^2 + 2x + 5 3 x 3 + x 2 + 2 x + 5
문제 2: 다음 등식이 성립함을 배열 연산으로 설명하시오.
( 2 x 2 + 3 x + 1 ) + ( x 2 − 2 x + 4 ) = ( x 2 − 2 x + 4 ) + ( 2 x 2 + 3 x + 1 ) (2x^2 + 3x + 1) + (x^2 - 2x + 4) = (x^2 - 2x + 4) + (2x^2 + 3x + 1) ( 2 x 2 + 3 x + 1 ) + ( x 2 − 2 x + 4 ) = ( x 2 − 2 x + 4 ) + ( 2 x 2 + 3 x + 1 )
해설:
좌변: [2, 3, 1] + [1, -2, 4] = [3, 1, 5]
우변: [1, -2, 4] + [2, 3, 1] = [3, 1, 5]
배열 덧셈의 교환법칙 에 의해 성립
🧠 직접 풀어보기: 아래 퀴즈에서 다항식 배열 변환을 연습할 수 있습니다.
1 2 3
다음 다항식을 배열로 표현하시오 (내림차순):
3x^{2} + 2x + 5 정답 확인
← 이전 문제 마지막 문제 →
3. 뺄셈의 원리
3.1 -(배열) = (-1) × 배열
뺄셈은 사실 덧셈의 특수한 형태 입니다. 다항식의 뺄셈은 음수를 곱한 후 덧셈 하는 것과 같습니다.
핵심 개념:
P ( x ) − Q ( x ) = P ( x ) + ( − Q ( x ) ) P(x) - Q(x) = P(x) + (-Q(x)) P ( x ) − Q ( x ) = P ( x ) + ( − Q ( x ))
배열로 표현하면:
Q ( x ) = [ q 2 , q 1 , q 0 ] Q(x) = [q_2, q_1, q_0] Q ( x ) = [ q 2 , q 1 , q 0 ] 일 때
− Q ( x ) = [ − q 2 , − q 1 , − q 0 ] -Q(x) = [-q_2, -q_1, -q_0] − Q ( x ) = [ − q 2 , − q 1 , − q 0 ]
즉, 배열의 각 원소에 -1을 곱하면 됩니다 .
구체적 예시:
P ( x ) = 3 x 2 + 2 x + 5 P(x) = 3x^2 + 2x + 5 P ( x ) = 3 x 2 + 2 x + 5 → [3, 2, 5]
Q ( x ) = x 2 + 4 x + 1 Q(x) = x^2 + 4x + 1 Q ( x ) = x 2 + 4 x + 1 → [1, 4, 1]
P ( x ) − Q ( x ) P(x) - Q(x) P ( x ) − Q ( x ) 계산 과정:
Q의 부호 반전:
− Q ( x ) = − x 2 − 4 x − 1 -Q(x) = -x^2 - 4x - 1 − Q ( x ) = − x 2 − 4 x − 1
배열로: -[1, 4, 1] = [-1, -4, -1]
덧셈 수행:
P: [3, 2, 5]
-Q: + [-1, -4, -1]
------------------
결과: [2, -2, 4]
다항식으로 변환:
[2, -2, 4] → 2 x 2 − 2 x + 4 2x^2 - 2x + 4 2 x 2 − 2 x + 4
왜 이렇게 하는가?
이 방식의 장점은 뺄셈도 덧셈과 동일한 알고리즘 으로 처리할 수 있다는 것입니다. 컴퓨터는 복잡한 뺄셈 연산 대신, 간단한 "부호 바꾸기 + 덧셈" 두 가지 기본 연산만으로 뺄셈을 구현합니다.
NumPy에서는 - 연산자나 np.polysub() 함수를 사용하여 간단하게 뺄셈을 수행할 수 있습니다. -Q 는 배열의 각 원소에 -1을 곱한 것과 동일합니다.
💻 Python 코드 보기 (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 } " ) # [ 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: A ( x ) = x 2 + 3 x − 2 A(x) = x^2 + 3x - 2 A ( x ) = x 2 + 3 x − 2 , B ( x ) = 2 x 2 − x + 5 B(x) = 2x^2 - x + 5 B ( x ) = 2 x 2 − x + 5 일 때, 2 A − B 2A - B 2 A − B 를 배열 연산으로 구하시오.
해설:
A A A → [1, 3, -2]
B B B → [2, -1, 5]
2 A 2A 2 A → [2, 6, -4]
2 A − B 2A - B 2 A − B → [2-2, 6-(-1), -4-5] = [0, 7, -9]
결과: 7 x − 9 7x - 9 7 x − 9
NumPy를 사용하면 뺄셈도 마찬가지로 간단하게 처리할 수 있습니다. 스칼라 곱셈(예: 2A )도 * 연산자로 자동으로 수행됩니다.
💻 Python 코드 보기 (NumPy)
# 다항식 뺄셈
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
💡 핵심 정리 : 다항식의 연산 법칙(교환법칙 , 결합법칙 , 분배법칙 )이 성립하는 이유는 각 계수가 실수이고, 실수의 연산 법칙이 성립하기 때문 입니다. 배열 표현은 이 사실을 직관적으로 보여줍니다.
🎯 연습하기: 아래 도구에서 두 다항식의 덧셈과 뺄셈을 직접 연습할 수 있습니다.
4. 다음 단계: 2변수로의 확장
지금까지 1변수 다항식을 배열로 표현하고, 교환법칙과 결합법칙이 성립하는 이유를 살펴 보았습니다. 이제 이 개념을 2변수, 3변수로 확장할 준비가 되었습니다.
4.1 왜 2변수가 필요한가?
현실 세계의 많은 현상은 단순히 하나의 변수로 설명할 수 없습니다. 예를 들어:
분야
예시
변수
물리학
전기장 분포
E ( x , y ) E(x, y) E ( x , y )
경제학
비용 함수
C ( x , y ) C(x, y) C ( x , y ) (두 재료의 사용량)
이미지 처리
픽셀 밝기
2차원 좌표 ( x , y ) (x, y) ( x , y )
기상학
기온 분포
T ( l a t , l o n ) T(lat, lon) T ( l a t , l o n )
P ( x , y ) = 3 x 2 y + 2 x y 2 + 5 x + 7 y + 1 P(x, y) = 3x^2y + 2xy^2 + 5x + 7y + 1 P ( x , y ) = 3 x 2 y + 2 x y 2 + 5 x + 7 y + 1 처럼 두 개의 변수를 가진 다항식은 **2차원 배열(행렬 )**로 표현됩니다.
행렬 표현:
P = [ 1 7 0 5 0 2 0 3 0 ] P = \begin{bmatrix}
1 & 7 & 0 \\
5 & 0 & 2 \\
0 & 3 & 0
\end{bmatrix} P = 1 5 0 7 0 3 0 2 0
행: x 0 , x 1 , x 2 x^0, x^1, x^2 x 0 , x 1 , x 2 순서
열: y 0 , y 1 , y 2 y^0, y^1, y^2 y 0 , y 1 , y 2 순서
핵심 인사이트 : 1변수 다항식이 1차원 배열(벡터)로 표현된다면, 2변수 다항식은 2차원 배열(행렬) 로 표현됩니다.
4.3 다음 편에서 계속
**공통수학1 시리즈 3편: 2변수 다항식과 행렬 **에서:
2변수 다항식의 구조와 행렬 표현
행렬 덧셈을 통한 다항식 연산
이미지 처리, 물리 시뮬레이션 등 실제 활용 사례
를 심도 있게 다루겠습니다.
5. 마치며
이번 편에서는 다항식을 배열로 표현했을 때 왜 덧셈과 뺄셈이 자연스럽게 처리되는지, 그리고 왜 교환법칙과 결합법칙이 성립하는지 살펴 보았습니다. 다항식의 덧셈·뺄셈 법칙은 결국 실수의 연산 법칙을 따르기 때문이며, 배열 표현은 이 사실을 직관적으로 시각화해 줍니다.
이제 1변수 다항식의 배열 표현과 기본 연산 구조를 이해했고, 마지막 섹션에서 2변수 확장의 모양도 살짝 확인했습니다. 다음 편에서는 이 확장을 본격적으로 다루며, 행렬을 통한 다항식 표현과 연산을 배워 보겠습니다.
다음 편: 2변수 다항식과 행렬 →
💬 댓글
이 글에 대한 의견을 남겨주세요