Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Оптимизация, численные методы.pdf
Скачиваний:
357
Добавлен:
20.06.2014
Размер:
909.58 Кб
Скачать

точкам xа, xb, xc:

x* = xb +

x[ f (xa ) f (xc )]

2[ f (xa ) 2 f (xb ) + f (xc )]

 

6. Проверяем условие окончания поиска: f (x* ) f (xm ) < ε ,

где xm – одна из точек xа, xb, xc, в которой значение целевой функции максимально;

– если условие выполняется, то считается, что поиск экстремума заканчивается и экстремум найден в точке x*;

– иначе, x = x 2 и переходим к шагу 2, причем x0 = x*.

Данная циклическая процедура будет выполняться до тех пор, пока не будут выполнены условия на 6 шаге.

7.10. Метод квадратичной интерполяции

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

D ={x : a x b} . Из области допустимых значений D выделяется подмножество D1, в котором расположена точка экстремума х*, и аппроксимируется функция f(x) (х принадлежит подмножеству D1) некоторой сильно выпуклой функцией вида:

ϕ(x) = a1 x2 + a2 x + a3

Далее аналитическим методом находится точка минимума x4 функции ϕ(x) из необходимого условия существования экстремума

ϕ '(x) = 2 a1 x4 + a2 = 0.

 

Отсюда

 

x4 = −a2 /(2a1 ) ,

(7.16)

которая тем ближе к точке х*, чем ближе функция ϕ(x) к f0(x) на подмно73

жестве D1.

Для нахождения множества D и коэффициентов a, b, c функции ϕ(x) необходимо подобрать вблизи предполагаемого минимума x4 точки x1, x2, x3, такие, что крайние ординаты больше средней ординаты, т.е. при x1<x2<x3 было справедливо неравенство:

f (x1 ) > f (x2 ) < f (x3 ).

По условию интерполяции значения аппроксимирующей параболы ϕ(xi) должны совпадать со значениями целевой функции f(xi), ϕ(xi) = f(xi), i = 1,2,3. В результате получается система линейных уравнений, относи-

тельно неизвестных коэффициентов ai (i =1,3):

a

x2

+a

2

x

+a

3

=

f (x ) =

f

1

 

1

1

+a

 

x

1

+a

 

f (x

1

) =

 

 

a

x 2

2

2

3

=

2

f

2

1

2

 

 

 

 

 

 

 

a

x 2

+a

2

x

3

+a

3

=

f (x

3

) =

f

3

 

1

3

 

 

 

 

 

 

 

Далее находятся неизвестные коэффициенты по методу Крамера:

 

 

 

f

 

x

1

 

 

 

 

 

 

 

x12

f1 1

 

 

 

 

 

x12

x1

f1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

 

 

 

 

 

 

 

 

x22

f2 1

 

 

 

 

 

x22

x2

f2

 

 

 

 

 

 

 

f2

x2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f

 

x

1

 

 

 

 

 

 

 

x32

f3

 

1

 

 

 

 

 

x32

x3

f3

 

 

 

 

a1 =

 

 

 

3

3

 

 

 

;

a2 =

 

 

 

 

 

 

 

 

; a3

=

 

 

 

 

 

 

,

(7.17)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

c

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

x

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

 

 

 

 

 

 

 

 

c =

x22

x2

1

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

x

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С учетом соотношений (7.16) и (7.17) получается выражение для определения точки x4 непосредственно через xi, fi,(i=1,2,3):

 

x

 

(x2

x2 ) f

+ (x2

x2 ) f

2

+ (x2

x2 ) f

3

 

 

 

x4 =

 

5

=

3

 

2

 

1

 

1

 

3

 

2

 

1

 

 

.

(7.18)

x

6

2 [(x

x

2

)

f

+ (x

x )

f

2

+ (x

2

x ) f

3

]

 

 

 

 

3

 

 

1

 

1

3

 

 

 

1

 

 

 

 

Следует заметить, что в (7.18) знаменатель x6 должен быть отличен от нуля. Если точки x1, x2, x3, близки друг к другу, то это условие нарушается.

74

Алгоритм метода квадратичной интерполяции:

1.Вводим а, b, погрешность eps определения точки локального минимума. Вычисляем шаг h=0,2·(ba). В качестве точки x2 берем середину отрезка [a,b], т.е. x2=(а+b)/2. Вычисляем f2=f (x2). Полагаем x1 равным x2. N=1.

2.Если оба условия N = 1 и (x1h) a выполняются, переходим к шагу 3, иначе к шагу 6.

3.x1 = x1 h. Вычисляем f1 = f (x1).

4.Если условие f1 > f2 выполняется, то полагаем N = 0 (точка x1 найдена).

5.Возвращаемся на шаг 2.

6.Если условие N = 1 выполняется, то это означает, что точка x1 < x2, для которой f(x1) > f(x2) не найдена. Печать "нет x1, уменьшить a". Выход из программы;

7.N=1, x3=x2.

8.Если хотя бы одно из условий N = 1 или (x3+h) b не выполняется, то переходим к шагу 12.

9.Вычисляем x3 = x3 + h, f3 = f (x3).

10.Если условие f3 > f2 выполняется, полагаем N = 0 (т.е. точка x3

найдена).

11.Возвращаемся к шагу 8.

12.Если условие N = 1 выполняется, то печать "x3>x2 такое, что, f(x3)>f(x2) не найдено. Увеличить b." Выход из программы.

13.Увеличиваем счетчик итерации N = N + 1. Вычисляем x5 (числитель формулы (7.18)) и x6 (знаменатель формулы (7.18)).

14.Если знаменатель отличен от нуля, т.е. |x6| < eps, то полагаем R=0 и переходим к шагу 20.

x

15. Находим точку минимума параболы x4 = x5 . Вычисляем

6

f4=f(x4), R=f '(x4).

16.Если условие |R| < eps выполняется, то это означает, что точка x4 является и точкой минимума целевой функции f, поэтому полагаем x2 = x4 и переходим к шагу 20.

75

17. Производим выбор интервала, в котором лежит точка x* = arg min f (x). Для этого проверяем условие f4 < f2? Если да, то переход к шагу 18, если нет, то к шагу 21.

18.Если условие x4 < x2 выполняется, то полагаем x3 = x2, f3 = f2, иначе x1 = x2, f1 = f2.

19.x2 = x4, f2 = f4.

20.Проверяем условие выхода из цикла |R|<eps ?

да, печать 'x*= ',x2,'min f= ',f (x2), ' f '(x2)= ',PR(x2), 'N= ',N, конец.

нет, возврат на шаг 13.

21.Проверяем условие x4 > x2? Если условие выполняется, то полагаем x3=x2, f3=f2 и переходим на п.20, иначе, полагаем x1=x4, f1=f4 и переходим к шагу 20.

Ниже приведена программа поиска минимума функции

f = x3 – 3x2 – 9x – 10, x [2,4]

рассмотренным методом на языке Турбо-Паскаль, блок-схема алгоритма представлена на рисунке 12(а,б):

program kvadr_interp; Var

a,b,eps,x1,x2,x3,x4,x5,x6,f1,f2,f3,f4,R,h : real; N : byte;

function f(x:real):real; {функция цели} begin

f:=x*sqr(x)-3*sqr(x)-9*x-10; end;

function PR(x:real):real; {первая производная} begin

PR:=3*sqr(x)-6*x-9; end;

begin

Writeln('ввод a<b, eps'); read(a,b,eps); h:=0.2*(b-a); x2:=(a+b)/2; f2:=f(x2); x1:=x2; N:=1;

{поиск x1<x2 такого, что f(x1)>f(x2)}

76

While (N=1) and ((x1-h)>=a) Do begin

x1:=x1-h; f1:=f(x1); if f1>f2 then N:=0; end;

