-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 回答