정보통신기술(ICT)

사인 함수

해머슴 2024. 9. 3. 10:15
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

# 사인 함수 그래프를 그리는 함수
def plot_sine(A, B, C, D):
    x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)  # x 범위 설정
    y = A * np.sin(B * x + C) + D  # 사인 함수

    ax.clear()  # 이전 그래프를 지우기
    ax.plot(x, y, label=f"${A} \\sin({B}x + {C}) + {D}$")
    ax.set_title('Sine Function')
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.grid(True)
    ax.axhline(0, color='black', linewidth=0.5)
    ax.axvline(0, color='black', linewidth=0.5)
    ax.legend()
    ax.set_ylim(D - abs(A) - 1, D + abs(A) + 1)  # y축 범위 설정
    plt.draw()

# 초기 값 설정
A_init = 1
B_init = 1
C_init = 0
D_init = 0

# 플롯과 슬라이더 설정
fig, ax = plt.subplots(figsize=(10, 6))
plt.subplots_adjust(left=0.1, bottom=0.25)

# 슬라이더 정의
axcolor = 'lightgoldenrodyellow'
ax_amp = plt.axes([0.1, 0.1, 0.65, 0.03], facecolor=axcolor)
ax_freq = plt.axes([0.1, 0.15, 0.65, 0.03], facecolor=axcolor)
ax_phase = plt.axes([0.1, 0.2, 0.65, 0.03], facecolor=axcolor)
ax_vert = plt.axes([0.1, 0.25, 0.65, 0.03], facecolor=axcolor)

s_amp = Slider(ax_amp, 'Amplitude (A)', 0.1, 10.0, valinit=A_init)
s_freq = Slider(ax_freq, 'Frequency (B)', 0.1, 10.0, valinit=B_init)
s_phase = Slider(ax_phase, 'Phase Shift (C)', -2*np.pi, 2*np.pi, valinit=C_init)
s_vert = Slider(ax_vert, 'Vertical Shift (D)', -10.0, 10.0, valinit=D_init)

# 슬라이더의 값이 변경될 때마다 호출되는 함수
def update(val):
    A = s_amp.val
    B = s_freq.val
    C = s_phase.val
    D = s_vert.val
    plot_sine(A, B, C, D)

# 슬라이더에 이벤트 연결
s_amp.on_changed(update)
s_freq.on_changed(update)
s_phase.on_changed(update)
s_vert.on_changed(update)

# 초기 그래프 그리기
plot_sine(A_init, B_init, C_init, D_init)

plt.show()

'정보통신기술(ICT)' 카테고리의 다른 글

유리 함수  (0) 2024.09.05
로그 함수  (0) 2024.09.04
3차 함수  (0) 2024.09.02
2차 함수  (0) 2024.08.30
1차 함수  (0) 2024.08.29