Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
магистр _сгм - копия1111111.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.4 Mб
Скачать
  • Определить величину :

    если , то ; ; ; k=1;

    если , то ; ; ; k=1.

    Найти следующую точку

    1. Проверить условие убывания функции

    если и , то ;

    если и , то .

    в обоих случаях положить k=k+1 и перейти к шагу 5;

    Если , процедура завершается. При положить , а при положить . В результате [ ] - искомый начальный интервал неопределенности.

    Реализация данной задачи в пакете MathCAD 14

    Задача нахождения максимума функции f(x)сводится к задаче нахождения минимума функции f(x)путем замены знака перед функцией на противоположный.

    Следовательно, данную задачу решаем для следующей функции:

    Задание функции, реализующей алгоритм Свенна:

    Из чего можно сделать вывод, что f(x) унимодальная на отрезке [-2,0]

    Метод перебора

    Найти минимум функции методом перебора с заданной точностью. Этот метод является простейшим из прямых методов минимизации.

    Пусть f(x) – унимодальная на отрезке [a, b] функция. Разобьем отрезок [a, b] на n равных частей точками x0, x1, x2, …, xn, так, что

    xi = a + ih, i = 0, 1, … , n, h = .

    Вычислим значения функции f(x) в точках xi и сравнив их, найдем точку xm, для которой f(xm) = f(xi).

    За приближение x* примем xm.Оценим погрешность метода перебора.

    В силу выбора точки xm справедливы неравенства

    f(xm–1)  f(xm), т.е. x*  [xm–1, b];

    f(xm)  f(xm+1), т.е. x*  [a, xm+1].

    Следовательно,

    x*  [xm–1, b] [a, xm+1] = [xm–1, xm+1].

    Длина отрезка [xm–1, xm+1] равна , и точка xm является его серединой.

    Поэтому xm – x* = n.

    Итак, чтобы обеспечить требуемую точность  определения минимума функции f(x) методом перебора, нужно число отрезков разбиения n выбрать из условия  , т.е.

    n  .

    Реализация данной задачи в пакете MathCAD 14

    Данную задачу мы решаем для следующей функции:

    Задание функции, реализующей метод перебора с заданной точностью:

    В результате решения данной задачи был найден минимум x* = -1, значение функции f(x*) = 0 с точностью 0.043 за 45 итераций.

    Метод поразрядного поиска

    Найти минимум функции методом поразрядного поиска с заданной точностью.

    Этот метод представляет собой усовершенствование метода перебора. Поиск точки минимума функции осуществляется с переменным шагом.

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

    Изложенная идея реализуется следующим образом.

    Перебор точек отрезка происходит сначала с шагом

     = xi+1– xi >

    до тех пор, пока функция не начнет увеличиваться, т. е. не выполнится условие f(xi+1)  f(xi) или пока очередная точка не совпадет с правым концом отрезка [a, b], на котором ищется минимум функции f(x).

    После этого шаг уменьшается (обычно в четыре раза) и перебор точек производится в обратном направлении, справа налево, пока значения функции f(x) снова не станут увеличиваться или очередная точка не совпадет с левым концом отрезка и т. д.

    Процесс завершается, когда перебор в данном направлении закончен, и величина шага не превосходит заданной точности .

    Алгоритм метода поразрядного поиска.

    Шаг 1. Ввести исходные данные: a, b, .

    Шаг 2. Выбрать начальный шаг  = . Положить x0 = a. Вычислить f(x0).

    Шаг 3. Положить x1 = x0 + . Вычислить f(x1).

    Шаг 4. Сравнить f(x0) и f(x1). Если f(x0) > f(x1), то перейти к шагу 5, иначе – к шагу 6.

    Шаг 5. Положить x0 = x1 и f(x0) = f(x1).

    Проверить условие x0  (a, b), т. е. a < x0 < b.

    Если условие выполнено, перейти к шагу 3, иначе –к шагу 6.

    Шаг 6. Проверка на окончание поиска.

    Если   , то вычисления завершить, положив

    x*  x0, f(x* )  f(x0), иначе – перейти к шагу

    Шаг 7. Изменение направления и шага поиска.

    Положить x0 = x1 и f(x0) = f(x1),  = – .

    Перейти к шагу 3.

    Реализация данной задачи в пакете MathCAD 14.

    Данную задачу решаем для следующей функции:

    Задание функции, реализующей метод поразрядного поиска с заданной точностью:

    В результате решения данной задачи был найден минимум x* = -0.998, значение функции f(x*) = 0, количество итераций n = 18.

    Метод дихотомии.

    Найти минимум функции методом деления отрезка пополам с заданной точностью.В основе этого метода лежит свойство унимодальной функции , благодаря которому можно сокращать отрезок локализации точки минимума.

    Пусть f(x) – непрерывная и унимодальная на отрезке [a, b] функция, принимающая во всех точках этого отрезка конечные значения. Пусть число пробных точек x1, x2, …, xn конечно, и для определения каждой точки xk можно использовать информацию о значениях функции во всех предыдущих точках x1, x2, …, xk – 1 . Положим a0 = a, b0 = b. Середина отрезка [a, b] = [a0, b0] находится в точке . Выберем две симметричные точки x1 = , x2 = Величина , удовлетворяющая условию 0 <  < b – a , является параметром метода, как правило,  – малая величина.Вычислим значения функции в выбранных точках: f(x1) и f(x2). Определим новый отрезок локализации [a1, b1] следующим образом:

    если f(x1)  f(x2), то a1 = a0, b1 = x2;

    если f(x1) > f(x2), то a1 = x1, b1 = b0.

    Далее процедура деления отрезка [a1, b1] повторяется.

    Деление продолжают до тех пор, пока половина длины отрезка [an, bn] не станет меньше заданной точности решения задачи ,   , т. е. пока не выполнится неравенство

    < . Тогда за приближение x* принимают середину отрезка [an, bn], т.е. x*  .

    Алгоритм 1.2 (Алгоритм метода дихотомии).

    Шаг 1. Ввести исходные данные: a, b, , .

    Шаг 2. Определить x1 и x2 по формулам (1.5).

    Шаг 3. Вычислить f(x1) и f(x2).

    Шаг 4. Если f(x1)  f(x2), то перейти к новому отрезку [a, b], положив b = x2. Иначе перейти к новому отрезку [a, b], положив a = x1.

    Шаг 5. Если < , то требуемая точность достигнута, перейти к шагу 6, иначе – к шагу 2 для продолжения итераций.

    Шаг 6. Положить x*  . Вычислить f * f(x*).

    Число итераций метода дихотомии оценивается по формуле

    n  log2 .

    Величину  выбирают из условия 0 <  < 2. При этом нужно иметь в виду, что при слишком малом  из-за погрешности вычисления на ЭВМ сравнение f(x1) и f(x2) становится затруднительным.

    Реализация данной задачи в пакете MathCAD 14

    Данную задачу решаем для следующей функции:

    Задание функции, реализующей метод деления отрезка пополам с заданной точностью:

    В результате решения данной задачи был найден минимум x* =-1, значение функции f(x*) = 0, количество итераций n = 11.

    Метод Фибоначчи

    Найти минимум функции методом Фибоначчи с заданной точностью.

    Метод Фибоначчи эффективнее метода дихотомии, так как разбиение отрезка производится таким образом, что на каждой итерации требуется вычислять не два значения f(x1) и f(x2), а лишь одно.

    Метод Фибоначчи основан на использовании чисел Фибоначчи, задаваемых рекуррентным соотношением

    Fn = Fn-1 + Fn-2 (n  2)

    с начальными значениями F0 = 1, F1 = 1.

    Этот метод был предложен в 1953 г. Кифером.

    Формула вместе с начальными значениями определяет следующий ряд чисел Фибоначчи :

    n

    0 1 2 3 4 5 6 7 8 9 10 11 …

    Fn

    1 1 2 3 5 8 13 21 34 55 89 144 …

    Метод Фибоначчи состоит из n шагов.

    Положим вначале a0 = a, b0 = b.

    На k-ом шаге, k =0, 1, … , n – 1, определим точки x и x из условия

    x = ak + (bk – ak), x = ak + (bk – ak).

    Формулы являются основными расчетными формулами метода Фибоначчи

    После этого так же, как и в методе дихотомии, определяют новый, меньший отрезок локализации [ak+1, bk+1] по тому же правилу:

    если f(x )  f(x ), то ak+1 = ak, bk+1 = x ;

    если f(x ) > f(x ), то ak+1 = x , bk+1 = bk.

    Важно, что одна из пробных точек x , x станет пробной точкой на новом отрезке локализации, т. е. совпадет с одной из точек x , x .

    Поэтому на каждой итерации достаточно определить только одно значение f(x), так как другое уже найдено на предыдущей итерации.

    В конце вычислений можно взять в качестве приближенного значения

    экстремум минимизация функция линейный

    x* = x .

    После выполнения n итераций погрешность удовлетворяет следующему неравенству:

    n = < .

    Следовательно, если задана требуемая точность , число итераций n определяется из условия <  или

    Fn +1 > .

    Заметим, что число итераций, необходимое для удовлетворения заданной точности  , зависит только от длины отрезка b – a и точности  и не зависит от вида функции f(x).

    Алгоритм 1.3 (Алгоритм метода Фибоначчи):

    Шаг 1. Ввести исходные данные: a, b, . Определить число итераций n из условия (1.9). Ввести числа Фибоначчи F0, F1, F2, … , Fn +1.

    Шаг 2. Положить k = 0 и определить x1 и x2 по формулам (1.7).

    Шаг 3. Вычислить f(x1) и f(x2).

    Шаг 4. Проверить критерий окончания вычислений: k = n . Если k < n, перейти к шагу 5, иначе – к шагу 6.

    Шаг 5. Перейти к новому отрезку локализации и новым пробным точкам. Если f(x1)  f(x2), то положить b = x2, x2 = x1, f(x2) = f(x1), x1= a + (b – a) и вычислить f(x1). Иначе положить a = x1, x1 = x2, f(x1) = f(x2),

    x2 = a + (b – a) и вычислить f(x2). Положить k = k +1 и перейти к шагу 4.

    Шаг 6. Положить x*  x1. Вычислить f * f(x*).

    Данную задачу мы решаем для следующей функции:

    Задание функции, реализующей метод Фибоначчи с заданной точностью:

    В результате решения данной задачи был найден минимум x* = -1, значение функции f(x*) = 5.329*10^-15, количество итераций n = 8.

    Метод золотого сечения

    Найти минимум функции методом золотого сечения с заданной точностью.

    В основе этого метода лежит понятие "золотого сечения", введенного Леонардо да Винчи и используемого, в частности, при построении архитектурных сооружений античности и эпохи Возрождения.

    Золотым сечением отрезка называется его разбиение на две неравные части, так, что отношение длины всего отрезка к длине его большей части равно отношению длины большей части к длине меньшей части (рис.1.3, слева)

    = .

    Рис 1.3

    Золотое сечение осуществляется двумя точками x1 и x2, расположенными симметрично относительно середины отрезка (рис.1.3, справа). Нетрудно проверить, что

    = = , (1.10)

    = = . (1.11)

    Точка x1 осуществляет золотое сечение не только отрезка [a, b], но и отрезка [a, x2], а точка x2 осуществляет золотое сечение не только отрезка [a, b], но и отрезка [x1, b]. Действительно,

    = = ,

    = = .

    Из (1.10) и (1.11) получаем:

    x1 = a + , x2 = a + . (1.12)

    Формулы (1.12) являются основными расчетными формулами метода золотого сечения.

    Из (1.12) следует, что x1 + x2 = a + b. Если обозначить r = , то формулы (1.12) можно переписать так:

    x1 = b – r(b – a), x2 = a + r(b – a) (1.13)

    Процедура деления отрезка [a, b] такая же, как и для методов дихотомии и Фибоначчи. Вычисляются значения функции в выбранных точках: f(x1) и f(x2). Определяется новый отрезок локализации [a1, b1] следующим образом:

    если f(x1)  f(x2), то a1 = a, b1 = x2;

    если f(x1) > f(x2), то a1 = x1, b1 = b.

    Далее процедура деления отрезка [a1, b1] повторяется с использованием формул (1.12) или (1.13).

    Так же, как и в методе Фибоначчи, одна из пробных точек x1, x2 станет пробной точкой на новом отрезке локализации. Поэтому на каждой итерации достаточно определить только одно значение f(x), так как другое уже найдено на предыдущей итерации.

    В конце вычислений можно взять в качестве приближенного значения x* середину последнего из полученных отрезков.

    После выполнения n итераций погрешность удовлетворяет следующему неравенству:

    n = < .

    Условием окончания вычислений является выполнение неравенства

    n <.

    Алгоритм 1.4 (Алгоритм метода золотого сечения).

    Шаг 1. Ввести исходные данные: a, b, . Положить r = , n = .

    Шаг 2. Определить x1 и x2 по формулам (1.13).

    Шаг 3. Вычислить f(x1) и f(x2).

    Шаг 4. Проверить критерий окончания вычислений. Если n <, перейти к шагу 5, иначе – к шагу 6.

    Шаг 5. Перейти к новому отрезку локализации и новым пробным точкам. Если f(x1)  f(x2), то положить b = x2, x2 = x1, f(x2) = f(x1), x1 = b – r(b – a) и вычислить f(x1). Иначе положить a = x1, x1 = x2, f(x1) = f(x2), x2 = a + r(b – a) и вычислить f(x2). Положить n = rn, перейти к шагу 4.

    Шаг 6. Положить x*  . Вычислить f * f(x*).

    Реализация данной задачи в пакете MathCAD 14

    Данную задачу мы решаем для следующей функции:

    Задание функции, реализующей метод золотого сечения с заданной точностью:

    В результате решения данной задачи был найден минимум x* = -1, значение функции f(x*) = 0, количество итераций n = 16.

    Метод средней точки

    Найти минимум функции методом средней точки с заданной точностью.

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

    Рассмотрим метод средней точки, который называется также методом бисекции или методом деления отрезка пополам.

    Пусть f(x) – унимодальная, непрерывно дифференцируемая на отрезке [a, b] функция и на этом отрезке точка x* является единственной стационарной точкой. Сведем задачу нахождения минимума функции f(x) к решению нелинейного уравнения

    f '(x) = 0. (1.14)

    Положим a0 = a, b0 = b.

    Так как функция f '(x) удовлетворяет условию (1.14), то она принимает на концах отрезка [a0, b0] значения разных знаков, т.е. f(a0)f(b0) < 0.

    Разделим отрезок [a0, b0] пополам. Получим точку x0 = . Вычислим f '(x0). Если f '(x0) = 0, то x0 – искомый корень, и задача решена. Если f '(x0)  0, то f '(x0) – число определенного знака: f '(x0) > 0, либо f '(x0) < 0. Тогда либо на концах отрезка [a0, x0], либо на концах отрезка [x0, b0] значения функции f '(x) имеют разные знаки. Обозначим такой отрезок [a1, b1]. Очевидно, что x* [a1, b1], и длина отрезка [a1, b1] в два раза меньше, чем длина отрезка [a0, b0]. Поступим аналогично с отрезком [a1, b1]. В результате получим либо корень x*, либо новый отрезок [a2, b2], и т.д. (рис.1.4 ).

    Рис. 1.4

    Середина n-го отрезка xn = . Очевидно, что длина отрезка [an, bn] будет равна , а т. к. x* [an, bn], то

    | xn – x*|  . (1.15)

    Оценка (1.15) характеризует погрешность метода средней точки и указывает на скорость сходимости: метод сходится со скоростью геометрической прогрессии, знаменатель которой q = 1/2.

    Если задана требуемая точность  , то процесс вычислений следует закончить, когда выполнится условие  f '(xn)  , после чего полагают

    x*  xn.

    Алгоритм 1.5 (Алгоритм метода средней точки).

    Шаг 1. Ввести исходные данные: a, b, .

    Шаг 2. Определить x0 = .

    Шаг 3. Вычислить f '(x0).

    Шаг 4. Проверить критерий окончания вычислений. Если f '(x0)  , ,перейти к шагу 6, иначе – к шагу 5.

    Шаг 5. Перейти к новому отрезку локализации [a, b]. Если f '(x0) > 0, то положить b = x0. Иначе положить a = x0. Перейти к шагу 2.

    Шаг 6. Положить x*  x0. Вычислить f'(x*).

    Реализация данной задачи в пакете MathCAD 14

    Данную задачу мы решаем для следующей функции:

    Задание функции, реализующей метод средней точки с заданной точностью:

    В результате решения данной задачи был найден минимум x* = -1, значение функции f(x*) = 0, количество итераций n = 14.

    Метод Ньютона

    Найти минимум функции методом Ньютона с заданной точностью.

    Пусть f(x) – дважды непрерывно дифференцируемая функция, причем

    f ''(x) > 0. Тогда, как уже указывалось в предыдущем разделе, решение задачи минимизации функции f (x) сводится к решению нелинейного уравнения f '(x) = 0.

    Метод Ньютона является наиболее эффективным методом решения нелинейных уравнений.

    Пусть корень x*  [a, b], так, что f '(a)f '(b) < 0. Положим x0 = b. Проведем касательную к графику функции y = f '(x) в точке B0 = (x0, f '(x0))

    Рис. 1.5

    Уравнение касательной будет иметь вид:

    y – f '(x0) = f"(x0)(x – x0). (1.16)

    Первое пересечение получим, взяв абсциссу точки пересечения этой касательной с осью OX, т. е. положив в (1.16) y = 0, x = x1:

    x1 = x0 – . (1.17)

    Аналогично поступим с точкой B1(x1, f '(x1)), затем с точкой B2(x2, f '(x2)), и т. д. в результате получим последовательность приближений x1, x2, …, xn , …, причем

    xn +1 = xn – . (1.18)

    Формула (1.18) является расчетной формулой метода Ньютона.

    При заданной точности  > 0 вычисления по формуле (1.18) нужно вести до

    тех пор, пока не будет выполнено неравенство| f '(xn)|  , после чего полагают x*  xn.

    Алгоритм 1.6 (Алгоритм метода Ньютона).

    Шаг 1. Ввести исходные данные: a, b, . Положить n = 0, x0 = b.

    Шаг 2. Вычислить f '(xn) и f "(xn).

    Шаг 3. Вычислить xn +1 = xn – .

    Шаг 4. Проверить критерий окончания вычислений. Если f '(x n +1)  , , перейти к шагу 6, иначе – к шагу 5.

    Шаг 5. Положить n = n +1. Перейти к шагу 2.

    Шаг 6. Положить x*  xn +1 . Вычислить f'(x*).

    Реализация данной задачи в пакете MathCAD 14

    Данную задачу мы решаем для следующей функции:

    Задание функции, реализующей метод Ньютона с заданной точностью:

    В результате решения данной задачи был найден минимум x* = -1, значение функции f(x*) = 0, количество итераций n = 13.

    Вывод

    Таблица 1 Результаты нахождения минимума функции разными численными методами поиска

    Метод

    Значение аргумента

    Значение функции

    Количество итераций

    Точность

    Метод перебора

    -1

    0

    45

    0.045

    Метод поразрядного поиска

    -0.98

    0

    18

    Метод деления отрезка пополам

    -1

    0

    11

    Метод Фибоначчи

    -1

    0

    8

    Метод золотого сечения

    -1

    0

    16

    Метод средней точки

    -1

    0

    14

    Метод Ньютона

    -1

    0

    13

    Вывод. Для решения данной задачи самыми эффективными являются Метод Фибоначчи, Метод деления отрезка пополам и Метод Ньютона.

    Литература

    Основная

      1. Краснов, М.Л. Вся высшая математика. Т. 6. Вариационное исчисление, линейное программирование, вычислительная математика, теория сплайнов / М.Л. Краснов, А.И. Киселев, Г.И. Макаренко. - М.: КД Либроком, 2014. - 256 c.

      2. Пантина, И.В. Вычислительная математика: Учебник / И.В. Пантина, А.В. Синчуков. - М.: МФПУ Синергия, 2012. - 176 c.

    Дополнительная

    1. Бахвалов Н.С и др. Численные методы. - М.: Физматлит,2000.

    2. Азаров А.И. и др. Сборник по методам вычислений - М.: Наука, 1994.

    3. Бахвалов Н. С. и др. Численные методы в задачах и примерах. - М.: Высшая школа, 2000.

    4. Самарский А.А., Гулин А.В. Численные методы. - М.: Наука, 1989.

    221

  • Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]