fprintf('iteration %d, value %f\n', [k, fun_val]) printing out wrong value
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
The following code initialized a quadratic function then performs gradient descent
%build function
%--------------------------------------------------------------------------
A = [1, 2; 3 4];
b = [1,2]'
c = [0,0]
f = @(x) 1/2*x'*A*x + b'*x + c
%Gradient Descent
%-------------------------------------------------------------------------
%initialize gradient descent
epsilon = 0.01;
x0 = [1, 1]';
x=x0;
k=0;
grad= A*x + b;
while (norm(grad) > epsilon)
k=k+1;
t= norm(grad)^2/(2*grad'*A*grad);
x=x-t*grad;
grad= A*x+b;
fun_val= f(x);
fprintf('iteration %d, value %f\n', [k, fun_val])
end
However, for some unknown reason, the fprintf is printing the values of "fun_val" as iteration
iteration 1, value 1.447837
iteration 1.447837e+00, value iteration 2, value -0.135126
iteration -1.351264e-01, value iteration 3, value -0.504093
iteration -5.040926e-01, value iteration 4, value -0.584031
iteration -5.840306e-01, value iteration 5, value -0.599152
iteration -5.991521e-01, value iteration 6, value -0.602219
iteration -6.022192e-01, value iteration 7, value -0.609555
iteration -6.095549e-01, value iteration 8, value -0.801859
iteration -8.018594e-01, value iteration 9, value -0.835942
iteration -8.359422e-01, value iteration 10, value -0.848505
iteration -8.485046e-01, value iteration 11, value -0.622973
iteration -6.229734e-01, value iteration 12, value -0.638213
iteration -6.382132e-01, value iteration 13, value -0.684021
iteration -6.840212e-01, value iteration 14, value -0.697310
iteration -6.973100e-01, value iteration 15, value -1.028292
iteration -1.028292e+00, value iteration 16, value -1.093322
iteration -1.093322e+00, value iteration 17, value -1.117833
iteration -1.117833e+00, value iteration 18, value -0.733297
iteration -7.332971e-01, value iteration 19, value -0.803574
I can't seem to figure out how to fix this problem. Can anyone assist?
0 commentaires
Réponses (1)
Star Strider
le 21 Jan 2018
Your ‘fun_val’ variable is a (1x2) vector. Choose one element of it (or the mean of them or something else), then print that.
Example —
fprintf('iteration %d, value %f\n', [k, fun_val(1)])
0 commentaires
Voir également
Catégories
En savoir plus sur Get Started with Optimization Toolbox dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!