2

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) で合計することです。

4

2 に答える 2

0

SymPy 1.0 にはfourier_series、関数のフーリエ級数を計算できる関数が含まれています。ドキュメントはここにあります。

例えば。

>>> 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)
于 2016-04-12T21:05:00.883 に答える