Мне нужно определить функцию, которая включает интеграл, но она продолжает выдавать мне эту ошибку
ValueError: invalid callable given
Вот код, который я использовал
import numpy as np
from scipy.integrate import quad
def w(x, w0):
return w0*(1+x)
def fun(x, w0, H_i):
f = ( 3 * (1+w(w0, x)) ) / ( 1+x )
return quad(f,np.inf,0) + 2*np.log(H_i)
Когда я пробую эту функцию с любым значением, она всегда выдает мне эту ошибку. Что я могу сделать, чтобы исправить это? Большое спасибо и хорошего дня :)
Ошибка «ValueError: указан недействительный вызываемый объект», которую вы видите, означает, что в коде возникли проблемы с аргументом, который вы передали функции quad. Эта функция ожидает вызываемую функцию, которая принимает один аргумент и возвращает число с плавающей запятой. Однако в вашей функции fun вы фактически передаете саму функцию quad в качестве первого аргумента.
Чтобы исправить это, вы должны изменить свою забавную функцию, чтобы определить новую функцию, которая принимает один аргумент и возвращает значение подынтегральной функции. Затем вы можете передать эту новую функцию функции quad.
Вот пример того, как вы можете изменить свой код для достижения этой цели:
def fun(x, w0, H_i):
def integrand(t):
return ( 3 * (1+w(w0, t)) ) / ( 1+t )
result, _ = quad(integrand, np.inf, x)
return result + 2*np.log(H_i)
В этой модифицированной забавной функции мы определяем новую подынтегральную функцию, которая принимает один аргумент t и возвращает подынтегральную функцию. Затем мы передаем эту функцию подынтегрального выражения в счетверенную функцию в качестве первого аргумента.
После внесения этих изменений ваша забавная функция должна работать правильно, не выдавая ошибку «invalid callable».
Надеюсь это поможет!
Пожалуйста, включите полную ошибку трассировки, хотя я подозреваю, что вы используете
quad
. Согласно docs.scipy.org/doc/scipy/reference/generated/…, первый параметр вquad
— этоfunction
. Вы предоставилиf
, что является просто значением.