Output of loop is 2x1 vector
12 views (last 30 days)
Show older comments
I am trying to perform a manual computation of gradient descent, but having trouble with the for loop in storing the output as a vector (2x1 in this case).
With my inputs:
m=20x2 vector
f=20x1 vector
I have set up this for loop:
length= 10000; %k steps
c = 0.000001; %constant
a0 = [1;1] %first guess
a(1) = a0 -c * M' * (M* a0 -f) %first computation
for k=2:length
a(k) = a(k-1) - c * M' * (M * a(k-1) - f);
end
Unfortunately, I'm seeing `Unable to perform assignment because the left and right sides have a different number
of elements.`
I've verified that the output of the single-case computation a = a0 - c * M' * (M* a0 -f) is [a1;a2]. This is correct.
My question is how one stores an 'a1, a2' vector as the loop continuously iterates and updates the 'a1, a2' ?
0 Comments
Accepted Answer
Jon
on 5 Nov 2021
Edited: Jon
on 5 Nov 2021
If you want to store the results of each loop in a 2 by numSteps matrix you can do this
numSteps= 10000; %k steps
c = 0.000001; %constant
a0 = [1;1] %first guess
% preallocate array to hold results
a = zeros(2,numSteps)
a(:,1) = a0 -c * M' * (M* a0 -f) %first computation
for k=2:length
a(:,k) = a(k-1) - c * M' * (M * a(k-1) - f);
end
Note, I changed your variable name from length to numSteps, length is a Matlab command that gives the maximum dimension of a matrix. Using it as a variable name will work, the variable assignment supersedes the MATLAB function, but is confusing if you think length is a function
3 Comments
Jon
on 5 Nov 2021
oops, need to pull vectors out of a matrix on right hand side too does this help?
a(:,k) = a(:,k-1) - c * M' * (M * a(:,k-1) - f);
Jon
on 5 Nov 2021
If this doesn't work, could you please provide a little more of your example so that I can actually run it (I think I need something that defines M and -f to run it)
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!