从Python3.2中的fsolve获取所有解决方案(2个未知)

2024-09-27 19:21:02 发布

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

我需要从Python3.2中的fsolve获得所有解决方案(2个未知)。在

但是,它只返回一个事件,尽管我在fsolve中设置了full\u output=true。在

def integrand1(x, b, c):
   return (x/b)**(c-1) * exp(-x/b)

def intergralFunc2(b):
   integral,err = quad(integrand2, 0, 100, args=(b))
   return 100 - integral

def solveFunction():
   sol= fsolve(intergralFunc1, 5, 5, full_output=True)
   return sol

if __name__ == '__main__':
    sol = solveFunction()
    print("sol is ", sol)

我需要知道b和c的解,但是fsolve()只返回b的解


Tags: trueoutputreturndef事件解决方案fullerr
1条回答
网友
1楼 · 发布于 2024-09-27 19:21:02

使用fmin(请参见documentation)代替fsolve,并更改integralFunc,这样它就获得了一个包含bc的序列,并返回abs(100 - integral)将得到这两个参数。在

from scipy.integrate import quad
from scipy.optimize import fmin

def integrand(x, b, c):
   return (x/b)**(c-1) * exp(-x/b)

def intergralFunc(bc):
   integral,err = quad(integrand, 0, 100, args=(bc[0], bc[1]))
   return abs(100 - integral)

def solveFunction():
   sol= fmin(intergralFunc, [5, 5])
   return sol

b, c = solveFunction()

输出:

^{pr2}$

正在检查b和{}

>>> integral, err = quad(integrand, 0, 100, args=(b, c))
>>> np.allclose(100, integral)
True

编辑:

如果使用fsolve,这将起作用,因为fsolve期望目标函数的形状输出与输入相同,但是b和{}的结果与使用fmin略有不同。我用fsolve得到{},用{}得到{}

def intergralFunc(bc):
   integral,err = quad(integrand, 0, 100, args=(bc[0], bc[1]))
   return np.array([100 - integral] * 2)

def solveFunction():
   sol= fsolve(intergralFunc, [5, 5])
   return sol

相关问题 更多 >

    热门问题