三角函数类总结

三角函数类总结

三角函数类

三角函数类就是由各种三角函数乘以系数求和所得到的。三角函数都是具有特定周期的周期函数。
我们注意到只有用相同周期的这些函数来叠加生成目标函数才不会影响函数周期,否则会改变函数周期变为周期的最小公倍数。所以对于一个周期函数来说,要想用其他函数去近似他,首要的就是其他函数必须也是相同周期的。否则无法达到相同周期,也就无法生成这个周期函数。
打个比方,我有一个函数周期为 T T T,我想用其他函数来近似这个函数,我需要搜集许多周期同样为T的函数。而 cos ⁡ ( n ( 2 π T ) x ) \cos(n(\frac{2{\pi}}{T})x) cos(n(T2π)x) sin ⁡ ( n ( 2 π T ) x ) \sin(n(\frac{2{\pi}}{T})x) sin(n(T2π)x)恰好就是周期为T的函数。同时因为函数 cos ⁡ ( n ( 2 π T ) x ) \cos(n(\frac{2{\pi}}{T})x) cos(n(T2π)x) cos ⁡ ( − n ( 2 π T ) x ) \cos(-n(\frac{2{\pi}}{T})x) cos(n(T2π)x)是相同的,而 sin ⁡ ( − n ( 2 π T ) x ) = − sin ⁡ ( n ( 2 π T ) x ) \sin(-n(\frac{2{\pi}}{T})x)=-\sin(n(\frac{2{\pi}}{T})x) sin(n(T2π)x)=sin(n(T2π)x),与 sin ⁡ ( n ( 2 π T ) x ) \sin(n(\frac{2{\pi}}{T})x) sin(n(T2π)x)只是系数不同而已,所以具有相同周期T的函数有 cos ⁡ ( n ( 2 π T ) x ) \cos(n(\frac{2{\pi}}{T})x) cos(n(T2π)x) sin ⁡ ( n ( 2 π T ) x ) \sin(n(\frac{2{\pi}}{T})x) sin(n(T2π)x)这些函数,其中 n ∈ [ 0 , + ∞ ] n{\in}[0,+{\infty}] n[0,+] n ∈ Z n{\in}Z nZ。这就引出了接下来的周期函数的三角函数展开。
最常见的三角函数类就是周期函数的三角函数展开,也是同样的道理,用一堆同样周期的函数通过系数加权来实现对周期函数的逼近:
f ( x ) = ∑ n = 0 + ∞ [ a n cos ⁡ ( n ( 2 π T ) x ) + b n sin ⁡ ( n ( 2 π T ) x ) ] f(x)={\sum_{n=0}^{+\infty}}[a_{n}{\cos}(n(\frac{2{\pi}}{T})x)+b_{n}{\sin}(n(\frac{2{\pi}}{T})x)] f(x)=n=0+[ancos(n(T2π)x)+bnsin(n(T2π)x)]

此时系数的计算公式如下所示:
a n a_n an的:
a n = 2 T ∫ − T 2 + T 2 f ( x ) cos ⁡ ( n ( 2 π T ) x ) d x , n ≠ 0 {a_n}=\frac{2}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x){\cos}(n(\frac{2\pi}{T})x)dx,n{\neq}0 an=T22T+2Tf(x)cos(n(T2π)x)dx,n=0

a 0 a_0 a0的:
a 0 = 1 T ∫ − T 2 + T 2 f ( x ) d x {a_0}=\frac{1}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x)dx a0=T12T+2Tf(x)dx

b n b_n bn的:
b n = 2 T ∫ − T 2 + T 2 f ( x ) sin ⁡ ( n ( 2 π T ) x ) d x {b_n}=\frac{2}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x){\sin}(n(\frac{2\pi}{T})x)dx bn=T22T+2Tf(x)sin(n(T2π)x)dx

对于任何一个周期为 T T T的函数来说, n T nT nT也是它的周期,当 n n n取无穷的时候,这个周期长度就是 + ∞ +\infty +,所以 + ∞ +\infty +也是任意周期函数的周期。
而对于非周期函数我们可以认为它的周期近似为 + ∞ +{\infty} +,所以要用周期为正无穷的函数来近似。而前面分析过了,所有周期函数都是周期为正无穷的周期函数。所以要用全部的周期函数去近似非周期函数。
f ( x ) = ∑ ω = 0 + ∞ [ a ω cos ⁡ ( ω x ) + b ω sin ⁡ ( ω x ) ] , ω ∈ R f(x)=\sum_{\omega=0}^{+\infty}[a_\omega\cos(\omega{x})+b_\omega\sin(\omega{x})],\omega\in{R} f(x)=ω=0+[aωcos(ωx)+bωsin(ωx)],ωR

