(Updated: ) math

[공통수학1 시리즈 2편] 다항식의 연산과 배열

#common-math-1 #polynomial #education #korean

1편에서 공통수학1의 전체 구조를 살펴 보았다면, 이번 편에서는 첫 번째 단원인 다항식의 연산을 깊이 있게 다룹니다. 특히 다항식을 컴퓨터의 배열로 표현했을 때, 왜 교환법칙과 결합법칙이 성립하는지 그 수학적 원리를 파헤쳐봅니다.

1. 다항식과 배열의 만남

고등학교에서 다항식의 덧셈과 뺄셈을 배울 때, “교환법칙과 결합법칙이 성립한다”는 사실을 당연하게 받아들이는 경우가 많습니다. 하지만 성립하는지, 그리고 이것이 컴퓨터에서 어떻게 표현되는지 이해하면 수학의 구조를 더 깊이 파악할 수 있습니다.

1.1 다항식을 배열로 표현하기

다항식을 배열(array)로 표현하면 연산의 본질이 명확해집니다. 각 배열의 인덱스는 의 차수를, 값은 계수를 나타냅니다.

예시:

  • → 최고차항부터 [3, 2, 5]
  • [1, 4, 1]

배열 표현의 핵심은 같은 차수의 계수가 같은 위치에 저장된다는 것입니다. 이를 통해 덧셈, 뺄셈, 곱셈 등의 연산을 단순한 배열 연산으로 처리할 수 있습니다.

1차원 배열의 의미:

다항식을 배열 [3, 2, 5]로 표현하는 것은 수학적으로 순서쌍(ordered tuple) 또는 벡터(vector)로 볼 수 있습니다.

  • 순서쌍: - 각 위치가 특정 의미를 가짐
  • 벡터: - 공간에서의 점 또는 방향을 표현

이 관점에서 다항식의 덧셈은 벡터의 덧셈과 동일합니다:

컴퓨터 과학에서는 이러한 1차원 배열을 리스트(list) 또는 배열(array)라고 부릅니다.

🎯 직접 실습해보기: 아래 도구에서 다항식을 입력하고 배열로 변환되는 과정을 실시간으로 확인할 수 있습니다.

1변수 다항식 → 배열 변환기

단일 화면 애니메이션으로 계수 배열 추출

준비
0%

형식: ax² + bx + c

3x2 + 2x + 5
3 3 x2 +2 2 x +5 5
3
2
5
[ 3 ,2 ,5 ]
추출된 계수 배열

1.2 배열로 덧셈하기

왜 배열로 덧셈을 할까요?

전통적인 다항식 덧셈은 “동류항끼리 모아서 더한다”는 규칙을 따릅니다. 예를 들어:

이를 풀려면:

  1. 를 찾아 더하기 →
  2. 를 찾아 더하기 →
  3. 을 더하기 →

배열에서는 이 과정이 훨씬 단순해집니다.

각 항의 차수(제곱의 수)가 배열의 인덱스가 되고, 계수가 이 됩니다. 따라서 같은 인덱스 위치의 값끼리 더하기만 하면 됩니다.

  • 첫 번째 원소: (의 계수)
  • 두 번째 원소: (의 계수)
  • 세 번째 원소: (상수항)

즉, 배열의 덧셈은 같은 위치(인덱스)에 있는 숫자끼리 더하는 것입니다.

이 결과는 에 해당합니다.

이 방식의 장점:

  • 컴퓨터가 처리하기 쉬움: 배열은 메모리에 연속으로 저장되므로 빠른 접근 가능
  • 병렬 처리 가능: 각 위치의 덧셈이 독립적이라 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) + CA + (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]
  • 배열 덧셈의 교환법칙에 의해 성립

🧠 직접 풀어보기: 아래 퀴즈에서 다항식 배열 변환을 연습할 수 있습니다.

다항식 배열 변환 퀴즈

문제별 계수 배열 입력과 즉시 피드백

다항식 배열 변환 퀴즈

1 / 5
진행률 0%

형식: [x²계수, x계수, 상수] (예: [3, 2, 5])

3. 뺄셈의 원리

3.1 -(배열) = (-1) × 배열

뺄셈은 사실 덧셈의 특수한 형태입니다. 다항식의 뺄셈은 음수를 곱한 후 덧셈하는 것과 같습니다.

핵심 개념:

배열로 표현하면:

  • 일 때

즉, 배열의 각 원소에 -1을 곱하면 됩니다.

구체적 예시:

[3, 2, 5]

[1, 4, 1]

계산 과정:

  1. Q의 부호 반전:

    • 배열로: -[1, 4, 1] = [-1, -4, -1]
  2. 덧셈 수행:

    P:      [3,  2,  5]
    -Q:  + [-1, -4, -1]
    ------------------
    결과:   [2, -2,  4]
  3. 다항식으로 변환:

    • [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단계(배열 변환 → 배열 연산 → 과정 확인)

다항식 덧셈/뺄셈 연습

Phase 1/3
배열 변환 33%

주어진 다항식을 배열로 변환하세요

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변수로 확장하여 행렬을 통한 다항식 표현과 연산을 배워 보겠습니다.

다음 편: 2변수 다항식과 행렬 →

💬 댓글

이 글에 대한 의견을 남겨주세요