(matnew1) 和 eigenvalues_new2 的eigenvalues_new1集合(matnew2) 应该给出 (mat) 的特征值集合的平方。但是在这个代码中,我得到了 matnew1 的负特征值和马特纽2..
最重要的是平方根(abs(eigenvalues_new1))和平方根(abs(eigenvalues_new2)) 不同于矩阵(MAT)至少在一个值的情况下。
import numpy as np
import random
import cmath
import math
for i in np.arange(1,2,1):
MS = random.uniform(0.001,100)
MD = random.uniform(1e-5,0.1)
alpha = 0.5*((MD**2)/(MS**2))
if(alpha < 0.01):
mu = 1e-10
MR = 1e+5
mat = np.array([[0,0,MD],[0,mu,MS],[MD,MS,MR]])
#print(mat)
eigenvalues, eigenvectors = np.linalg.eig(mat)
matDag = np.conjugate(np.transpose(mat))
matnew1 = np.matmul(mat, matDag)
matnew2 = np.matmul(mat,mat)
#print(matnew1)
#print(matnew2)
eigenvalues_new1, eigenvectors_new1 = np.linalg.eig(matnew1)
eigenvalues_new2, eigenvectors_new2 = np.linalg.eig(matnew2)
print(eigenvalues[0],eigenvalues[1],eigenvalues[2])
print(eigenvalues_new1[0],eigenvalues_new1[1],eigenvalues_new1[2])
print(eigenvalues_new2[0],eigenvalues_new2[1],eigenvalues_new2[2])
当我运行这个(你应该显示这个输出)时,我得到:
100000.04370532616 7.718450571376183e-17 -0.043705325975408056
10000008741.067133 -4.0160149511470067e-14 0.0019101560620918938
10000008741.067133 -4.0160149511470067e-14 0.0019101560620918938
第二行和第三行非常接近第一行的正方形:
In [5]: 0.0437**2
Out[5]: 0.0019096900000000003
In [6]: 100000.043705**2
Out[6]: 10000008741.001911
负条目位于中间列中,大约为 -4e-14
。因为在第一行你7e-17
第二行和第三行应该是它的正方形。但是,我会将7e-17
视为零或全部舍入误差:实际上,您的特征值接近于零。同样,-4e-14
应被视为零。
你的矩阵有这个结构和这个行列式:
In [18]: M
Out[18]:
⎡0 0 MD⎤
⎢ ⎥
⎢0 μ MS⎥
⎢ ⎥
⎣MD MS MR⎦
In [19]: M.det()
Out[19]:
2
-MD ⋅μ
由于行列式是特征值的乘积,并且mu
非常小,因此特征值的乘积需要很小。这意味着您的大 eignavlue 必须由另一个非常小的 eignavlue 来平衡。综上所述,这意味着您的矩阵的条件数很差,您无法指望准确计算较小的特征值。