Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2сем / лаб / ЛР-1.docx
Скачиваний:
0
Добавлен:
04.04.2026
Размер:
59.06 Кб
Скачать

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

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

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

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

(МТУСИ)

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

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

ОТЧЕТ

по дисциплине "Введение в информационные технологии"

на тему:

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

Выполнил

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

Проверил

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

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

Москва 2025

Цель работы

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

- вычисление определенных интегралов;

- вычисление площадей с помощью метода Монте-Карло

Задание 1.1 (обязательная часть) “Вычисление определенного интеграла различными методами”

Задание 1.2 (дополнительная часть) “Сравнение точностей методов численного интегрирования при фиксированном шаге”

Задание 2.1 (обязательная часть) “Вычисление определенного интеграла методом Монте-Карло”

Задание 2.2 (обязательная часть) “Вычисление числа π методом Монте Карло”

Введение

Блок 1 “Способы вычисления определенных интегралов” Определенный интеграл I = ∫ b a f (x)dx может быть приближенно вычислен различными методами численного интегрирования. Рассмотрим некоторые из них: методы левых, правых и средних прямоугольников, метод трапеций, метод парабол (Симпсона) и метод Монте-Карло (будет рассмотрен позднее).

1. Методы прямоугольников можно рассматривать вместе ввиду того, что они очень схожи между собой. Методы основаны на разбиении отрезка интегрирования [a, b] на n равных частей длиной h = b−a n и замене подынтегральной функции f(x) на каждом из этих интервалов константой, равной значению функции либо в начале интервала (левый прямоугольник), либо в конце интервала (правый прямоугольник), либо посередине интервала (средний прямоугольник).

2. Метод трапеций заменяет подынтегральную функцию на линейную интерполяцию между соседними узлами сетки (значения функции в соседних точках соединяются прямой линией). Маленький участок интеграла (на шаге h) представляется в качестве прямоугольной трапеции с основаниями, параллельными оси OY и прямыми углами у стороны на оси OX. Площадь под графиком аппроксимируется суммой площадей указанных трапеций (образованных прямыми линиями, соединяющими значения функции в соседних точках).

3. Метод парабол (Симпсона) является наиболее сложным, но вместе с тем и наиболее точным из упомянутых алгоритмов численного интегрирования. Он использует параболическую интерполяцию через три последовательных узла сетки. Отрезок [a, b] разбивается на четное количество под интервалов, каждый из которых состоит из двух смежных интервалов длины h. На каждом таком двойном интервале функция интерполируется квадратичной функцией. Формулу для метода Симпсона (параболической интерполяции через 3 точки) предлагается самостоятельно найти в литературе или сети Интернет.

Блок 2 “Вычисление определенных интегралов методом Монте-Карло” Метод Монте-Карло относится к методам численного интегрирования с использованием псевдослучайных чисел. b f (x)dx Пусть требуется вычислить определенный интеграл I = ∫ a 𝑀 Пусть также подынтегральная функция положительна и ограничена сверху константой во всей области интегрирования: 0≤f (x)≤M. Будем генерировать точки со случайными координатами в прямоугольнике [a, b] × [0, М] с равномерным распределением внутри него. Для получения одной точки необходимо и достаточно сгенерировать пару независимых случайных чисел, первое из которых имеет равномерное распределение на отрезке [a, b], а второе — на отрезке [0, M].

Требования к знаниям студентов:

Основы синтаксиса Python 3:

- умение работать с переменными и знание типов данных

- умение работать со списками

- умение считывать данные из файла

- умение выводить данные в консоль/файл- знание условных конструкций if-elif-else

- умение писать циклы for/while

- умение создавать и вызывать функции, возращать значения

Базовое владение математическим аппаратом:

- понимание, что такое функция

- понимание геометрического смысла интеграла

Задания 1.1

def f(x): return 1 / (1 + x**3) def right_riemann_sum(k, l, m): h = (l - k) / m # Ширина прямоугольника total_area = 0 for i in range(1, n + 1): x_i = a + i * h # Точка справа total_area += f(x_i) * h # Площадь прямоугольника return total_area # Задаем границы интегрирования и количество разбиений a = 0 b = 1 n = 1000 # Чем больше n, тем точнее результат result = right_riemann_sum(a, b, n) print(f'Приближенное значение интеграла: {result}')

