好的,首先我觉得这个问题很傻,因为看起来答案应该很简单,但我无法弄明白。
我有一个向量n:
n=[2:13]
我想通过elementwise传递此向量,以便它返回另一个带有计算值的向量:
condition=cond(hilb(n))
hilb(n)返回维数为n的希尔伯特矩阵。 cond()然后计算条件数,这是一个标量值。目前,Matlab使用来自n的第一个值将条件作为单个值返回,该值是2,而不是长度等于n的向量。
我知道使用。*,sin。()和其他命令来计算元素的东西,但是我无法通过这样的函数找到如何做到这一点。
答案 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
。