计算希尔伯特矩阵的条件数

时间:2016-02-08 06:31:26

标签: matlab matrix linear

好的,首先我觉得这个问题很傻,因为看起来答案应该很简单,但我无法弄明白。

我有一个向量n:

n=[2:13]

我想通过elementwise传递此向量,以便它返回另一个带有计算值的向量:

condition=cond(hilb(n))

hilb(n)返回维数为n的希尔伯特矩阵。 cond()然后计算条件数,这是一个标量值。目前,Matlab使用来自n的第一个值将条件作为单个值返回,该值是2,而不是长度等于n的向量。

我知道使用。*,sin。()和其他命令来计算元素的东西,但是我无法通过这样的函数找到如何做到这一点。

1 个答案:

答案 0 :(得分:4)

不幸的是,您无法将矢量传递给hilb。你应该做的是使用循环,或更简单,arrayfun

condition = arrayfun(@(x) cond(hilb(x)), n)

请注意,arrayfun只是一个伪装循环,因此与显式编写循环相比,它没有任何性能优势。

condition = zeros(1,numel(n));
for ii = 1:numel(n)
   condition(ii) = cond(hilb(n(ii)));
end

请注意,hilb是一个病态矩阵,因此您的值会变得非常高(cond(hilb(13))=8.3042e+19。这意味着您生成的矢量看起来像:1.0e+19* 0.0000 0.0000 ... 0.0017 8.3042。如果你使用format short e,然后您就可以看到每个元素的值:1.9281e+01 5.2406e+02 ... 8.3042e+19