计算Fisher信息之Part(二)

import BaseMatrixMethods as BM
stepsize = 0.01
'''
一,4.8 5.2
那么,后面的哪一个距离它比较近,是由它变化而成的呢?因此这里需要判断一下
二,然后就用比较近的,进行一次排序,
三,继而求导数
'''
def getFirstPart(M1,M2,M3):
    eigs1,vects1 = BM.EigVect(M1)
    eigs2,vects2 = BM.EigVect(M2)
    eigs3,vects3 = BM.EigVect(M3)
    BM.isnear(eigs1)
    BM.isnear(eigs2)
    BM.isnear(eigs3)
    eig1,eig2,eig3,vect1,vect2,vect3 = BM.sorteigs(eigs1,eigs2,eigs3,vects1,vects2,vects3)
    
    EigDaoshu  = []
    VectDaoshu = []
    for i in range(len(eigs1)):
        EigDaoshu.append(BM.EigDaoshu(eigs1[i],eig2[i],stepsize))
        VectDaoshu.append(BM.VectDaoshu(vects1[i],vects2[i]))
    res = 0
    for i in range(len(eigs1)):
        res += (EigDaoshu[i]**2)/eigs1[i]
    return res

说明

这里面只有一个函数,就是计算费雪信息公式的第一部分,费雪信息的公式是这样的:
计算Fisher信息之Part(二)_第1张图片
这里是求公式的第一部分,下面的是求第二和第三部分。

第二部分

import BaseMatrixMethods as BM
import numpy as np
stepsize = 0.01
'''
这部分的公式就是两个向量的导数相乘和  一个向量和一个向量的导数相乘
'''
def getSecPart(M1,M2,M3): //M1 M2 是三个矩阵
    eigs1,vects1 = BM.EigVect(M1)
    eigs2,vects2 = BM.EigVect(M2)
    eigs3,vects3 = BM.EigVect(M3)
    BM.isnear(eigs1)
    BM.isnear(eigs2)
    BM.isnear(eigs3)
    eig1,eig2,eig3,vect1,vect2,vect3 = BM.sorteigs(eigs1,eigs2,eigs3,vects1,vects2,vects3)
    
    EigDaoshu  = []
    VectDaoshu = []
    for i in range(len(eigs1)):
        EigDaoshu.append(BM.EigDaoshu(eigs1[i],eig2[i],stepsize))
        VectDaoshu.append(BM.VectDaoshu(vects1[i],vects2[i]))
    res = 0
    for i in range(len(eigs1)):
        res += 4*eigs1[i]*(4*(np.dot(np.conj(EigDaoshu[i]),EigDaoshu[i])-abs(np.dot(np.conj(vects1[i]),VectDaoshu[i]))**2))
    return res

第三部分

import BaseMatrixMethods as BM
import numpy as np
stepsize = 0.01
def getThirdPart(M1,M2,M3):   //M1,M2,M3是三个矩阵
    eigs1,vects1 = BM.EigVect(M1)
    eigs2,vects2 = BM.EigVect(M2)
    eigs3,vects3 = BM.EigVect(M3)
    BM.isnear(eigs1)
    BM.isnear(eigs2)
    BM.isnear(eigs3)
    eig1,eig2,eig3,vect1,vect2,vect3 = BM.sorteigs(eigs1,eigs2,eigs3,vects1,vects2,vects3)
    
    EigDaoshu  = []
    VectDaoshu = []
    for i in range(len(eigs1)):
        EigDaoshu.append(BM.EigDaoshu(eigs1[i],eig2[i],stepsize))
        VectDaoshu.append(BM.VectDaoshu(vects1[i],vects2[i]))
    res = 0
    for i in range(len(eigs1)):
        for j in range(len(eigs1)):
            if i == j:
                continue
            else:
                xishu = -8*eigs1[i]*eigs1[j]/(eigs1[i]+eigs1[j])
                a = abs(np.dot(np.conj(vects1[i]),VectDaoshu[j]))**2
                res = res + xishu*a
    return res

你可能感兴趣的:(算法练习)