For loop help for Linear Algebra Class

8 views (last 30 days)
I cant seem to get this algorithm code correct.
%HW3 #2
% Given:
%
% y_k denotes k index
%
% y_k=A*x_k
% r_k=norm(y_k) / norm(x_k)
% x_(k+1) = y_k / norm(y)
%
% Create a vector with 0-50 indexes of k
clear all;
close all;
A = [-5,3,-1;0,4,1;0,0,-2];
x(1)=[1;1;1];
for k = 1:51
y{k} = A.*x;
r{k} = norm(y)/norm(x);
x{k+1} = y/norm(y);
end
I receive the error: "In an assignment A(I) = B, the number of elements in B and I must bethe same."
Im not sure how to go about fixing the problem, because I do not fully understand how mat lab operates yet.
  4 Comments
Sean Murphy
Sean Murphy on 1 Feb 2013
Edited: Sean Murphy on 1 Feb 2013
Thanks guys!!
Fixed code:
%HW3 #2
% y_k=A*x_k
% r_k=||y_k||_2 / ||x_k||_2
% x_k+1 = y_k / ||y_k||_2
% r = norm(y0,2)/norm(x0,2)
% x_k1 = y0/norm(y0,2)
clear all;
close all;
A = [-5,3,-1;0,4,1;0,0,-2];
x{1}= [1;1;1];
for k = 1:51
y{k} = A*x{k};
r{k} = norm(y{k})/norm(x{k});
x{k+1} = y{k}/norm(y{k});
end
q_x = [x{1,51}]
q_y = [y{1,51}]
q_r = [r{1,51}]
save x50.dat q_x -ascii
save y50.dat q_y -ascii
save r50.dat q_r -ascii
Cedric
Cedric on 1 Feb 2013
Edited: Cedric on 1 Feb 2013
You're most welcome! Note that x, y, r are 1D cell arrays, so x{1,51} is the same as x{51}, and the [ ] that you use in [x{1,51}] have no effect.
If you wanted to save all the x vectors though, you could concatenate all cells content of x (which is a cell array, so its elements are cells whose content are 3x1 numeric arrays) the following way: [x{:}], which would be a 3x52 array of vectors in column. This dimension should also make you realize that as you compute x{k+1}, the boundaries that you are defining might need some additional thoughts, especially if you wanted to use then simultaneously x and y (as [y{:}] is a 3x51 array)..

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 1 Feb 2013
Instead of
x(1)=[1;1;1];
you would need
x{1}=[1;1;1];
to avoid that error.
However, then when you go to the A.*x you would fail in trying to multiply A by a cell array. Try
y{k} = A.*x{k}
  2 Comments
Walter Roberson
Walter Roberson on 1 Feb 2013
True, it would be matrix multiplication desired in that case.
Note that your r{k} and x{k+1} assignments will need similar adjustments to use x{k} and y{k}

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!