Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 在MATLAB中创建一个对角线和左对角线均为1的矩阵_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 在MATLAB中创建一个对角线和左对角线均为1的矩阵

Arrays 在MATLAB中创建一个对角线和左对角线均为1的矩阵,arrays,matlab,matrix,Arrays,Matlab,Matrix,我想创建一个大小为nxn的正方形矩阵,其中对角线元素和左对角线都等于1。其余元素等于0 例如,如果矩阵为5 x 5: 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 如何在MATLAB中执行此操作?使用函数: tril(ones(n),0) - tril(ones(n),-2) 如果你想要一行更粗的1s,只需调整-2: n = 10; m = 4; tril(ones(n),0) - tril(ones(n),-m) 如果您喜欢使用exc

我想创建一个大小为
nxn
的正方形矩阵,其中对角线元素和左对角线都等于1。其余元素等于0

例如,如果矩阵为5 x 5:

1 0 0 0 0
1 1 0 0 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
如何在MATLAB中执行此操作?

使用函数:

tril(ones(n),0) - tril(ones(n),-2)
如果你想要一行更粗的
1
s,只需调整
-2

n = 10;
m = 4;
tril(ones(n),0) - tril(ones(n),-m)
如果您喜欢使用excaza建议的
diag
,请尝试

diag(ones(n,1)) + diag(ones(n-1,1),-1)
但是你不能用这种方法控制条纹的“厚度”。但是,对于2的厚度,它的性能可能更好。不过,您必须对其进行测试。

您也可以使用too创建该矩阵:

n = 5;
v = ones(n,1);
d = full(spdiags([v v], [-1 0], n, n));
我们得到:

>> d

d =

     1     0     0     0     0
     1     1     0     0     0
     0     1     1     0     0
     0     0     1     1     0
     0     0     0     1     1
前两行定义了矩阵的所需大小,假设一个正方形
nxn
,以及所有长度
nx1
的向量。然后我们调用
spdiags
来定义该向量将沿着该矩阵的对角线填充的位置。我们希望将主对角线定义为所有的1以及主对角线左侧的对角线,或远离主对角线的
-1
spdiags
将调整远离主对角线的对角线的元素总数以进行补偿


我们还确保输出的大小为
nxn
,但该矩阵实际上是。我们需要将矩阵转换为完整的结果。

通过一些索引,您还可以执行以下操作:

N = 5;
ind = repelem(1:N, 2);    % [1 1 2 2 3 3 ... N N]
M = full(sparse(ind(2:end), ind(1:end-1), 1))
简单方法使用:


这也可以通过以下方式实现:

例如,要获得一个5x5矩阵,其中主对角线和下面的两条对角线设置为
1
,请定义
n=5
d=[0-1-2]
,其中

M =
     1     0     0     0     0
     1     1     0     0     0
     1     1     1     0     0
     0     1     1     1     0
     0     0     1     1     1

使用两次,将它们加在一起。始终只使用
1
s?的两条对角线。Dan yes allways withones@efirvida我已经改变了你问题的措辞和标题,以便更好地反映所提出的问题。诸如“Matlab如何创建此矩阵”之类的标题不是一个有意义的标题。如果有其他人和你有同样的问题,那么让标题更有意义将大大有助于让问题易于搜索。让我知道你的想法,或者如果你想让我恢复编辑。@rayryeng感谢对
sparse
:D.+1.的所有善意滥用。我总是在身边。:)
n = 5;        %// matrix size
d = [0 -1];   %// diagonals you want set to 1
M = double(ismember(bsxfun(@minus, 1:n, (1:n).'), d));
M =
     1     0     0     0     0
     1     1     0     0     0
     1     1     1     0     0
     0     1     1     1     0
     0     0     1     1     1