Я пытаюсь интегрировать функцию в заданный диапазон, которая показывает поток частиц в направлении нулевого угла (тета) в зависимости от энергии E частиц. Я пробовал несколько способов и получил разные ошибки, но в конце остались две. Мои знания Python ограничены, я пытаюсь изучать новые способы делать вещи по мере необходимости, но я безуспешно работал с этой функцией в течение нескольких дней.
Моя функция на данный момент выглядит так:
from numpy import radians, cos, arange
from scipy.integrate import quad
def integral(self):
theta=0
E = arange(1, 5000, 1)
costh = cos(radians(theta))
a = 18 / (E * costh + 145)
b = (E + 2.7 / costh)**-2.7
c = (E + 5) / (E + 5 / costh)
return a*b*c*1**4
A = quad(integral, 500, 1000)
Применение «quad» к такой функции возвращает:
TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python
Если я не поставлю «я» в качестве аргумента в функцию, она вернет:
TypeError: Integer() принимает 0 позиционных аргументов, но был задан 1
У кого-нибудь есть идея, как это обойти?
quad
принимает функцию, которая принимает одно значение и возвращает одно значение. Похоже, вашintergral
ничего не делает с аргументом и возвращает массив со значениями более 5000 точек. Возможно, вам придется перечитать документациюquad
и поэкспериментировать с некоторыми ее примерами. - person hpaulj   schedule 20.05.2018