首页 > 解决方案 > 如何在需要使用“fsolve”的函数中获取中间变量的值?

问题描述

我的第一个 py 文件是我要查找根的函数,如下所示:

def myfun(unknowns,a,b):
    x = unknowns[0]
    y = unknowns[1]
    eq1 = a*y+b
    eq2 = x**b
    z = x*y + y/x
    return eq1, eq2

我的第二个是从一个起点找到x和y的值,给定a和b的参数值:

a = 3
b = 2
x0 = 1
y0 = 1
x, y = scipy.optimize.fsolve(myfun, (x0,y0), args= (a,b))

我的问题是:我实际上需要插入 found andz的结果后的值,并且我不想再次重复,在我的实际情况下,它是一个没有显式表达式的中间步骤变量。但是,我不能用 fslove 替换最后一行 fun ,因为 fslove 只能找到 eq1 和 eq2 的根。现在唯一的解决办法就是重写这个函数,让它返回,然后插入并获取。xyz = x*y + y/x + ...return eq1, eq2, zzxyz

这个问题有好的解决方案吗?

标签: pythonfunctionscipyscipy-optimize

解决方案


我相信这是错误的做法。由于您具有andz的直接功能,因此您需要检索这两个值。在列出的情况下,这很容易:假设您可以导出为 ; 的倒数。也给出,可以倒置得到。xybxeqn2aeqn1y

为清楚起见,我正在更改您的返回变量的名称:

ret1, ret2 = scipy.optimize.fsolve(myfun, (x0,y0), args= (a,b))

现在,反转两个函数:

# eq2 = x**b
x = ret2**(1/b)

# eq1 = a*y+b
y = (ret1 - b) / a

……最后……

z = x*y + y/x

请注意,您应该z从函数中删除计算,因为它没有任何用途。


推荐阅读