在MATLAB中创建一个带有对角线和左对角线的矩阵

您所在的位置:网站首页 矩阵中的对角线 在MATLAB中创建一个带有对角线和左对角线的矩阵

在MATLAB中创建一个带有对角线和左对角线的矩阵

2023-03-24 13:27| 来源: 网络整理| 查看: 265

我想创建一个大小的方阵,n x n其中对角元素和左对角线都等于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中做到这一点?

1> Dan..:

琐碎使用tril功能:

tril(ones(n),0) - tril(ones(n),-2)

如果你想要更粗的线条,1只需调整-2:

n = 10; m = 4; tril(ones(n),0) - tril(ones(n),-m)

如果你喜欢使用diagexcaza建议,那么试试吧

diag(ones(n,1)) + diag(ones(n-1,1),-1)

但你无法通过这种方式控制条纹的"厚度".但是,对于2的厚度,它可能表现更好.你必须测试它.

2> rayryeng - R..:

您也可以使用它spdiags来创建该矩阵:

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

前两行定义矩阵的所需大小,假设一个正方形n x n以及所有长度的矢量n x 1.然后spdiags,我们调用以定义此向量的对角线上的这个向量将填充的位置.我们希望将主对角线定义为具有所有的对角线以及主对角线左侧的对角线,或者-1远离主对角线. spdiags将调整远离主要对角线的元素总数进行补偿.

我们还确保输出的大小n x n,但实际上是这个矩阵 sparse.我们需要将矩阵转换full为完成结果.

3> Amro..:

有一些指数杂耍,你也可以这样做:

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))

4> Rafael Monte..:

使用线性索引的简单方法:

n = 5; M = eye(n); M(2:n+1:end) = 1;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3