改变矩阵中心对角线旁边的对角线
Changing the diagonals beside center diagonal of matrix
有没有快速改变中心对角线旁边的对角线的方法(参考下面的1
):
m =
2 1 0 0 0 0 0 0 0
1 2 1 0 0 0 0 0 0
0 1 2 1 0 0 0 0 0
0 0 1 2 1 0 0 0 0
0 0 0 1 2 1 0 0 0
0 0 0 0 1 2 1 0 0
0 0 0 0 0 1 2 1 0
0 0 0 0 0 0 1 2 1
0 0 0 0 0 0 0 1 2
更改中心对角线的快速方法是 m(logical(eye(size(m)))) = 2
。如何将其旁边的对角线分配给 1
的值?
diag
函数采用第二个参数,k
,指定目标对角线:
diag([-1,-1,-1,-1],-1) % or diag(-1*ones(4,1),1)
ans =
0 0 0 0 0
-1 0 0 0 0
0 -1 0 0 0
0 0 -1 0 0
0 0 0 -1 0
diag([1,1,1,1],1)
ans =
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
0 0 0 0 0
diag([2,2,2],2)
ans =
0 0 2 0 0
0 0 0 2 0
0 0 0 0 2
0 0 0 0 0
0 0 0 0 0
如果您已经有一个现有矩阵并且想要更改其中一条对角线,您可以这样做:
M = magic(5) % example matrix
v = [1,2,3,4] % example vector that must replace the first diagonal of M, i.e. the diagonal one element above the main diagonal
M - diag(diag(M,1),1) + diag(v,1)
想法是首先使用diag
提取要更改的对角线的数字,diag(M,1)
。然后再次使用 diag
将第一次调用 diag
创建的向量更改为矩阵 diag(diag(M,1),1)
。您会注意到,这将创建一个矩阵,其维度与 M
相同,数字与第一个对角线上的 [=20=] 相同,其他地方的数字与 0
相同。因此 M - diag(diag(M,1),1)
只是将第一个对角线设置为 0
。现在 diag(v,1)
创建一个与 M
维度相同的矩阵,即到处都是 0
但在第一个对角线上具有 v
的数字,因此仅添加 diag(v,1)
由于 -diag(diag(M,1),1)
,影响了第一个对角线,它全 0
s
如果您只是将常量应用于对角线(例如将主对角线下方第一个对角线上的所有值设置为 6
)的替代方案:
n = 5;
k = -1;
a = 6;
M = magic(n);
ind = diag(true(n-abs(k),1),k);
M(ind) = a;
有没有快速改变中心对角线旁边的对角线的方法(参考下面的1
):
m =
2 1 0 0 0 0 0 0 0
1 2 1 0 0 0 0 0 0
0 1 2 1 0 0 0 0 0
0 0 1 2 1 0 0 0 0
0 0 0 1 2 1 0 0 0
0 0 0 0 1 2 1 0 0
0 0 0 0 0 1 2 1 0
0 0 0 0 0 0 1 2 1
0 0 0 0 0 0 0 1 2
更改中心对角线的快速方法是 m(logical(eye(size(m)))) = 2
。如何将其旁边的对角线分配给 1
的值?
diag
函数采用第二个参数,k
,指定目标对角线:
diag([-1,-1,-1,-1],-1) % or diag(-1*ones(4,1),1)
ans =
0 0 0 0 0
-1 0 0 0 0
0 -1 0 0 0
0 0 -1 0 0
0 0 0 -1 0
diag([1,1,1,1],1)
ans =
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
0 0 0 0 0
diag([2,2,2],2)
ans =
0 0 2 0 0
0 0 0 2 0
0 0 0 0 2
0 0 0 0 0
0 0 0 0 0
如果您已经有一个现有矩阵并且想要更改其中一条对角线,您可以这样做:
M = magic(5) % example matrix
v = [1,2,3,4] % example vector that must replace the first diagonal of M, i.e. the diagonal one element above the main diagonal
M - diag(diag(M,1),1) + diag(v,1)
想法是首先使用diag
提取要更改的对角线的数字,diag(M,1)
。然后再次使用 diag
将第一次调用 diag
创建的向量更改为矩阵 diag(diag(M,1),1)
。您会注意到,这将创建一个矩阵,其维度与 M
相同,数字与第一个对角线上的 [=20=] 相同,其他地方的数字与 0
相同。因此 M - diag(diag(M,1),1)
只是将第一个对角线设置为 0
。现在 diag(v,1)
创建一个与 M
维度相同的矩阵,即到处都是 0
但在第一个对角线上具有 v
的数字,因此仅添加 diag(v,1)
由于 -diag(diag(M,1),1)
0
s
如果您只是将常量应用于对角线(例如将主对角线下方第一个对角线上的所有值设置为 6
)的替代方案:
n = 5;
k = -1;
a = 6;
M = magic(n);
ind = diag(true(n-abs(k),1),k);
M(ind) = a;