정보통신기술(ICT)

로그 함수

해머슴 2024. 9. 4. 10:23
import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

# 그래프 업데이트 함수
def update_plot():
    try:
        # 사용자 입력값 읽기
        a = float(a_entry.get())
        b = float(b_entry.get())
        c = float(c_entry.get())
       
        # 로그 함수 정의
        x = np.linspace(0.1, 10, 400)  # x는 0보다 큰 값만
        y = a * np.log(x) / np.log(b) + c
       
        # 기존 그래프 지우기
        ax.clear()
       
        # 새로운 그래프 그리기
        ax.plot(x, y, label=f'f(x) = {a} * log_{b}(x) + {c}')
        ax.set_xlabel('x')
        ax.set_ylabel('f(x)')
        ax.set_title('로그 함수 그래프')
        ax.legend()
       
        # 그래프 새로고침
        canvas.draw()
    except ValueError:
        error_label.config(text="유효한 숫자를 입력하세요.")

# Tkinter GUI 설정
root = tk.Tk()
root.title("로그 함수 그래프")

# 입력 필드 및 레이블
tk.Label(root, text="a (스케일링 상수):").grid(row=0, column=0)
a_entry = tk.Entry(root)
a_entry.grid(row=0, column=1)

tk.Label(root, text="b (로그 밑):").grid(row=1, column=0)
b_entry = tk.Entry(root)
b_entry.grid(row=1, column=1)

tk.Label(root, text="c (수직 이동 상수):").grid(row=2, column=0)
c_entry = tk.Entry(root)
c_entry.grid(row=2, column=1)

update_button = tk.Button(root, text="그래프 업데이트", command=update_plot)
update_button.grid(row=3, columnspan=2)

# Matplotlib Figure 및 Axes 설정
fig, ax = plt.subplots()
canvas = FigureCanvasTkAgg(fig, master=root)
canvas_widget = canvas.get_tk_widget()
canvas_widget.grid(row=4, columnspan=2)

# 오류 메시지 레이블
error_label = tk.Label(root, text="", fg="red")
error_label.grid(row=5, columnspan=2)

root.mainloop()

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

코사인 함수  (0) 2024.09.06
유리 함수  (0) 2024.09.05
사인 함수  (0) 2024.09.03
3차 함수  (0) 2024.09.02
2차 함수  (0) 2024.08.30