0

I am trying to find user distances from beacon positions using trilateration. I am having a mean squared error function that I am trying to minimize using non-linear least squares but I am not getting correct results. Any help is appreciated. The code is below.

def mse(self, user_pos, positions, distances):
    mse = 0.0
    for pos, dist in zip(positions, distances):
        distance = great_circle((user_pos[0], user_pos[1]), (pos[0], pos[1])).meters
        mse += math.pow(distance - dist, 2.0)
    return mse/len(positions)

def least_squares_func(self, positions, distances):
    # Returns users coordinates
    return least_squares(self.mse, [0,0], args=(positions, distances)).x

Starting position in least_squares is [0,0] but after changing it I am not getting much different results.

Input example: positions = [(5.0, -6.0), (13.0, -15.0), (21.0, -3.0)] distances = [8.06, 13.97, 23.32]

user8436761
  • 337
  • 1
  • 10

1 Answers1

-1

great_circle is used for GPS where we deal with an oblate spheroid for beacons you must used simple Euclidean metric to calculate the distance between the user and each beacons.

Stephen Rauch
  • 47,830
  • 31
  • 106
  • 135