родовжується до тих пір, поки довжина отриманого відрізка чи не стане менше заданої величини . За наближене рішення приймається середня точка останнього проміжку.
Метод золотого перерізу
Метод золотого перетину дозволяє виключати інтервали, обчислюючи тільки одне значення функції на кожній ітерації. В результаті двох розглянутих значень функції визначається інтервал, що має використовуватися надалі. Цей інтервал буде містити одну з попередніх точок і наступну точку, що поміщається симетрично їй. Точка ділить інтервал на дві частини так, що ставлення цілого до більшої частини дорівнює відношенню більшої частини до меншої, тобто одно так званого В«золотого перерізуВ». p align="justify"> Скористаємося співвідношенням
Lj-1 = Lj + Lj +1. p align="justify"> Будемо підтримувати постійними відносини довжин інтервалів
Lj-1/Lj = Lj/Lj +1 = ?.
Це рівняння має єдиний позитивний корінь ? = (1 +5 ^ 1/2)/2 = 1.618 (мал. 9). перші 2 експерименту
В
Рис.9
знаходяться на відстані 0.618 від кінців відрізка. За результатами експериментів зберігається 1 з інтервалів, і все повторюється. Після n експериментів
Ln = 1 /? n-1.
Пошук за допомогою методу золотого перерізу є асимптотично найбільш ефективним способом реалізації мінімаксної стратегії пошуку, так як вимагає найменшого числа оцінки значення функції для досягнення заданої точності в порівнянні з іншими методами виключення інтервалів.
Лістинг програми за методом пасивного пошуку, методом дихотомії, методом золотого перетину , оптимальний пошуку p>
В
function TMyForm.F (x: real): real;: = (2 * x-2) * (2 * x-2) +2; TMyForm.PasPoisk (XMax, XMin, Eps, D: Real): string;: word;: word;: word;: real;: array [word] of real;: = trunc ((2 * (XMax-XMin))/Epsilon); (frac ((2 * (XMax-XMin) )/Epsilon) <> 0) then inc (N); odd (N) then inc (N);
x [1]: = XMin; [N]: = XMax;
temp: = XMin; i: = 1 to (N div 2 - 1) do: = temp + (XMax-XMin)/(N/2); [2 * i]: = temp-D; [2 * i +1]: = temp + D;: = 1; i: = 2 to N do (f (x [Index])> f (x [i])) then Index: = i; i: = 1 to N do Кількість ітерацій = '+ IntToStr (N) +'. '; TMyForm.Dihotomy (XMax, XMin, Eps, D: Real): string;: word;: array [1 .. 4] of then Кількість ітерацій = '+ IntToStr (N); TMyForm.GoldSection (XMax, XMin, Eps, D: Real): string; Tau = 0.618;: byte;: word;: array [1 .. 4] of Real;: array [1 .. 4] of Real; [1]: = XMin; [4]: ​​= XMax; [2]: = XMax-Tau * (XMax-XMin);
x [3]: = XMin + Tau * (XMax-XMin);
for i: = 1 to 4 do y [i]: = f (x [i]); i: = 1 to 4 do chGraph.Series [0]. AddXY ...