import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jn, yn
import tkinter as tk
from tkinter import ttk
def plot_bessel_functions(order, x_min, x_max, num_points):
"""
주어진 범위에서 베셀 함수(Jn, Yn)를 플로팅합니다.
Parameters:
- order: 베셀 함수의 차수 (n 값)
- x_min: x 값의 최소 범위
- x_max: x 값의 최대 범위
- num_points: x 범위 내의 포인트 수
"""
x = np.linspace(x_min, x_max, num_points)
# 1종 베셀 함수 (Jn)
jn_values = jn(order, x)
# 2종 베셀 함수 (Yn)
yn_values = yn(order, x)
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(x, jn_values, label=f'J_{order}(x)', color='blue')
plt.plot(x, yn_values, label=f'Y_{order}(x)', color='red')
plt.title(f'Bessel Functions of Order {order}')
plt.xlabel('x')
plt.ylabel('Function Value')
plt.legend()
plt.grid()
plt.show()
def on_plot_button_click():
try:
order = int(order_entry.get())
x_min = float(x_min_entry.get())
x_max = float(x_max_entry.get())
num_points = int(num_points_entry.get())
plot_bessel_functions(order, x_min, x_max, num_points)
except ValueError:
error_label.config(text="올바른 값을 입력하세요.", foreground="red")
# Tkinter GUI 설정
root = tk.Tk()
root.title("베셀 함수 플로터")
# 입력 필드 생성
ttk.Label(root, text="베셀 함수의 차수:").grid(column=0, row=0, padx=5, pady=5)
order_entry = ttk.Entry(root)
order_entry.grid(column=1, row=0, padx=5, pady=5)
ttk.Label(root, text="x 최소값:").grid(column=0, row=1, padx=5, pady=5)
x_min_entry = ttk.Entry(root)
x_min_entry.grid(column=1, row=1, padx=5, pady=5)
ttk.Label(root, text="x 최대값:").grid(column=0, row=2, padx=5, pady=5)
x_max_entry = ttk.Entry(root)
x_max_entry.grid(column=1, row=2, padx=5, pady=5)
ttk.Label(root, text="포인트 수:").grid(column=0, row=3, padx=5, pady=5)
num_points_entry = ttk.Entry(root)
num_points_entry.grid(column=1, row=3, padx=5, pady=5)
# 오류 메시지 레이블
error_label = ttk.Label(root, text="")
error_label.grid(column=0, row=5, columnspan=2)
# 플로팅 버튼 생성
plot_button = ttk.Button(root, text="그래프 그리기", command=on_plot_button_click)
plot_button.grid(column=0, row=4, columnspan=2, pady=10)
# GUI 실행
root.mainloop()
'정보통신기술(ICT)' 카테고리의 다른 글
맵 타임랩스 소프트웨어(10.29.24) (0) | 2024.10.29 |
---|---|
맵 타임랩스 소프트웨어 (0) | 2024.10.28 |
푸리에 변환(Fourier Transform) (0) | 2024.10.24 |
2D 라플라스 방정식을 풀기 위한 함수 (0) | 2024.10.23 |
전자기학: 파동 방정식(Sine/Cosine 형태의 파동) (0) | 2024.10.22 |