异常高的集合卡尔曼滤波误差

问题描述

因此,我一直试图在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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...