计算与三角函数的方法傅立叶级数 |
您所在的位置:网站首页 › legend中文翻译 › 计算与三角函数的方法傅立叶级数 |
我试着按照下面的公式来实现傅立叶级数功能:计算与三角函数的方法傅立叶级数 ...其中... ...和... 这里是我的问题解决办法: 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()...这里是绘制后的结果我得到什么: 我读过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()来源 2014-12-30 bluevoxel +0如果您调试自己的代码,您将学到更多。 (看起来好像你是学习练习那样的东西,但是在你最需要学习的地方,然后你实际上不得不考虑,你会发布一个问题来打败你的目的。) – tom10 +2I'我只是在自己与自己失去战斗的时候才发表一个问题。感谢您提供关于调试的提示。我到目前为止还没有用过Python。 – bluevoxel |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |