https://github.com/Link-God/MO6/blob/master/main.py
Так. Для начала напишем несколько функций.
- Будет возвращать значение f(x), где f наш sin(x) + 0.5 Псевдокод: fun(x) return sin(x) + 0.5
2.Функция которая генерирует массив альф. Рассмотрим для r = 3. Те М = 1. (всего альф будет 3 тк r = 3). Как это работает. Сначла rnd(0,1). Те число(double) между 0 и 1. Это в середину. А по бокам два ОДИНАКОВЫХ числа от 0 до (1 - то что в середине) Пример a1 = 0.45 a0 = a2 = rnd(0,1-0.45) Полезная ссылка : https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution Возвращаем массив альф.
3.Функция которая накладывает шум. K = 0,1,2 ... 100 (тип массив) //объявляем какой-то массив array// xk смотрим в методе получаем новый элемент(f- 1 функция) el = f(xk) + rnd(-a,a) см. полезную ссылку выше элемент добавляем в массив array делаем так для каждого k return массив
4.Филтруем базар сигнал
fun(массив из пункта 3, массив альф(2 функция))
новый array(он меньше чем исходный на 2(ТОЛЬКО ДЛЯ r = 3 и М =1) тк мы отбросим крайние элементы)
для кажлоко k (а точнее j)
по формуле из методы (сами надеюсь сумму там напишите (ВАЖНО ТАМ ИНЕДКСЫ С 1 у альфа, и с нуля у f)) находим элемент
ВАЖНО проверять чтобы индексы не были OutOfRange.
Элемент пушим в массив.
return массив
5.Функция которая реализует подсчет омежки (далее омежка = w). Псевдокод: fun(массив фильтрованного сигрнала) по формуле из сетоды считаем возвращаем то что посчитали
6.Функция которая реализует подсчет дэльты (далее дэльты = d). fun(оба массива , фильтрованный и нет) считаем по формуле возвращаем
- Функция для J . fun(лямбда(= h), w , d) считаем возвращаем
ВСЁ с функциями
Пишем
Для каждого h (см методу их там 11 (0, 0.1, 0.2 ... 1 )) Делаем случайный поиск как в 5 лабе (каждый раз генерим альфу сигналы и w с d) J мин надо найти(за N итераций) и сохранить N раз (N посчитать можно по формуле заранее)
В итоге для каждой лямбды нашли J минимальное сличайным поиском и сохранили из вместе (еще надо хранить для каждой свой массив альф , массивы сигналов , и w c d)
Страшно : прямой пассивный поиск Не страшно : это всего лишь перебор с начала и тип до конца но нет (у нас функция унимодальная. короче на отрезке 1 минимум.) Элементы это наши J для каждой лямбды из этого следует берем 0 элемент . Тип он минимальный берем 1 элемент , если меньше нулевого , то новый минимум и так далее(при этом каждый раз булет меньше и меньше пока ...) НО Если новый элемент больше минимума , то break (тк мы знаем что дальше они опять возрастают) ЭТО ТИП ПАРАБОЛА РОГА ВВЕРХ (НУЖНО НАЙТИ ВЕРШИНУ) Нашли вершину Это все . мы молодцы . нашли минимум J и при каком она лямбде достинаеться MISSION COPMLITE