周期函数的表达式可以看作这个表达式的离散形式:
f ( x ) = ∑ n = 0 + ∞ [ a n cos ⁡ ( n ( 2 π T ) x ) + b n sin ⁡ ( n ( 2 π T ) x ) ] f(x)={\sum_{n=0}^{+\infty}}[a_{n}{\cos}(n(\frac{2{\pi}}{T})x)+b_{n}{\sin}(n(\frac{2{\pi}}{T})x)] f(x)=n=0+[ancos(n(T2π)x)+bnsin(n(T2π)x)]

又根据前面总结的 a n , b n , a 0 a_n,b_n,a_0 an,bn,a0的计算表达式:
a n = 2 T ∫ − T 2 + T 2 f ( x ) cos ⁡ ( n ( 2 π T ) x ) d x , n ≠ 0 {a_n}=\frac{2}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x){\cos}(n(\frac{2\pi}{T})x)dx,n{\neq}0 an=T22T+2Tf(x)cos(n(T2π)x)dx,n=0
b n = 2 T ∫ − T 2 + T 2 f ( x ) sin ⁡ ( n ( 2 π T ) x ) d x {b_n}=\frac{2}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x){\sin}(n(\frac{2\pi}{T})x)dx bn=T22T+2Tf(x)sin(n(T2π)x)dx
a 0 = 1 T ∫ − T 2 + T 2 f ( x ) d x {a_0}=\frac{1}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x)dx a0=T12T+2Tf(x)dx
可以推出此时 a ω , b ω a_\omega,b_\omega aω,bω的表达式为:
a ω = 2 + ∞ ∗ 2 ∫ − ∞ + ∞ f ( x ) cos ⁡ ( ω x ) d x a_\omega=\frac{2}{+\infty*2}\int_{-\infty}^{+\infty}f(x){\cos}(\omega{x})dx aω=+22+f(x)cos(ωx)dx

b ω = 2 + ∞ ∗ 2 ∫ − ∞ + ∞ f ( x ) sin ⁡ ( ω x ) d x b_\omega=\frac{2}{+\infty*2}\int_{-\infty}^{+\infty}f(x){\sin}(\omega{x})dx bω=+22+f(x)sin(ωx)dx

此时 a ω a_\omega aω b ω b_\omega bω十分小,因为计算式前面乘了一个因子 2 + ∞ ∗ 2 \frac{2}{+\infty*2} +22,所以它近似为0,因此有必要修改一下表达式,同样以周期函数的三角表达式为例子来说明变化步骤。
f ( x ) = ∑ n = 0 + ∞ [ a n cos ⁡ ( n ( 2 π T ) x ) + b n sin ⁡ ( n ( 2 π T ) x ) ] f(x)={\sum_{n=0}^{+\infty}}[a_{n}{\cos}(n(\frac{2{\pi}}{T})x)+b_{n}{\sin}(n(\frac{2{\pi}}{T})x)] f(x)=n=0+[ancos(n(T2π)x)+bnsin(n(T2π)x)]

我们可以乘上一项除以一项。对于选择的逼近函数 cos ⁡ ( n ( 2 π T ) x ) , sin ⁡ ( n ( 2 π T ) x ) {\cos}(n(\frac{2{\pi}}{T})x),{\sin}(n(\frac{2{\pi}}{T})x) cos(n(T2π)x),sin(n(T2π)x)来说,不同函数之间的不同就是频率的不同,而频率之间的差总是基频率 2 π T \frac{2\pi}{T} T2π的整数倍。所以我们可以定义: Δ ω = 2 π T {\Delta}\omega=\frac{2\pi}{T} Δω=T2π,因此有:
f ( x ) = ∑ n = 0 + ∞ T 2 π [ a n cos ⁡ ( n ( 2 π T ) x ) + b n sin ⁡ ( n ( 2 π T ) x ) ] Δ ω f(x)={\sum_{n=0}^{+\infty}}\frac{T}{2\pi}[a_{n}{\cos}(n(\frac{2{\pi}}{T})x)+b_{n}{\sin}(n(\frac{2{\pi}}{T})x)]{\Delta}{\omega} f(x)=n=0+2πT[ancos(n(T2π)x)+bnsin(n(T2π)x)]Δω

T T T带入就有:
f ( x ) = ∑ n = 0 + ∞ 1 2 π [ T a n cos ⁡ ( n ( 2 π T ) x ) + T b n sin ⁡ ( n ( 2 π T ) x ) ] Δ ω f(x)={\sum_{n=0}^{+\infty}}\frac{1}{2\pi}[Ta_{n}{\cos}(n(\frac{2{\pi}}{T})x)+Tb_{n}{\sin}(n(\frac{2{\pi}}{T})x)]{\Delta}{\omega} f(x)=n=0+2π1[Tancos(n(T2π)x)+Tbnsin(n(T2π)x)]Δω

