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

2сем / лаб / ЛР-6

.docx
Скачиваний:
0
Добавлен:
04.04.2026
Размер:
41.7 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

СВЯЗИ И ИНФОРМАТИКИ

(МТУСИ)

Факультет "Сети и системные связи"

Кафедра “ВвИТ"

ОТЧЕТ

по дисциплине " Построение 2D графиков в Python

"Лабораторная работа №6"

Выполнил

Студент гр. БИН2412 ____________________ Джумъаев Ф.Н.

Проверил

Преподаватель ___________________

Дата защиты _________2025г.

Москва 2025

Цель работы

Знакомство с численными методами для решения задач:

- построение 2D графиков

Задание 1.1 (основная часть) “Построение массива точек”

Задание 1.2 (основная часть) “Построение графика функции”

Введение

Блок 1 “Построение 2D графиков” Библиотека matplotlib — один из наиболее популярных инструментов для визуализации данных в Python. Она позволяет создавать различные типы двумерных графиков, начиная от простых точечных диаграмм и заканчивая сложными графиками функций и трехмерными изображениями. Рассмотрим простейший пример - построим график прямой линии. import numpy as np import matplotlib.pyplot as plt # Генерируем массив значений x x = np.linspace(-10, 10, 100) # Вычисляем значения y = x^2 y = x ** 2 # Создаем график plt.plot(x, y) # Добавляем заголовок и подписи к осям plt.title('График квадратичной функции') plt.xlabel('X ось') plt.ylabel('Y ось') # Отображаем график plt.show() Теперь рассмотрим случай, когда мы хотим построить набор (массив) отдельных точек в координатных осях. import numpy as np import matplotlib.pyplot as plt # Массив случайных значений X и Y np.random.seed(0) x = np.random.randn(50) y = np.random.randn(50) # Строим точки plt.scatter(x, y, color='blue', marker='o') # Заголовок и подписи к осям plt.title('Диаграмма рассеяния') plt.xlabel('Ось X') plt.ylabel('Ось Y') # Показываем график plt.show() Помимо стандартных сплошных линий ('-'), библиотека поддерживает другие стили отображения: Строка '-' '--' '-.' ':' 'None' Описание Сплошная линия Штриховая линия Штрих-пунктирная Точка-штрих Нет линии Пример изменения стиля линии: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) y = np.sin(x) plt.plot(x, y, linestyle='--') # Используем штриховую линию plt.title('Синусоидальная кривая') plt.xlabel('Время') plt.ylabel('Амплитуда') plt.show() Можно также настроить внешний вид маркеров (точек), используемых для обозначения точек на графике. Параметр '.' ',' 'o' '+' '*' 's' 'd' Пример настройки маркера: import numpy as np import matplotlib.pyplot as plt x = np.arange(10) y = np.exp(x / 10) Значение Точка Пиксел Круг Плюс Звезда Квадрат Ромб plt.plot(x, y, marker='*', markersize=8, markeredgecolor='black', linewidth=0) plt.title('Экспоненциальная зависимость') plt.xlabel('Индекс') plt.ylabel('Значение экспоненты') plt.show() Для того, чтобы сделать графики более читабельными, можно добавить сетку и изменить оформление осей. import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) y = np.cos(x) plt.figure(figsize=(8, 6)) # Размер окна графика plt.plot(x, y, label='Косинус') plt.grid(True) # Включаем сетку plt.legend() # Подписываем легенду plt.title('График косинуса') plt.xlabel('Угол в радианах') plt.ylabel('Значение функции') plt.show()

Задания 1.1

import numpy as np import matplotlib.pyplot as plt # Ввод диапазонов координат x_min = float(input("Введите минимальное значение x: ")) x_max = float(input("Введите максимальное значение x: ")) y_min = float(input("Введите минимальное значение y: ")) y_max = float(input("Введите максимальное значение y: ")) # Генерация 10 случайных точек np.random.seed(42) # Для воспроизводимости результатов x_coords = np.random.uniform(x_min, x_max, 10) y_coords = np.random.uniform(y_min, y_max, 10) # Создание графика plt.figure(figsize=(8, 6)) plt.scatter(x_coords, y_coords, color='blue', marker='o', s=100, edgecolor='black') # Настройка отображения plt.xlim(x_min - 1, x_max + 1) # +1 для лучшей видимости границ plt.ylim(y_min - 1, y_max + 1) plt.grid(True, linestyle='--', alpha=0.7) plt.title('Случайные точки в заданном диапазоне', fontsize=14) plt.xlabel('Ось X', fontsize=12) plt.ylabel('Ось Y', fontsize=12) # Добавление подписей к точкам for i, (x, y) in enumerate(zip(x_coords, y_coords)): plt.text(x, y, f' {i+1}', fontsize=10, verticalalignment='center') plt.show()

