
Добавил:
deadpigeon
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:БДЗ3 / fastest_gradient
.m clc,clear
syms a_s
%fun = x.^2 + x*y + 2*y.^2 - a*x - b*y + c;
%diff_x = 2*x + y - a;
%diff_y = x + 4*y - b;
a = 6.1;
b = 11.8;
c = 9.24;
e = 0.1;
x = 3;
y = 4;
%alpha = 1;
%fun_value = x.^2 + x*y + 2*y.^2 - a*x - b*y + c;
while true
grad_x = 2*x + y - a;
grad_y = x + 4*y - b;
if (abs(grad_x)<e && abs(grad_y)<e)
break
end
epsi = 0.001;
delta = 0.01;
alpha = 0;
x_min = 0;
fun_alpha = (x-a_s*grad_x).^2 + (x-a_s*grad_x)*(y-a_s*grad_y) + 2*(y-a_s*grad_y).^2 - a*(x-a_s*grad_x) - b*(y-a_s*grad_y) + c;
f_min = subs(fun_alpha,(x_min));
while abs(delta) > epsi
x_min = x_min+delta;
if f_min>subs(fun_alpha,(x_min))
alpha = x_min;
f_min = subs(fun_alpha,(x_min));
else
delta = -delta/4;
end
end
x = x - alpha*grad_x;
y = y - alpha*grad_y;
end
fun_value = x.^2 + x*y + 2*y.^2 - a*x - b*y + c
x
y
syms a_s
%fun = x.^2 + x*y + 2*y.^2 - a*x - b*y + c;
%diff_x = 2*x + y - a;
%diff_y = x + 4*y - b;
a = 6.1;
b = 11.8;
c = 9.24;
e = 0.1;
x = 3;
y = 4;
%alpha = 1;
%fun_value = x.^2 + x*y + 2*y.^2 - a*x - b*y + c;
while true
grad_x = 2*x + y - a;
grad_y = x + 4*y - b;
if (abs(grad_x)<e && abs(grad_y)<e)
break
end
epsi = 0.001;
delta = 0.01;
alpha = 0;
x_min = 0;
fun_alpha = (x-a_s*grad_x).^2 + (x-a_s*grad_x)*(y-a_s*grad_y) + 2*(y-a_s*grad_y).^2 - a*(x-a_s*grad_x) - b*(y-a_s*grad_y) + c;
f_min = subs(fun_alpha,(x_min));
while abs(delta) > epsi
x_min = x_min+delta;
if f_min>subs(fun_alpha,(x_min))
alpha = x_min;
f_min = subs(fun_alpha,(x_min));
else
delta = -delta/4;
end
end
x = x - alpha*grad_x;
y = y - alpha*grad_y;
end
fun_value = x.^2 + x*y + 2*y.^2 - a*x - b*y + c
x
y
Соседние файлы в папке БДЗ3