How do I update a matrix in for loop (indexing problem)

2 次查看(过去 30 天)
Hello,
I have a matrix A and a vector u. I want to run a for loop to update the vector u. The operation is easy, I will multiple A by u (result is another vector denoted by z). Pick the largest element in z (result is scalar denoted by m). Update u by dividing the vector z with m. I don't know how to index the matrix so I used cell notation but that might not be correct.
A=[1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
u= ones (4,1);
for s=1:10
z{s}= A*u{s};
m(s)= max(z{s});
u{s} = z{s}/m(s);
end
Any suggestions would be very helpful.

回答(1 个)

Guillaume
Guillaume 2015-8-20
编辑:Guillaume 2015-8-20
If you don't want to keep around the result of each step, then your algorithm is simply:
A = [1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
u = ones (4,1);
for s = 1:10
z = A * u;
m = max(z);
u = z / m;
end
If you do want to keep the intermediary results, then you can indeed use cell arrays, like this:
A = [1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
uinitial = ones (4,1);
numsteps = 10;
u = cell(1, numsteps+1); z = cell(1, numsteps); m = cell(1, numsteps);
u{1} = uinitial;
for s = 1:numsteps
z{s} = A * u{s};
m{s} = max(z{s});
u{s+1} = z{s} / m{s};
end
Or you could use arrays which will be easier to inspect
A = [1 2 3 4; 5 6 7 8 ; 9 10 11 12; 13 14 15 16];
uinitial = ones (4,1);
numsteps = 10;
u = zeros(4, numsteps+1); z = zeros(1, numsteps); m = zeros(1, numsteps);
u(:, 1) = uinitial;
for s = 1:numsteps
z(s) = A * u(:, s);
m(s) = max(z(s));
u(:, s+1) = z(s) / m(s);
end

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by