Этот код определяет функцию f(x), для заданного числа разбиений n. Чем больше n б тем точнее будет результат.

  1. Определение функции

def f(x):

return 1 / (1 + x**3)

  • Функция f(x) возвращает значение подынтегральной функции.

  1. Метод правых прямоугольников

def right_riemann_sum(k, l, m):

h = (l - k) / m # Ширина прямоугольника

total_area = 0

for i in range(1, m + 1): # Исправлено: используем m вместо n

x_i = k + i * h # Точка справа (правый конец отрезка)

total_area += f(x_i) * h # Площадь прямоугольника

return total_area

  • Параметры:

    • k, l — границы интегрирования (например, a и b).

    • m — количество разбиений (прямоугольников).

  • Шаг h:

    • Вычисляется как h=(b−a)/nh=nba​ — ширина каждого прямоугольника.

  • Цикл:

    • Для каждого отрезка разбиения берется правая точка (x_i = a + i * h).

    • Площадь каждого прямоугольника: f(xi)⋅hf(xi​)⋅h.

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

  1. Параметры интегрирования

a = 0 # Нижний предел

b = 1 # Верхний предел

n = 1000 # Количество разбиений

  • Чем больше n, тем точнее результат (но дольше вычисления).

  1. Вызов функции и вывод результата

result = right_riemann_sum(a, b, n)

print(f'Приближенное значение интеграла: {result}')

  • Вычисляется приближенное значение интеграла и выводится на экран.

Что вычисляет этот код?

Код вычисляет приближенное значение интеграла:

∫0111+x3 dx∫01​1+x31​dx

методом правых прямоугольников (значение функции берется в правом конце каждого отрезка разбиения).

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

Для n=1000n=1000 результат будет примерно:

Приближенное значение интеграла: 0.8353987857647097

(Точное значение этого интеграла: ≈0.835398≈0.835398, так что метод дает хорошее приближение).

Задания 1.2

import numpy as np def f(x): return 1 / (1 + x**3) #Аналитич. значение инт. analytical_value = 0.8353987857647097 def left_riemann_sum(a, b, n,): h = (b-a) / n total_area = 0 for i in range(n): total_area += f(a + i * h) * h return total_area def right_left_riemann_sum(a, b, n,): h = (b - a) / n total_area = 0 for i in range(1, n + 1): total_area += f(a + i * h) * h return total_area def central_left_riemann_sum(a, b, n,): h = (b - a) / n total_area = 0 for i in range(n): total_area += f(a +(i + 0.5) * h) return total_area def trapezoidal_rule(a, b, n): h = (b - a) / n total_area = (f(a) + f(b)) / 2 for i in range(1, n): total_area += f(a + i * h) return total_area * h def simpson_rule(a, b, n): if n % 2 != 0: # Убедимся, что n четное n += 1 h = (b - a) / n total_area = f(a) + f(b) for i in range(1, n, 2): total_area += 4 * f(a + i * h) for i in range(2, n, 2): # Исправлено n-1 → n total_area += 2 * f(a + i * h) return total_area * (h / 3) # Параметры интегрирования a, b = 0, 2 n = 1000 # Количество разбиений (шаг h = (b-a)/n) left = left_riemann_sum(a, b, n) right = right_left_riemann_sum(a, b, n) central = central_left_riemann_sum(a, b, n,) trapez = trapezoidal_rule(a, b, n) simpson = simpson_rule(a, b, n) # Вывод результатов print(f"Аналитическое значение: {analytical_value}") print(f"Метод левых прямоугольников: {left}, ошибка: {abs(left - analytical_value)}") print(f"Метод правых прямоугольников: {right}, ошибка: {abs(right - analytical_value)}") print(f"Метод средних прямоугольников: {central}, ошибка: {abs(central - analytical_value)}") print(f"Метод трапеций: {trapez}, ошибка: {abs(trapez - analytical_value)}") print(f"Метод Симпсона (парабол): {simpson}, ошибка: {abs(simpson - analytical_value)}")

 Общая структура кода

Код реализует 5 методов численного интегрирования и сравнивает их с аналитическим значением интеграла.

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