✅ Пост за 2-ю неделю


Обновление по проектам за неделю
Лабораторная работа 1: Моделирование в Python
Цель: Цель этой лабораторной работы — ознакомиться с моделированием с использованием Python и изучить ключевые программные приемы для генерации и визуализации данных. В рамках проекта я изучил базовые типы данных, команды ввода/вывода и статистические методы обработки случайных данных.
Задача 1: Генерация матрицы случайных чисел
Описание: В этом задании я создал матрицу размером 10 строк на 2 столбца, где каждый элемент заполнялся случайными числами, равномерно распределенными в заданном диапазоне. Это упражнение помогло мне исследовать, как можно генерировать случайные значения и визуализировать их в виде точек на графике.
Пример кода:
import numpy as np
import matplotlib.pyplot as plt
# Создание матрицы 10x2 случайных чисел
m = 10
n = 2
mu = 0
sigma = 10
matrix = np.random.uniform(mu, sigma, (m, n))
# Вывод матрицы
print(matrix)
# Визуализация данных в виде точек
plt.figure(figsize=(10, 6))
plt.scatter(matrix[:, 0], matrix[:, 1], alpha=0.8, color="red", label="Точки матрицы")
plt.xlim(0,12)
plt.ylim(0,12)
plt.xlabel("Ось X")
plt.ylabel("Ось Y")
plt.title("Равномерно распределенные случайные числа")
plt.grid(True)
plt.show()
Результат: Я сгенерировал матрицу 10x2 случайных значений и визуализировал эти точки на графике. Равномерное распределение обеспечило равномерное распределение значений по заданному диапазону. Итоговый график четко продемонстрировал случайность и распределение точек.
Задача 2: Генерация и анализ 1000 случайных чисел
Описание: В этом задании я сгенерировал 1000 случайных чисел с нормальным распределением, вычислил их среднее значение и дисперсию, а также визуализировал данные с помощью гистограммы.
Пример кода:
# Генерация 1000 случайных чисел с нормальным распределением
exp_sample_1000 = np.random.normal(scale=1, size=1000)
# Вычисление среднего значения и дисперсии
E = sum(exp_sample_1000)/len(exp_sample_1000)
Var = np.var(exp_sample_1000)
# Визуализация гистограммы
plt.figure(figsize=(10, 6))
plt.hist(exp_sample_1000, bins=30, density=True, alpha=0.8, color="skyblue", label="Гистограмма выборки")
plt.axvline(E, color='r', linewidth=3, label='Среднее значение')
plt.axvline(E + Var, color='g', linewidth=2, label="Среднее + Стандартное отклонение")
plt.axvline(E - Var, color='g', linewidth=2, label="Среднее - Стандартное отклонение")
plt.title("Гистограмма нормально распределенных данных")
plt.xlabel("Значение")
plt.ylabel("Плотность вероятности")
plt.legend()
plt.grid(True)
plt.show()
Результат: Сгенерированная гистограмма дала четкое визуальное представление нормального распределения. На графике я также выделил среднее значение и стандартное отклонение, что помогло подчеркнуть ключевые характеристики данных. Это задание укрепило мои знания о генерации и анализе случайных чисел в Python с использованием статистических методов.
Задача 3: Генерация случайной точки в квадрате
Описание: В заключительном задании я сгенерировал случайную точку, равномерно распределенную внутри квадрата. Упражнение было направлено на визуализацию размещения случайных точек в заданной области.
Пример кода:
# Функция для генерации случайной точки в квадрате
a = np.random.uniform(5)
def generate_point(a):
x1 = np.random.uniform(0, a)
y1 = np.random.uniform(0, a)
return x1, y1
# Визуализация точки внутри квадрата
x1, y1 = generate_point(a)
plt.figure(figsize=(10, 6))
plt.scatter(x1, y1, s=50, color="red", alpha=0.7, edgecolors="black", linewidths=1)
plt.xlim(0, a)
plt.ylim(0, a)
plt.xlabel("Ось X")
plt.ylabel("Ось Y")
plt.title("Случайная точка в квадрате")
plt.grid(True)
plt.show()
Результат: Это простое, но эффективное задание показало, как случайные точки могут быть равномерно распределены в 2D-пространстве. Оно помогло мне изучить концепции случайности в пространственных измерениях, что может быть применено к более сложным моделям.
Групповой проект 5: Моделирование эпидемии в научном программировании
Обзор: Этот проект был посвящен моделированию динамики эпидемии с использованием математических и вычислительных методов. Мы реализовали модель SIR (восприимчивые, зараженные, выздоровевшие) для симуляции реакции изолированной популяции на инфекционное заболевание.
Члены команды:
- Анастасия Супонина
- Михаил Лобов
- Всеволод Раджендран Нирдоши
Основные концепции:
Модель SIR: Классическая эпидемиологическая модель, разделяющая население на три категории: восприимчивые (S), зараженные (I) и выздоровевшие (R). Динамика модели описывается дифференциальными уравнениями, определяющими скорость изменений для каждой группы.
Уравнения модели: Мы реализовали основные уравнения модели SIR, которые описывают, как изменяется количество зараженных и восприимчивых со временем:
$$ \frac{dS}{dt} = -\beta \cdot S \cdot I $$ $$ \frac{dI}{dt} = \beta \cdot S \cdot I - \gamma \cdot I $$ $$ \frac{dR}{dt} = \gamma \cdot I $$Здесь \(\beta\) — коэффициент заражения, а \(\gamma\) — коэффициент выздоровления. Эти уравнения интегрировались по времени для симуляции распространения инфекции.
Реализация:
Мы использовали библиотеки Python, такие как NumPy и SciPy, для реализации модели, а Matplotlib — для визуализации результатов.
Основные шаги:
- Определили начальные условия для количества восприимчивых, зараженных и выздоровевших в популяции.
- Решили систему дифференциальных уравнений численными методами.
- Визуализировали результаты, чтобы показать, как со временем изменяется количество зараженных.
Вывод: Проект помог понять критическую важность математических моделей в эпидемиологии. Модель SIR, хотя и простая, предоставила мощные инсайты о том, как распространяется инфекция и как такие меры, как изоляция, могут влиять на динамику эпидемии.
Проект SQL базы данных
Описание: Параллельно я также работал над структурированием базы данных с использованием SQL. Этот проект включал проектирование и реализацию базы данных, которая могла бы эффективно хранить и управлять данными о различных продуктах.
SQL-скрипт:
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(255),
Price DECIMAL(10, 2),
Stock INT
);
INSERT INTO Products (ProductID, ProductName, Price, Stock) VALUES
(1, 'Ноутбук', 1200.00, 10),
(2, 'Мышь', 20.00, 150),
(3, 'Клавиатура', 30.00, 80);
-- Запрос для получения всех продуктов
SELECT * FROM Products;
Результат: SQL-скрипт успешно создал таблицу “Products” и добавил тестовые данные. Этот проект помог закрепить мои навыки управления базами данных SQL и способности эффективно организовывать данные для запросов и обновлений.