Добавил:
unclefalkon
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛР2 / lab2_sopr_gradient
.m clear
clc
y = @(x) 45*x(1)^2 - 88*x(1)*x(2) + 45*x(2)^2 + 102*x(1) + 268*x(2) - 21;
dyx1 = @(x) 90*x(1) - 88*x(2) + 102;
dyx2 = @(x) 90*x(2) - 88*x(1) + 268;
eps=0.00001;
x=[1, -1];
iter_counter = 0;
value_counter = 0;
beta = 0;
p = [0, 0];
while (sqrt(dyx1(x)^2+dyx2(x)^2) > eps)
p = -1*[dyx1(x), dyx2(x)] + beta*p;
f = @(a)y(x+a*p);
tmp = lab1_porazryad(f, 0, 10^(-7));
alpha = tmp(1);
beta_znam = dyx1(x)^2+dyx2(x)^2;
x = x+alpha*p;
beta_chisl = dyx1(x)^2+dyx2(x)^2;
beta = beta_chisl/beta_znam;
if(mod(iter_counter+1, 2) == 0) %restart
beta = 0;
end
value_counter = value_counter + 4 + tmp(2);
iter_counter = iter_counter + 1;
end
x_min = x;
f_min = y(x);
str = sprintf('Минимум функции %3f, в точке x1 = %3f, x2 = %3f',f_min, x_min(1), x_min(2));
disp(str);
str = sprintf('Количество вычислений - %d. Количество итераций метода - %d', value_counter, iter_counter);
disp(str);
clc
y = @(x) 45*x(1)^2 - 88*x(1)*x(2) + 45*x(2)^2 + 102*x(1) + 268*x(2) - 21;
dyx1 = @(x) 90*x(1) - 88*x(2) + 102;
dyx2 = @(x) 90*x(2) - 88*x(1) + 268;
eps=0.00001;
x=[1, -1];
iter_counter = 0;
value_counter = 0;
beta = 0;
p = [0, 0];
while (sqrt(dyx1(x)^2+dyx2(x)^2) > eps)
p = -1*[dyx1(x), dyx2(x)] + beta*p;
f = @(a)y(x+a*p);
tmp = lab1_porazryad(f, 0, 10^(-7));
alpha = tmp(1);
beta_znam = dyx1(x)^2+dyx2(x)^2;
x = x+alpha*p;
beta_chisl = dyx1(x)^2+dyx2(x)^2;
beta = beta_chisl/beta_znam;
if(mod(iter_counter+1, 2) == 0) %restart
beta = 0;
end
value_counter = value_counter + 4 + tmp(2);
iter_counter = iter_counter + 1;
end
x_min = x;
f_min = y(x);
str = sprintf('Минимум функции %3f, в точке x1 = %3f, x2 = %3f',f_min, x_min(1), x_min(2));
disp(str);
str = sprintf('Количество вычислений - %d. Количество итераций метода - %d', value_counter, iter_counter);
disp(str);
Соседние файлы в папке ЛР2