p = [-5; -1; 0; 0];
A = [2,3,1,0; 2,1,0,1];
b = [12, 8];
Id = eye(4);
beta = 0.99;
x = [1/2; 2; 5; 5];
normd = 1;
k = 0;
fprintf('Starting interior point: \n');
fprintf(' x = [%5.3f, %5.3f, %5.3f, %5.3f]\n\n', x(1), x(2), x(3), x(4));
path = [x(1), x(2)];
while (normd >1e-3)
T = diag(x);
y = [1;1;1;1];
pk = T*p;
Ak = A*T;
d = (Id - Ak'*inv(Ak*Ak')*Ak) * (-pk);
normd = norm(d);
negd = d(d<0);
alpha = min(-1./negd);
ynew = y + beta*alpha*d;
x = T*ynew;
path = [path; x(1), x(2)];
k = k+1;
fprintf('After %d iterations:\n', k);
fprintf(' x = [%5.3f, %5.3f, %5.3f, %5.3f]\n\n', x(1), x(2), x(3), x(4));
end
figure(1);
clf;
hold on
plot([0,4,3,0,0], [0,0,2,4,0], '-', 'LineWidth', 2);
plot(path(:,1), path(:,2), '-*r');
hold off;
axis equal;
axis([0 4 0 4]);
Starting interior point:
x = [0.500, 2.000, 5.000, 5.000]
After 1 iterations:
x = [1.534, 2.960, 0.050, 1.971]
After 2 iterations:
x = [2.998, 1.985, 0.050, 0.020]
After 3 iterations:
x = [3.020, 1.961, 0.079, 0.000]
After 4 iterations:
x = [3.990, 0.020, 3.961, 0.000]
After 5 iterations:
x = [4.000, 0.000, 4.000, 0.000]
After 6 iterations:
x = [4.000, 0.000, 4.000, 0.000]