Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import ttk
- import numpy as np
- import matplotlib.pyplot as plt
- from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
- half_life_periods = {
- "Уран-235": 703.8e6,
- "Торий-232": 14.05e6,
- "Уран-238": 4.468e6,
- "Калий-40": 1.248e6,
- "Радиум-226": 1600e6,
- "Торий-230": 75380e6,
- "Уран-234": 245500e6,
- "Рубидий-87": 4.88E16,
- "Плутоний-239": 24100e6,
- "Свинец-207": 2.185E16,
- "Калий-41": 1.248E16,
- "Тритий": 12.32e6,
- "Кобальт-60": 5.27e6,
- "Радон-222": 3.8235e6,
- "Технеций-99m": 0.001211e6
- }
- def calculate_decay(N0, decay_constant, time):
- return N0 * np.exp(-decay_constant * time)
- def plot_decay():
- element = selected_element.get()
- N0 = float(entry_N0.get())
- decay_constant = np.log(2) / half_life_periods[element]
- time = np.linspace(0, 10 * half_life_periods[element], 100)
- decay = calculate_decay(N0, decay_constant, time)
- plt.figure()
- plt.plot(time / 10**6 if half_life_periods[element] >= 1E6 else time / 1E3, decay)
- plt.title(f'Распад {element}')
- plt.xlabel('Время (млн лет)' if half_life_periods[element] >= 1E6 else 'Время (тыс лет)')
- plt.ylabel('Оставшееся количество')
- plt.grid(True)
- max_y = N0
- y_ticks = [max_y]
- while len(y_ticks) < 4 and max_y > 0.01 * N0:
- max_y /= 2
- y_ticks.append(max_y)
- y_ticks.append(0)
- plt.yticks(y_ticks, [f'{N0 * (2 ** (-i)):.2f}' for i in range(len(y_ticks) - 1)] + [0])
- plt.ylim(max(y_ticks), 0)
- plt.gca().invert_yaxis()
- canvas = FigureCanvasTkAgg(plt.gcf(), master=window)
- canvas.draw()
- canvas.get_tk_widget().grid(row=5, columnspan=2)
- window = tk.Tk()
- window.title("График полураспада")
- selected_element = tk.StringVar()
- element_label = ttk.Label(window, text="Выберите элемент:")
- element_label.grid(row=0, column=0)
- element_combobox = ttk.Combobox(window, textvariable=selected_element, values=list(half_life_periods.keys()))
- element_combobox.grid(row=0, column=1)
- element_combobox.current(0)
- entry_N0_label = ttk.Label(window, text="Начальное количество (N0):")
- entry_N0_label.grid(row=1, column=0)
- entry_N0 = ttk.Entry(window)
- entry_N0.grid(row=1, column=1)
- plot_button = ttk.Button(window, text="Построить график", command=plot_decay)
- plot_button.grid(row=3, columnspan=2)
- window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement