使用scipy.optimize.fsolve时如何修复TypeError?

时间:2019-05-04 03:00:35

标签: python numpy scipy

我试图在使用scipy.optimize.fsolve改变参数x的值的同时,找到函数F(f)的根。这是代码:

from scipy.optimize import fsolve
import numpy as np

def F(f,*x):
    return np.cosh(((x-1)/(x+1))*(np.log(2)/f))-0.5*np.exp(np.log(2)/f)

x = np.logspace(0,3,100)
y = np.arange(x.size)

for i in range(x.size):
    y = fsolve(F, 0.5, args = x[i])

上面的代码返回TypeError:--'tuple'和'int'的不受支持的操作数类型

有趣的是,当我将F(f,x)更改为简单函数时,相同的代码fors,没有TypeError

def F(f,*x):
   return (2*np.cos(f)-f)*x

x = np.logspace(0,3,100)
y = np.arange(x.size)

for i in range(x.size):
    y = fsolver(F, 0.5, args=x[i])

第一个函数导致类型错误而第二个函数就很好的原因是什么?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

*的定义中删除F

由于您使用变量参数列表*x,因此x收到的F实际上是一个元组,并且np.cosh(((x-1)/(x+1)))操作不支持元组。