Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在矩阵中达到某个数字时冻结数字_Arrays_Matlab_If Statement_For Loop_Matrix - Fatal编程技术网

Arrays 如何在矩阵中达到某个数字时冻结数字

Arrays 如何在矩阵中达到某个数字时冻结数字,arrays,matlab,if-statement,for-loop,matrix,Arrays,Matlab,If Statement,For Loop,Matrix,我有一个矩阵,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 10 10 10 15 15 20 20 25 25 30 30 30 30 30等。为了练习,您可以添加一个if语句: for i = 2:20 z(i,

我有一个矩阵,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

10 10 10

15 15

20 20

25 25

30 30

30 30


30等。

为了练习,您可以添加一个if语句:

for i = 2:20
    z(i, :) = z(i - 1, :) + 5;
    if z(i, :) > 30
        z(i, :) = 30;
    end
end
。。。或使用最小值将其覆盖:

但是,如果使用矢量化操作,则可以完全避免此循环,方法如下:

z = min(cumsum(5 * ones(20, 10)), 30)
使用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

一定不要在一周后就接受了正确的答案。特别是当它是一个如此简洁和彻底的答案时。谢谢你的回答。谢谢你的回答,很大的帮助。谢谢你的回答,很大的帮助。
>> 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