是否可以快速更改中心对角线旁边的对角线(参考下面的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
?
答案 0 :(得分:2)
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
具有相同尺寸的矩阵,与第一个对角线上的M
和其他地方的0
相同的数字。因此M - diag(diag(M,1),1)
只将第一个对角线设置为0
。现在diag(v,1)
创建了一个与M
具有相同维度的矩阵,其中0
到处都是v
,但在第一个对角线上的数字为diag(v,1)
,因此仅添加0
由于-diag(diag(M,1),1)
6
s
如果您只是将一个常数应用于对角线(例如将主对角线下方的第一个对角线上的所有值设置为n = 5;
k = -1;
a = 6;
M = magic(n);
ind = diag(true(n-abs(k),1),k);
M(ind) = a;
),则可以选择其他方法:
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(Configuration.ServiceUri));
tfs.EnsureAuthenticated();
var versionControl = tfs.GetService<VersionControlServer>();
var mybranches = versionControl.QueryRootBranchObjects(RecursionType.Full);
foreach (var br in mybranches) //nothing here
{
Console.WriteLine(br);
}