Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаб 1 / лабачет

.docx
Скачиваний:
12
Добавлен:
20.09.2024
Размер:
262.13 Кб
Скачать

Вариант-3

Задание 1 Построить модель, описанную в примере 1.

Получить трехмерные графики зависимостей изменения угла отклонения груза, от различных параметров (параметр определяется по номеру варианта по таблице, приведенной ниже). №Варианта Параметр 1, 2, 3, 4, 5 Масса пули

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Константы M = 10 # масса груза (кг) g = 9.8 # ускорение свободного падения (м/с^2) l = 1 # длина подвеса груза (м) # Создание массива массы пули и скорости пули m = np.arange(0.001, 0.031, 0.001) # массив массы пули от 0.001 до 0.03 кг v = np.arange(50, 350, 10) # массив скорости пули от 50 до 340 м/с m_grid, v_grid = np.meshgrid(m, v) ## добавил +++++++++++++++ v_grid -cкорость пули # Расчет угла отклонения a_grid = np.arccos(1 - m_grid**2 * v_grid**2 / (2 * (m_grid + M)**2 * g * l)) a_grid = np.degrees(a_grid) # переводим радианы в градусы # Построение трёхмерного графика зависимости угла отклонения от массы пули и скорости fig = plt.figure(figsize=(12, 9)) ax = fig.add_subplot(111, projection='3d') # Установка данных для графика ax.plot_surface(m_grid * 1000, v_grid, a_grid, cmap='viridis') # Подписываем оси на русском языке ax.set_xlabel('Масса пули (граммы)') ax.set_ylabel('Скорость пули (м/с)') ax.set_zlabel('Угол отклонения (градусы)') ## ax.set_title('Угол отклонения в зависимости от массы пули и скорости пули') plt.show()

Вывод: В данной программе исследуется влияние массы пули на угол отклонения груза и зависимость скорости пули от угла отклонения. Рассмотрим два основных графика, полученных в результате расчетов:

С увеличением массы пули угол отклонения груза увеличивается. Это говорит о том, что более тяжелая пуля создает большее воздействие на груз, что приводит к большему углу отклонения.

С увеличением угла отклонения скорость пули также возрастает, что указывает на необходимость для пули увеличения энергии для поддержания движущей силы при большем отклонении.

Задание 2 Разработайте программу с GUI, которая позволяет пользователю выбрать одну из тригонометрических функций и построить ее график.

# pip install matplotlib numpy import tkinter as tk from tkinter import ttk import numpy as np import matplotlib.pyplot as plt #импорт модуля с псевдонимом plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg # Функции для построения графиков def plot_function(func_name): # Создание данных для графика x = np.linspace(-2 * np.pi, 2 * np.pi, 1000) if func_name == 'sin': y = np.sin(x) elif func_name == 'arctan': y = np.arctan(x) #elif func_name == 'atan': # y = np.atan(x) elif func_name == 'cos': y = np.cos(x) elif func_name == 'tan': y = np.tan(x) y[np.abs(y) > 10] = np.nan # Ограничение значений для лучшего отображения else: return # Очистка предыдущего графика ax.clear() # Построение графика ax.plot(x, y) ax.set_title(f'График функции {func_name}') ax.set_xlabel('x') ax.set_ylabel(f'{func_name}(x)') ax.grid(True) # Обновление графика canvas.draw() # Функция обработки изменения выбора def on_function_change(event): func_name = func_var.get() plot_function(func_name) # Настройка окна GUI root = tk.Tk() root.title("График тригонометрических функций") # Создание выпадающего списка func_var = tk.StringVar() func_var.set('sin') # Устанавливаем значение по умолчанию func_menu = ttk.Combobox(root, textvariable=func_var, values=['sin', 'cos', 'tan','arctan']) func_menu.bind('<<ComboboxSelected>>', on_function_change) func_menu.pack(pady=10) # Создание области для графика fig, ax = plt.subplots(figsize=(8, 6)) canvas = FigureCanvasTkAgg(fig, master=root) canvas_widget = canvas.get_tk_widget() canvas_widget.pack(fill=tk.BOTH, expand=True) # Построение начального графика plot_function(func_var.get()) # Запуск GUI root.mainloop() # обрабатывает все, что проиходит в интерфейсе

Tkinter: Библиотека для создания графического интерфейса пользователя (GUI) в Python.

  • Модуль tk для основного окна и элементов управления.

  • Модуль ttk для более современных виджетов.

NumPy: Библиотека для работы с массивами и числовыми вычислениями.

  • Используется для создания массивов и математических расчетов.

Matplotlib: Библиотека для визуализации данных.

  • Модуль pyplot для построения графиков.

  • FigureCanvasTkAgg для интеграции Matplotlib с Tkinter.

Вывод: сделал GUI в котором я могу выбирать графики (тангенс, синус, косинус) в режиме реального времени с помощью функции root.mainloop() и они будут отображаться

