Вычислить коэффициенты Фурье с помощью Python?

Я пытаюсь вычислить следующие коэффициенты Фурье

введите здесь описание изображения

где V_{pot} — предыдущая функция определения этой формы. введите здесь описание изображения

Я действительно не знаю, какой численный метод я могу использовать, однако я начал с правила Симпсона библиотеки scipy.

import numpy as np
from scipy.integrate import simps

Nf = 200 
IVp = np.zeros(2*Nf)
snn = np.zeros(NP)
def f(k):
    for i in range(0,NP):
        sn = (i-1)*H
        snn[i] = sn
        return (1/SF) * np.cos(np.pi*k*sn/SF) * Vpot(sn)

 for k in range(0,2*Nf):
      Func = f(k)
      y1 = np.array(Func,dtype=float)
      I = simps(y1,snn)

У меня была эта ошибка:

IndexError: tuple index out of range

person PCat27    schedule 12.11.2018    source источник
comment
Итак, scipy.integrate предлагает множество вариантов на выбор.   -  person mikuszefski    schedule 12.11.2018
comment
Что касается вашей ошибки, всегда предоставляйте полную трассировку.   -  person mikuszefski    schedule 12.11.2018
comment
И, пожалуйста, измените свой код, чтобы он действительно работал.   -  person mikuszefski    schedule 12.11.2018
comment
Дискретизировать интеграл, увидеть дискретизированный интеграл как часть дискретного косинусного преобразования или дискретного преобразования Фурье, применить методы fft и ifft.   -  person Lutz Lehmann    schedule 12.11.2018


Ответы (1)


Ваша задача может быть выполнена через

Nf = 200
s = np.linspace(0, Sf, Nf+1);
V_s = Vpot(s)
I = [ simps(s, np.cos(np.pi*k*s/Sf)*V_s ) / Sf  for k in range(0,2*Nf) ]

Но на самом деле узнайте, как это сделать с помощью БПФ или родственные методы.

person Lutz Lehmann    schedule 12.11.2018
comment
хорошо, спасибо, я смог вычислить интеграл, однако я увижу методы, связанные с БПФ, потому что интегрирование имеет значительную ошибку. - person PCat27; 12.11.2018
comment
Сначала убедитесь, что формулы были корректно переведены в код, включая все константы и параметры. Метод Симпсона имеет порядок 4, что должно давать хорошие результаты на более низких частотах. Для более высоких частот вы попадаете на территорию теоремы дискретизации. - person Lutz Lehmann; 12.11.2018
comment
Я сравнил с simps и scipy.integrate.quad и получил две разные интеграции. Вы можете увидеть полный код в (github.com/dayacaca/ Python-prog/blob/integrals/RollepUP_spiral/ ) - person PCat27; 12.11.2018
comment
Я не совсем уверен, на что я смотрю. Вычисление расстояния вычисляет точки на спирали из некоторых связанных входных данных области? Чередуется как-то? Можете ли вы дать более геометрическое-физическое описание того, что вычисляет модель? - person Lutz Lehmann; 13.11.2018
comment
Хорошо, нашел ваш пост math.stackexchange .com/questions/2914813/, что объясняет конструкцию спирали. Я думаю, что может быть ошибка в добавлении пи к углу в нижней половине. - person Lutz Lehmann; 13.11.2018
comment
Это геометрическая модель github.com/dayacaca/tesisPre/blob/master. /figures/spiral.png, а s — длина дуги. Я добавляю pi к углу (phi) каждый раз, когда меняю полудугу на другую. Я действительно не проверял, правильно ли построена спираль, однако потенциал выглядит так, как должно быть. я пересмотрю это - person PCat27; 13.11.2018