Ваша main()
функция содержит list1 = list(map(rayleightest,t,f))
.Вот как вы получаете один ответ на пару значений в t
и f
и получаете в результате несколько значений.Другими словами, код вычисляет rayleightest(t[0], f[0])
, затем rayleightest(t[1], f[1])
и т. Д.
Когда вы используете код z = rayleightest(t, f)
, вы передаете 2 массива вместо 2 чисел.Результатом является одно значение, потому что формула в rayleightest()
содержит np.sum()
- вы суммируете все значения в массивах в одно значение.
Таким образом, формула является причиной, по которой вы получаете одно значение для разныхвходные данные.Вам решать ответить на вопрос, является ли это ожидаемым поведением процесса расчета.
Теперь вопрос, почему вы получаете те же значения в списке в первом случае.Потому что для каждой пары чисел вы в основном вычисляете sin(x * y) ** 2 + cos(x * y) ** 2
, который всегда 1
, поэтому z
в rayleightest
равняется просто 1 / n
.
EDIT
Теперь, когда вы предоставили оригинальную формулу, которую пытаетесь реализовать с помощью кода, стало более понятно, в чем проблема на самом деле.
Изменения, которые я сделал:
(1) list1 = [rayleightest(t, val) for val in f]
(2) x = np.arange(fmin, fmax, fstep)
(3) plt.plot(x, list1, 'r-', label='data')
Результат, который я получаю: