首页 > 解决方案 > 将 2-Variable 函数求解为仅 1 个变量不适用于数组

问题描述

我从 StackOverflow 中找到了如何用两个变量来解决一个函数,将一个变量设为常量/已知。

这是代码的一部分:

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

标签: pythonfunctionscipysolverequation-solving

解决方案


看起来您正试图R找到f.

问题是它partial_func有一个值作为起始估计值,并且希望返回一个长度与a(在您的情况下为 2 个值)相同的数组。

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

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

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

因此,对于其中的每个值,a都有一个初始化器,gg并且解决方案是一个长度与 相同的向量f


推荐阅读