if N=1 then begin

Writeln('x1 не найдена, уменьшить а'); readln;

exit {выход из программы} end;

N:=1; x3:=x2;

{поиск x3>x2 такого, что f (x3)>f (x2)} While (N=1) anD ((x3+h)<=b) Do

begin

x3:=x3+h; f3:=f(x3); if f3>f2 then N:=0; end;

if N=1 then begin

Writeln('x3 не найдена, увеличить b'); readln;

exit {выход из программы} end;

repeat N:=N+1;

x5:=(sqr(x3)-sqr(x2))*f1+(sqr(x1)- sqr(x3))*f2+(sqr(x2)-sqr(x1))*f3;

x6:=2*((x3-x2)*f1+(x1-x3)*f2+(x2-x1)*f3); if abs(x6)<eps then

r:=0 {знаменатель равен нулю} else begin

{вычисление точки минимума параболы x4} x4:=x5/x6; f4:=f(x4);

r:=PR(x4);

if abs(R)<eps then x2:=x4 {точки минимума

параболы и функции совпали}

77

else begin {определение подинтервала, содержащего точку минимума функции f(x)}

if f4<f2 then begin

if f4<f2 then begin

x3:=x2; f3:=f2 end

else begin x1:=x4; f1:=f4 end;

x2:=x4; f2:=f4; end

else

if x4>x2 then begin

x3:=x2; f3:=f2; end

else begin x1:=x4; f1:=f4 end;

end;

end;

untiL abs(R)<eps; Writeln('x=',x2:15:10,'min f=',f(x2):15:10,

'Df/Dx=',pr(x2):15:10,'N=',N);

end.

Приведем результаты работы программы при различных eps:

eps

х*

f *)

f '(х*)

N

1E-2

2,999582

36,999998

-0,005009

2

1E-4

3

-37

0

4

1E-6

3

-37

0

5

1E-8

3

-37

0

8

1E-9

3

-37

0

11

 

 

 

 

 

78

Ошибка!

Нет

Начало

 

Ввод

 

a,b,eps

 

h=0,2*(b-a)

 

 

x2=(a+b)/2

 

f2=f (x2)

 

 

 

 

N=1, x1=x2

 

Поиск

 

 

 

 

точки x1

N=1 и

Нет

(x1–h) a

 

Да

x1=x1–h f1=f (x1)

f1>f2

Да

N=0

N=1 Да Нет

N=1, x3=x2

1

1

Поиск

точки x3 N=1 и Нет

(x3+h) b

 

 

 

Да

 

 

 

 

x3=x3+h

 

 

 

 

f3=f (x3)

 

 

Нет

 

 

 

 

f3>f2

 

 

 

 

 

Да

 

 

 

 

N=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N=1

Нет 2

Да

Печать"не найдена x3, увеличить b"

Конец

Печать"не найдена x1, уменьшить

Конец

Рис.12а. Блок-схема поиска минимума методом квадратичной интерполяции

79

Ошибка!

2

N – число N=N+1, итераций

вычисление x5, x6 по (7.12)

|x6|<eps Да R=0

Нет

x4=x5 /x6 f4=f (x4) R=PR(x4)

|R|<eps

 

 

Да

 

 

 

 

 

 

Точки минимума параболы ϕ(x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и функции f (x) совпали

 

 

Нет

 

 

 

x2=x4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбор интервала в котором

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f4<f2

 

 

 

лежит точка min f

 

x4>x2

Нет

 

 

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3=x2

 

 

x4<x2

 

x1=x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f3=f2

 

 

 

 

 

 

 

 

f1=f2

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3=x2 f3=f2

x2=x4 f2=f4

x1=x4 f1=f4

Нет |R|<eps

Да

Печать

 

'x*= ',x2,' min f= ',f(x2),

 

 

'df/dx= ',PR(x2), 'N=',N

 

 

Конец

Рис.12б. Продолжение блок-схемы поиска минимума методом квадратичной интерполяции

80