程序返回错误的特征值

时间:2019-01-05 10:10:47

标签: python numpy matrix eigenvalue

(matnew1)的特征值_new1和的特征值_new2的集合 (matnew2)应该给出(mat)的特征值集的平方。 但是在这段代码中,我得到了matnew1和 matnew2 ..

所有平方根(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])

1 个答案:

答案 0 :(得分:0)

运行此命令(您应该显示此输出)时,我得到:

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必须由另一个非常小的容器平衡。综上所述,这意味着您的矩阵的条件值很差,您无法期望准确地计算出较小的特征值。