问题描述
因此,我一直试图在Python中实现Ensemble Kalman过滤器,但是最后我得到了异常高的RMSE,并且想知道我的更新步骤出了什么问题。 mes_sigs是转换后的集合成员。在这种情况下,N是1000,dim是2,h是2x2单位矩阵。
def update(mes):
self.z = mes
mes_sigs = np.empty((self.N,self.dim))
for i in range(self.N):
mes_sigs[i] = np.dot(self.t,self.sigmas[i])
x_mean = np.average(mes_sigs[:,0])
y_mean = np.average(mes_sigs[:,1])
mes_mean = np.array([[x_mean],[y_mean]])
# Calculate sample covariance
P_zz = 0.
for i in range(self.N):
P_zz += np.outer(self.sigmas[i] - self.x,mes_sigs[i] - mes_mean.T)
self.P = P_zz / (self.N - 1) + self.R
# Compute Kalman gain
A = mes_sigs - (np.dot(mes_mean,np.ones((1,self.N)))).T
C = np.dot(A.T,A) / (self.N - 1)
self.K = C * self.h.T * inv(self.h * C * self.h.T + self.R)
# Perturbation here
v_r = multivariate_normal(self.c_mean,self.R)
# Update all of the sigmas
for i in range(self.N):
self.sigmas[i] += np.dot(self.K,self.z - mes_sigs[i] + v_r)
self.x = np.average(self.sigmas)
self.P -= self.K * self.P * self.K.T
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)