关于#python#的问题:如何利用Sympy求f(x)=x+1在(-Π,Π)上的余弦级数的前五项展开式(先利用integrate计算Fourier系数)

如何利用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))

img

先看结果是否达到预期代码在最下方:

img

代码



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)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答案:

    1. 首先,需要导入sympy库。
    import sympy as sp
    
    1. 定义变量和函数。
    x = sp.symbols('x')
    f = x + 1
    
    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为余弦级数的项数。

    1. 定义余弦级数。
    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项展开式。

    1. 最后,将求出的展开式打印出来。
    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)