Задание 3 Разработайте модель в MatLab с применением GUI. Пример возможного внешнего вида модели представлен на рисунке 6.

import tkinter as tk from tkinter import ttk import numpy as np import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.animation import FuncAnimation #библиотека !!!!! анимации # Глобальные переменные для анимации x_data = [] y_data = [] line = None def animate(i): #принимает параметр i """Функция для анимации графика.""" if i < len(x_data): ## не выходит ли i за границы массива line.set_data(x_data[:i], y_data[:i]) return line, def plot_graph(): """Функция для построения графика.""" global x_data, y_data, line # Получение данных из полей ввода try: a = float(entry_a.get()) b = float(entry_b.get()) c = float(entry_c.get()) x_min = float(entry_x_min.get()) x_max = float(entry_x_max.get()) speed = float(entry_speed.get()) except ValueError: result_label.config(text="Введите корректные числовые значения") return # Создание данных для графика x = np.linspace(x_min, x_max, 1000) y = a * np.sin(b * x) + c x_data, y_data = x, y # Очистка предыдущего графика ax.clear() line, = ax.plot([], [], lw=2) ax.set_xlim(x_min, x_max) ax.set_ylim(np.min(y), np.max(y)) ax.set_title('График функции') ax.set_xlabel('x') ax.set_ylabel('y') ax.grid(True) # Анимация графика ani = FuncAnimation(fig, animate, frames=len(x_data), interval=speed, blit=True,repeat=False) # Обновление графика canvas.draw() # Настройка окна GUI root = tk.Tk() root.title("Построение графика функции с анимацией") # Создание и размещение виджетов tk.Label(root, text="Амплитуда:").pack(pady=5) entry_a = tk.Entry(root) entry_a.pack(pady=5) tk.Label(root, text="Частота:").pack(pady=5) entry_b = tk.Entry(root) entry_b.pack(pady=5) tk.Label(root, text="Смещение:").pack(pady=5) entry_c = tk.Entry(root) entry_c.pack(pady=5) tk.Label(root, text="x_min:").pack(pady=5) entry_x_min = tk.Entry(root) entry_x_min.pack(pady=5) tk.Label(root, text="x_max:").pack(pady=5) entry_x_max = tk.Entry(root) entry_x_max.pack(pady=5) tk.Label(root, text="Скорость анимации (мс):").pack(pady=5) entry_speed = tk.Entry(root) entry_speed.pack(pady=5) plot_button = tk.Button(root, text="Построить график", command=plot_graph) plot_button.pack(pady=20) result_label = tk.Label(root, text="") result_label.pack(pady=5) # Создание области для графика fig, ax = plt.subplots(figsize=(8, 6)) canvas = FigureCanvasTkAgg(fig, master=root) canvas_widget = canvas.get_tk_widget() canvas_widget.pack(fill=tk.BOTH, expand=True) # Запуск GUI root.mainloop()

tkinter

Описание: Это стандартная библиотека для создания графического интерфейса пользователя (GUI) в Python.

Использование: Позволяет создавать окна, кнопки, текстовые поля и другие элементы интерфейса. Например, вы можете создать основное окно приложения и разместить в нем различные виджеты.

2. ttk

Описание: Это подмодуль библиотеки tkinter, который предоставляет более современные и стилизованные виджеты.

Использование: Используется для создания более красивых интерфейсов. Например, ttk.Combobox или ttk.Button предлагают дополнительные стили и функциональные возможности.

3. numpy

Описание: Это библиотека для работы с многомерными массивами и числовыми вычислениями.

Использование: Широко применяется для выполнения математических операций, создания массивов и работы с векторами и матрицами. Например, np.linspace используется для генерации равномерно распределенных значений.

4. matplotlib.pyplot

Описание: Это модуль из библиотеки Matplotlib, который обеспечивает интерфейс для построения графиков.

Использование: Позволяет создавать различные виды графиков (линейные, точечные и т. д.), а также настраивать их внешний вид. Функции, такие как plt.plot(), plt.xlabel(), plt.ylabel() и другие, используются для построения и настройки графиков.

FigureCanvasTkAgg

Описание: Это класс, который позволяет интегрировать графики Matplotlib в приложения Tkinter.

Использование: Создает область для отображения графика в окне Tkinter, что позволяет отображать визуализации внутри GUI.

6. matplotlib.animation.FuncAnimation

Описание: Это класс для создания анимации графиков в Matplotlib.

Использование: Позволяет обновлять график в реальном времени, создавая анимацию путем периодического вызова заданной функции. Это полезно для визуализации динамических процессов, таких как изменение данных с течением времени.

Вывод: сделал GUI, в котором строятся графики по вводимым условиям (частота, амплитуда, xmax, xmin, а также скорость анимации графика)

Соседние файлы в папке лаб 1