Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР2 / lab2_huk_givs

.m
Скачиваний:
14
Добавлен:
14.12.2022
Размер:
2.41 Кб
Скачать
function [x_min, y_min, value_counter, iter_counter] = lab2_huk_givs(y, x_start, eps)

iter_counter = 0;
value_counter = 0;
h = 1;

x = x_start;

% Proverka funkcii v startovoy tochke
x0_ = x;
y_new = y(x0_(1), x0_(2)); value_counter = value_counter + 1;

while (h > eps)
iter_counter = iter_counter +1;

% Issledovanie funkcii v okrestnosti tochki x (po koordinatam)
x = x0_;
r = y_new;
x1 = x;

for i=1:2
x1(1,i) = x(1,i) + h;
r1 = y(x1(1), x1(2)); value_counter = value_counter + 1;
if (r1 < r)
x = x1;
r = r1;
else
x1(1,i) = x(1,i) - h;
r1 = y(x1(1), x1(2)); value_counter = value_counter + 1;
if (r1 < r)
x = x1;
r = r1;
end
end
end


% Proverka znacheniya funkcii v tochke
if (r < y_new)

while(1)
% Zapominaem predyduschie znacheniya
% Berem novuyu start tochku
x0 = x0_;
x0_ = x;
y_new = r;


% Spusk po formule gde a=2
for i=1:2
x(1,i) = x0(1,i) + 2 * (x0_(1,i) - x0(1,i)); value_counter = value_counter + 1;
end

% Issledovanie funkcii v okrestnosti tochki x (po koordinatam)
r = y(x(1), x(2));
x1 = x;

for i=1:2
x1(1,i) = x(1,i) + h;
r1 = y(x1(1), x1(2)); value_counter = value_counter + 1;
if (r1 < r)
x = x1;
r = r1;
else
x1(1,i) = x(1,i) - h;
r1 = y(x1(1), x1(2)); value_counter = value_counter + 1;
if (r1 < r)
x = x1;
r = r1;
end
end
end

if (r >= y_new)
break;
end

end

end

h = h / 10;

end
x_min = x0_;
y_min = y(x_min(1), x_min(2));

str = sprintf('Минимум функции %3f, в точке x1 = %3f, x2 = %3f',y_min, x_min(1), x_min(2));
disp(str);
str = sprintf('Количество вычислений - %d. Количество итераций метода - %d', value_counter, iter_counter);
disp(str);
end
Соседние файлы в папке ЛР2