Предмет: Информатика, автор: n3327546

Допоможіть срочно будь ласка сьогодні потрібно здати.
Задача на програмування

Створити додаток з використанням фреймворку Tkinter, який дозволяє виконувати моделювання

системи хижак-жертва, або вихорів з використання методу предиктор-коректор

Додаток має містити поля для введення:

• Кроку по часу dt

• Максимального часу розрахунку tmax.

• Початкові значення змінних

• Коефіцієнти рівнянь

Мають бути кнопки:

• Виконати розрахунок

• Очистити (за умовчуванням малюється кілька графіків, ця кнопка дозволяє залишити останній

графік)

• У випадку хижак-жертва має бути два графіка (фазова траєкторія та залежність від часу)

Графік повинен мати назву, та мають бути назви координатних осей. Якщо на графіку кілька

кривих, то мають бути підписи (legend).

За поданим кодом

import tkinter as tk

import matplotlib.pyplot as plt

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import numpy as np

def plot_graph(a):

# обчислення даних для графіка

x = np.linspace(-10, 10, 100)

y = a * x**2 + 2*x - 3

#ax.clear() # очистка графіка

ax.plot(x, y)

canvas.draw()

def on_click():

a = float(entry.get())

plot_graph(a)

def on_click_clear():

a = float(entry.get())

ax.clear()

plot_graph(a)

window = tk.Tk()

window.title("Побудова графіка функції")

window.geometry("800x600+100+100")

label = tk.Label(window, text="Coefficient a:")

label.grid(row=0, column=0)

entry = tk.Entry(window)

entry.insert(0,2)

entry.grid(row=0, column=1)

button = tk.Button(window, text="Plot graphics", command=on_click)

button.grid(row=1, column=0, columnspan=2)

button_clear = tk.Button(window, text="Clear graphics", command=on_click_clear)

button_clear.grid(row=1, column=1)

fig, ax = plt.subplots()

canvas = FigureCanvasTkAgg(fig, master=window)

canvas_widget = canvas.get_tk_widget()

canvas_widget.grid(row=2, column=0, columnspan=2)

window.mainloop()

Ответы

Автор ответа: ardrig09
1

Ответ:

У меня вышел такой код:

import tkinter as tk

import matplotlib.pyplot as plt

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import numpy as np

# Функція для моделювання системи хижак-жертва за допомогою методу предиктор-коректор

def predator_prey_model(x0, y0, a, b, c, d, dt, tmax):

# x0, y0 - початкові значення змінних (популяції хижаків і жертв)

# a, b, c, d - коефіцієнти рівнянь

# dt - крок по часу

# tmax - максимальний час розрахунку

# Повертає два масиви: t - час, x, y - популяції хижаків і жертв

# Кількість кроків

n = int(tmax / dt)

# Ініціалізація масивів

t = np.linspace(0, tmax, n+1)

x = np.zeros(n+1)

y = np.zeros(n+1)

# Початкові умови

x[0] = x0

y[0] = y0

# Рівняння Лотки-Вольтерри

def f(x, y):

return a * x - b * x * y

def g(x, y):

return -c * y + d * x * y

# Метод предиктор-коректор

for i in range(n):

# Предиктор (метод Ейлера)

xp = x[i] + dt * f(x[i], y[i])

yp = y[i] + dt * g(x[i], y[i])

# Коректор (метод трапецій)

x[i+1] = x[i] + dt/2 * (f(x[i], y[i]) + f(xp, yp))

y[i+1] = y[i] + dt/2 * (g(x[i], y[i]) + g(xp, yp))

return t, x, y

# Функція для побудови графіків

def plot_graph():

# Отримання даних з полів введення

x0 = float(entry_x0.get())

y0 = float(entry_y0.get())

a = float(entry_a.get())

b = float(entry_b.get())

c = float(entry_c.get())

d = float(entry_d.get())

dt = float(entry_dt.get())

tmax = float(entry_tmax.get())

# Моделювання системи хижак-жертва

t, x, y = predator_prey_model(x0, y0, a, b, c, d, dt, tmax)

# Очистка графіків

ax1.clear()

ax2.clear()

# Побудова графіків

ax1.plot(t, x, label="Хижаки")

ax1.plot(t, y, label="Жертви")

ax1.set_xlabel("Час")

ax1.set_ylabel("Популяція")

ax1.set_title("Залежність від часу")

ax1.legend()

ax2.plot(x, y)

ax2.set_xlabel("Хижаки")

ax2.set_ylabel("Жертви")

ax2.set_title("Фазова траєкторія")

# Оновлення графіків

canvas.draw()

# Створення вікна Tkinter

window = tk.Tk()

window.title("Моделювання системи хижак-жертва")

window.geometry("800x600+100+100")

# Створення полів введення

label_x0 = tk.Label(window, text="Початкова популяція хижаків:")

label_x0.grid(row=0, column=0)

entry_x0 = tk.Entry(window)

entry_x0.insert(0, 10)

entry_x0.grid(row=0, column=1)

label_y0 = tk.Label(window, text="Початкова популяція жертв:")

label_y0.grid(row=1, column=0)

entry_y0 = tk.Entry(window)

entry_y0.insert(0, 100)

entry_y0.grid(row=1, column=1)

label_a = tk.Label(window, text="Коефіцієнт a:")

label_a.grid(row=2, column=0)

entry_a = tk.Entry(window)

entry_a.insert(0, 0.1)

entry_a.grid(row=2, column=1)

label_b = tk.Label(window, text="Коефіцієнт b:")

label_b.grid(row=3, column=0)

entry_b = tk.Entry(window)

entry_b.insert(0, 0.01)

entry_b.grid(row=3, column=1)

label_c = tk.Label(window, text="Коефіцієнт c:")

label_c.grid(row=4, column=0)

entry_c = tk.Entry(window)

entry_c.insert(0, 0.01)

entry_c.grid(row=4, column=1)

label_d = tk.Label(window, text="Коефіцієнт d:")

label_d.grid(row=5, column=0)

entry_d = tk.Entry(window)

entry_d.insert(0, 0.00002)

entry_d.grid(row=5, column=1)

label_dt = tk.Label(window, text="Крок по часу dt:")

label_dt.grid(row=6, column=0)

entry_dt = tk.Entry(window)

entry_dt.insert(0, 0.1)

entry_dt.grid(row=6, column=1)

label_tmax = tk.Label(window, text="Максимальний час розрахунку tmax:")

label_tmax.grid(row=7, column=0)

entry_tmax = tk.Entry(window)

entry_tmax.insert(0, 100)

entry_tmax.grid(row=7, column=1)

# Створення кнопок

button = tk.Button(window, text="Виконати розрахунок", command=plot_graph)

button.grid(row=8, column=0, columnspan=2)

button_clear = tk.Button(window, text="Очистити графіки", command=lambda: [ax1.clear(), ax2.clear(), canvas.draw()])

button_clear.grid(row=9, column=0, columnspan=2)

# Створення графіків

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))

canvas = FigureCanvasTkAgg(fig, master=window)

canvas_widget = canvas.get_tk_widget()

canvas_widget.grid(row=10, column=0, columnspan=2)

# Запуск вікна

window.mainloop()

Надеюсь вам это поможет) С наступающим вас)

Похожие вопросы
Предмет: Музыка, автор: rrrddd