前言
结构建模是在分析内部机理的情况下划分出结构进行建模的。而黑箱建模是在不清楚内部机理的情况下对系统进行建模,此时无法分析结构,可以根据输入输出建立系统模型,进行预测,比如估计输入所对应的输出。
机器学习的意义
机器学习就是从数据中学习出一个函数来对数据进行分类。有点类似于黑箱建模。此时需要关注选取什么函数类以及函数中的参数如何估计。
输入输出建模
针对输入输出对系统进行建模,就是用函数去对系统进行模拟。要解决两个问题,选择什么种类的函数,函数的系数有哪些及怎么确定。
函数种类:
- 连续函数:常见的有三角函数类,多项式函数类。
- 不连续函数:常见的有阶跃函数类,脉冲函数类。
三角函数类
三角函数类就是由各种三角函数乘以系数求和所得到的。三角函数都是具有特定周期的周期函数。
我们注意到只有用相同周期的这些函数来叠加生成目标函数才不会影响函数周期,否则会改变函数周期变为周期的最小公倍数。所以对于一个周期函数来说,要想用其他函数去近似他,首要的就是其他函数必须也是相同周期的。否则无法达到相同周期,也就无法生成这个周期函数。
打个比方,我有一个函数周期为
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
n∈Z。这就引出了接下来的周期函数的三角函数展开。
最常见的三角函数类就是周期函数的三角函数展开,也是同样的道理,用一堆同样周期的函数通过系数加权来实现对周期函数的逼近:
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=T2∫−2T+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=T1∫−2T+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=T2∫−2T+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=T2∫−2T+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=T2∫−2T+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=T1∫−2T+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=2∫−2T+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=2∫−2T+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=0∑M2π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.2∗x)与
cos
(
0.2
∗
x
)
\cos(0.2*x)
cos(0.2∗x)算两个)来近似原函数。
仿真结果如下所示:
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()
仿真结果如下所示:
从图中可以看出仿真结果很差,但是我们仅仅用了八个三角函数来近似就可以做到这种逼近程度,如果多加一些函数,势必逼近效果会更加好。当把程序中的range(4)
改为range(10)
以后,逼近结果为:
看着是不是有点意思了?interesting!再加大力度,修改range(10)
为range(30)
,得到结果为:
更光滑更相似了。当然除了前面等间隔的离散,也有不等间隔的离散。
接下来是傅里叶变换的推导。
接下来这部分是推错的,不感兴趣的可以跳过:下一个黄色标志后是正确的
当我们考虑把
−
ω
-\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
Δω设置的比较大,对原函数的近似结果就比较差。这个方法不太好用,因为涉及到虚数,所以建议用前面的仿真进行。
从一元到多元展开参考:三角函数类总结
多项式函数
多项式函数类就是由多项式所构成的函数。对于一元函数来说,用一元多项式逼近的常见表达式为:
f
(
x
)
=
a
0
+
a
1
(
x
−
x
0
)
+
a
2
(
x
−
x
0
)
2
+
a
3
(
x
−
x
0
)
3
+
⋯
+
a
n
(
x
−
x
0
)
n
+
⋯
f(x)=a_0+a_1(x-x_0)+a_2(x-x_0)^2+a_3(x-x_0)^3+\cdots+a_n(x-x_0)^n+\cdots
f(x)=a0+a1(x−x0)+a2(x−x0)2+a3(x−x0)3+⋯+an(x−x0)n+⋯
其中根据维尔斯特拉斯定理和泰勒定理,我们可以得到
a
n
a_n
an的表达式:
a
n
=
f
(
n
)
(
x
0
)
n
!
,
n
=
0
,
1
,
2
,
⋯
,
n
,
⋯
a_n=\frac{f^{(n)}(x_0)}{n!},n=0,1,2,\cdots,n,\cdots
an=n!f(n)(x0),n=0,1,2,⋯,n,⋯
然而实际情况中,我们并不一定能知道
f
(
x
)
f(x)
f(x)的函数形状,所以也就无法求出
f
(
x
)
f(x)
f(x)的导数。前面的估计也就无法实施。这时候就需要使用最小二乘估计去估计模型的参数。以多元多项式函数为例:
对于多元函数,多元函数多项式为:
f
(
x
∣
θ
)
=
a
0
+
a
1
x
1
+
a
2
x
2
+
⋯
+
a
n
x
n
+
a
11
x
1
2
+
a
12
x
1
x
2
+
⋯
+
a
n
n
x
n
2
f(x|\theta)=a_0+a_{1}x_1+a_{2}x_2+\cdots+a_nx_n+a_{11}x_1^2+a_{12}x_1x_2+\cdots+a_{nn}x_n^2
f(x∣θ)=a0+a1x1+a2x2+⋯+anxn+a11x12+a12x1x2+⋯+annxn2
其中函数参数包括
a
0
,
a
1
,
⋯
,
a
n
,
a
11
,
⋯
,
a
n
n
a_0,a_1,\cdots,a_n,a_{11},\cdots,a_{nn}
a0,a1,⋯,an,a11,⋯,ann。此时我们使用最小化估计误差的方法来求出上述参数。此时,函数
f
(
x
)
f(x)
f(x)的估计表达式用向量乘法可以表示为:
f
(
x
)
=
[
a
0
,
a
1
,
⋯
,
a
n
,
a
11
,
⋯
,
a
n
n
]
∗
[
1
,
x
1
,
⋯
,
x
n
,
x
1
x
1
,
⋯
,
x
n
x
n
]
T
f(x)=[a_0,a_1,\cdots,a_n,a_{11},\cdots,a_{nn}]*[1,x_1,\cdots,x_n,x_1x_1,\cdots,x_nx_n]^T
f(x)=[a0,a1,⋯,an,a11,⋯,ann]∗[1,x1,⋯,xn,x1x1,⋯,xnxn]T
记前面的参数行向量为
Θ
\Theta
Θ,后面的观测列向量为
ψ
(
x
)
\psi(x)
ψ(x)。那么就有:
f
(
x
)
=
Θ
∗
ψ
(
x
)
f(x)=\Theta*\psi(x)
f(x)=Θ∗ψ(x)
此时对于
m
m
m个样本的估计误差为,其中
X
i
X_i
Xi为第
i
i
i个样本所对应的
[
x
1
,
x
2
,
⋯
,
x
n
]
[x_1,x_2,\cdots,x_n]
[x1,x2,⋯,xn],
Y
i
Y_i
Yi为第
i
i
i个样本的实际值:
E
r
r
o
r
=
∑
i
=
1
m
[
Y
i
−
f
(
X
i
)
]
2
=
[
Y
−
Θ
∗
ψ
(
X
)
]
∗
[
Y
−
Θ
∗
ψ
(
X
)
]
T
Error=\sum_{i=1}^{m}{[Y_i-f(X_i)]}^2=[Y-\Theta*\psi(X)]*[Y-\Theta*\psi(X)]^T
Error=i=1∑m[Yi−f(Xi)]2=[Y−Θ∗ψ(X)]∗[Y−Θ∗ψ(X)]T
其中
Y
=
[
Y
1
,
Y
2
,
⋯
,
Y
m
]
Y=[Y_1,Y_2,\cdots,Y_m]
Y=[Y1,Y2,⋯,Ym],
ψ
(
X
)
=
[
ψ
(
X
1
)
,
ψ
(
X
2
)
,
⋯
,
ψ
(
X
m
)
]
\psi(X)=[\psi(X_1),\psi(X_2),\cdots,\psi(X_m)]
ψ(X)=[ψ(X1),ψ(X2),⋯,ψ(Xm)]。然后我们的目标是最小化估计误差也就是最小化
E
r
r
o
r
Error
Error,所以用
E
r
r
o
r
Error
Error对
Θ
\Theta
Θ求导。同时根据矩阵与向量之间的相合性。
∂
E
r
r
o
r
∂
Θ
=
[
Y
−
Θ
∗
ψ
(
X
)
]
∗
ψ
(
X
)
T
+
∂
[
Y
−
Θ
∗
ψ
(
X
)
]
∂
Θ
∗
[
Y
−
Θ
∗
ψ
(
X
)
]
T
\frac{\partial{Error}}{\partial\Theta}=[Y-\Theta*\psi(X)]*\psi(X)^T+\frac{\partial{[Y-\Theta*\psi(X)]}}{\partial\Theta}*[Y-\Theta*\psi(X)]^T
∂Θ∂Error=[Y−Θ∗ψ(X)]∗ψ(X)T+∂Θ∂[Y−Θ∗ψ(X)]∗[Y−Θ∗ψ(X)]T
∂ E r r o r ∂ Θ = 2 [ Y − Θ ∗ ψ ( X ) ] ∗ ψ ( X ) T \frac{\partial{Error}}{\partial\Theta}=2[Y-\Theta*\psi(X)]*\psi(X)^T ∂Θ∂Error=2[Y−Θ∗ψ(X)]∗ψ(X)T
令
∂
E
r
r
o
r
∂
Θ
=
0
\frac{\partial{Error}}{\partial\Theta}=0
∂Θ∂Error=0,可以得到:
Y
∗
ψ
(
X
)
T
−
Θ
∗
ψ
(
X
)
∗
ψ
(
X
)
T
=
0
Y*\psi(X)^T-\Theta*\psi(X)*\psi(X)^T=0
Y∗ψ(X)T−Θ∗ψ(X)∗ψ(X)T=0
化简可以得到:
Θ
=
Y
∗
ψ
(
X
)
T
∗
(
ψ
(
X
)
∗
ψ
(
X
)
T
)
−
1
\Theta=Y*\psi(X)^T*(\psi(X)*\psi(X)^T)^{-1}
Θ=Y∗ψ(X)T∗(ψ(X)∗ψ(X)T)−1
也就可以估计出多项式近似函数的系数。
接下来以已知函数表达式为例介绍多项式函数逼近效果,仿真函数区间为
[
−
10
,
10
]
[-10,10]
[−10,10],真实函数区间为:
[
−
5
,
5
]
[-5,5]
[−5,5],下方的代码表示以原函数的前
2
2
2阶导数构成的泰勒级数来逼近原函数,也就是原函数为:
f
(
x
)
=
sin
(
x
)
f(x)=\sin(x)
f(x)=sin(x)
近似函数采用了:
f
(
x
)
=
∑
n
=
0
2
f
n
(
x
0
)
n
!
(
x
−
x
0
)
n
f(x)=\sum_{n=0}^{2}\frac{f^{n}(x_0)}{n!}(x-x_0)^n
f(x)=n=0∑2n!fn(x0)(x−x0)n
其中为了方便,
x
0
=
0
x_0=0
x0=0,则近似函数为:
f
(
x
)
=
0
+
1
1
!
x
+
0
2
!
x
2
f(x)=0+\frac{1}{1!}x+\frac{0}{2!}x^2
f(x)=0+1!1x+2!0x2
代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
'''
利用多项式函数仿真sin(x)函数,由于sin函数具有特殊的导数特性
sin -> cos -> -sin -> -cos -> sin
0 -> 1 -> 0 -> -1 -> 0
'''
x=np.linspace(-10,10,1001)
sum=np.linspace(0,0,1001)
l=[0,1,0,-1]
temp=1
for k in range(3):
if k !=0:
temp=temp*k
sum=sum+l[k%4]/temp*(x**k)
ll=np.linspace(-5,5,501)
plt.plot(ll,np.sin(ll),label='orign')
plt.plot(x,sum,label='simul')
plt.legend()
plt.show()
近似结果为:
当使用前
5
5
5阶导数时:
f
(
x
)
=
0
+
1
1
!
x
+
0
2
!
x
2
+
−
1
3
!
x
3
+
0
4
!
x
4
+
1
5
!
x
5
f(x)=0+\frac{1}{1!}x+\frac{0}{2!}x^2+\frac{-1}{3!}x^3+\frac{0}{4!}x^4+\frac{1}{5!}x^5
f(x)=0+1!1x+2!0x2+3!−1x3+4!0x4+5!1x5
代码如下:
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
'''
利用多项式函数仿真sin(x)函数,由于sin函数具有特殊的导数特性
sin -> cos -> -sin -> -cos -> sin
0 -> 1 -> 0 -> -1 -> 0
'''
x=np.linspace(-10,10,1001)
sum=np.linspace(0,0,1001)
l=[0,1,0,-1]
temp=1
for k in range(6):
if k !=0:
temp=temp*k
sum=sum+l[k%4]/temp*(x**k)
ll=np.linspace(-5,5,501)
plt.plot(ll,np.sin(ll),label='orign')
plt.plot(x,sum,label='simul')
plt.legend()
plt.show()
仿真结果为:
可以看出,距离越远,偏差越大;包含的导数项阶数越大,偏差越大。为了观察效果,将仿真范围局限在
[
−
5.1
,
5.1
]
[-5.1,5.1]
[−5.1,5.1],结果如下:
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
'''
利用多项式函数仿真sin(x)函数,由于sin函数具有特殊的导数特性
sin -> cos -> -sin -> -cos -> sin
0 -> 1 -> 0 -> -1 -> 0
'''
x=np.linspace(-5.1,5.1,511)
sum=np.linspace(0,0,511)
l=[0,1,0,-1]
temp=1
for k in range(6):
if k !=0:
temp=temp*k
sum=sum+l[k%4]/temp*(x**k)
ll=np.linspace(-5,5,501)
plt.plot(ll,np.sin(ll),label='orign')
plt.plot(x,sum,label='simul')
plt.legend()
plt.show()
仿真结果为:
可以看出在
0
0
0点附近贴合的比较紧密,在偏离
0
0
0点较远位置,偏差也比较大。这与我们学习泰勒展开时所学习的也一致,泰勒级数是局部逼近,并非全局逼近。
从一元展开到多元展开参考:多项式函数类总结
阶跃函数
阶跃函数类就是由多个不同位置处的阶跃函数通过乘以系数然后叠加构成的函数。比如用阶跃函数近似原函数
f
(
x
)
f(x)
f(x)就可以表示为:
f
(
x
)
=
lim
Δ
t
→
0
∑
n
=
−
∞
+
∞
f
(
n
Δ
t
)
∗
(
ϵ
(
x
−
n
Δ
t
)
−
ϵ
(
x
−
(
n
+
1
)
Δ
t
)
)
f(x)={\lim_{{\Delta}t{\to}0}}{\sum_{n=-{\infty}}^{+{\infty}}}f(n\Delta{t})*(\epsilon(x-n\Delta{t})-{\epsilon}(x-(n+1){\Delta}t))
f(x)=Δt→0limn=−∞∑+∞f(nΔt)∗(ϵ(x−nΔt)−ϵ(x−(n+1)Δt))
所以粗粒度的阶跃函数类就可以看成:
f
(
x
)
=
∑
n
=
−
∞
+
∞
f
(
n
Δ
t
)
∗
(
ϵ
(
x
−
n
Δ
t
)
−
ϵ
(
x
−
(
n
+
1
)
Δ
t
)
)
f(x)={\sum_{n=-{\infty}}^{+{\infty}}}f(n\Delta{t})*(\epsilon(x-n\Delta{t})-{\epsilon}(x-(n+1){\Delta}t))
f(x)=n=−∞∑+∞f(nΔt)∗(ϵ(x−nΔt)−ϵ(x−(n+1)Δt))
也就是不追求
Δ
t
→
0
\Delta{t}\to{0}
Δt→0,允许自己设定粒度
Δ
t
\Delta{t}
Δt。如果我们用
a
n
Δ
t
a_{n\Delta{t}}
anΔt来表示阶跃函数前的系数,就有:
f
(
x
)
=
∑
n
=
−
∞
+
∞
a
n
Δ
t
∗
(
ϵ
(
x
−
n
Δ
t
)
−
ϵ
(
x
−
(
n
+
1
)
Δ
t
)
)
f(x)={\sum_{n=-{\infty}}^{+{\infty}}}a_{n\Delta{t}}*(\epsilon(x-n\Delta{t})-{\epsilon}(x-(n+1){\Delta}t))
f(x)=n=−∞∑+∞anΔt∗(ϵ(x−nΔt)−ϵ(x−(n+1)Δt))
Δ t {\Delta}t Δt可以取自己设置的数实现不同程度的近似。从定义中可以看出 a n Δ t a_{n\Delta{t}} anΔt应该是 f ( n Δ t ) f(n\Delta{t}) f(nΔt)。此时有: a n Δ t = f ( n Δ t ) a_{n\Delta{t}}=f(n\Delta{t}) anΔt=f(nΔt)
我们可以验证一下近似的效果。下面程序所仿真的函数是:
f
(
x
)
=
s
i
n
(
x
)
f(x)=sin(x)
f(x)=sin(x)
近似的区间为:
[
−
5
,
5
]
[-5,5]
[−5,5],近似的粒度为:
0.02
0.02
0.02。所以首先把区间按照给定粒度进行划分。这样
−
5
-5
−5对应的是
−
250
Δ
t
-250\Delta{t}
−250Δt,
0
0
0对应的是
0
Δ
t
0\Delta{t}
0Δt,
5
5
5对应的是
250
Δ
t
250\Delta{t}
250Δt。所以仿真函数为:
f
(
x
)
=
∑
n
=
−
250
+
250
sin
(
n
Δ
t
)
∗
(
ϵ
(
x
−
n
Δ
t
)
−
ϵ
(
x
−
(
n
+
1
)
Δ
t
)
)
f(x)={\sum_{n=-250}^{+250}}\sin{(n\Delta{t})}*(\epsilon(x-n\Delta{t})-{\epsilon}(x-(n+1){\Delta}t))
f(x)=n=−250∑+250sin(nΔt)∗(ϵ(x−nΔt)−ϵ(x−(n+1)Δt))
为了与原函数 s i n ( x ) sin(x) sin(x)表示区分,我把原函数画图范围设置为: [ − 5 , 5 ] [-5,5] [−5,5],而仿真函数的画图范围为: [ − 10 , 10 ] [-10,10] [−10,10],仿真结果如下所示。
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
'''
利用阶跃函数:np.heaviside(x,0)->仿真sin(x)函数
粒度为0.02
'''
dt=0.02
x=np.linspace(-5,5,501)
at=np.sin(x)
test=np.linspace(-10,10,1001)
sum=np.linspace(0,0,1001)
k=0
for i in at:
sum =sum+i*(np.heaviside(test-(-5+k*dt),0)-np.heaviside(test-(-5+(k+1)*dt),0))
k=k+1
x=np.linspace(-5,5,1001)
at=np.sin(x)
plt.plot(x,at,label='origin')
plt.plot(test,sum,label='simu')
plt.legend()
plt.show()
结果如下:
可以看到仿真函数与真实函数还是比较吻合的,这主要是因为粒度比较精细。我们可以对比一下粗粒度
0.1
0.1
0.1的近似。
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
'''
利用阶跃函数:np.heaviside(x,0)->仿真sin(x)函数
粒度为0.1
'''
dt=0.1
x=np.linspace(-5,5,101)
at=np.sin(x)
test=np.linspace(-10,10,1001)
sum=np.linspace(0,0,1001)
k=0
for i in at:
sum =sum+i*(np.heaviside(test-(-5+k*dt),0)-np.heaviside(test-(-5+(k+1)*dt),0))
k=k+1
x=np.linspace(-5,5,1001)
at=np.sin(x)
plt.plot(x,at,label='origin')
plt.plot(test,sum,label='simu')
plt.legend()
plt.show()
仿真结果如下所示:
从图中可以看出仿真有毛刺。
再比较一下更粗粒度
0.5
0.5
0.5的近似:
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
'''
利用阶跃函数:np.heaviside(x,0)->仿真sin(x)函数
粒度为0.5
'''
dt=0.5
x=np.linspace(-5,5,21)
at=np.sin(x)
test=np.linspace(-10,10,1001)
sum=np.linspace(0,0,1001)
k=0
for i in at:
sum =sum+i*(np.heaviside(test-(-5+k*dt),0)-np.heaviside(test-(-5+(k+1)*dt),0))
k=k+1
x=np.linspace(-5,5,1001)
at=np.sin(x)
plt.plot(x,at,label='origin')
plt.plot(test,sum,label='simu')
plt.legend()
plt.show()
结果如下:
当然,这个近似函数的系数也可以通过最小二乘误差进行估计。从结论上来说,比如说未知函数原型,也就是不知道待近似的函数是什么样子,只给出了一些样本点对
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(
x
n
,
y
n
)
(x_1,y_1),(x_2,y_2),(x_n,y_n)
(x1,y1),(x2,y2),(xn,yn),此时依旧可以估计参数。首先要做的还是划分好区间,划分出区间以后,对应的系数就是位于这个区间内的点对
(
x
,
y
)
(x,y)
(x,y)的
y
y
y值的平均。
阶跃函数:
f
(
x
)
=
lim
Δ
t
→
0
∑
n
=
−
∞
+
∞
f
(
n
Δ
t
)
∗
(
ϵ
(
x
−
n
Δ
t
)
−
ϵ
(
x
−
(
n
+
1
)
Δ
t
)
)
f(x)={\lim_{{\Delta}t{\to}0}}{\sum_{n=-{\infty}}^{+{\infty}}}f(n\Delta{t})*(\epsilon(x-n\Delta{t})-{\epsilon}(x-(n+1){\Delta}t))
f(x)=Δt→0limn=−∞∑+∞f(nΔt)∗(ϵ(x−nΔt)−ϵ(x−(n+1)Δt))
也可以看成另一种形式,我们把括号去掉,同时按照阶跃函数进行合并,就有:
f
(
x
)
=
lim
Δ
t
→
0
∑
n
=
−
∞
+
∞
[
f
(
(
n
+
1
)
Δ
t
)
−
f
(
n
Δ
t
)
]
∗
ϵ
(
x
−
(
n
+
1
)
Δ
t
)
f(x)={\lim_{{\Delta}t{\to}0}}{\sum_{n=-{\infty}}^{+{\infty}}}[f((n+1)\Delta{t})-f(n\Delta{t})]*\epsilon(x-(n+1)\Delta{t})
f(x)=Δt→0limn=−∞∑+∞[f((n+1)Δt)−f(nΔt)]∗ϵ(x−(n+1)Δt)
可以把
n
+
1
n+1
n+1化为
n
n
n:
f
(
x
)
=
lim
Δ
t
→
0
∑
n
=
−
∞
+
∞
[
f
(
n
Δ
t
)
−
f
(
(
n
−
1
)
Δ
t
)
]
∗
ϵ
(
x
−
n
Δ
t
)
f(x)={\lim_{{\Delta}t{\to}0}}{\sum_{n=-{\infty}}^{+{\infty}}}[f(n\Delta{t})-f((n-1)\Delta{t})]*\epsilon(x-n\Delta{t})
f(x)=Δt→0limn=−∞∑+∞[f(nΔt)−f((n−1)Δt)]∗ϵ(x−nΔt)
这就相当于用阶跃函数直接逼近原函数,而之前的相当于是用窗口函数进行逼近。这就可以推广到机器学习中的
s
i
g
m
o
i
d
sigmoid
sigmoid激活函数和高斯
R
B
F
RBF
RBF基函数:
R
B
F
:
f
(
x
∣
θ
)
=
e
−
(
x
−
μ
)
2
σ
2
RBF:f(x|\theta)=e^{-\frac{(x-\mu)^2}{\sigma^2}}
RBF:f(x∣θ)=e−σ2(x−μ)2
R
B
F
RBF
RBF基函数形状上类似于窗口函数,而
s
i
g
m
o
i
d
sigmoid
sigmoid函数形状上类似于阶跃函数:
s
i
g
m
o
i
d
:
f
(
x
∣
θ
)
=
1
1
+
e
−
x
sigmoid:f(x|\theta)=\frac{1}{1+e^{-x}}
sigmoid:f(x∣θ)=1+e−x1
从一元展开到多元展开参考:阶跃函数类总结
脉冲函数
脉冲函数类就是由多个不同位置处的脉冲函数乘以系数然后叠加构成的函数。