ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Институт кибернетики Кафедра прикладной математики Дисциплина методы оптимизации ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №1 Численные методы одномерной минимизации Выполнил студент гр. 8Б90 Колыванов К.А. доцент кафедры ПМ Бабушкин Ю.В. Проверил Томск 2012 Цель работы: Приобретение практических навыков для решения задач одномерной минимизации численными методами. Постановка задачи Требуется найти безусловный минимум функции одной переменной, 1 𝐹(𝑥) = 𝑥 + то есть, такую точку x* R , что F ( x* ) min F ( x) , на отрезке ln(𝑥) xR [1.5; 3] с погрешностью 𝜖 = 0.01. Поставленная задача может быть решена с помощью необходимых и достаточных условий безусловного экстремума. Однако, во многих практических случаях найти производные от заданной функции не представляется возможным. Поэтому решение задач одномерной оптимизации численными методами является актуальным при изучении методов оптимизации. - метод равномерного поиска; Начало 𝐿0 , 𝑁 𝑖 = 1 Нет 𝑖 < 𝑁 Да 𝐹(𝑥𝑖 ) ∙𝐿0 = 𝑎0 + 𝑖 𝐿0 𝑁+1 𝑥 ∗ = min 𝐹(𝑥𝑖 ) 𝑥𝑖 𝑖 =𝑖+1 𝑥∗ Конец function an = se(a, b, n) %1st method L0 = abs(b - a); %Length of the segment at the beginning i = 1:n; x = a + i*L0/(n + 1); %F(x) is given f = x + 1./log(x); an = min(f); for i = 1:n if (an == f(i)) an = i; break; end end an = x(an); end - метод деления отрезка пополам; Начало 𝐿0 , 𝜖 𝐿0 > 𝜖 𝑥𝑐 𝑥𝑐 = 𝑎+𝑏 2 𝐹(𝑥𝐶 ) 𝐿0 4 𝐿0 𝑧=𝑏− 4 𝑦=𝑎+ 𝐹(𝑦), 𝐹(𝑧) 𝐹(𝑦) < 𝐹(𝑥𝑐 ) 𝐹(𝑧) < 𝐹(𝑥𝑐 ) 𝑎=𝑦 𝑏=𝑧 𝑏 = 𝑥𝑐 𝑥𝑐 = 𝑦 𝑎 = 𝑥𝑐 𝑥𝑐 = 𝑦 𝐿0 = |𝑎 − 𝑏| Конец function an = halfdiv(a, b, al) %2nd method L0 = abs(b - a); xc = (a + b)/2; while (L0 > al) xc = (a + b)/2; fxc = xc + 1/log(xc); y = a + L0/4; z = b - L0/4; fy = y + 1/log(y); fz = z + 1/log(z); if (fy < fxc) b = xc; xc = y; elseif (fz < fxc) a = xc; xc = z; else a = y; b = z; end L0 = abs(b - a); end an = xc; end - метод дихотомии; Начало 𝐿0 , 𝜖 𝛼= 𝜖 100 𝐿0 > 𝜖 𝑎+𝑏 2 𝑎+𝑏−𝛼 2 𝑎+𝑏+𝛼 𝑧= 2 𝑦= 𝐹(𝑦), 𝐹(𝑧) 𝐹(𝑦) < 𝐹(𝑥𝑐 ) 𝑎=𝑦 𝑏=𝑧 𝐿0 = |𝑎 − 𝑏| Конец function an = di(a, b, eps) %3rd Method dichotomy al = eps/100; L0 = abs(b - a); while (L0 > eps) y = (a + b - al)/2; z = (a + b + al)/2; fy = y + 1/log(y); fz = z + 1/log(z); if (fy <= fz) b = z; else a = y; end L0 = abs(b - a); end an = (a + b)/2; end - метод золотого сечения; Начало 𝐿0 , 𝜖 3 − √5 𝐿0 2 𝑧 =𝑎+𝑏−𝑦 𝑦=𝑎+ 𝑎+𝑏 2 𝐿0 > 𝜖 𝐹(𝑦), 𝐹(𝑧) 𝐹(𝑦) ≤ 𝐹(𝑧) 𝑎=𝑦 𝑦=𝑧 𝑧 = 𝑎+𝑏−𝑧 𝑏=𝑧 𝑧=𝑦 𝑦 =𝑎+𝑏−𝑦 𝐿0 = |𝑏 − 𝑎| Конец function an = gr(a, b, al) %golden ratio method L0 = abs(b - a); y = a + (3 - sqrt(5))/2*L0; z = a + b - y; while(L0 > al) fy = y + 1/log(y); fz = z + 1/log(z); if (fy <= fz) b = z; z = y; y = a + b - y; else a = y; y = z; z = a + b - z; end L0 = abs(b - a); end an = (a + b)/2; end - метод Фибоначчи; Начало 𝐿0 , 𝜖 𝛼= 𝜖 4 𝐿0 > 𝐹𝑖𝑁 𝜖 𝑘=0 𝐹𝑖𝑁+1 = 𝐹𝑖𝑁 + 𝐹𝑖𝑁−1 𝐹𝑖𝑁−2 (𝑏 − 𝑎) 𝐹𝑖𝑁 𝐹𝑖𝑁−1 𝑦=𝑎+ (𝑏 − 𝑎) 𝐹𝑖𝑁 𝑦=𝑎+ 𝑁 =𝑁+1 𝑁 ≠ 𝑘+3 𝑦=𝑧 𝑧 =𝑦+𝛼 𝐹(𝑦), 𝐹(𝑧) 𝐹(𝑦), 𝐹(𝑧) 𝐹(𝑦) ≤ 𝐹(𝑧) 𝐹(𝑦) ≤ 𝐹(𝑧) 𝑎=𝑦 𝑦=𝑧 𝐹𝑖𝑁−𝑘−2 𝑧=𝑎+ (𝑏 − 𝑎) 𝐹𝑖𝑁−𝑘−1 𝑏=𝑧 𝑧=𝑦 𝐹𝑖𝑁−𝑘−3 𝑦=𝑎+ (𝑏 − 𝑎) 𝐹𝑖𝑁−𝑘−1 𝑏=𝑧 𝑘 =𝑘+1 𝑎=𝑦 𝑎+𝑏 2 Конец function an = fi(a, b, al) %fibonacci method eps = al/4; L0 = abs(b - a); f = zeros(1,2); f(1) = 1; f(2) = 1; i = 2; while (L0/al > f(i)) f(i + 1) = f(i) + f(i - 1); i = i + 1; end N = i; %number of F numbers k = 0; y = a + f(N - 2)/f(N)*(b - a); z = a + f(N - 1)/f(N)*(b - a); while (N ~= (k + 3)) fy = y + 1/log(y); fz = z + 1/log(z); if (fy <= fz) b = z; z = y; y = a + f(N - k - 3)/f(N - k - 1)*(b - a); else a = y; y = z; z = a + f(N - k - 2)/f(N - k - 1)*(b - a); end k = k + 1; end y = z; z = y + eps; fy = y + 1/log(y); fz = z + 1/log(z); if (fy <= fz) b = z; else a = y; end an = (a + b)/2; end - метод квадратичной интерполяции и др.