Добавил:
unclefalkon
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛР2 / lab2_huk_givs
.m 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
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