Я пытался найти кого-то, кто совершает ту же ошибку, что и я, но не получил никакой радости! Это также мой 1-й пост, поэтому я извиняюсь, если он плохо объяснен или направлен. Совет приветствуется.
Проблема, которую я решаю, заключается в следующем: определение положения какого-либо приемника путем измерения расстояний до ряда известных опорных точек. Это базовая трилатерация, и я использую для этого метод наименьших квадратов.
Я уже успешно использовал функцию scipy.optimize lesatsq для этого, поэтому я почти уверен, что моя подходящая функция работает. Тем не менее, я хочу иметь возможность использовать некоторые дополнительные функции, которые предлагает пакет lmfit Python, и я изо всех сил пытаюсь перевести его на другие языки. Полный код попытки находится здесь: http://pastebin.com/4xbfkaCm.
Функция минимизации lmfit устанавливает вызовы моей функции подгонки (которая называется остаточным функцио- нированием ) следующим образом: массив stationarray представляет собой пустой массив, содержащий местоположения и диапазоны станций, а params представляет собой словарь параметров, которые будут использоваться в функции подгонки.
position = minimize(residualfunct, params, args=(stationarray))
и моя подгоночная функция определяется как
def residualfunct(params, stationarray):
X = params['solutionX'].value
Y = params['solutionY'].value
Z = params['solutionZ'].value
result = numpy.array([s[3] - linalg.norm(array((X,Y,Z))-array((s[0],s[1],s[2]))) for s in stationarray])
print result
return result
Когда я запускаю этот код, я получаю TypeError:
Остаточная функция() принимает ровно 2 аргумента (5 задано).
поскольку этот вызов выполняется функцией минимизации, я не вижу, какой контроль у меня есть над этим. Я могу только представить, что это поднимается, потому что я передаю np.array в качестве аргумента, но это кажется неизбежным. Может ли кто-нибудь увидеть, что я делаю неправильно?
Спасибо