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

3 ビュー (過去 30 日間)
DM
DM 2015 年 8 月 19 日
編集済み: Guillaume 2015 年 8 月 20 日
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 Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by