而回到之前计算 a n , b n , a 0 a_n,b_n,a_0 an,bn,a0的计算公式,我们可以发现:
T a n = 2 ∫ − T 2 + T 2 f ( x ) cos ⁡ ( n ( 2 π T ) x ) d x , n ≠ 0 T{a_n}=2\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x){\cos}(n(\frac{2\pi}{T})x)dx,n{\neq}0 Tan=22T+2Tf(x)cos(n(T2π)x)dx,n=0

T b n = 2 ∫ − T 2 + T 2 f ( x ) sin ⁡ ( n ( 2 π T ) x ) d x T{b_n}=2\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x){\sin}(n(\frac{2\pi}{T})x)dx Tbn=22T+2Tf(x)sin(n(T2π)x)dx

T a 0 = ∫ − T 2 + T 2 f ( x ) d x T{a_0}=\int_{-\frac{T}{2}}^{+\frac{T}{2}}f(x)dx Ta0=2T+2Tf(x)dx

此时,积分值可能不会为0,因为把前面的分子左右两边同乘消去了。由于周期 T T T很大,所以 n ( 2 π T ) = n Δ ω = ω n(\frac{2\pi}{T})=n{\Delta}{\omega}=\omega n(T2π)=nΔω=ω。所以对于非周期函数来说,记 A ω , B ω , A 0 A_\omega,B_\omega,A_0 Aω,Bω,A0如下所示:
A ω = T a n = 2 ∫ − ∞ + ∞ f ( x ) cos ⁡ ( ω x ) d x , n ≠ 0 A_\omega=T{a_n}=2\int_{-\infty}^{+\infty}f(x){\cos}({\omega}x)dx,n{\neq}0 Aω=Tan=2+f(x)cos(ωx)dx,n=0

B ω = T b n = 2 ∫ − ∞ + ∞ f ( x ) sin ⁡ ( ω x ) d x B_\omega=T{b_n}=2\int_{-\infty}^{+\infty}f(x){\sin}({\omega}x)dx Bω=Tbn=2+f(x)sin(ωx)dx

A 0 = T a 0 = ∫ − ∞ + ∞ f ( x ) d x A_0=T{a_0}=\int_{-\infty}^{+\infty}f(x)dx A0=Ta0=+f(x)dx

再根据周期函数此时的表达式:
f ( x ) = ∑ n = 0 + ∞ 1 2 π [ T a n cos ⁡ ( n ( 2 π T ) x ) + T b n sin ⁡ ( n ( 2 π T ) x ) ] Δ ω f(x)={\sum_{n=0}^{+\infty}}\frac{1}{2\pi}[Ta_{n}{\cos}(n(\frac{2{\pi}}{T})x)+Tb_{n}{\sin}(n(\frac{2{\pi}}{T})x)]{\Delta}{\omega} f(x)=n=0+2π1[Tancos(n(T2π)x)+Tbnsin(n(T2π)x)]Δω

可以类推出非周期函数的表达式 f ( x ) f(x) f(x)为:
f ( x ) = ∫ 0 + ∞ 1 2 π [ A ω cos ⁡ ( ω x ) + B ω sin ⁡ ( ω x ) ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[A_{\omega}{\cos}({\omega}x)+B_{\omega}{\sin}({\omega}x)]d{\omega} f(x)=0+2π1[Aωcos(ωx)+Bωsin(ωx)]dω

以上这个公式是重要的,因为他是后面仿真实验的依据。把上面的公式看作求面积,可能有助于理解我下面的粗粒度的解释。我们可以给定一个 d ω d\omega dω作为粗粒度的近似逼近,将整个积分 ω \omega ω区间通过这个 d ω d\omega dω划分为很多个小区间 Δ ω \Delta\omega Δω,也就是:
f ( x ) = ∑ n = 0 + ∞ 1 2 π [ A n Δ ω cos ⁡ ( n Δ ω x ) + B n Δ ω sin ⁡ ( n Δ ω x ) ] Δ ω f(x)={\sum_{n=0}^{+\infty}}\frac{1}{2\pi}[A_{n\Delta\omega}{\cos}({n\Delta\omega}x)+B_{n\Delta\omega}{\sin}({n\Delta\omega}x)]\Delta{\omega} f(x)=n=0+2π1[AnΔωcos(nΔωx)+BnΔωsin(nΔωx)]Δω

在代码中我选择的小粒度为: 0.2 0.2 0.2。同时由于我们不能通过编程计算出无穷多个函数相加,所以只能进行截断,选择前M对三角函数来进行近似。
f ( x ) = ∑ n = 0 M 1 2 π [ A n Δ ω cos ⁡ ( n Δ ω x ) + B n Δ ω sin ⁡ ( n Δ ω x ) ] Δ ω f(x)={\sum_{n=0}^{M}}\frac{1}{2\pi}[A_{n\Delta\omega}{\cos}({n\Delta\omega}x)+B_{n\Delta\omega}{\sin}({n\Delta\omega}x)]\Delta{\omega} f(x)=n=0M2π1[AnΔωcos(nΔωx)+BnΔωsin(nΔωx)]Δω

在下面的代码中,我选择了 M = 3 , 9 , 29 M=3,9,29 M=3,9,29,选择使用前 8 , 20 , 60 8,20,60 8,20,60个函数( sin ⁡ ( 0.2 ∗ x ) \sin(0.2*x) sin(0.2x) cos ⁡ ( 0.2 ∗ x ) \cos(0.2*x) cos(0.2x)算两个)来近似原函数。
仿真结果如下所示:

import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
if __name__=='__main__':
    '''
    利用三角函数仿真1/(x^2+1)函数
    由于1/(x^2+1)是非周期函数,所以需要所有的三角函数来近似才可以。
    而我们显然不可能求出所有三角函数的和,因此粗粒度的近似就是选取适当的dw来利用一些等频率差的三角函数来近似。
    同时需要选择有限个数的的三角函数来近似,也就是需要截断。
    又根据三角函数级数的表达式可以发现需要求积分值求取系数。而根据1/(x^2+1)函数的特征,两端数值很小,我们可以选择有限的区间作为积分区间。
    '''
    #选择频率差为0.2
    dw=0.2
    #选择4对正余弦三角函数
    #积分函数选择:sp.integrate(函数,(变量,下限,上限))
    #变量函数:sp.symbols,积分上界:50,积分下界:-50
    upload=50
    download=-50
    x=sp.symbols("x")
    source_fun=1/(x**2+1)
    #逼近函数的范围:[-20,20]
    xlimit=np.linspace(-20,20,4001)
    sum=np.linspace(0,0,4001)
    for i in range(4):
        atemp=2*float(sp.integrate(source_fun*sp.cos(i*dw*x),(x,download,upload)))
        btemp=2*float(sp.integrate(source_fun*sp.sin(i*dw*x),(x,download,upload)))
        sum=sum+(atemp*np.cos(i*dw*xlimit)+btemp*np.sin(i*dw*xlimit))/2/np.pi*dw
    #原函数的范围为:[-10,10]
    xorign=np.linspace(-10,10,2001)
    plt.plot(xorign,np.exp(-np.abs(xorign)),label='orign')
    plt.plot(xlimit,sum,label='simul')
    plt.legend()
    plt.show()

仿真结果如下所示:
仿真结果san01
从图中可以看出仿真结果很差,但是我们仅仅用了八个三角函数来近似就可以做到这种逼近程度,如果多加一些函数,势必逼近效果会更加好。当把程序中的range(4)改为range(10)以后,逼近结果为:
仿真结果02
看着是不是有点意思了?interesting!再加大力度,修改range(10)range(30),得到结果为:
仿真结果03
更光滑更相似了。当然除了前面等间隔的离散,也有不等间隔的离散。

接下来是傅里叶变换的推导。
接下来这部分是推错的,不感兴趣的可以跳过:下一个黄色标志后是正确的
当我们考虑把 − ω -\omega ω考虑进来也就是:
f ( x ) = ∫ 0 + ∞ 1 2 π [ A ω ( cos ⁡ ( ω x ) + cos ⁡ ( − ω x ) ) 2 + B ω ( sin ⁡ ( ω x ) − sin ⁡ ( − ω x ) ) 2 ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[A_{\omega}\frac{({\cos}({\omega}x)+{\cos}(-{\omega}x))}{2}+B_{\omega}\frac{({\sin}({\omega}x)-{\sin}(-{\omega}x))}{2}]d{\omega} f(x)=0+2π1[Aω2(cos(ωx)+cos(ωx))+Bω2(sin(ωx)sin(ωx))]dω

也就是:
f ( x ) = ∫ 0 + ∞ 1 2 π [ A ω 2 cos ⁡ ω x + B ω 2 sin ⁡ ω x ] d ω + ∫ 0 + ∞ 1 2 π [ A ω 2 cos ⁡ ( − ω x ) − B ω 2 sin ⁡ ( − ω x ) ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[\frac{A_{\omega}}{2}\cos{{\omega}x}+\frac{B_{\omega}}{2}\sin{{\omega}x}]d{\omega}+{\int_{0}^{+\infty}}\frac{1}{2\pi}[\frac{A_{\omega}}{2}\cos{(-{\omega}x)}-\frac{B_{\omega}}{2}\sin{(-{\omega}x})]d{\omega} f(x)=0+2π1[2Aωcosωx+2Bωsinωx]dω+0+2π1[2Aωcos(ωx)2Bωsin(ωx)]dω

对于后半部分等于:
f r i g h t = ∫ − ∞ 0 1 2 π [ A ω 2 cos ⁡ ( ω x ) − B ω 2 sin ⁡ ( ω x ) ] d ω f_{right}={\int_{-\infty}^{0}}\frac{1}{2\pi}[\frac{A_{\omega}}{2}\cos{({\omega}x)}-\frac{B_{\omega}}{2}\sin{({\omega}x})]d{\omega} fright=02π1[2Aωcos(ωx)2Bωsin(ωx)]dω

所以对于非周期函数的三角函数展开为:
f ( x ) = ∫ 0 + ∞ 1 2 π [ A ω 2 cos ⁡ ω x + B ω 2 sin ⁡ ω x ] d ω + ∫ − ∞ 0 1 2 π [ A ω 2 cos ⁡ ( ω x ) − B ω 2 sin ⁡ ( ω x ) ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[\frac{A_{\omega}}{2}\cos{{\omega}x}+\frac{B_{\omega}}{2}\sin{{\omega}x}]d{\omega}+{\int_{-\infty}^{0}}\frac{1}{2\pi}[\frac{A_{\omega}}{2}\cos{({\omega}x)}-\frac{B_{\omega}}{2}\sin{({\omega}x})]d{\omega} f(x)=0+2π1[2Aωcosωx+2Bωsinωx]dω+02π1[2Aωcos(ωx)2Bωsin(ωx)]dω

前面错误,后面正确
前面分解错了,我再分解一遍:
f ( x ) = ∫ 0 + ∞ 1 2 π [ ( A ω + ȷ B ω 2 + A ω − ȷ B ω 2 ) cos ⁡ ( ω x ) − ȷ ( A ω + ȷ B ω 2 − A ω − ȷ B ω 2 ) sin ⁡ ( ω x ) ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[(\frac{A_{\omega} +{\jmath}B_{\omega}}{2}+ \frac{A_{\omega} -{\jmath}B_{\omega}}{2}){\cos}({\omega}x)-\jmath(\frac{A_{\omega} +{\jmath}B_{\omega}}{2}- \frac{A_{\omega} -{\jmath}B_{\omega}}{2}){\sin}({\omega}x)]d{\omega} f(x)=0+2π1[(2Aω+Bω+2AωBω)cos(ωx)(2Aω+Bω2AωBω)sin(ωx)]dω

f ( x ) = ∫ 0 + ∞ 1 2 π { A ω + ȷ B ω 2 [ cos ⁡ ( ω x ) − ȷ sin ⁡ ( ω x ) ] + A ω − ȷ B ω 2 [ cos ⁡ ( ω x ) + ȷ sin ⁡ ( ω x ) ] } d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}\{\frac{A_{\omega} +{\jmath}B_{\omega}}{2}[{\cos}({\omega}x)-\jmath\sin({\omega}x)]+\frac{A_{\omega} -{\jmath}B_{\omega}}{2}[{\cos}({\omega}x)+\jmath{\sin}({\omega}x)]\}d{\omega} f(x)=0+2π1{2Aω+Bω[cos(ωx)sin(ωx)]+2AωBω[cos(ωx)+sin(ωx)]}dω

f ( x ) = ∫ 0 + ∞ 1 2 π [ A ω + ȷ B ω 2 e − ȷ ω x + A ω − ȷ B ω 2 e ȷ ω x ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[{\frac{A_{\omega} +{\jmath}B_{\omega}}{2}}e^{-{\jmath}{\omega}x}+{\frac{A_{\omega} -{\jmath}B_{\omega}}{2}}e^{{\jmath}{\omega}x}]d\omega f(x)=0+2π1[2Aω+Bωeωx+2AωBωeωx]dω

我们可以构造出一个函数使得:
F ( ω ) = A ω − ȷ B ω 2 F(\omega)=\frac{A_{\omega} -{\jmath}B_{\omega}}{2} F(ω)=2AωBω

这样的话通过观察 A ω , B ω A_{\omega} ,B_{\omega} Aω,Bω的计算公式就可以发现,天然的就有:
F ( − ω ) = A − ω − ȷ B − ω 2 = A ω + ȷ B ω 2 F(-\omega)=\frac{A_{-\omega} -{\jmath}B_{-\omega}}{2}=\frac{A_{\omega} +{\jmath}B_{\omega}}{2} F(ω)=2AωBω=2Aω+Bω

于是有:
f ( x ) = ∫ 0 + ∞ 1 2 π [ F ( ω ) e ȷ ω x + F ( − ω ) e − ȷ ω x ] d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}[F(\omega)e^{{\jmath}{\omega}x}+F(-\omega)e^{-{\jmath}{\omega}x}]d\omega f(x)=0+2π1[F(ω)eωx+F(ω)eωx]dω

于是后半部分可以化为:
f ( x ) = ∫ 0 + ∞ 1 2 π F ( ω ) e ȷ ω x d ω + ∫ 0 + ∞ 1 2 π F ( − ω ) e − ȷ ω x d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}F(\omega)e^{{\jmath}{\omega}x}d\omega+{\int_{0}^{+\infty}}\frac{1}{2\pi}F(-\omega)e^{-{\jmath}{\omega}x}d\omega f(x)=0+2π1F(ω)eωxdω+0+2π1F(ω)eωxdω

通过对后半部分进行负变量替换 t = − ω t=-\omega t=ω再令 ω = t \omega=t ω=t可以得到:
f ( x ) = ∫ 0 + ∞ 1 2 π F ( ω ) e ȷ ω x d ω + ∫ − ∞ 0 1 2 π F ( ω ) e ȷ ω x d ω f(x)={\int_{0}^{+\infty}}\frac{1}{2\pi}F(\omega)e^{{\jmath}{\omega}x}d\omega+{\int_{-\infty}^{0}}\frac{1}{2\pi}F(\omega)e^{{\jmath}{\omega}x}d\omega f(x)=0+2π1F(ω)eωxdω+02π1F(ω)eωxdω

将两部分合并可以得到:
f ( x ) = ∫ − ∞ + ∞ 1 2 π F ( ω ) e ȷ ω x d ω f(x)={\int_{-\infty}^{+\infty}}\frac{1}{2\pi}F(\omega)e^{{\jmath}{\omega}x}d\omega f(x)=+2π1F(ω)eωxdω

此时系数 F ( ω ) F(\omega) F(ω)的计算公式为:
F ( ω ) = A ω − ȷ B ω 2 = ∫ − ∞ + ∞ f ( x ) [ cos ⁡ ( ω x ) − ȷ sin ⁡ ( ω x ) ] d x F(\omega)=\frac{A_{\omega} -{\jmath}B_{\omega}}{2}=\int_{-\infty}^{+\infty}f(x)[\cos(\omega{x})-\jmath\sin(\omega{x})]dx F(ω)=2AωBω=+f(x)[cos(ωx)sin(ωx)]dx

可以把后半部分合并:
F ( ω ) = ∫ − ∞ + ∞ f ( x ) [ cos ⁡ ( ω x ) − ȷ sin ⁡ ( ω x ) ] d x = ∫ − ∞ + ∞ f ( x ) e − ȷ ω x d x F(\omega)=\int_{-\infty}^{+\infty}f(x)[\cos(\omega{x})-\jmath\sin(\omega{x})]dx=\int_{-\infty}^{+\infty}f(x)e^{-\jmath{\omega}x}dx F(ω)=+f(x)[cos(ωx)sin(ωx)]dx=+f(x)eωxdx

进而可以得到:
F ( ω ) = ∫ − ∞ + ∞ f ( x ) e − ȷ ω x d x F(\omega)=\int_{-\infty}^{+\infty}f(x)e^{-\jmath{\omega}x}dx F(ω)=+f(x)eωxdx

所以我们可以得到傅里叶变换对 f ( x ) f(x) f(x) F ( ω ) F(\omega) F(ω)之间的关系:
f ( x ) = ∫ − ∞ + ∞ 1 2 π F ( ω ) e ȷ ω x d ω f(x)={\int_{-\infty}^{+\infty}}\frac{1}{2\pi}F(\omega)e^{{\jmath}{\omega}x}d\omega f(x)=+2π1F(ω)eωxdω

F ( ω ) F(\omega) F(ω) f ( x ) f(x) f(x)之间的关系:
F ( ω ) = ∫ − ∞ + ∞ f ( x ) e − ȷ ω x d x F(\omega)=\int_{-\infty}^{+\infty}f(x)e^{-\jmath{\omega}x}dx F(ω)=+f(x)eωxdx

于是得到对于任意函数的离散粗粒度三角函数类的表示方法:
f ( x ) = ∑ n = − ∞ + ∞ a n e ȷ ( n Δ ω ) x Δ ω f(x)=\sum_{n=-\infty}^{+\infty}{a_n}e^{\jmath{(n\Delta\omega)}x}\Delta\omega f(x)=n=+ane(nΔω)xΔω

其中 a n a_n an的表达式如下所示:
a n = 1 2 π F ( n Δ ω ) = 1 2 π ∫ − ∞ + ∞ f ( x ) e − ȷ ( n Δ ω ) x d x a_n=\frac{1}{2\pi}F(n\Delta\omega)=\frac{1}{2\pi}\int_{-\infty}^{+\infty}f(x)e^{-\jmath({n\Delta\omega})x}dx an=2π1F(nΔω)=2π1+f(x)e(nΔω)xdx

其中根据不同的 Δ ω \Delta\omega Δω设置,可以实现对 f ( x ) f(x) f(x)不同粒度的近似,当 Δ ω \Delta\omega Δω设置的比较小,近似结果就比较精确。当 Δ ω \Delta\omega Δω设置的比较大,对原函数的近似结果就比较差。这个方法不太好用,因为涉及到虚数,所以建议用前面的仿真进行。

二元三角函数的定义是什么?是 sin ⁡ ( x 1 − x 10 ) × sin ⁡ ( x 2 − x 20 ) \sin(x_1-x_{10})\times\sin(x_2-x_{20}) sin(x1x10)×sin(x2x20)还是 sin ⁡ ( ( x 1 − x 10 ) × ( x 2 − x 20 ) ) \sin((x_1-x_{10})\times(x_2-x_{20})) sin((x1x10)×(x2x20))
参考二元对数函数 ln ⁡ ( x 1 ) × ln ⁡ ( x 2 ) \ln(x_1)\times\ln(x_2) ln(x1)×ln(x2) ln ⁡ ( x 1 × x 2 ) \ln(x_1\times{x_2}) ln(x1×x2)可以发现,后一项是对数和形式。所以我们假定:二元对数函数是: ln ⁡ ( x 1 ) × ln ⁡ ( x 2 ) \ln(x_1)\times\ln(x_2) ln(x1)×ln(x2)形式,也就是说所有初等函数的二元形式都是一元形式的乘积。比如:幂函数的二元形式就是: x 1 n 1 x 2 n 2 {x_1}^{n_1}{x_2}^{n_2} x1n1x2n2,所以二元单项式为: a n 1 n 2 x 1 n 1 x 2 n 2 a_{n_1n_2}{x_1}^{n_1}{x_2}^{n_2} an1n2x1n1x2n2
二元三角函数为: cos ⁡ ( ω 1 x 1 ) sin ⁡ ( ω 2 x 2 ) \cos(\omega_1x_1)\sin(\omega_2x_2) cos(ω1x1)sin(ω2x2) cos ⁡ ( ω 1 x 1 ) cos ⁡ ( ω 2 x 2 ) \cos(\omega_1x_1)\cos(\omega_2x_2) cos(ω1x1)cos(ω2x2) sin ⁡ ( ω 1 x 1 ) sin ⁡ ( ω 2 x 2 ) \sin(\omega_1x_1)\sin(\omega_2x_2) sin(ω1x1)sin(ω2x2) sin ⁡ ( ω 1 x 1 ) cos ⁡ ( ω 2 x 2 ) \sin(\omega_1x_1)\cos(\omega_2x_2) sin(ω1x1)cos(ω2x2)
二元函数的近似为:
f ( x ) = ∫ 0 + ∞ 1 4 π 2 [ A ω 1 ω 2 cos ⁡ ( ω 1 x 1 ) sin ⁡ ( ω 2 x 2 ) + B ω 1 ω 2 cos ⁡ ( ω 1 x 1 ) cos ⁡ ( ω 2 x 2 ) + C ω 1 ω 2 sin ⁡ ( ω 1 x 1 ) sin ⁡ ( ω 2 x 2 ) + D ω 1 ω 2 sin ⁡ ( ω 1 x 1 ) cos ⁡ ( ω 2 x 2 ) ] d ω 1 d ω 2 f(x)={\int_{0}^{+\infty}}\frac{1}{4\pi^2}[A_{\omega_1\omega_2}\cos(\omega_1x_1)\sin(\omega_2x_2)+B_{\omega_1\omega_2}\cos(\omega_1x_1)\cos(\omega_2x_2)+C_{\omega_1\omega_2}\sin(\omega_1x_1)\sin(\omega_2x_2)+D_{\omega_1\omega_2}\sin(\omega_1x_1)\cos(\omega_2x_2)]d\omega_1d\omega_2 f(x)=0+4π21[Aω1ω2cos(ω1x1)sin(ω2x2)+Bω1ω2cos(ω1x1)cos(ω2x2)+Cω1ω2sin(ω1x1)sin(ω2x2)+Dω1ω2sin(ω1x1)cos(ω2x2)]dω1dω2

A ω 1 ω 2 = 4 ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x ) cos ⁡ ( ω 1 x 1 ) sin ⁡ ( ω 2 x 2 ) d x 1 d x 2 A_{\omega_1\omega_2}=4\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(x)\cos(\omega_1x_1)\sin(\omega_2x_2)dx_1dx_2 Aω1ω2=4++f(x)cos(ω1x1)sin(ω2x2)dx1dx2

B ω 1 ω 2 = 4 ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x ) cos ⁡ ( ω 1 x 1 ) cos ⁡ ( ω 2 x 2 ) d x 1 d x 2 B_{\omega_1\omega_2}=4\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(x)\cos(\omega_1x_1)\cos(\omega_2x_2)dx_1dx_2 Bω1ω2=4++f(x)cos(ω1x1)cos(ω2x2)dx1dx2

C ω 1 ω 2 = 4 ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x ) sin ⁡ ( ω 1 x 1 ) sin ⁡ ( ω 2 x 2 ) d x 1 d x 2 C_{\omega_1\omega_2}=4\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(x)\sin(\omega_1x_1)\sin(\omega_2x_2)dx_1dx_2 Cω1ω2=4++f(x)sin(ω1x1)sin(ω2x2)dx1dx2

