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

Количество просмотров: 1625

Задача

Методом золотого сечения найти точку минимума x* функции f(x) на отрезке [a;b] с точностью ε и значение целевой функции в этой точке: 
, [-3;5], ε=0.2 

Пояснение

Пусть задана функция  . Тогда для того, чтобы найти неопределённое значение этой функции на заданном отрезке, отвечающее критерию поиска (пусть это будет минимум), рассматриваемый отрезок делится в пропорции золотого сечения в обоих направлениях, то есть выбираются две точки  и  такие, что:

  , где  — пропорция золотого сечения.

Таким образом:

То есть точка  делит отрезок  в отношении золотого сечения. Аналогично  делит отрезок  в той же пропорции. Это свойство и используется для построения итеративного процесса.

Алгоритм

  1. На первой итерации заданный отрезок делится двумя симметричными относительно его центра точками и рассчитываются значения в этих точках.
  2. После чего тот из концов отрезка, к которому среди двух вновь поставленных точек ближе оказалась та, значение в которой максимально (для случая поиска минимума), отбрасывают.
  3. На следующей итерации в силу показанного выше свойства золотого сечения уже надо искать всего одну новую точку.
  4. Процедура продолжается до тех пор, пока не будет достигнута заданная точность.

Формализация

  1. Шаг 1. Задаются начальные границы отрезка  и точность
  2. Шаг 2. Рассчитывают начальные точки деления:  и значения в них 
    • Если  (для поиска max изменить неравенство на ), то 
    • Иначе 
  3. Шаг 3.
    • Если , то  и останов.
    • Иначе возврат к шагу 2.

Реализация

function mzs
    f = inline('x^2+2*x');
    root1 = func(f, -3, 5)


    
%   Метод золотого сечения
function x = func(f, a, b)
    e=input ('Введите относительную погрешность:');

while abs(b-a) >  e
    x1=b-(b-a)/1.618;
	x2=a+(b-a)/1.618;
	y1=f(x1);
	y2=f(x2);
    q = [a,b,b-a,x1,x2,y1,y2];
    disp(q);
	if y1
Исходники
comments powered by HyperComments

© 2015-2018 Goodweb.me --- Карта сайта --- info@goodweb.me

Наверх