두 가지 방법으로 수학 함수 그래프 그리기
① math + turtle로 점을 이동하며 그리기 ② NumPy + Matplotlib으로 배열을 계산해 그리기
기말고사 학습 대상 · 코드 읽기와 실행 결과 해석이번 수업의 학습 목표
같은 수학 함수를 Python으로 나타내는 두 가지 방법을 비교합니다. 학생이 코드를 VS Code에서 실행하고, range()·math·np.linspace()·ax.plot()의 역할과 반복 횟수, 함수값, 그래프의 모양을 설명할 수 있도록 구성했습니다.
a=0.01, b=-50 등을 구간마다 다시 지정합니다. 두 번째 Matplotlib 예제는 a=2, b=3을 여러 함수에 공통으로 사용합니다. 그래서 같은 함수 종류라도 두 그래프는 모양과 축 범위가 다르게 나타납니다.1. 먼저 알아야 할 함수 종류
| 함수 | 대표 식 | Python 표현 | 꼭 알아야 할 특징 |
|---|---|---|---|
| 다항함수 | y=ax²+b | x**2 | 포물선, 제곱은 ** |
| 지수함수 | y=aeˣ+b | math.exp(x) / np.exp(x) | 일정 구간에서 빠르게 증가 |
| 로그함수 | y=a ln(x)+b | math.log(x) / np.log(x) | x는 양수여야 함 |
| 원 | x²+y²=r² | cos(θ), sin(θ) | 각도에 따라 원 둘레 좌표 생성 |
| 사인·코사인 | y=a sin(x)+b / y=a cos(x)+b | np.sin / np.cos | 주기적인 진동을 만듦 |
math와 turtle — 한 점씩 움직여 그래프 그리기
Turtle은 좌표를 계산한 뒤 pen.goto(x, y)로 점을 이동하며 선을 그립니다. pen.penup()은 선을 끊고, pen.pendown()은 이동 경로에 선을 그립니다.
Windows VS Code · 일반 Python 설치 · Turtle GUI 창 필요
import math, import turtle은 표준 모듈을 불러옵니다. 보통 별도 pip install이 필요하지 않습니다.
다항함수·지수함수·로그함수·원의 방정식 (4종)
색상: 하늘색, 자홍색, 노란색, 연두색
원본 코드 전체
# math 모듈과 반복문을 사용해 여러 수학 함수를 그리는 코드
import math
import turtle
screen = turtle.Screen()
screen.bgcolor("black")
pen = turtle.Turtle()
pen.speed(0)
pen.hideturtle()
pen.pensize(2)
# 좌표계 설정
pen.penup()
pen.goto(-300, 0)
pen.pendown()
pen.color("white")
pen.goto(300, 0)
pen.penup()
pen.goto(0, -300)
pen.pendown()
pen.goto(0, 300)
# 다항함수: y = ax^2 + b
pen.penup()
pen.color("cyan")
a, b = 0.01, -50
for x in range(-200, 201):
y = a * (x**2) + b
if abs(y) <= 300:
pen.goto(x, y)
pen.pendown()
else:
pen.penup()
# 지수함수: y = ae^x + b (스케일 조정)
pen.penup()
pen.color("magenta")
a, b = 5, -100
for x in range(-150, 60):
y = a * math.exp(x / 20) + b
if abs(y) <= 300:
pen.goto(x, y)
pen.pendown()
else:
pen.penup()
# 로그함수: y = aln(x) + b (스케일 조정)
pen.penup()
pen.color("yellow")
a, b = 50, 0
for x in range(1, 300):
y = a * math.log(x / 10) + b
if abs(y) <= 300:
pen.goto(x, y)
pen.pendown()
else:
pen.penup()
# 원의 방정식: x^2 + y^2 = r^2
pen.penup()
pen.color("lime")
r = 100
for angle in range(361):
rad = math.radians(angle)
x = r * math.cos(rad)
y = r * math.sin(rad)
pen.goto(x, y)
if angle == 0:
pen.pendown()
turtle.done()Turtle 그래프 개념 미리보기
그래프는 설명을 위한 웹 미리보기이며 실제 Turtle 창은 VS Code에서 Python 원본 파일을 실행해 확인합니다. 미리보기는 원본 코드의 구간과 계수를 따라 계산합니다.
NumPy와 Matplotlib — 배열로 계산해 그래프 그리기
np.linspace(시작, 끝, 개수)는 그래프에 사용할 여러 x값을 일정 간격으로 생성합니다. ax.plot(x, y)는 x와 y 배열을 받아 선 그래프를 그립니다. NumPy를 배우지 않았더라도 이 두 기능부터 이해하면 충분합니다.
py -m pip install numpy matplotlib py numpy_matplotlib_original.py
Windows에서 py가 실행되지 않으면 python -m pip ...와 python 파일명.py로 변경합니다.
다항함수·지수함수·로그함수·원·사인·코사인 (6종)
a=2, b=3이 여러 곡선의 크기·위치에 적용됩니다.
원본 코드 전체
# numpy 계산과 matplotlib 모듈을 사용해 여러 수학 함수를 그리는 코드
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')
fig, ax = plt.subplots(figsize=(10, 10))
# 변수 설정
a, b = 2, 3
# 1. 다항함수
x_poly = np.linspace(-5, 5, 400)
y_poly = a * x_poly**2 + b
ax.plot(x_poly, y_poly, color='cyan', label='Polynomial: y = ax^2 + b')
# 2. 지수함수
x_exp = np.linspace(-2, 2, 400)
y_exp = a * np.exp(x_exp) + b
ax.plot(x_exp, y_exp, color='magenta', label='Exponential: y = ae^x + b')
# 3. 로그함수
x_log = np.linspace(0.1, 10, 400)
y_log = a * np.log(x_log) + b
ax.plot(x_log, y_log, color='yellow', label='Logarithmic: y = aln(x) + b')
# 4. 원의 방정식
theta = np.linspace(0, 2*np.pi, 400)
r = a
x_circle = r * np.cos(theta)
y_circle = r * np.sin(theta)
ax.plot(x_circle, y_circle, color='lime', label='Circle: x^2 + y^2 = a^2')
# 5. 삼각함수 (사인, 코사인 추가)
x_trig = np.linspace(-2*np.pi, 2*np.pi, 400)
y_sin = a * np.sin(x_trig) + b
y_cos = a * np.cos(x_trig) + b
ax.plot(x_trig, y_sin, color='orange', label='Sine: y = asin(x) + b')
ax.plot(x_trig, y_cos, color='deeppink', linestyle='--', label='Cosine: y = acos(x) + b')
ax.set_title('High School Math Functions')
ax.grid(True, color='gray', alpha=0.5)
ax.legend()
ax.axis('equal')
plt.tight_layout()
plt.show()수학 함수별 그래프 확인
함수 종류를 선택하면 하나씩 크게 볼 수 있습니다. 원본 Matplotlib 코드는 여섯 그래프를 한 좌표계에 함께 그립니다. 아래는 이해를 돕기 위해 함수별로 나눠 보여 주는 미리보기입니다.
슬라이더는 함수의 변화 원리를 확인하는 웹 시뮬레이션입니다. 학생이 내려받는 원본 Python 코드는 그대로 유지됩니다. 원의 반지름은 원본처럼 r=a이고, b를 바꿔도 원의 위치는 변하지 않습니다.
3. 두 방법의 차이 비교
| 비교 | math + turtle | NumPy + Matplotlib |
|---|---|---|
| 계산 | 반복문의 x 또는 각도마다 직접 계산 | np.linspace 배열 전체를 계산 |
| 그리기 | pen.goto(x,y) | ax.plot(x,y) |
| 표준 Python 모듈 | math, turtle | 외부 라이브러리 설치 필요 |
| 장점 | 점 이동과 반복의 원리가 눈에 보임 | 함수·그래프를 간결하게 표현, 데이터 분석에 연결 |
ax.axis('equal')을 사용해 x축과 y축 단위 길이를 같게 그립니다. 여러 함수의 y값 범위가 다르므로 일부 곡선이 납작하게 보일 수 있습니다. 이는 실행 오류가 아닙니다.4. VS Code 실행 안내
첫 번째 Turtle 파일은 Python GUI 환경에서 실행하면 그리기 창이 나타납니다. 두 번째 Matplotlib 파일은 numpy와 matplotlib를 설치한 후 실행하세요. ModuleNotFoundError가 나타나면 VS Code에서 선택한 Python 인터프리터와 터미널의 설치 환경이 같은지 확인합니다.
두 파일은 별도로 실행해야 하며, 둘을 한 .py 파일에 붙여 넣는 방식은 권장하지 않습니다. 그래프가 보이지 않으면 저장 여부·실행 파일·Python 환경·그래픽 창이 뒤에 숨지 않았는지 확인합니다.
5. 코드 해석·실행 결과 예측 문제
학생이 직접 코드를 실행하고 결과를 확인한 다음 풀어 보세요. 정답을 제출하면 문항별 이유를 볼 수 있습니다.
다음 학습으로 연결
함수의 x·y를 계산해 그래프로 나타내는 과정은 Pandas로 CSV 데이터를 분석한 뒤 Matplotlib으로 시각화하는 과정과 연결됩니다.
영수쌤의 Python 교실 · 소프트웨어와 생활 3단원 · 제공하신 그래프 코드 두 가지를 바탕으로 구성한 기말 대비 학습 페이지