Python中的傅里叶级数求和

时间:2013-09-25 02:47:25

标签: python

我正在尝试用Python绘制傅里叶级数求和图。到目前为止,我有这个:

#! /usr/bin/env python

from sympy import *
import numpy
import matplotlib.pyplot as plt

n = Symbol('n')
x = Symbol('x')

L_1 = -1
L_2 = 1
f = -x

a_0 = (1 / L_2) * integrate(f, (x, L_1, L_2))
a_n = (1 / L_2) * integrate(f * cos(n * pi * x / L_2), (x, L_1, L_2))
b_n = (1 / L_2) * integrate(f * sin(n * pi * x / L_2), (x, L_1, L_2))

F = (a_0 / 2) + mpmath.fsum((a_n * cos(n * pi * x / L_2)) + (b_n * sin(n * pi * x / L_2)), [0, 20])
print(F)

然而,fsum引发了一个错误:

F = (a_0 / 2) + mpmath.fsum((a_n * cos(n * pi * x / L_2)) + (b_n * sin(n * pi * x / L_2)), [0, 20])
File "C:\Program Files\Python\lib\site-packages\sympy\mpmath\ctx_mp_python.py", line 831, in fsum
for term in terms:
TypeError: 'Mul' object is not iterable

我不清楚Mul对象是什么,或者我的问题究竟是什么。有人有任何指针让这个总结有效吗?就像我说的那样,最终目标是插入一些x和n次迭代的值,在这种情况下为20。

2 个答案:

答案 0 :(得分:0)

我不确定为什么它抛出Mul对象错误,错误意味着对象是单个项目而不是可迭代的。

关于您尝试使用mpmath.fsum的方法,签名与documentation不匹配。

mpmath.fsum(terms, absolute=False, squared=False)

您使用的方法似乎与nsum匹配。

mpmath.nsum(ctx, f, *intervals, **options)

如果你想在python中实现傅里叶变换,你可以使用python和numpy检查实现here

答案 1 :(得分:0)

SymPy 1.0已包含在fourier_series函数中,可让您计算函数的傅里叶级数。可以找到文档here

例如

>>> f = fourier_series(-x, (x, -1, 1))
>>> f.truncate(5)
-2*sin(pi*x)/pi + sin(2*pi*x)/pi - 2*sin(3*pi*x)/(3*pi)