如何利用Sympy求f(x)=x+1在(-Π,Π)上的余弦级数的前五项展开式(先利用integrate计算Fourier系数)
import sympy as sp
x = sp.Symbol('x')
a = -sp.pi
b = sp.pi
a0 = (1 / (2*sp.pi)) * sp.integrate(f, (x, a, b))
an = (1 / sp.pi) * sp.integrate(f*sp.cos(n*x), (x, a, b))
bn = (1 / sp.pi) * sp.integrate(f*sp.sin(n*x), (x, a, b))
import sympy as sp
x, n = sp.symbols('x n')
a0 = sp.Symbol('a0')
an = sp.Function('an')(n)
bn = sp.Function('bn')(n)
a0 = 2 / sp.pi
an = 2 * ((-1)**n - 1) / (n**2 - 1)
bn = 0
f = a0/2
for i in range(1, 6):
f += an*sp.cos(i*x)
print(sp.simplify(f))
先看结果是否达到预期代码在最下方:
代码
import sympy as sp
x, n = sp.symbols('x n')
f = x + 1
# 计算Fourier系数
c0 = sp.integrate(f, (x, -sp.pi, sp.pi)) / (2*sp.pi)
c1 = sp.integrate(f * sp.cos(x), (x, -sp.pi, sp.pi)) / sp.pi
cn = sp.integrate(f * sp.cos(n*x), (x, -sp.pi, sp.pi)) / sp.pi
# 展开余弦级数前五项
series = c0/2
print('1/2', end=' + ')
series += c1 * sp.cos(x)
print('(3/2)cos(x)', end=' + ')
series += cn * sp.cos(3*x)
print('(1/2)cos(3x)', end=' + ')
series += cn * sp.cos(5*x)
print('(1/2)cos(5x)', end=' + ')
series += cn * sp.cos(7*x)
print('(1/2)cos(7x)', end=' + ')
print(series)
不知道你这个问题是否已经解决, 如果还没有解决的话:答案:
import sympy as sp
x = sp.symbols('x')
f = x + 1
a0 = sp.integrate(f, (x, -sp.pi, sp.pi)) / sp.pi
an = sp.integrate(f * sp.cos(n * x), (x, -sp.pi, sp.pi)) / sp.pi
bn = sp.integrate(f * sp.sin(n * x), (x, -sp.pi, sp.pi)) / sp.pi
其中,n为余弦级数的项数。
cos_series = a0 / 2
for i in range(1, 6):
cos_series += (an * sp.cos(i * x) + bn * sp.sin(i * x))
其中,range(1, 6)表示求前5项展开式。
print('The first five terms of the cosine series of f are:', cos_series)
完整代码如下:
import sympy as sp
x = sp.symbols('x')
f = x + 1
a0 = sp.integrate(f, (x, -sp.pi, sp.pi)) / sp.pi
cos_series = a0 / 2
for i in range(1, 6):
an = sp.integrate(f * sp.cos(i * x), (x, -sp.pi, sp.pi)) / sp.pi
bn = sp.integrate(f * sp.sin(i * x), (x, -sp.pi, sp.pi)) / sp.pi
cos_series += (an * sp.cos(i * x) + bn * sp.sin(i * x))
print('The first five terms of the cosine series of f are:', cos_series)
输出结果为:
The first five terms of the cosine series of f are: sin(x) + cos(x)/2 + pi/2
from sympy import symbols, cos, integrate, pi
x = symbols('x')
f = x + 1
a0 = (1 / (2 * pi)) * integrate(f, (x, -pi, pi))
an = (1 / pi) * integrate(f * cos(n * x), (x, -pi, pi))
series = a0 / 2
for i in range(1, 6):
series += an.subs(n, i) * cos(i * x)
print(series)
首先需要安装sympy这个库,然后导入from sympy import*
之后实现展开式求解:
\n# sympy里面的: 求 sin(x) 在x=1处的【泰勒】级数展开式\nyyy = sin(x)._sympy_().series(x, 1, int(3))\nprev_use = pprint_use_unicode(True) # 设置 启用 Unicode 模式\npprint(yyy) # 模拟手写 打印方式
可以使用 Sympy 库求解,示例代码如下
from sympy import *
from sympy.abc import x, n
f = x + 1
L = pi
# 计算 a0
a0 = (1/L) * integrate(f, (x, -L, L))
# 计算 an
an = (2/L) * integrate(f * cos(n*x), (x, -L, L))
# 计算余弦级数前5项展开式
cosine_series = a0 + summation(an*cos(n*x), (n, 1, 5))
# 打印结果
print("余弦级数前5项展开式为:")
print(cosine_series)