
БДЗ3 / БДЗ3 Колесников ИВТ-15М Вариант 4
.docx
a = 6.1, b = 11.8, с = 9.24, x0 = 3, y0 = 4
1) Метод градиентного спуска:
Код:
clc,clear
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
while true
x_new = x - grad_x*alpha;
y_new = y - grad_y*alpha;
fun_new_value = x_new.^2 + x_new*y_new + 2*y_new.^2 - a*x_new - b*y_new + c;
if fun_new_value<fun_value
x = x_new;
y = y_new;
fun_value = fun_new_value;
break
end
alpha = alpha/2;
end
end
fun_value
x
y
Результат:
fun_value = -10.9985
x = 1.8396
y = 2.4836
Координата точки минимума – (1.8396, 2.4836), значение в точке – -10.9985
2) Метод наискорейшего градиентного спуска:
Код:
clc,clear
syms a_s
a = 6.1;
b = 11.8;
c = 9.24;
e = 0.1;
x = 3;
y = 4;
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
Результат:
fun_value = -10.9998
x = 1.8157
y = 2.4928
Координата точки минимума – (1.8157, 2.4928), значение в точке – -10.9998
3) Метод Ньютона:
Код:
clc,clear
a = 6.1;
b = 11.8;
c = 9.24;
e = 0.1;
x_y = [3;4];
H = [2 1; 1 4];
while true
grad_x = 2*x_y(1) + x_y(2) - a;
grad_y = x_y(1) + 4*x_y(2) - b;
if (abs(grad_x)<e && abs(grad_y)<e)
break
end
grad = [grad_x;grad_y];
x_y = x_y - inv(H)*grad;
end
x = x_y(1);
y = x_y(2);
fun_value = x.^2 + x*y + 2*y.^2 - a*x - b*y + c
x
y
Результат:
fun_value = -11.0000
x = 1.8000
y = 2.5000
Координата точки минимума – (1.8, 2.5), значение в точке – -11