Matlab 从向量生成对角矩阵的简单方法?
我有一个大小为1 x 5的向量Matlab 从向量生成对角矩阵的简单方法?,matlab,matlab-guide,Matlab,Matlab Guide,我有一个大小为1 x 5的向量v,和一个大小为5 x 5的对角矩阵D。在我的示例中,我有v=[01 2 3 4]。 第一个问题:我想把向量v放在D的对角线上,这样D(1,1)=0,D(2,2)=1,D(3,3)=2,D(4,4)=3和D(5,5)=4 我为此编写了一个matlab代码,但我确信还有另一种自动方法,其计算成本要低得多。 因此,我所写的(并从您那里得到优化)如下所示: ii = 1; for a = 1 : size(D,1) for b = 1 : size
v
,和一个大小为5 x 5的对角矩阵D
。在我的示例中,我有v=[01 2 3 4]。
第一个问题:我想把向量v放在D
的对角线上,这样D(1,1)=0
,D(2,2)=1
,D(3,3)=2
,D(4,4)=3
和D(5,5)=4
我为此编写了一个matlab代码,但我确信还有另一种自动方法,其计算成本要低得多。
因此,我所写的(并从您那里得到优化)如下所示:
ii = 1;
for a = 1 : size(D,1)
for b = 1 : size(D,2)
if(a == b)
D(a,b) = v(1, ii);
ii = ii + 1;
end
end
end
第二个问题:完成第一个问题后,我现在需要检查D的对角线值是否等于零。如果我能发现(以自动方式)D对角线上的值等于零,那么用0.001替换它
事实上,这可以用很多方式书写,例如:
for a = 1 : size(D,1)
for b = 1 : size(D,2)
if(a == b)
if(D(a,b) == 0)
D(a,b) = 0.001;
end
end
end
end
但我需要另一种自动方法,它在计算方面可能非常便宜
任何帮助都将不胜感激 你让你的生活变得更加艰难:你不需要两个环(一个就足够了),因为你只需要沿着对角线走。 实际上,这里不需要任何循环;只有
diag
功能
无论如何,替换v
副本中的零项,然后使用它来构建对角矩阵可能更容易:
v2 = v; % create a copy of v (if needed)
v2(v2 == 0) = 1e-3; % replace zero entries
注意:如果要替换的条目不完全是零,而是小的浮点值,则需要如下内容:
v2(abs(v2) < epsilon) = 1e-3; % replace zero entries
我现在手头没有matlab,但我会使用以下函数的组合: -诊断 -眼睛 -合乎逻辑 这里回答了一个同样的问题:
没问题。如果今晚我有时间回家,我会试试看:)
D = diag(v2);