将 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
的根不同。在这种情况下,解决方案应该是一个包含两个值的数组。
要解决此问题,您需要为 fsolve
的 x0
(起始估计)参数提供一个数组。
def G(r):
partial_func = functools.partial(R, a=r)
return fsolve(partial_func,[10,10],xtol=10**-1)
因此对于 a
中的每个值都有一个 gg
的初始值设定项,并且解决方案是与 f
.
长度相同的向量
我从 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
的根不同。在这种情况下,解决方案应该是一个包含两个值的数组。
要解决此问题,您需要为 fsolve
的 x0
(起始估计)参数提供一个数组。
def G(r):
partial_func = functools.partial(R, a=r)
return fsolve(partial_func,[10,10],xtol=10**-1)
因此对于 a
中的每个值都有一个 gg
的初始值设定项,并且解决方案是与 f
.