前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >傅里叶级数理论详讲&实例应用

傅里叶级数理论详讲&实例应用

作者头像
巴山学长
发布于 2020-08-06 01:44:22
发布于 2020-08-06 01:44:22
3K00
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:0
代码可运行

久久不更,更则必是大招,本期推文有理论有案例,有兴趣的读者仔细阅读。

过冷水之前有和大家讲傅里叶级数,并给出以一个函数用傅里叶级数近似的案例。本期就进一步详讲傅里叶级数。傅里叶级数展开时基底函数取1,cosx、sinx,cos2x、sin2x.....cosnx、sinnx,傅里叶级数一般情况下表示为:

a0anbn是展开系数。假定一个周期为2π的函数f(x+2π)=f(x)现在计算其系数。这就需要一点灵活的数学思想来解决问题。我们对上式两边在[0,2π]范围内积分。可得:

我们继续采用两边积分的方法求系数anbn,对泰勒级数两边同时乘以cos(mx),然后在[0,2π]范围积分,如下:

则当m=n时:同理推bn

许多实际问题中,函数f(x)是一个定义在有限区间0<x<X上的任意函数。对这样的函数如何展开傅里叶级数?大师告诉我们依旧可以用正弦函数、余弦函数展开:

现在求展开系数的表达式:

讲完傅里叶级数的理论,我们来看看实际傅里叶级数实际应用。过冷水在学习过程中遇到如下一幅图,需要对该函数进行积分求值:

数值图像求积分的问题过冷水的往期推文数值计算——MATLAB数值积分原理详讲数值优化—三种复杂函数数值积分方法实例演示都有讲。过冷水本期的重点不是求数值积分的方法讨论,就想弄清楚如何很好的给出很好拟合该线段的函数表达式。这个函数图像算是比较复杂的,很少接触到所示的图像函数式,在此只能给出一个较为接近的拟合公式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%原图像数据
x=[-0.0171386436557126,2.64214113473764,2.75334303194563,2.92014587775763,2.92134159708245,2.97813826501126,3.03453635983180,3.09133302776062,3.14852826879770,3.20592279638893,3.26311803742601,3.31991470535483,3.37691065983778,3.43350804121246,3.49030470914127,3.54490922497459,3.54371350564977,3.59811873492895,3.65232467765400,3.70633133382491,3.76053727654995,3.81514179238327,3.86974630821658,3.92435082404990,3.97935391299149,4.03415771537894,4.14416389326212,4.25436935769944,4.36457482213675,4.58578289722792,4.69598836166524,4.80738954542737,4.86318978058550,4.97419239123936,5.14019809083481,5.25080212838040,5.36160545248012,5.47280734968812,5.69441399788756,5.80581518164969,5.91721636541183,5.91781422507423,5.97401303334064,6.03001255505291,6.08581279021105,6.19581896809422,6.25082205703581,6.36122680802726,6.41642918352299,6.69343749377230,6.85944319336774,7.02584746607147,7.13625221706292,7.30185934355009,7.57866836724526,7.74527192650312,7.80127144821539,7.85707168337352,7.96727714781084,8.07748261224815,8.18768807668547,8.29829211423105,8.57530042448036,8.63110065963850,8.90810896988780,9.01931086709580,9.07531038880807,9.13130991052034,9.24251180772833,9.29831204288647,9.40851750732378,9.51872297176110,9.68433009824827,9.79533270890213,9.90593674644772,10.0719424460432,10.3489507562925,10.4601526535005,10.6819585882541,10.8475657147412,10.9583690388410,11.0695709360489,11.1805735467028,11.2907790111401,11.4013830486857,11.5677873213894,11.7341915940931,11.8997987205803,12.0660037067299,12.2326072659878,12.3436098766416,12.5100141493453,12.6214153331075,12.6774148548197,12.8432212678611,13.0088283943482,13.1750333804978,13.2302357559935,13.5626457282927,13.6736483389466,13.7286514278882,13.8392554654337,13.9496602164252,14.3374718507742,14.4486737479822,15.1134936925806,15.2804958249467,15.5575041351960,15.6135036569083,15.7247055541163,15.8909105402658,16.0013152912573,16.1117200422488,16.1667231311903,16.2773271687359,16.3325295442317,16.4987345303812,16.5539369058770,16.7755435540764,16.9419478267801,17.0523525777716,17.1629566153172,17.3845632635166,17.6065684848243,17.8283744195779,18.0499810677774,18.2167839135894,18.9370055202376,19.2134159708245,19.3796209569740,19.4906235676279,19.7122302158273,19.8226349668188];
y=[5.95683453237410,5.95683453237410,6.02158273381295,6.11870503597122,6.31294964028777,6.53956834532374,6.70143884892086,6.92805755395683,7.21942446043166,7.54316546762590,7.83453237410072,8.06115107913669,8.32014388489209,8.51438848920863,8.74100719424460,8.61151079136691,8.41726618705036,8.25539568345324,8.06115107913669,7.83453237410072,7.64028776978417,7.51079136690648,7.38129496402878,7.25179856115108,7.18705035971223,7.08992805755396,6.96043165467626,6.86330935251799,6.76618705035971,6.70143884892086,6.60431654676259,6.70143884892086,6.76618705035971,6.79856115107914,6.76618705035971,6.73381294964029,6.73381294964029,6.79856115107914,6.79856115107914,6.89568345323741,6.99280575539568,7.08992805755396,7.21942446043166,7.31654676258993,7.38129496402878,7.25179856115108,7.18705035971223,7.12230215827338,7.08992805755396,7.08992805755396,7.05755395683453,7.08992805755396,7.02517985611511,6.92805755395683,6.89568345323741,6.96043165467626,7.05755395683453,7.12230215827338,7.02517985611511,6.92805755395683,6.83093525179856,6.79856115107914,6.79856115107914,6.86330935251799,6.86330935251799,6.92805755395683,7.02517985611511,7.12230215827338,7.18705035971223,7.25179856115108,7.15467625899281,7.05755395683453,6.96043165467626,6.99280575539568,6.96043165467626,6.92805755395683,6.92805755395683,6.99280575539568,7.02517985611511,6.92805755395683,6.92805755395683,6.99280575539568,7.02517985611511,6.92805755395683,6.89568345323741,6.92805755395683,6.96043165467626,6.86330935251799,6.86330935251799,6.92805755395683,6.96043165467626,6.99280575539568,7.08992805755396,7.18705035971223,7.12230215827338,7.02517985611511,7.02517985611511,6.99280575539568,6.99280575539568,7.02517985611511,6.96043165467626,6.92805755395683,6.86330935251799,6.86330935251799,6.92805755395683,6.92805755395683,7.05755395683453,7.05755395683453,7.15467625899281,7.21942446043166,7.21942446043166,7.15467625899281,7.08992805755396,7.02517985611511,6.99280575539568,6.96043165467626,6.96043165467626,6.92805755395683,6.92805755395683,6.96043165467626,6.89568345323741,6.86330935251799,6.86330935251799,6.92805755395683,6.96043165467626,6.96043165467626,7.05755395683453,7.05755395683453,6.96043165467626,6.96043165467626,6.99280575539568,6.99280575539568,6.92805755395683];
%函数拟合
f=fit(x',y','smoothingspline');
x1=linspace(2,19,250)';
y1=f(x1);
%绘图
figure1 = figure;
axes1 = axes('Parent',figure1);
hold(axes1,'on');
plot(x,y,'LineWidth',2,'Parent',axes1);
plot(x1,y1,'LineWidth',2,'Parent',axes1);
legend('原函数图像','拟合函数图像');
xlabel('$x$','Interpreter','latex');
ylabel('$y$','Interpreter','latex');
xlim(axes1,[0 20]);
set(axes1,'FontSize',12,'LineWidth',2);

函数拟合代码很简单,后期会有详细推文讲解函数拟合问题,本期先先给出代码。整体来看还算拟合的好,部分拟合能够看出来有明显的错差,该方法并没有给出具体的函数解析式,类似于差值法,可以用于原图像的光滑处理。过冷水的实际问题是用具体函数表达式表示出第一个谷底区间的函数表达式,不需要给出整个图像区间的函数解析式,样问题就变得容易了,实际拟合一下图像:

使用函数拟合工具箱直接给出多项式拟合、高斯拟合、傅里叶拟合的函数图像,由拟合图像可知,傅里叶拟合和高斯拟合明显较好,使用起来比较简单。再一次告诫大家,在拟合图像的时候只知道多项式拟合就显得太不成熟了。

