-1

私は行列zを持っています:

z = [0 0 0 0 0 0 0 0 0 0]

for i = 2:20
    z(i,:) = z(i-1,:) + 5;
end

したがって、このループはゼロの行で始まる行列を生成し、各行にさらに 5 を追加します。

30 に達したときにフリーズする方法を知りたいので、その行以降の値はすべて 30 と表示されます。

したがって、次のようになります。

0 0 0...

5 5 5...

10 10 10...

15 15 15...

20 20 20...

25 25 25...

30 30 30...

30 30 30...

30 30 30 など

4

2 に答える 2

2

if練習のために、次のステートメントを追加できます。

for i = 2:20
    z(i, :) = z(i - 1, :) + 5;
    if z(i, :) > 30
        z(i, :) = 30;
    end
end

...または次を使用してキャップしminます:

for i = 2:20
    z(i, :) = min(z(i - 1, :) + 5, 30);
end

ただし、次の行に沿ってベクトル化された操作を使用すると、このループを完全に回避できます。

z = min(cumsum(5 * ones(20, 10)), 30)
于 2013-10-28T15:29:51.447 に答える
2

コマンドを使用minして値を切り捨てます。ベクトル化を使用する

>> z = repmat( min( 0:5:95, 30 )', [1 10] )
z =
 0     0     0     0     0     0     0     0     0     0
 5     5     5     5     5     5     5     5     5     5
10    10    10    10    10    10    10    10    10    10
15    15    15    15    15    15    15    15    15    15
20    20    20    20    20    20    20    20    20    20
25    25    25    25    25    25    25    25    25    25
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
30    30    30    30    30    30    30    30    30    30
于 2013-10-28T15:30:14.657 に答える