diff --git a/lab2/HookJeeves.py b/lab2/HookJeeves.py index f9af56c..bd3a447 100644 --- a/lab2/HookJeeves.py +++ b/lab2/HookJeeves.py @@ -90,44 +90,6 @@ def hooke_jeeves( return x, f(x), x_err -# def exploratory_search( -# f, x, delta, r=lambda x: True, fit=lambda a, b: a < b, x_err=None -# ): -# log() -# log("Выполняем исследующий поиск") - -# if x_err is None: -# x_err = get_errors_vector(x) - -# x_new = np.array(x) -# f_x_new = f(x_new) - -# for i in range(len(x)): -# x_up = x_new.copy() -# x_down = x_new.copy() - -# x_up[i] += delta[i] -# x_down[i] -= delta[i] - -# f_x_up = f(x_up) -# f_x_down = f(x_down) - -# if not r(x_up) or not r(x_down): -# log("Ограничение ОДЗ") - -# if fit(f_x_up, f_x_new) and fit(f_x_up, f_x_down) and r(x_up): -# x_new = x_up -# f_x_new = f_x_up -# elif fit(f_x_down, f_x_new) and r(x_down): -# x_new = x_down -# f_x_new = f_x_down - -# if any([x_new[i] != x[i] for i in range(len(x))]): -# log("Найдена точка", x_new, f(x_new)) - -# return x_new, x_err - - def exploratory_search( f, x, delta, r=lambda x: True, fit=lambda a, b: a < b, x_err=None, delta_err=None ): diff --git a/lab2/README.md b/lab2/README.md new file mode 100644 index 0000000..8a97fe6 --- /dev/null +++ b/lab2/README.md @@ -0,0 +1,73 @@ +# Лабораторная работа по вычислительной математике "Нелинейное программирование" + +## Запуск + +Склонировать проект и перейти в директорию проекта + +```shell +git clone ... project +cd project +``` + +Создать виртуальное окружение + +```shell +python3 -m venv .venv +``` + +Активировать ыиртуальное окружение + +```shell +#win powershell +.venv/Scripts/activate.ps1 + +# win bash +source + +# unix +source .venv/bin/activate +``` + +Установить зависимости + +```shell +pip install -r requirements.txt +``` + +Запустить скрипт + +```shell +python3 HookJeeves.py +``` + +Результат выполнения будет отображен в консоли и в файле `result.log` + +## Организация работы + +1. Лабораторная работа выполняется индивидуально. +2. Лабораторная работа состоит из двух частей, основная часть и дополнительные задания в зависимости от качества выполнения работы. +3. Выбрать можно любой из предложенных вариантов, которые отличаются уровнем сложности и, как следствием, максимальным числом баллов, которое можно получить за выполнение. +4. Оценивается результат выполнения, а не качество написанного кода. Допускается реализация на любом языке программирования или среде разработки позволяющей решить задачу (1С, Excel, MatLAB, Maple и тд). Например, можно использовать макросы в Excel, но нельзя использовать готовый плагин для решения задач. +5. Допускается использование математических библиотек и пакетов реализующих вспомогательные функции, такие как операции с векторами и матрицами, вычисление градиента и Гессиана, основные математические функции. Использование готовых методов оптимизации не допускается. + +## Общее задание + +1. Необходимо составить программную реализацию одного из изученных методов оптимизации полиномиальной функции с оценкой абсолютной погрешности работы данного метода. +2. Программа должна позволять ввести произвольные значения в заранее подготовленный файл, с клавиатуры или другим общепринятым способом. Генерация случайных данных не допускается. +3. Количество ненулевых коэффициентов в проверочных примерах должно быть не менее 10. +4. Результатом работы программы должны быть: + - Значения неизвестных (массив X) для минимума и максимума функции на заданном отрезке. + - Результаты подстановки неизвестных целевую функцию + - Оценки абсолютных погрешностей для найденных значений + - Поощряется вывод промежуточных вычислений и графиков функции. +5. Полученные абсолютные погрешности вычислений должны быть допустимыми, то есть не превышать половины единицы измерения искомых величин (не превышать 5%). + +## Пояснения по расчету погрешностей + +1. Для расчета погрешностей необходимо использовать формулы из соответствующей лекции со слайдов 7 и 8. Так как все алгоритмы подразумевают только выполнения базовых математических операций, то формулы со слайда 9, вам скорее всего не пригодятся. +2. Погрешности исходных данных считаются по умолчанию и равны половине последнего введенного знака. То есть для числа 48 абсолютная погрешность равна 0.5, а для числа 48.01 абсолютная погрешность равна 0.005. Отдельно вводить погрешности для входных данных не требуется. Таким образом для достижения требуемого результата значения на входе должны иметь достаточно малые абсолютные погрешности. +3. Для косвенной само-проверки расчета погрешностей разумно подсчитывать общее количество операций сложения, вычитания, умножения и деления. Это позволит понять где идет наибольшее накопление погрешностей и исправить ошибку. + +## Вариант задания + +![Вариант задания](docs/zadanie.png) diff --git a/lab2/docs/zadanie.png b/lab2/docs/zadanie.png new file mode 100644 index 0000000..2428370 Binary files /dev/null and b/lab2/docs/zadanie.png differ