Advertisement
f0rSee

dabdab

May 7th, 2024
652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.56 KB | Source Code | 0 0
  1. import tkinter as tk
  2. from tkinter import ttk
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
  6.  
  7. half_life_periods = {
  8.     "Уран-235": 703.8e6,
  9.     "Торий-232": 14.05e6,
  10.     "Уран-238": 4.468e6,
  11.     "Калий-40": 1.248e6,
  12.     "Радиум-226": 1600e6,
  13.     "Торий-230": 75380e6,
  14.     "Уран-234": 245500e6,
  15.     "Рубидий-87": 4.88E16,
  16.     "Плутоний-239": 24100e6,
  17.     "Свинец-207": 2.185E16,
  18.     "Калий-41": 1.248E16,
  19.     "Тритий": 12.32e6,
  20.     "Кобальт-60": 5.27e6,
  21.     "Радон-222": 3.8235e6,
  22.     "Технеций-99m": 0.001211e6
  23. }
  24.  
  25.  
  26. def calculate_decay(N0, decay_constant, time):
  27.     return N0 * np.exp(-decay_constant * time)
  28.  
  29. def plot_decay():
  30.     element = selected_element.get()
  31.     N0 = float(entry_N0.get())
  32.     decay_constant = np.log(2) / half_life_periods[element]
  33.  
  34.     time = np.linspace(0, 10 * half_life_periods[element], 100)
  35.     decay = calculate_decay(N0, decay_constant, time)
  36.  
  37.     plt.figure()
  38.     plt.plot(time / 10**6 if half_life_periods[element] >= 1E6 else time / 1E3, decay)
  39.     plt.title(f'Распад {element}')
  40.     plt.xlabel('Время (млн лет)' if half_life_periods[element] >= 1E6 else 'Время (тыс лет)')
  41.     plt.ylabel('Оставшееся количество')
  42.     plt.grid(True)
  43.  
  44.     max_y = N0
  45.     y_ticks = [max_y]
  46.     while len(y_ticks) < 4 and max_y > 0.01 * N0:
  47.         max_y /= 2
  48.         y_ticks.append(max_y)
  49.     y_ticks.append(0)
  50.     plt.yticks(y_ticks, [f'{N0 * (2 ** (-i)):.2f}' for i in range(len(y_ticks) - 1)] + [0])
  51.  
  52.     plt.ylim(max(y_ticks), 0)
  53.  
  54.     plt.gca().invert_yaxis()
  55.  
  56.     canvas = FigureCanvasTkAgg(plt.gcf(), master=window)
  57.     canvas.draw()
  58.     canvas.get_tk_widget().grid(row=5, columnspan=2)
  59.  
  60. window = tk.Tk()
  61. window.title("График полураспада")
  62.  
  63. selected_element = tk.StringVar()
  64. element_label = ttk.Label(window, text="Выберите элемент:")
  65. element_label.grid(row=0, column=0)
  66. element_combobox = ttk.Combobox(window, textvariable=selected_element, values=list(half_life_periods.keys()))
  67. element_combobox.grid(row=0, column=1)
  68. element_combobox.current(0)
  69.  
  70. entry_N0_label = ttk.Label(window, text="Начальное количество (N0):")
  71. entry_N0_label.grid(row=1, column=0)
  72. entry_N0 = ttk.Entry(window)
  73. entry_N0.grid(row=1, column=1)
  74.  
  75. plot_button = ttk.Button(window, text="Построить график", command=plot_decay)
  76. plot_button.grid(row=3, columnspan=2)
  77.  
  78. window.mainloop()
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement