Как исправить ошибку TypeError при использовании `scipy.optimize.fsolve`? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь найти корни функции F(f), изменяя значения параметра x с помощью scipy.optimize.fsolve.Вот код:

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])

Что это за первая функция, которая вызывает ошибку типа, когда вторая функция просто в порядке?

1 Ответ

1 голос
/ 04 мая 2019

Удалите * в определении F.

Поскольку вы используете список переменных параметров *x, x, полученный F, на самом деле является кортежем, а np.cosh(((x-1)/(x+1)))операция не поддерживает кортеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...