Last active
June 27, 2016 03:39
-
-
Save sicktastic/2400049427b581f4be2b4b55752cef30 to your computer and use it in GitHub Desktop.
Comparing Kalman Filter: Maximize Gaussian math
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from math import * | |
def f(mu, sigma2, x): | |
return 1 / sqrt(2. * pi * sigma2) * exp(-.5 * (x - mu) **2 / sigma2) | |
print f(10., 4., 10.) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class KalmanFilter | |
def maximize_gaussian(mu:, sigma2:, x:) | |
return 1 / Math.sqrt(2.0 * Math::PI * sigma2) * Math.exp(-0.5 * (x - mu) **2 / sigma2) | |
end | |
end | |
kalman_filter = KalmanFilter.new | |
puts kalman_filter.maximize_gaussian(mu: 10.0, sigma2: 4.0, x: 10.0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def update(mean1, var1, mean2, var2): | |
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2) | |
new_var = 1 / (1 / var1 + 1 / var2) | |
return [new_mean, new_var] | |
print update(10., 8., 13., 2.) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class KalmanFilter | |
def update(mean1:, var1:, mean2:, var2:) | |
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2) | |
new_var = 1.0 / (1.0 / var1 + 1.0 / var2) | |
return ['%.10f' % new_mean, '%.10f' % new_var] | |
end | |
end | |
kalman_filter = KalmanFilter.new | |
puts kalman_filter.update(mean1: 10.0, var1: 8.0, mean2: 13.0, var2: 2.0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def predict(mean1, var1, mean2, var2): | |
new_mean = mean1 + mean2 | |
new_var = var1 + var2 | |
return [new_mean, new_var] | |
print predict(10., 4., 12., 4.) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class KalmanFilter | |
def predict(mean1:, var1:, mean2:, var2:) | |
new_mean = mean1 + mean2 | |
new_var = var1 + var2 | |
return ['%.10f' % new_mean, '%.10f' % new_var] | |
end | |
end | |
kalman_filter = KalmanFilter.new | |
puts kalman_filter.predict(mean1: 10.0, var1: 4.0, mean2: 12.0, var2: 4.0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Write a program that will iteratively update and | |
# predict based on the location measurements | |
# and inferred motions shown below. | |
def update(mean1, var1, mean2, var2): | |
new_mean = float(var2 * mean1 + var1 * mean2) / (var1 + var2) | |
new_var = 1./(1./var1 + 1./var2) | |
return [new_mean, new_var] | |
def predict(mean1, var1, mean2, var2): | |
new_mean = mean1 + mean2 | |
new_var = var1 + var2 | |
return [new_mean, new_var] | |
measurements = [5., 6., 7., 9., 10.] | |
motion = [1., 1., 2., 1., 1.] | |
measurement_sig = 4. | |
motion_sig = 2. | |
mu = 0. | |
sig = 10000. | |
#Please print out ONLY the final values of the mean | |
#and the variance in a list [mu, sig]. | |
# Insert code here | |
for n in range(len(measurements)): | |
[mu, sig] = update(mu, sig, measurements[n], measurement_sig) | |
print 'update: ', [mu, sig] | |
[mu, sig] = predict(mu, sig, motion[n], motion_sig) | |
print 'predict: ', [mu, sig] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class KalmanFilter | |
def update(mean1:, var1:, mean2:, var2:) | |
new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2) | |
new_var = 1.0/(1.0/var1 + 1.0/var2) | |
return [new_mean, new_var] | |
end | |
def predict(mean1:, var1:, mean2:, var2:) | |
new_mean = mean1 + mean2 | |
new_var = var1 + var2 | |
return [new_mean, new_var] | |
end | |
def measurement_output | |
@measurements = [5.0, 6.0, 7.0, 9.0, 10.0] | |
@motion = [1.0, 1.0, 2.0, 1.0, 1.0] | |
@measurement_sig = 4.0 | |
@motion_sig = 2.0 | |
@mu = 0.0 | |
@sig = 10000.0 | |
puts "\n" | |
@measurements.zip(@motion).each do |measurement, motion| | |
update_array = update(mean1: @mu, var1: @sig, mean2: measurement, var2: @measurement_sig) | |
@mu = update_array[0] | |
@sig = update_array[1] | |
update_mu_and_sig = [@mu, @sig] | |
puts "Update: " + update_mu_and_sig.inspect | |
predict_array = predict(mean1: @mu, var1: @sig, mean2: motion, var2: @motion_sig) | |
@mu = predict_array[0] | |
@sig = predict_array[1] | |
predict_mu_and_sig = [@mu, @sig] | |
puts "Predict: " + predict_mu_and_sig.inspect | |
puts "\n ===============================================" | |
puts "\n" | |
end | |
end | |
end | |
@kalman_filter = KalmanFilter.new | |
@kalman_filter.measurement_output |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment