向broyden1传递额外的参数

2024-06-16 11:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用额外的参数(在示例中称为“data”)执行scipybroyden1函数,代码如下:

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

pixlinenyx_2Bsolved是我要查找其根的函数。在

start xyz是对解决方案的初步猜测:

^{pr2}$

数据是包含大量数字的列表,将在PixlinExx bsolved函数中使用:

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的文档,它似乎能够在可调用函数中获得额外的参数。。。Here和我的问题很相似。在


Tags: 函数targetdataradaraxisxyzellipsoidsrange
1条回答
网友
1楼 · 发布于 2024-06-16 11:21:28

scipy的issue-tracker也有类似的问题,包括使用python的functools-模块(这里:PEP 309 Partial Function Application )的解决方案。在

基于上述链接和docs的原始问题的小示例:

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)

输出

^{pr2}$

相关问题 更多 >