将 2 变量函数求解为仅 1 个变量不适用于数组

Solving a 2-Variable function to only 1 of the variable doesnt work on arrays

我从 Whosebug 中找到了如何求解具有两个变量的函数,其中一个变量为 constant/known。

这是代码的一部分:

def R(gg,a):
    return a-r0*g0**(1/2)*D(gg)/gg**(1/2)
def G(r):
    partial_func = functools.partial(R, a=r)
    return fsolve(partial_func,10,xtol=10**-1)

它有效,因为对于前 2 次打印,我得到相同的值

f=([10,15])
print(G(10))
print(G(f[0]))
print(G(f))

但是在给出完整数组时出现以下错误:

The array returned by a function changed size between calls

所以阅读这个 w/o 知道函数中使用的所有参数我会说在 print(G(f)) 的情况下你提供一个标量和 return 一个数组,这是行不通的。

尝试使用 a=f 调用您的函数并查看 returned 值。

文档状态:

fsolve: func: A function that takes at least one (possibly vector) argument, and returns a value of the same length

您似乎在尝试为 f 中包含的不同值查找 R 的根。

问题是 partial_func 有一个单一的值作为起始估计,并且想要 return 一个与 a 长度相同的数组(在你的例子中有 2 个值)。

换句话说,您的问题没有单一的值根。例如,f[0]=10 的根可能与 f[1]=15 的根不同。在这种情况下,解决方案应该是一个包含两个值的数组。

要解决此问题,您需要为 fsolvex0(起始估计)参数提供一个数组。

def G(r):
    partial_func = functools.partial(R, a=r)
    return fsolve(partial_func,[10,10],xtol=10**-1)

因此对于 a 中的每个值都有一个 gg 的初始值设定项,并且解决方案是与 f.

长度相同的向量