Ниже будет объяснена причина ошибки и способы ее устранения, но я бы рекомендовал либо добавить более подробную информацию к вопросу о том, что вы пытаетесь совершить sh, либо открыть новый вопрос с помощью физики . Теги и scipy , чтобы помочь вам реорганизовать код для удовлетворения требований, изложенных ниже.
Ошибка возникает из-за того, что аргумент func
в scipy.integrate.dblquad
должен иметь подпись
func(y, x) -> scalar
Не
func(x, y) -> np.ndarray
Таким образом, вы не можете вернуть массив из f(x, y)
. Если вы сделаете
def f(y, x):
return (Ed(r[0]) * R[0] - x) / s[0]**3
Вы не получите эту ошибку. Однако вы также не получите желаемый результат, поскольку f(y, x)
применяется только к одному радиусу и расстоянию. Чтобы получить желаемый результат, вам необходимо провести рефакторинг своего кода, чтобы удовлетворить требование, согласно которому f(y, x)
имеет подпись вызова, в которой он возвращает одно значение с плавающей точкой.
Существует еще одна проблема с кодом, scipy.integrate.dblquad
возвращает два значения: ошибку и результирующий интеграл - при условии, что вы пытаетесь использовать результирующий интеграл, а не ошибку, которую вам нужно сделать
F = lambda R: G*dblquad(f, -np.inf, np.inf, -np.inf, np.inf)[0]