1. Импорт библиотек

import numpy as np

import matplotlib.pyplot as plt

  • numpy (np) - для работы с массивами и генерации случайных чисел.

  • matplotlib.pyplot (plt) - для визуализации данных.

2. Ввод диапазонов координат

x_min = float(input("Введите минимальное значение x: "))

x_max = float(input("Введите максимальное значение x: "))

y_min = float(input("Введите минимальное значение y: "))

y_max = float(input("Введите максимальное значение y: "))

  • Пользователь задает границы прямоугольной области, в которой будут генерироваться точки.

  • float() преобразует введенные строки в числа с плавающей точкой.

3. Генерация случайных точек

np.random.seed(42)

x_coords = np.random.uniform(x_min, x_max, 10)

y_coords = np.random.uniform(y_min, y_max, 10)

  • np.random.seed(42) фиксирует генератор случайных чисел для воспроизводимости результатов.

  • np.random.uniform() генерирует:

    • 10 значений X в диапазоне [x_min, x_max]

    • 10 значений Y в диапазоне [y_min, y_max]

4. Создание графика

plt.figure(figsize=(8, 6))

plt.scatter(x_coords, y_coords, color='blue', marker='o', s=100, edgecolor='black')

  • plt.figure(figsize=(8, 6)) - создает график размером 8x6 дюймов.

  • plt.scatter() рисует точки с параметрами:

    • color='blue' - синий цвет заливки,

    • marker='o' - круглые маркеры,

    • s=100 - размер точек (в пунктах),

    • edgecolor='black' - черная обводка.

5. Настройка отображения

plt.xlim(x_min - 1, x_max + 1)

plt.ylim(y_min - 1, y_max + 1)

plt.grid(True, linestyle='--', alpha=0.7)

plt.title('Случайные точки в заданном диапазоне', fontsize=14)

plt.xlabel('Ось X', fontsize=12)

plt.ylabel('Ось Y', fontsize=12)

  • xlim()/ylim() - устанавливают границы осей с запасом ±1 для лучшей видимости.

  • grid() добавляет сетку:

    • linestyle='--' - штриховая линия,

    • alpha=0.7 - полупрозрачность.

  • title(), xlabel(), ylabel() - добавляют заголовок и подписи осей.

6. Подписи точек

for i, (x, y) in enumerate(zip(x_coords, y_coords)):

plt.text(x, y, f' {i+1}', fontsize=10, verticalalignment='center')

  • Цикл перебирает точки и добавляет рядом их порядковые номера (1-10).

  • enumerate(zip(...)) объединяет координаты X и Y с индексами.

  • verticalalignment='center' выравнивает текст по вертикали.

7. Отображение графика

plt.show()

Выводит окно с графиком.

Пример работы:

Ввод:

Введите минимальное значение x: -5

Введите максимальное значение x: 5

Введите минимальное значение y: -3

Введите максимальное значение y: 3

Задания 1.2

import numpy as np import matplotlib.pyplot as plt # Создаем массив значений x от -5 до 5 с шагом 0.1 x = np.linspace(-5, 5, 200) # Определяем две нелинейные функции def func1(x): return np.sin(x) * np.exp(-0.1*x) # Затухающая синусоида def func2(x): return 0.5*x**3 - 2*x**2 + x + 3 # Кубическая функция # Создаем график с двумя подграфиками plt.figure(figsize=(12, 6)) # Первый график - сплошная линия plt.plot(x, func1(x), label=r'$f_1(x) = \sin(x) \cdot e^{-0.1x}$', linestyle='-', # Сплошная линия linewidth=2, color='blue') # Второй график - штрих-пунктирная линия plt.plot(x, func2(x), label=r'$f_2(x) = 0.5x^3 - 2x^2 + x + 3$', linestyle='-.', # Штрих-пунктир linewidth=2, color='red') # Настройка оформления plt.title('Графики нелинейных функций', fontsize=14, pad=20) plt.xlabel('Ось X', fontsize=12) plt.ylabel('Ось Y', fontsize=12) plt.grid(True, linestyle=':', alpha=0.7) plt.axhline(0, color='black', linewidth=0.5) plt.axvline(0, color='black', linewidth=0.5) plt.legend(fontsize=12) # Установка пределов осей plt.xlim(-5, 5) plt.ylim(-5, 8) # Добавляем подписи к интересным точкам plt.annotate('Локальный максимум', xy=(1.5, func2(1.5)), xytext=(2, 6), arrowprops=dict(facecolor='black', shrink=0.05)) plt.annotate('Точка перегиба', xy=(0, func1(0)), xytext=(-4, 0.5), arrowprops=dict(facecolor='black', shrink=0.05)) plt.tight_layout() plt.show()

