繁体   English   中英

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

[英]How to fix TypeError when using `scipy.optimize.fsolve`?

我试图通过使用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: unsupported operand type(s) for -: 'tuple' and 'int'

有趣的是,当我将F(f,x)更改为简单函数时,同样的代码也可以工作,没有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])

关于第一个函数会导致类型错误的原因是什么呢?

删除F定义中的*

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM