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

2сем / лаб пдф / ВвИТ_2сем24_ЛР3 (2)

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

Лабораторная работа №3

Введение в численные методы на Python: Аппроксимация и интерполяция данных измерений. Метод наименьших квадратов

Технические требования:

Среда разработки для написания кода на Python Компилятор Python 3 (+ стандартный набор библиотек)

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

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

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

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

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

-умение выводить данные в консоль/файл

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

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

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

-умение генерировать случайные числа с заданным распределением Базовое владение математическим аппаратом:

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

Цель работы:

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

Теоретическое введение:

Блок 1 “Аппроксимация и интерполяция данных измерений”

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

Аппроксимация — это процесс подбора функции, которая близко проходит через заданные точки, но не обязательно точно через каждую точку. Основная цель аппроксимации — описать общую тенденцию набора данных или упростить сложную функцию до более простой формы

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

Положительные и отрицательные черты каждого метода видны из определений: интерполяция гарантирует точное прохождение через все точки, однако аппроксимация более гибкая и может с небольшими поправками учитывать шум или ошибки в данных, обеспечивая лучшее обобщение. Требование точного соответствия всем точкам у интерполяции зачастую приводит к переобучению: случайное отклонение при регистрации одной из точек параболы 2 степени может привести к тому, что интерполяция данных измерений выдаст сложную функцию 10 или даже 20 степени.

В разных задачах выбор между методами присходит исходя из целей обработки информации. Аппроксимация чаще применяется в задачах прогнозирования и анализа данных, где важны общие тенденции. Интерполяция полезна там, где необходимо точное восстановление сигнала или функции, например, в инженерных расчетах или обработке изображений.

Блок 2 “Линейная аппроксимация – метод наименьших квадратов”

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

Допустим, мы имеем набор точек (x1, y1), (x2, y2), …, (xn, yn) где xi — независимая переменная, а yi — зависимая переменная. Мы хотим найти прямую линию вида y=a+bx, которая наилучшим образом аппроксимирует эти данные.

Шаг 1: Определение целевой функции Целевой функцией является сумма квадратов ошибок:

где yi — наблюдаемое значение, а a+bxi — предсказанное значение. Шаг 2: Минимизация целевой функции

Чтобы минимизировать функцию S(a,b), нужно взять частные производные по параметрам a и b и приравнять их к нулю:

Шаг 3: Вычисление частных производных Частная производная по параметру a:

Приравниваем её к нулю:

Частная производная по параметру b:

Приравниваем её к нулю:

Шаг 4: Решение системы уравнений

Получили систему двух линейных уравнений относительно a и b. Решая эту систему, находим оптимальные значения параметров a и b:

Шаг 5: Подстановка найденных значений

Подставляем найденные значения a и b в уравнение прямой линии y=a+bx, чтобы получить искомую регрессию.

Практическая часть

Задание 1.1 (обязательная часть) “Аппроксимация данных с помощью МНК”

С помощью метода наименьших квадратов произведите линейную аппроксимацию массива заданных точек (xi, yi).

import random x = []

y = []

aInit = float(input ('Please enter a coef in y=a+bx: ')) bInit = float(input ('Please enter b coef in y=a+bx: ')) xStart = 0.0

xStop = 100.0 deviationPer = 0.05 for i in range (10000):

x.append(random.uniform(xStart, xStop))

y.append((aInit + bInit * x[i])*random.uniform(1.0 - deviationPer, 1.0 + deviationPer))

Всписке x хранятся 10000 независимых аргументов х в диапазоне от 0 до 100, в списке y хранятся соответствующие им значения некой линейной зависимости от х, так что y[i] = y(x[i]).

Впеременных aInit и bInit хранятся коэффициенты исходной зависимости. Переменная deviationPer показывает максимально возможное отклонение

измерения y от настоящей зависимости.

Для запуска разместите данный код в начале своего файла. По запросу программы введите коэффициенты a и b (выбрать можно самостоятельно). Далее напишите код Вашей программы по обработке массивов x и y. В конце программы введите посчитанные Вами коэффициенты a и b, сравните их с введёнными. Почему они отличаются? Что можно изменить в приведённом или Вашем коде, чтобы значения a и b стали ближе к истинным? В качестве проверки своего кода можно установить значение переменной deviationPer равным 0. В таком случае отклонений не будет, а все точки окажутся на одной прямой. Верно работающий метод наименьших квадратов должен выдать значения a и b полностью совпадающими с введёнными.

Заключение:

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

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

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