D ω 1 ω 2 = 4 ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x ) sin ⁡ ( ω 1 x 1 ) cos ⁡ ( ω 2 x 2 ) ] d x 1 d x 2 D_{\omega_1\omega_2}=4\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(x)\sin(\omega_1x_1)\cos(\omega_2x_2)]dx_1dx_2 Dω1ω2=4++f(x)sin(ω1x1)cos(ω2x2)]dx1dx2
可以看到,当采用基本函数的乘法来表示多元函数时,得到的表达式依旧很简洁,但是简洁不是理论正确与否的证据,应该要验证。其实也可以通过理论证明
首先三角函数最重要的性质就是周期性,所以我们先讨论二元周期函数: f ( x 1 , x 2 ) = f ( x 1 + T 1 , x 2 + T 2 ) f(x_1,x_2)=f(x_1+T_1,x_2+T_2) f(x1,x2)=f(x1+T1,x2+T2),可以看出 x 1 x_1 x1方向上周期为 T 1 T_1 T1 x 2 x_2 x2方向上周期为 T 2 T_2 T2。然后仿照一元函数的分析过程可以发现上述表达式在二元三角函数为 sin ⁡ ( x 1 − x 10 ) × sin ⁡ ( x 2 − x 20 ) \sin(x_1-x_{10})\times\sin(x_2-x_{20}) sin(x1x10)×sin(x2x20)这种形式的前提下是成立的。我们做实验验证一下。
被仿真函数为: f ( x ) = 1 x 1 2 + x 2 2 + 1 f(x)=\frac{1}{{x_1}^2+{x_2}^2+1} f(x)=x12+x22+11,真实函数的范围为: x 1 ∈ [ − 2 , 2 ] , x 2 ∈ [ − 2 , 2 ] x_1\in[-2,2],x_2\in[-2,2] x1[2,2],x2[2,2]
参考链接:【sympy】用python的库 sympy 求积分
函数形状为:
被仿真函数形状
为了便于查看仿真结果,修改原函数范围与仿真函数范围如下所示。代码如下:

