gpt4 book ai didi

python - Piecewise PYTHON 的傅里叶级数

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:36 26 4
gpt4 key购买 nike

我试图找到的傅里叶级数

piecewise

像 simpy 一样:

p = Piecewise((sin(t), 0 < t),(sin(t), t < pi), (0 , pi < t), (0, t < 2*pi))
fs = fourier_series(p, (t, 0, 2*pi)).truncate(8)

但是好像不行。它卡在 *(循环?)。有什么办法可以解决吗?也许另一种选择?非常感谢

最佳答案

我得到,延迟一两秒:

In [55]: fourier_series(p,(t,0,2*pi))
Out[55]: FourierSeries(Piecewise((sin(t), (t > 0) | (t < pi)), (0, (pi < t) | (t < 2*pi))), (t, 0, 2*pi), (0, SeqFormula(Piecewise((0, Eq(_n, -1) | Eq(_n, 1)), (cos(2*_n*pi)/(_n**2 - 1) - 1/(_n**2 - 1), True))*cos(_n*t)/pi, (_n, 1, oo)), SeqFormula(Piecewise((-pi, Eq(_n, -1)), (pi, Eq(_n, 1)), (sin(2*_n*pi)/(_n**2 - 1), True))*sin(_n*t)/pi, (_n, 1, oo))))

这只是设置而已。

_.truncate(8) 耗时(太)长。那一定是在做评估。

不同的截断效果更好吗?我没有看到任何其他控件。


.truncate(1) 返回 sin(t).truncate(2) 挂起。将这个简单的 sin(t) 与平坦段混合一定是在建立一个难以分析的困难案例。但我对这个数学领域有点生疏。

我用 numpy 寻找傅里叶级数:

How to calculate a Fourier series in Numpy?


对于在 (0,pi) 上定义的 FS fs1 = fourier_series(p, (t, 0, pi)):

In [5]: fs1.truncate(1)
Out[5]: 2/pi
In [6]: fs1.truncate(2)
Out[6]: -4*cos(2*t)/(3*pi) + 2/pi
In [7]: fs1.truncate(3)
Out[7]: -4*cos(2*t)/(3*pi) - 4*cos(4*t)/(15*pi) + 2/pi
In [8]: fs1.truncate(4)
Out[8]: -4*cos(2*t)/(3*pi) - 4*cos(4*t)/(15*pi) - 4*cos(6*t)/(35*pi) + 2/pi
In [9]: fs1.truncate(5)
Out[9]: -4*cos(2*t)/(3*pi) - 4*cos(4*t)/(15*pi) - 4*cos(6*t)/(35*pi) - 4*cos(8*t)/(63*pi) + 2/pi

哪个情节(在 numpy 中)符合预期:

periodic 0-pi FS

来自 Fourier Series 的表格,我发现这个公式(在 numpy 术语中)用于整流正弦波:

z8 = 1/pi + 1/2*sin(t)-2/pi*np.sum([cos(2*i*t)/(4*i**2-1) for i in range(1,8)],axis=0)

rectified half sine wave

这有一个类似的 cos 系列术语,但添加了 sin 术语。这向我建议,您可以将这一半罪恶近似为 a*sin(t)+b(sin(2*t)) 的总和(或类似的东西)。我想像 sympy 那样,有一些数学教科书或论文探讨了推导傅里叶级数的困难。您看过 Mathworld 链接了吗?

比较半正弦整流与整正弦整流的 FS

半正弦:

In [434]: z3 = 1/pi + 1/2*sin(t)-2/pi*np.sum([cos(2*i*t)/(4*i**2-1) for i in range(1,3)],axis=0)

全正弦:

In [435]: w3 = 1/pi -2/pi*np.sum([cos(2*i*t)/(4*i**2-1) for i in range(1,3)],axis=0)

In [438]: plt.plot(t,sin(t)/2)
In [439]: plt.plot(t,w3)
In [440]: plt.plot(t,z3)
In [441]: plt.plot(t,w3+sin(t)/2) # full sine + sine/2 == half sine

rectified half sine vs full sine

我可以想象将这样的见解传输回 sympy,以一种不需要那么长时间(或可能挂起)的方式重新定义周期函数。

关于python - Piecewise PYTHON 的傅里叶级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50782952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com