- 参考URL
- やること
- 「ある値xを観測したz(zは観測誤差を含む)を使って、真の値であるxを推定する」
- 上のURLにあるソースコード的なもの
import numpy
import pylab
n = 300
sz = (n,)
x = -0.23456
z = numpy.random.normal(x,0.1,size=sz)
R = 1e-5
Q = 0.1**2
mu_hat = numpy.zeros(sz)
sigma_hat = numpy.zeros(sz)
mu = numpy.zeros(sz)
sigma = numpy.zeros(sz)
K = numpy.zeros(sz)
mu[0] = 0.0
sigma[0] = 1.0
for k in range(1,n):
mu_hat[k] = mu[k-1]
sigma_hat[k] = sigma[k-1]+R
K[k] = sigma_hat[k]/(sigma_hat[k]+Q)
mu[k] = mu_hat[k] + K[k]*(z[k]-mu_hat[k])
sigma[k] = (1-K[k])*sigma_hat[k]
pylab.figure()
pylab.plot(z,'k+',label='Measurement value (with Noise)')
pylab.plot(mu,'b-',label='Estimate value')
pylab.axhline(x,color='g',label='Truth value')
pylab.legend()
pylab.xlabel('Iteration')
pylab.ylabel('Value')
pylab.show()