import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
if __name__=='__main__':
    '''
    利用二元三角函数仿真1/({x1}^2+{x2}^2+1)函数
    由于1/({x1}^2+{x2}^2+1)是非周期函数,所以需要所有的三角函数来近似才可以。
    而我们显然不可能求出所有三角函数的和,因此粗粒度的近似就是选取适当的dw来利用一些等频率差的三角函数来近似。
    同时需要选择有限个数的的三角函数来近似,也就是需要截断。
    又根据三角函数级数的表达式可以发现需要求积分值求取系数。而根据1/({x1}^2+{x2}^2+1)函数的特征,两端数值很小,我们可以选择有限的区间作为积分区间。
    '''
    #选择频率差为0.2,0.2
    dw1=0.2
    dw2=0.2
    #积分函数选择:sp.integrate(函数,(变量,下限,上限))
    #变量函数:sp.symbols,积分上界:50,积分下界:-50
    upload1=50
    download1=-50
    upload2=50
    download2=-50
    x1=sp.symbols("x1")
    x2=sp.symbols("x2")
    source_fun=1/(x1**2+x2**2+1)
    #仿真函数的范围:[-5,5],[-5,5]
    x1limit=np.linspace(-1.5,1.5,31)
    x2limit=np.linspace(-1.5,1.5,31)
    X1,X2=np.meshgrid(x1limit,x2limit)
    sum=np.zeros(np.shape(X1))
    for i in range(4):
        for j in range(4):
            atemp=4*float(sp.integrate(source_fun*sp.cos(i*dw1*x1)*sp.sin(j*dw2*x2),(x1,download1,upload1),(x2,download2,upload2)))
            btemp=4*float(sp.integrate(source_fun*sp.cos(i*dw1*x1)*sp.cos(j*dw2*x2),(x1,download1,upload1),(x2,download2,upload2)))
            ctemp=4*float(sp.integrate(source_fun*sp.sin(i*dw1*x1)*sp.sin(j*dw2*x2),(x1,download1,upload1),(x2,download2,upload2)))
            dtemp=4*float(sp.integrate(source_fun*sp.sin(i*dw1*x1)*sp.cos(j*dw2*x2),(x1,download1,upload1),(x2,download2,upload2)))
            sum=sum+(atemp*np.cos(i*dw1*X1)*np.sin(j*dw2*X2)+btemp*np.cos(i*dw1*X1)*np.cos(j*dw2*X2)+ctemp*np.sin(i*dw1*X1)*np.sin(j*dw2*X2)+dtemp*np.sin(i*dw1*X1)*np.cos(j*dw2*X2))/4/np.pi/np.pi*dw1*dw2
    #原函数的范围为:[-2,2],[-2,2]
    x1orign=np.linspace(-1,1,21)
    x2orign=np.linspace(-1,1,21)
    X1O,X2O=np.meshgrid(x1orign,x2orign)
    fig=plt.figure()
    ax=plt.axes(projection='3d')
    ZO=1/(X1O**2+X2O**2+1)
    ax.plot_surface(X1,X2,sum,cmap='rainbow')
    plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值