Python:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad
import tkinter as tk
from tkinter import ttk
# Функция для расчета с использованием scipy.quad
def calculate_capacity_quad(U, T):
I0 = U / 1000
tau = T / 6
integrand = lambda t: I0 * np.exp(-t / tau)
integral, _ = quad(integrand, 0, T)
C = integral / U
return C
# Функция для расчета методом трапеций
def calculate_capacity_trapezoidal(U, T, n=1000):
I0 = U / 1000
tau = T / 6
h = T / n
t_values = np.linspace(0, T, n + 1)
i_values = I0 * np.exp(-t_values / tau)
integral = (h / 2) * np.sum(i_values[:-1] + i_values[1:])
C = integral / U
return C
# Построение графика
def plot_current(U, T):
I0 = U / 1000
tau = T / 6
t_values = np.linspace(0, T, 1000)
i_values = I0 * np.exp(-t_values / tau)
plt.figure()
plt.plot(t_values, i_values)
plt.xlabel('Время (s)')
plt.ylabel('Ток (A)')
plt.title('Разряд тока с течением времени')
plt.grid(True)
plt.show()
# Функция для расчета и отображения результата
def calculate():
U = float(entry_U.get())
T = float(entry_T.get())
method = method_var.get()
if method == 'scipy.quad':
C = calculate_capacity_quad(U, T)
else:
C = calculate_capacity_trapezoidal(U, T)
result_label.config(text=f'Расчетная мощность: {C:.6e} F')
plot_current(U, T)
# Создание интерфейса
import numpy as np
from scipy.integrate import quad
import matplotlib.pyplot as plt
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
# ... (остальной код, функции calculate_capacity_quad, calculate_capacity_trapezoidal, plot_current) ...
def calculate():
try:
U = float(entry_U.get())
T = float(entry_T.get())
method = method_var.get()
if method == 'scipy.quad':
C = calculate_capacity_quad(U, T)
else:
C = calculate_capacity_trapezoidal(U, T)
result_label.config(text=f'Емкость: {C:.6e} Ф')
plot_current(U, T)
except ValueError:
messagebox.showerror("Ошибка", "Некорректные данные ввода")
# Создание интерфейса
root = tk.Tk()
root.title('Вычислитель емкости конденсатора')
# Фрейм для ввода данных
input_frame = tk.Frame(root)
input_frame.pack(pady=10)
tk.Label(input_frame, text='Напряжение U (В):').grid(row=0, column=0, padx=5)
entry_U = tk.Entry(input_frame)
entry_U.grid(row=0, column=1, padx=5)
tk.Label(input_frame, text='Время разряда T (с):').grid(row=1, column=0, padx=5)
entry_T = tk.Entry(input_frame)
entry_T.grid(row=1, column=1, padx=5)
# Фрейм для выбора метода
method_frame = tk.Frame(root)
method_frame.pack(pady=10)
tk.Label(method_frame, text='Метод расчета:').grid(row=0, column=0, padx=5)
method_var = tk.StringVar(value='scipy.quad')
method_menu = ttk.Combobox(method_frame, textvariable=method_var, values=['scipy.quad', 'trapezoidal'])
method_menu.grid(row=0, column=1, padx=5)
# Кнопка "Вычислить"
calc_button = tk.Button(root, text='Вычислить', command=calculate, width=10)
calc_button.pack(pady=10)
# Метка для отображения результата
result_label = tk.Label(root, text='Емкость:', font=("TkDefaultFont", 12))
result_label.pack()
root.mainloop()
Взял код интерфейса у друга, но нужно что-то индивидуальное и не сложное
Python 3.12.3