我试图在使用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])
第一个函数导致类型错误而第二个函数就很好的原因是什么?
非常感谢您的帮助!
答案 0 :(得分:1)
在*
的定义中删除F
。
由于您使用变量参数列表*x
,因此x
收到的F
实际上是一个元组,并且np.cosh(((x-1)/(x+1)))
操作不支持元组。