Передача дополнительных аргументов в broyden1 - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь выполнить функцию scipy broyden1 с дополнительными параметрами (в нашем примере это «data»), вот код:

data = [radar_wavelen, satpos, satvel, ellipsoid_semimajor_axis, ellipsoid_semiminor_axis, srange]
target_xyz = broyden1(Pixlinexyx_2Bsolved, start_xyz, args=data)

def Pixlinexyx_2Bsolved(target, *data):
    radar_wavelen, satpos, satvel, ellipsoid_semimajor_axis, ellipsoid_semiminor_axis, srange = data

    print target
    print radar_wavelen, satpos, satvel, ellipsoid_semimajor_axis, ellipsoid_semiminor_axis, srange

Pixlinexyx_2Bsolved - это функция, корень которой я хочу найти.

start_xyz - начальное предположение решения:

start_xyz = [4543557.208584103, 1097477.4119051248, 4176990.636060918]

И data - это список, содержащий много чисел, которые будут использоваться внутри функции Pixlinexyx_2Bsolved :

data = [0.056666, [5147114.2523595653, 1584731.770061729, 4715875.3525346108], [5162.8213179936156, -365.24378919717839, -5497.6237250296626], 6378144.0430000005, 6356758.789000001, 850681.12442702544]

Когда я вызываю функцию broyden1 (как во второй строке примера кода), я получаю следующую ошибку:

target_xyz = broyden1(Pixlinexyx_2Bsolved, start_xyz, args=data)
  File "<string>", line 5, in broyden1
TypeError: __init__() got an unexpected keyword argument 'args'

Что я делаю не так?

Теперь, глядя на документацию fsolve , кажется, что она может получить дополнительные аргументы в вызываемой функции ... Здесь - такой же вопрос, как и мой.

1 Ответ

0 голосов
/ 26 апреля 2018

Аналогичный вопрос есть у средства отслеживания проблем scipy , включая решение с использованием functools -модуля python (здесь: PEP 309 - Приложение с частичной функцией ).

Небольшой пример, основанный на вышеуказанной ссылке и исходной проблеме из документов :

import numpy as np
import scipy.optimize

""" No external data """
def F(x):
   return np.cos(x) + x[::-1] - [1, 2, 3, 4]
x = scipy.optimize.broyden1(F, [1,1,1,1], f_tol=1e-14)
print(x)

""" External data """
from functools import partial
def G(data, x):
    return np.cos(x) + x[::-1] - data
data = [1,2,3,4]
G_partial = partial(G, data)
x = scipy.optimize.broyden1(G_partial, [1,1,1,1], f_tol=1e-14)
print(x)

Out

[ 4.04674914  3.91158389  2.71791677  1.61756251]
[ 4.04674914  3.91158389  2.71791677  1.61756251]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...