How do I plot the value at each iteration?

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
%using the conjugate-gradient method
%xstar - the global optimal solution
%value - optimal solution
function[xstar, minv] = conj_grad(Q,x,q,c,n,tol)
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
Cris LaPierre 2020년 3월 20일

0 개 추천

I shared a simple example in a similar post recently. That might help.

댓글 수: 7

SA
SA 2020년 3월 20일
Hi Cris,
I went through the code but I don't need a need figure for each itereation. I just want one figure that has each itereation and its corresponding value
There were two options shown in that post. The first one does what you want. The main difference here is that example used a while loop. You can replace it with a for loop instead.
SA
SA 2020년 3월 20일
Hi Cris,
I don't really understand the code so I am unable to implement it in mine
Fair enough. It's unclear to me which value(s) you want plotted. If you can write the plot command you want, I can help you insert it into your code.
SA
SA 2020년 3월 21일
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
Cris LaPierre 2020년 3월 21일
편집: Cris LaPierre 2020년 3월 21일
This assumes res and value can be plotted on the same axes.
%this program computes the optimal solution of a nonlinear programming
%using the conjugate-gradient method
%xstar - the global optimal solution
%value - optimal solution
function[xstar, minv] = conj_grad(Q,x,q,c,n,tol)
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
SA 2020년 3월 21일
It worked Cris. Thanks so much for the help.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

질문:

SA
2020년 3월 20일

댓글:

SA
2020년 3월 21일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by