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
Matlab 从向量生成对角矩阵的简单方法?_Matlab_Matlab Guide - Fatal编程技术网

Matlab 从向量生成对角矩阵的简单方法?

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

我有一个大小为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(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);