1. Импорт библиотек и подготовка данных

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 200)

  • numpy (np) - для математических операций и работы с массивами

  • matplotlib.pyplot (plt) - для визуализации

  • np.linspace() создает массив из 200 точек от -5 до 5 (ось X)

2. Определение нелинейных функций

def func1(x):

return np.sin(x) * np.exp(-0.1*x) # Затухающая синусоида

def func2(x):

return 0.5*x**3 - 2*x**2 + x + 3 # Кубическая функция

  • func1: комбинация синуса и экспоненты (осцилляции с затуханием)

  • func2: кубический полином (S-образная кривая)

3. Настройка графика

plt.figure(figsize=(12, 6))

  • Создается фигура размером 12x6 дюймов

4. Построение графиков

plt.plot(x, func1(x),

label=r'$f_1(x) = \sin(x) \cdot e^{-0.1x}$',

linestyle='-', # Сплошная линия

linewidth=2,

color='blue')

  • Первая функция: синяя сплошная линия толщиной 2

  • Используется LaTeX-нотация для красивого отображения формулы

plt.plot(x, func2(x),

label=r'$f_2(x) = 0.5x^3 - 2x^2 + x + 3$',

linestyle='-.', # Штрих-пунктир

linewidth=2,

color='red')

  • Вторая функция: красная штрих-пунктирная линия

5. Оформление графика

plt.title('Графики нелинейных функций', fontsize=14, pad=20)

plt.xlabel('Ось X', fontsize=12)

plt.ylabel('Ось Y', fontsize=12)

  • Добавлены заголовок и подписи осей

plt.grid(True, linestyle=':', alpha=0.7)

plt.axhline(0, color='black', linewidth=0.5)

plt.axvline(0, color='black', linewidth=0.5)

  • Сетка с пунктирными линиями

  • Черные оси X и Y через (0,0)

plt.legend(fontsize=12)

  • Легенда с формулами функций

6. Настройка осей и аннотаций

plt.xlim(-5, 5)

plt.ylim(-5, 8)

  • Фиксированные пределы осей

plt.annotate('Локальный максимум', xy=(1.5, func2(1.5)),

xytext=(2, 6),

arrowprops=dict(facecolor='black', shrink=0.05))

  • Аннотация для локального максимума кубической функции

plt.annotate('Точка перегиба', xy=(0, func1(0)),

xytext=(-4, 0.5),

arrowprops=dict(facecolor='black', shrink=0.05))

  • Аннотация для точки перегиба затухающей синусоиды

7. Финализация

plt.tight_layout()

plt.show()

  • Автоматическая подгонка элементов

  • Отображение графика

Ключевые особенности:

  1. Использование разных стилей линий для наглядности

  2. Подробные аннотации для ключевых точек

  3. Профессиональное оформление с LaTeX-формулами

  4. Четкая сетка и оси координат

  5. Оптимальный диапазон значений для визуализации

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

Заключение

1. Построение массива точек (Задание 1.1)

 Что было сделано:

  • Написал программу, которая генерирует 10 случайных точек в заданных диапазонах по осям X и Y.

  • Реализовал интерактивный ввод границ (x_min, x_max, y_min, y_max).

  • Визуализировал точки с помощью plt.scatter(), добавил подписи и номера.

 Что я узнал:

  • Как работать с генерацией случайных чисел (np.random.uniform).

  • Как настраивать внешний вид точечного графика (цвет, размер, обводка).

  • Как добавлять аннотации к точкам.

2. Построение графиков функций (Задание 1.2)

 Что было сделано:

  • Выбрал две нелинейные функции:

    1. Затухающая синусоида (sin(x) * exp(-0.1x)).

    2. Кубический полином (0.5x³ - 2x² + x + 3).

  • Построил их графики с разными стилями линий (сплошная и штрих-пунктирная).

  • Добавил легенду с формулами, сетку, оси координат и аннотации для ключевых точек.

 Что я узнал:

  • Как визуализировать сложные математические функции.

  • Как настраивать стили линий (linestyle), цвета и толщину.

  • Как подписывать графики с помощью LaTeX-формул.

Общие выводы

  1. Библиотеки:

    • matplotlib — мощный инструмент для создания профессиональных графиков.

    • numpy упрощает работу с математическими функциями.

  2. Применение:

    • Для анализа данных удобны точечные графики (scatter).

    • Для изучения поведения функций — линейные графики (plot).

  3. Совершенствование:

    • Научился делать графики более читаемыми (сетка, подписи, аннотации).

    • Понял важность выбора правильного стиля визуализации.

Итог

Эта работа научила меня:  Создавать базовые и сложные 2D-графики.  Настраивать их оформление для лучшего восприятия.  Анализировать данные через визуализацию.

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