![](/img/trans.png)
[英]Passing jacobian to scipy.optimize.fsolve, when optimising a univariate function
[英]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
定义中的*
。
由于使用变量参数列表*x
, F
收到的x
实际上是一个元组,并且np.cosh(((x-1)/(x+1)))
操作不支持元组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.