计算与三角函数的方法傅立叶级数

您所在的位置:网站首页 legend中文翻译 计算与三角函数的方法傅立叶级数

计算与三角函数的方法傅立叶级数

2023-03-27 16:43| 来源: 网络整理| 查看: 265

我试着按照下面的公式来实现傅立叶级数功能:计算与三角函数的方法傅立叶级数

enter image description here

...其中...

enter image description here

...和...

enter image description here

enter image description here

这里是我的问题解决办法:

import numpy as np import pylab as py # Define "x" range. x = np.linspace(0, 10, 1000) # Define "T", i.e functions' period. T = 2 L = T/2 # "f(x)" function definition. def f(x): return np.sin(np.pi * 1000 * x) # "a" coefficient calculation. def a(n, L, accuracy = 1000): a, b = -L, L dx = (b - a)/accuracy integration = 0 for i in np.linspace(a, b, accuracy): x = a + i * dx integration += f(x) * np.cos((n * np.pi * x)/L) integration *= dx return (1/L) * integration # "b" coefficient calculation. def b(n, L, accuracy = 1000): a, b = -L, L dx = (b - a)/accuracy integration = 0 for i in np.linspace(a, b, accuracy): x = a + i * dx integration += f(x) * np.sin((n * np.pi * x)/L) integration *= dx return (1/L) * integration # Fourier series. def Sf(x, L, n = 10): a0 = a(0, L) sum = 0 for i in np.arange(1, n + 1): sum += ((a(i, L) * np.cos(n * np.pi * x)) + (b(i, L) * np.sin(n * np.pi * x))) return (a0/2) + sum # x axis. py.plot(x, np.zeros(np.size(x)), color = 'black') # y axis. py.plot(np.zeros(np.size(x)), x, color = 'black') # Original signal. py.plot(x, f(x), linewidth = 1.5, label = 'Signal') # Approximation signal (Fourier series coefficients). py.plot(x, Sf(x, L), color = 'red', linewidth = 1.5, label = 'Fourier series') # Specify x and y axes limits. py.xlim([0, 10]) py.ylim([-2, 2]) py.legend(loc = 'upper right', fontsize = '10') py.show()

...这里是绘制后的结果我得到什么:

enter image description here

我读过How to calculate a Fourier series in Numpy?,我已经实施了这种方法。它工作的很好,但它使用expotential方法,我想集中在三角函数和矩形方法的情况下计算a_{n}和b_{n}系数的integraions。

预先感谢您。

UPDATE(解决)

最后,这里是代码的工作示例。但是,我会花更多时间在它上面,所以如果有什么可以改进的地方,那就完成了。

from __future__ import division import numpy as np import pylab as py # Define "x" range. x = np.linspace(0, 10, 1000) # Define "T", i.e functions' period. T = 2 L = T/2 # "f(x)" function definition. def f(x): return np.sin((np.pi) * x) + np.sin((2 * np.pi) * x) + np.sin((5 * np.pi) * x) # "a" coefficient calculation. def a(n, L, accuracy = 1000): a, b = -L, L dx = (b - a)/accuracy integration = 0 for x in np.linspace(a, b, accuracy): integration += f(x) * np.cos((n * np.pi * x)/L) integration *= dx return (1/L) * integration # "b" coefficient calculation. def b(n, L, accuracy = 1000): a, b = -L, L dx = (b - a)/accuracy integration = 0 for x in np.linspace(a, b, accuracy): integration += f(x) * np.sin((n * np.pi * x)/L) integration *= dx return (1/L) * integration # Fourier series. def Sf(x, L, n = 10): a0 = a(0, L) sum = np.zeros(np.size(x)) for i in np.arange(1, n + 1): sum += ((a(i, L) * np.cos((i * np.pi * x)/L)) + (b(i, L) * np.sin((i * np.pi * x)/L))) return (a0/2) + sum # x axis. py.plot(x, np.zeros(np.size(x)), color = 'black') # y axis. py.plot(np.zeros(np.size(x)), x, color = 'black') # Original signal. py.plot(x, f(x), linewidth = 1.5, label = 'Signal') # Approximation signal (Fourier series coefficients). py.plot(x, Sf(x, L), '.', color = 'red', linewidth = 1.5, label = 'Fourier series') # Specify x and y axes limits. py.xlim([0, 5]) py.ylim([-2.2, 2.2]) py.legend(loc = 'upper right', fontsize = '10') py.show()

enter image description here

来源

2014-12-30 bluevoxel

+0

如果您调试自己的代码,您将学到更多。 (看起来好像你是学习练习那样的东西,但是在你最需要学习的地方,然后你实际上不得不考虑,你会发布一个问题来打败你的目的。) – tom10

+2

I'我只是在自己与自己失去战斗的时候才发表一个问题。感谢您提供关于调试的提示。我到目前为止还没有用过Python。 – bluevoxel



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3