Professional Documents
Culture Documents
gl/znCEkr
São Paulo
2018
EXERCÍCIO 1
Transformando as restrições na forma , obtemos:
Item a
Uma vez que o problema possui apenas duas coordenadas, é possível a representação no espaço
Cartesiano. A figura abaixo mostra o gráfico da função objetivo para um intervalo de .
Uma rotina em Matlab foi desenvolvida para se calcular o gradiente da função objetivo e plotar o campo
vetorial desse gradiente. Também foi inserido as regiões onde ambas restrições estão ativas (domínio
viável), como mostrado a seguir:
figure; set(gcf,'color','white');
% -> plot vector field
quiver(X_1, X_2, G(:, 1:size(G, 2)/2), G(:,size(G, 2)/2 + 1:size(G, 2)));
xlabel('$x_1$', 'Interpreter','latex', 'FontSize',17);
ylabel('$x_2$', 'Interpreter','latex', 'FontSize',17);
title('Gradient and Constraint Plot');
hold on
% Plot surface
[X_1, X_2] = meshgrid(-10 : 0.5 : 10);
Z = ffun(X_1, X_2);
figure; set(gcf,'color','white');
surf(X_1, X_2, Z);
xlabel('$x_1$', 'Interpreter','latex', 'FontSize',17);
ylabel('$x_2$', 'Interpreter','latex', 'FontSize',17);
zlabel('$f(x_1, x_2)$', 'Interpreter','latex', 'FontSize',17);
title('Surface Plot of the objective function');
pbaspect([1 1 1]);
Item b
A função Lagrangiana para um sistema com restrições é definido pela expressão
constraint_term = 0;
for i = 1 : length(g)
lhs_g = children(g(i)); %get the left hand side of the constraint inequality
constraint_term = constraint_term + (l_multi(i) * lhs_g(2));
end
L = f - constraint_term;
latex2(L);
Item c
A codição de estacionariedade é obtida diferenciando-se a função Lagrangiana com respeito às variáveis de
projeto, desta forma
end
dLdx1 = diff(L, x_1) == 0;
dLdx2 = diff(L, x_2) == 0;
for j = 1:size(hyp, 2)
if hyp(i,j) == 0
LS = subs(LS, l_multi(j), 0);
% H_num = subs(H_num, l_multi(j), 0);
else %add active constraint expression to the system of equations
lhs_g = children(g(j));
LS = [LS; lhs_g(2)==0];
end
end
LS_sol = solve(LS); %solve the system of equations
X_sol
Item d
Caso 1
Neste caso ambas as restrições estão inativas, o ponto em vermelho indica a solução das variáveis de
projeto, ou seja .
Caso 2
Neste caso apenas a segunda restrição está ativa (conforme tabela acima), pode-se notar pelo gráfico
abaixo que as soluções são os pontos extremos da circunferência
Caso 3
No caso três apenas a primeira restrição está ativa, logo a solução é o ponto no extremo do linha formada
pela expressão , sendo este um ponto de máximo
Caso 4
No quarto caso, ambas as restrições estão ativas, e portanto os pontos obtidos são os pontos de
intersecção das duas restrições.
Itens e, f
Os itens e e f estão incorporados no código mostrado no item c. A resposta retornada pelo código é
mostrada a seguir
>>>> Case_1
'x_1'
'x_2'
H is negative definite
>>>> Case_2
'lambda_2'
1
1
-1
-1
'x_1'
-5
5
0
0
'x_2'
0
0
-5
5
H is negative definite
-> Hessian Matrix
[ 0, 0]
[ 0, 4]
H is negative definite
-> Hessian Matrix
[ -4, 0]
[ 0, 0]
H is negative definite
-> Hessian Matrix
[ -4, 0]
[ 0, 0]
H is negative definite
>>>> Case_3
'lambda_1'
-6
'x_1'
'x_2'
3
-> Hessian Matrix
[ 2*lambda_2 - 2, 0]
[ 0, 2*lambda_2 + 2]
H is negative definite
>>>> Case_4
'lambda_1'
-12
-12
'lambda_2'
1
1
'x_1'
-4
4
'x_2'
3
3
H is negative definite
-> Hessian Matrix
[ 0, 0]
[ 0, 4]
H is negative definite
X_sol =
[1x2 sym]
[4x3 sym]
[1x3 sym]
[2x4 sym]
>> X_sol{1}
ans =
[ 0, 0]
>> X_sol{2}
ans =
[ 1, -5, 0]
[ 1, 5, 0]
[ -1, 0, -5]
[ -1, 0, 5]
>> X_sol{3}
ans =
[ -6, 0, 3]
>> X_sol{4}
ans =
[ -12, 1, -4, 3]
[ -12, 1, 4, 3]
Exercício 2
O problema consiste em maximizar o momento em guinada a bombordo,
podemos converter o problema para um problema de minimização e reescrevermos as restrições para que
fique na forma , desta forma obtemos:
Item a
A função Lagrangiana é definida como
e o gradiente de
b.1
b.2
Para o segundo ponto ( ), devemos notar que , desta forma
ambas as restrições também estão ativas, sendo assim
b.3
Para o terceiro ponto ( ), fazemos a
verificação das restrições, para , temos
logo esta restrição está ativa, de modo análogo, resolvemos para e notamos que de novo ambas estão
ativas, sendo assim, obtemos a seguinte matriz
b.4
Apenas os pontos 1 e 3 obedecem as condições KKT, uma vez que em ambos os casos . No ponto 2
fornecido, a matriz possui um deficiente e logo pode haver múltiplas soluções para a inversa de
, sendo assim não se pode calcular algébricamente os valores de para este ponto.
b.5
A matriz Hessiana do problema é
Percebe-se que a matriz é positiva semi-definida, logo o problema é convexo. Para o ponto três dado, a
matriz Hessiana é
que é positiva definida (assumindo que ), desta forma o ponto três é o ponto ótimo do
problema, máximo global. O código abaixo calcula os multiplicadores de Lagrange para cada ponto dado,
além de checar se as restrições estão ativas e calcular a matriz Hessiana.
function exe2()
%EXE2 Solution to exercise 2 (list 3)
% Inputs
% project variables
x = sym('x_', [1,2]);
y = sym('y_', [1,2]);
pvars = [x, y];
syms T_max L B
R = sqrt(L^2+B^2);
f = -L * (x(1)+x(2)) + B *(y(1)-y(2));
points{1} = [x(1), 0;
x(2), 0;
y(1), -T_max;
y(2), T_max];
points{2} = [x(1), 0;
x(2), T_max;
y(1), 0;
y(2), 0];
%%
%%
function lagrangian = computeLagrangian(f, g)
l_multi = sym('lambda_', [1,length(g)]);
const_term = 0; %constraint term
lhs_g = children(g);
for i = 1 : length(g)
const_term = const_term + l_multi(i) * lhs_g{i}(2);
end
%%
function N = computeN(g, x, varargin)
% Computes N matrix (Jacobian matrix for the constraints). Takes the
% partial differentiation of the active constraint g_i with respect to the
% project variables;
% g is an array containing all r active constraints symbolic expressions,
% x is an array containing all n project variables (symbolic) x_num is a
% (1 x n) array containing numeric values for project variables, x and
% x_num must have the same size
N = transpose(jacobian(g, x));
%%
function lambda = computeLagrangeMultipliers(grad_f, N)
N_transp = transpose(N);
lambda = (N_transp*N) \ N_transp * grad_f;
end
%%
function H = computeHessian(L, x, varargin)
% Computes the hessian matrix of the lagrangian function
H = hessian(L, x);