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
说明
这里面只有一个函数,就是计算费雪信息公式的第一部分,费雪信息的公式是这样的:
这里是求公式的第一部分,下面的是求第二和第三部分。
第二部分
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