Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМК ООМ.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
3.36 Mб
Скачать

Метод последовательного перебора

Суть метода состоит в том, что спускаясь из точки X0 с заданным

шагом h в направлении уменьшения функции устанавливают интервал длиной h, на котором находится минимум и затем его уточняют.

Уточнение можно осуществлять любым ранее изученным методом, либо

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

Алгоритм варианта с уменьшением шага и изменением знака задается x0, шаг h и погрешность e, вычисляется y0=f(x0).

1. Из точки x0 делается шаг вправо x1=x0+h и вычисляется y1=f(x1).

2. Если на первом шаге функция убывает y1<y0, то направление спуска выбрано удачно, переходим на п.3. Иначе меняем направление спуска h=-h, возвращаемся в исходную точку х10, у10 и переходим к п.3. Если оба направления оказались неудачными, то шаг делится на 4 и попытки делаются до тех пор, пока h не станет меньше e (в этом случае Xm=X0 и вычисление прекращается), или функция уменьшится в каком-то направлении.

3. x0=x1, y0=y1 - запоминается удачная точка.

4. Делаем k шагов в сторону убывания, пока f(x0+kh) не станет больше, чем f(x0+(k-1)h),т.е повторяем с п.3, пока y1<y0, иначе п.5.

5. h=-h/4. Шаг уменьшается в 4 раза, меняется его знак, мы перешагнули точку минимума и организуем спуск в обратном направлении.

6. Если ABSh > e/4, тогда повторить с п.3, иначе перейти к п.8.

7. Xm=X0, fm=f0, конец.

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

б) уточнить минимум функции, используя программу поиска условного минимума из лабораторной работы N 1.

Скорость сходимости данных методов существенно зависит от удачного выбора х0 и шага h. Шаг h следует выбирать как половину оценки расстояния от х0 до предполагаемого минимума Xm.

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

Поиск минимума функции одной переменной методом квадратичной параболы

Для ускорения спуска к минимуму из некоторой точки Х0 используют локальные свойства функции вблизи этой точки. Так скорость и направление убывания можно определить по величине и знаку первой производной. Вторая производная характеризует направление выпуклости: если f'' > 0, то функция имеет выпуклость вниз, иначе вверх. Вблизи локального безусловного минимума дважды дифференцируемая функция всегда выпукла вниз. Поэтому, если вблизи точки минимума функцию аппроксимировать квадратичной параболой, то она будет иметь минимум. Это свойство и используется в методе квадратичной параболы, суть которого в следующем.

Вблизи точки х0 выбираются три точки х1, х2, х3.

Вычисляется значение F1, F2, F3. Через эти точки проводится квадратичная парабола

P(z)=a*(x-x3)2 + b*(x-x2)+c = a*z2+b*z+c.

z=x-x3, z1=x1-x3, z2=x2-x3, c= F3

(y1-y3)*z2 - (y2-y3)*z1 (y1-y3)*z2*z2 - (y2-y3)*z1*z1

a= ---------------------------, b= ----------------------------------,

z1*z2*(z1-z2) z1*z2*(z2-z1)

Если a > 0, то парабола имеет минимум в точке Zm= -b / (2*a).

Следовательно, можно аппроксимировать положение минимума функции значением Хм13+Zm и, если точность не достигнута, следующий спуск производить из этой точки X=Xm1, получая последовательность Xm1, Xm2, Xm3.... сходящуюся к точке Xm.

Этот метод может непосредственно применяться к функциям одной переменной. Он может быть очень полезен для выполнения линейного поиска в процедурах, где требуется найти минимум функции f(x) в точках прямой X0+LD, где Х0 - заданная точка, а LD определяет заданное направление. Значения функции F(X0+LD) на этой прямой являются значениями функции одной переменной Ф(L)= F(X0+LD).

Эти идеи используются в этой и следующей лабораторных работах.

Предположим, что заданы унимодальная функция 1-й переменной