在此给出傅里叶拟合的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[~,locs]=findpeaks(-y,'npeaks',1)
x3=x(2:locs);y3=y(2:locs);
f= fit(x3', y3','fourier3');
syms x 
y4=  f.a0 + f.a1*cos(x*f.w) + f.b1*sin(x*f.w) +f.a2*cos(2*x*f.w) + f.b2*sin(2*x*f.w) + f.a3*cos(3*x*f.w) + f.b3*sin(3*x*f.w);

y4即为想获得函数解析式 。过冷水在学习的过程中有接触到较为自己编辑傅里叶级数公式代码见从泰勒级数说傅里叶级数

过冷水想要和大家分享的知识就这么多 如果你想了解的更多就敬请关注公众号的推文。最近大家都比较忙,所以公众号推文有中断。好的平台给大家提供有实用且有深度的信息需要支持和共同参与建设,诚挚邀请对matlab相关知识较熟的人士本着独乐乐不如众乐乐的精神,一起传播知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从泰勒级数说傅里叶级数
泰勒中值定理:若函数f(x)在含有x0的某个开区间内具有直到(n+1)阶的导数,那么对于任一x∈(a,b),有:
巴山学长
2020/06/17
2.8K0
傅里叶变换
傅里叶级数实际实际是对周期函数和半周期函数的按基地函数去1、cosx、cos2x、...cosnx、sinx、sin2x、sinnx的展开式。如果定义在(-∞,∞)区间的非周期函数还能进行傅里叶展开吗?傅里叶计算扩展到连续变换的情况后就是傅里叶积分。
巴山学长
2020/09/03
9270
数值计算——MATLAB数值积分原理详讲
显然这是一个简单的数值积分问题,但是过冷水会给大家分享简单问题吗?其必有玄妙,且听我道来。
巴山学长
2020/03/25
4K0
数值计算——MATLAB数值积分原理详讲
数值优化—复杂函数重积分计算方法实例演示
既然要的是数值解,为何还使用符号解?能坐车进城,就决不骑摩托车。复杂函数用数值积分函数quad(f(x),xmin,xmax)完美求解,perfect!不巧的是疑难杂症都让过冷水碰上了,在原问题的基础上需要解决这么个问题:
巴山学长
2023/03/17
9550
数值优化—复杂函数重积分计算方法实例演示
数值优化—三种复杂函数数值积分方法实例演示
在0.1~1 区间上的值,初步看该方程的积分项比较复杂不易给出原函数。用MATLAB也无法直接求出原函数。自然而然就想该函数如何在不求积分项原函数的情况下计算出积分项的具体值。在抓耳挠腮之际想起了公众号的一篇推文:蒙特卡洛法应用。可以直接求函数指定区间的面积,相当于求积分。蒙特卡洛算法求面积示意图如下:
巴山学长
2020/02/17
2.8K1
数值优化—三种复杂函数数值积分方法实例演示
统计回归拟合方程参数
一直以来过冷水都有给大家分享图像拟合的知识、从泰勒级数说傅里叶级数、Matlab多项式拟合初探,本期过冷水给大家讲讲统计回归做拟合。
巴山学长
2020/09/29
4790
统计回归拟合方程参数
相对角距离方法的Matlab实现
之前过冷水在推文中三维空间分布函数绘制实例中和大家分享了对分布函数g(r)的程序实现方法。只要你认真学习专研总有新的发现,这不过冷水就接触到了一种叫做相对角距离的方法,应用该方法可以得到一个完整的峰值函数,了解液态结构的应该知道称之为第一配位球层对分布函数。图像如下:
巴山学长
2021/05/31
7310
相对角距离方法的Matlab实现
带你用matlab轻松搞定微分方程
之前过冷水有和大家分享热传导方程求解的方法,其本质上是微分方程的问题。考虑大多数读者对微分方程求解方法比较陌生,所以过冷水本期简单普及一下微分方程的求解问题。
巴山学长
2020/11/03
1.6K0
带你用matlab轻松搞定微分方程
大数定理的小陷阱
过冷水最近这段时间在做积分的学习工作,之前连续分享了好几期的 蒙特卡洛法应用;你所不知道的Monte Carlo形式;重要性抽样方法实例分享 。求积分的问题会不懂?可是就是在下图求积分过程中翻了车;
巴山学长
2020/12/29
4090
大数定理的小陷阱
谐振子的动力学学运动
在力学的学习过程中经典分析力学是最基本的入门知识,过冷水之前和大家一起学习了两个小车通过弹簧链接起来的做来回摆动运动的运动轨迹学习。推文中直接给了一个微分方程组,然后解出微分方程组就得到了小车的演化轨迹。本期过冷水从零开始构建一个微分方程组,而不是单纯解微分方程。
巴山学长
2021/05/31
6730
谐振子的动力学学运动
统计分布讲解
随机现象中,变量的取值是不确定的,称之为随机变量。描述随机变量取值概率的函数称为概率分布。对于随机变量,通常主要关心它的两个主要数字特征:数学期望用于描述随机变量的平均值,方差用于描述随机变量分布的差异程度,方差的算术平方根称为均方差。另外协方差和相关系数用于描述两个变量的线性关联程度。
巴山学长
2020/09/22
7200
信号与系统实验五 信号的傅里叶分析与频谱
1.参考例5-1,实现教材p125,例3-4中傅里叶级数表达式(p126第二行)。分别采用前4、40、400项,画出周期矩形脉冲信号的近似图。
timerring
2022/07/20
1.2K0
信号与系统实验五 信号的傅里叶分析与频谱
封闭区域多边面积计算算法设计
过冷水最近遇到了这么一个问题,有一系列点组成了如上图所示的封闭图形,该如何求面积?
巴山学长
2021/03/15
1.2K0
latex()、ploy2sym()、symsum()的妙用
过冷水在进行学习过程中总是遇到一些看似无关紧要的问题,做起来却很繁琐,比如给你一个函数:
巴山学长
2020/07/22
6300
latex()、ploy2sym()、symsum()的妙用
matlab绘图(六)-图像光滑&数据取点
当然之前中过冷水多次有跟大家提多项式拟合、傅里叶级数拟合、高斯级数拟合,实际更加常见的操作是用matlab中图像拟合工具箱cftool灵活进行函数拟合。
巴山学长
2023/03/15
1K0
matlab绘图(六)-图像光滑&数据取点
matlab绘图(五)
过冷水有段时间没有和大家分享MATLAB的编程知识了,皆因懒。本期给大家分享一点关于绘图的小技巧,经常有朋友让我帮忙绘图,感觉在我这里是小事,在他们那就是很特别的技能,有时候朋友的特殊绘制要求,也让我犯难。现将自己平时的绘图经验做个小结,主要是关于matlab绘图的一些注意点——公式输入、多轴绘图、交点标记、箭头绘制,通过实际案例给大家讲讲具体的使用。
巴山学长
2020/02/17
1.2K0
matlab绘图(五)
基于奇怪的羊返航,聊plot图像镜像
之前过冷水有推出matlab动态绘图推文深受读者关注,细心的读者会发现渡河动态图有许多瑕疵,过冷水深知这一点,会逐步提高推文水平的,本期我们一起看一个将近有点熟视无睹的问题。
巴山学长
2020/03/25
4540
三维空间分布函数绘制实例
这是过冷水之前在重要性抽样方法实例分享中的图片。这张图片的实际含义是以坐标原点为参考点,距离原点距离x处的小球个数f(x)分布图。这个问题理解起来好容易,就是统计距离和小球个数的关系,but!实际问题是过冷水要处理这样的问题:
巴山学长
2021/01/27
8220
三维空间分布函数绘制实例
非线性方程组求解迭代算法&图像寻初始值讲解
前段时间过冷水在学习中遇到了一个解非线性方程组的问题,遇到非线性方程组的的问题过冷水果断一如既往、毫不犹豫的 fsolve()、feval()函数走起,直到有人问我溯本求源的问题——非线性方程组求解算法。
巴山学长
2020/10/23
1.4K0
非线性方程组求解迭代算法&图像寻初始值讲解
傅里叶级数-三种表达方式(双三角,余弦,复指数)
傅里叶级数-系数求解,昨天的文章好像还挺多人看的,今天是第二篇,补全几种不同的表达形式。
云深无际
2024/08/20
7950
傅里叶级数-三种表达方式(双三角,余弦,复指数)
推荐阅读
相关推荐
从泰勒级数说傅里叶级数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验