2013-04-13 77 views
2

当我在scipy中使用线性代数模块来计算厄密矩阵的的矩阵对数时,它输出的矩阵不是厄密共轭矩阵。我首先使用定义向量:厄密矩阵的logm函数返回非厄密矩阵

n = np.random.uniform(size = 3) + 1j*np.random.uniform(size = 3) 

然后我限定相应的Hermitian矩阵:

N = np.outer(n,n.conj()) 

然而,linalg.logm(N)不返回Hermitian矩阵。这是为什么发生?

+0

运行此代码时'N'不是矩阵。 – askewchan

+0

对不起,我的意思是np.random.uniform(size = 3)。我已经纠正了OP。 – WiFO215

+0

你的矩阵是单数;事实上,它的排名是1.它没有对数。 –

回答

2

随机矩阵除了一个特征值之外都是零。由于矩阵上的函数可以作为函数写在矩阵的特征值上,我明白了为什么对数在那里有问题,因为log(0)没有被定义。也许该函数没有看到这个问题,只是返回垃圾。

我想你只需要确保你的随机Hermitian矩阵有非零特征值。

+5

对于为什么结果不是Hermitian的问题:这里使用的logm算法不是以保留作为一个确切属性的hermiticity的方式编写的。由于输入矩阵处于奇异点,由于舍入误差,结果对应于某个矩阵eps的对数 - 接近输入矩阵。由于不完全保留隐密性,因此eps关闭矩阵通常是非厄米特的。现在,一个好问题是:*为什么在'funm(N,np.log,disp = 0)中计算的错误估计值在这种情况下不准确?* –

+0

是的,我会尝试。谢谢! – WiFO215