f(x), начальная аппроксимация положения минимума и длинна шага h,

являющаяся величиной того же порядка, что и расстояние от точки А

до точки истинного минимума х* (данное условие не всегда можно

удовлетворить).

Алгоритм

Введите начальный шаг поиска h, задайте начальное значение X0, погрешность результата e.

1. Вычислить f(x0) и f(x0+h).

2. Если f(x0+h) > f(x0), то взять в качестве третьей точки X0-h и вычислить f(X0-h) [ x1=x0-h, x2=x0, x3=x0+h ].

В противном случае в качестве третьей точки взять X0+2h и найти f(X0+2h) [x1=x0, x2=x0+h, x3=x0+2h ],

3. Вычисляем y1=f(x1), y2=f(x2), y3=f(x3); Вычисляем a, b.

4. Проверяем a>0, если нет, то начальное приближение выбрано неудачно и следует закончить вычисление с таким значением и сделать два шага в сторону убывания функции x0=x0+2h и повторить снова с п.1, пока не выполнится a>0 рис 1.

5. Вычисляем Zm по выше приведенной формуле.

6. Проверяем ABSZm < e, если да, то Xm=x3+Zm, Ym=f(Xm), конец.

7. Если нет, переименовываем точки, отбрасывая точку х1: x1=x2, x2=x3, x3=x3+Zm, находим y1=y2, y2=y3, y3=f(x3).

8. Переходим на п. 4.

В программе, приведенной ниже реализован этот алгоритм.

Данный метод сходится очень быстро и является одним из наилучших методов спуска. Следует отметить, однако, что вблизи минимума расчет по приведенным здесь формулам для a и b приводит к накоплению погрешности из-за потери значащих цифр при вычитании близких чисел. Поэтому разные авторы предлагают свои эквивалентные формулы, счет с которыми более устойчив. Кроме того, в алгоритм вносятся некоторые поправки, позволяющие предусмотреть различные неприятные ситуации - переполнение, деление на 0, уход от корня.

Составить программу этим методом, найти минимальное значение функции и сравнить с результатами, полученными ранее. Сделать вывод.

Программа метода квадратичной параболы

function sqrm(f:func;x0,h,e:real):real;

VAR

it:integer;

t,x1,x2,x3,Xm,y1,y2,y3,Ym,z,z1,z2,z3,a,b,c,Zm:real;

lr,lw:text;

BEGIN

it:=0;

assign(lw,'p4681n46.out');rewrite(lw);

writeln(lw,'Результаты:');

writeln('Результаты: ');

if f(x0+h)>f(x0) then begin x1:=x0-h; x2:=x0; x3:=x0+h; end

else begin x1:=x0; x2:=x0+h; x3:=x0+2*h; end;

y1:=f(x1); y2:=f(x2); y3:=f(x3);

REPEAT

z1:=x1-x3;z2:=x2-x3;c:=y3;

a:=((y1-y3)*z2-(y2-y3)*z1)/(z1*z2*(z1-z2));

b:=((y1-y3)*z2*z2-(y2-y3)*z1*z1)/(z1*z2*(z2-z1));

if a<=0 then begin writeln('x0 выбрано неудачно!');

writeln(lw,'x0 выбрано неудачно!');exit;end;

zm:=-b/(2*a);

if abs(zm)<e then begin xm:=x3+zm;

ym:=f(xm);

writeln('При расчетах получено:');

writeln('Корень равен:.............',xm:12:10);

writeln('Значение функции:........',ym:12:10);

writeln('Количество итераций:.....',it);

close(lw);exit;end;

x1:=x2;x2:=x3;x3:=x3+zm;

y1:=y2;y2:=y3;y3:=f(x3);it:=it+1;

writeln(lw,'X=',x3:13:10,' Y=',y3:13:10);

writeln('X=',x3:13:10,' Y=',y3:13:10);

until(t>0);

end;

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