傅里叶系数计算工具

通过数值积分求任意函数傅里叶系数(a₀、aₙ、bₙ)的免费工具。输入 f(x) 的表达式、周期区间与所需次数,即可得到系数表格,并把重构的傅里叶级数展开与原函数叠加显示在图上。

傅里叶系数计算工具是什么

这是一个用数值积分求任意函数傅里叶系数的工具。输入 f(x) 的表达式、作为一个周期的区间以及所需的最高次数,即可得到常数项 a₀ 以及各次的 aₙ、bₙ 表格,并把由这些系数重构的傅里叶级数展开与原函数叠加绘制在图上。方波、三角波等已有闭式系数的典型波形由傅里叶级数展开可视化工具负责,本页面则定位于亲手尝试教科书上没有列出的表达式。

积分采用辛普森法,默认把一个周期分成 2000 份,因此显示的系数是近似值而非精确解。对于光滑函数通常可以吻合到六位有效数字左右,但像绝对值那样含折点的函数,或在区间端点处数值跳变的函数,增加分割数会更准确。分割数可在 10 到 20000 之间指定,建议一直调高到数字不再变动为止。

傅里叶系数计算工具的使用方法

  1. 输入函数 填写 f(x) 的表达式。变量写作 x,圆周率写作 pi。常用示例可以通过按钮直接填入。
  2. 确定周期区间 填写左端与右端。这里也可以写表达式,因此 -pi 和 2*pi 都能使用。区间宽度就是周期 T。
  3. 选择次数 用滑块指定要求到第几次的系数,可在 1 到 50 之间选择。
  4. 阅读结果 页面会显示系数表格,以及把级数叠加在原函数上的图。残差一栏越小,说明到该次数为止对原函数的还原越好。

用好本工具的小技巧

  • 对于在区间端点跳变的函数(例如 f(x) = x),级数会在跳变附近过冲。增加次数也无法消除,因此除了残差数值,也请一并观察图形的形状。
  • 本应为 0 的系数在数值积分下会出现 1e-16 量级的数值。表中把绝对值小于 1e-10 的显示为 0,若本应为空的列里出现更大的值,请尝试提高分割数。
  • 若为偶函数(f(−x) = f(x)),所有 bₙ 都会消失;若为奇函数,则 a₀ 与所有 aₙ 都会消失。这可以直接用来核对对称性。
  • 若想确认方波、三角波、锯齿波、半波整流的系数,使用闭式表达式的傅里叶级数展开可视化工具能给出精确值。

傅里叶系数计算工具的应用场景

核对习题答案

可以按次数逐项核对手算得到的 a₀、aₙ、bₙ 是否正确。漏掉的符号、把 1/n² 写成 1/n 之类的错误在这里会立刻暴露。

尝试教科书上没有的函数

像 exp(-x^2) 或 x*sin(x) 这类手算积分很麻烦的函数,在这里可以立刻得到系数。

验证对称性带来的效果

在偶函数、奇函数、半波对称的函数之间来回替换,观察哪些系数会归零。对称性的结论就从背诵变成了亲眼确认。

观察改变周期后的影响

同一个表达式,区间宽度不同则角频率也不同。把 −1〜1 与 −pi〜pi 两种情形对比,可以清楚看到系数如何变化。

傅里叶系数计算中的相关术语

傅里叶系数
a₀、aₙ、bₙ 的统称。每一个都等于把原函数乘上余弦或正弦后在一个周期上积分,再除以半个周期所得的值。
周期 T
所输入区间的宽度。傅里叶级数把函数视为以这个宽度重复,因此区间的取法会左右结果。
角频率
指 ω = 2π/T。第 n 次谐波的角频率为 nω,在级数中以 cos(nωx) 与 sin(nωx) 的形式出现。
辛普森法
把区间分成偶数份,每三个点用抛物线近似再积分的数值积分方法。其误差与步长的四次方成正比,因此分割数加倍后误差约缩小为十六分之一。
振幅与相位
把 aₙcos 与 bₙsin 合成为单个余弦 A·cos(nωx + φ) 时的大小与横向偏移。这里 A = √(aₙ² + bₙ²),φ = atan2(−bₙ, aₙ)。
残差
原函数与重构级数之差。本页显示的是积分节点处的均方根,用于衡量所取次数对函数的还原程度。

关于傅里叶系数计算的常见问题

要对任意表达式做符号积分需要计算机代数系统,而在浏览器内安全地完成这件事并不容易。因此本工具改用辛普森法的数值积分。对光滑函数而言,默认的 2000 分割通常能吻合到六位有效数字左右。若需要典型波形的精确闭式系数,请使用傅里叶级数展开可视化工具。

这是数值积分的舍入误差。表中把绝对值小于 1e-10 的显示为 0。如果本应为空的地方出现了更大的值,通常说明函数含有折点或跳变,请提高分割数并确认数值是否稳定下来。

四则运算、取余、幂、阶乘;sin、cos、tan、asin、acos、atan;log(常用对数)、ln(自然对数)、sqrt、abs、exp;以及常数 pi 与 e。三角函数的参数按弧度处理。像 2x 或 3sin(x) 这样省略乘号的写法会自动补全。

要么次数不够,要么函数在区间端点处无法周期性衔接。傅里叶级数把区间之外视为该区间的重复,因此当 f(左端) 与 f(右端) 不相等时那里就会产生跳变,级数在附近必然过冲。改变区间的位置往往能改善这一点。
工具君

闲话 ― 从酒桶容积到 FFT,数值积分的漫长之路

本工具所用的辛普森法,得名于 1743 年介绍该公式的英国数学家托马斯·辛普森。然而同样的想法在一百多年前就已被约翰内斯·开普勒使用,而且用途不是天体力学,而是估算葡萄酒桶的容积。德语地区至今仍有人称之为「开普勒的酒桶公式」。用一连串抛物线去近似曲线所围的面积,原来是一件相当古老的实用算术。

用数值方法求傅里叶系数,会直接引向离散傅里叶变换。若有 N 个数据点,朴素算法需要 N² 次乘法,而把它降到 N log N 的正是 1965 年库利与图基提出的快速傅里叶变换(FFT)。他们的论文发表后不久,有人发现高斯在 1805 年前后就写下了本质相同的算法。高斯并未发表,直到身后的全集出版时才收录其中,因而沉睡了一个半世纪之久。

估计数值积分的误差,在实务上直接关系到「在哪里停下来」的判断。辛普森法的误差与步长的四次方成正比,因此分割数加倍后误差约缩小为十六分之一。不过这一估计的前提是被积函数足够光滑,一旦存在不可微的点,估计就会失效。在本工具中输入 abs(x) 并改变分割数,就能看到精度提升不像光滑函数那样顺畅。观察数字的变化,也是一种体会定理前提是否真正被满足的练习。