How do I plot the value at each iteration?

7 views (last 30 days)
SA on 20 Mar 2020
Commented: SA on 21 Mar 2020
My code below is to compute the minimum value and vector using the conjugate gradient method. How do i plot the value at each iteration? Thanks.
%this program computes the optimal solution of a nonlinear programming
%xstar - the global optimal solution
%value - optimal solution
tic;
g0 = (0.5*Q'*x) + (0.5*Q*x) + q; %g is the gradient
d = -g0;
b = (-g0) + Q*x;
g_old = g0;
for i = 1:n
alpha = -(g_old'*d)/(d'*Q*d)
x = x + (alpha*d)
g_new = (Q*x) - b
beta = (g_new'*Q*d)/(d'*Q*d)
res = norm(g_new) %res = residual which is the min distance
value = (0.5*x'*Q*x) +(q'*x) + c
if res < tol
xstar = x
minv = value
fprintf("The minimum value is %d and it converged after %d iterations \n", value, i)
break
end
d = (-g_new) + (beta*d)
g_old = g_new
end
toc
end

Cris LaPierre on 20 Mar 2020
I shared a simple example in a similar post recently. That might help.

SA on 21 Mar 2020
At each itreation (i) a res(residue) and value is obtained. I want to plot each i against its corresponding value and each i against its corresponding res, that is
plot(i,value)
plot(i,res).
thanks
Cris LaPierre on 21 Mar 2020
This assumes res and value can be plotted on the same axes.
%this program computes the optimal solution of a nonlinear programming
%xstar - the global optimal solution
%value - optimal solution
tic;
g0 = (0.5*Q'*x) + (0.5*Q*x) + q; %g is the gradient
d = -g0;
b = (-g0) + Q*x;
g_old = g0;
for i = 1:n
alpha = -(g_old'*d)/(d'*Q*d)
x = x + (alpha*d)
g_new = (Q*x) - b
beta = (g_new'*Q*d)/(d'*Q*d)
res = norm(g_new) %res = residual which is the min distance
value = (0.5*x'*Q*x) +(q'*x) + c
% Plot res, value
plot(i,res,'ro',i,value,'gs')
hold on
if res < tol
xstar = x
minv = value
fprintf("The minimum value is %d and it converged after %d iterations \n", value, i)
break
end
d = (-g_new) + (beta*d)
g_old = g_new
end
hold off
toc
end
SA on 21 Mar 2020
It worked Cris. Thanks so much for the help.