c++ 提取傅里叶描述子_聊一聊【向量】视角下的函数(例子:傅里叶变换)

4b0bbc0d218ee98fb286bfc839dbcc4e.png

Abstract:

最近一段时间看Lie代数,结合之前学过的泛函 、以及傅里叶变换,突然对函数有一种特殊的理解。

本文先提出函数向量理解的观点(用元组的方式来表示),再带入到其他理论中 中做一些阐述,最终以傅里叶变换为例实现其基本功能。(附上python代码以及相应结果


目录

  1. 函数到向量
  2. 在其他理论中的理解
  3. 傅里叶变换的实现

函数到向量

说起来函数,很多人都有相应的理解,例如

1、正比例函数

be74c6e90cee27622b52461aa6f267eb.png
正比例函数

2、一次函数

c62e5001e15bb3dad6d0e4e322415447.png
一次函数

3、二次函数

438756bde3fef2b041deccbc95e72426.png
二次函数

当然,后面还有相应的指数函数(

),对数函数(
),正弦函数(
)等等。

对于其描述(我说的是描述,不是性质),可以有以下三个要素:

  1. 运算法则
  2. 定义域
  3. 值域

那和向量有什么关系呢?

再说说向量

一般对向量理解:就是带有大小和方向的有向线段。

8217e44861ad0fd001ecac3d73dabd1f.png
(2,3)

根据其相关性质,可以定义一个向量空间:域F上的一个模。

即,定义了加法和乘法 有一下8条成立(经过前人对大量事物的归纳总结得到)

  1. α+β=β+α,对任意α,β∈V.
  2. α+(β+γ)=(α+β)+γ,对任意α,β,γ∈V.
  3. 存在一个元素0∈V,对一切α∈V有α+0=α,元素0称为V的零元.
  4. 对任一α∈V,都存在β∈V使α+β=0,β称为α的负元素,记为-α.
  5. 对P中单位元1,有1α=α(α∈V).
  6. 对任意k,l∈P,α∈V有(kl)α=k(lα).
  7. 对任意k,l∈P,α∈V有(k+l)α=kα+lα.
  8. 对任意k∈P,α,β∈V有k(α+β)=kα+kβ,

对于这种抽象的定义,“向量”除了能够表示一些物理量(力、速度)其实可以表示(不限于):

  • 空间向量(
  • 矩阵(
  • 多项式(
  • 函数(即本文重点)

先说说,函数怎么样被向量所具体描述的?

从有限开始,定义一个函数

要知道,该函数是定义在定义域为

的函数空间中,如果定义域中多(少)一个数(
)抑或是换一个数(
)都不再是
原来的向量空间了。

那么,上述函数用元组(序偶)来表示,可记为向量

在该空间的另一个函数
就可以写作

定义域的元素越多,则向量的维度越大

这样,就很好理解无穷维向量:

譬如将定义域放在自然数({0}并上正整数)/整数/有理数上,就可以将上面的函数

记作(自然数下),
如果是整数的话,可以写成
有理数(我只写非负有理数的吧)

由于实数不可列,只能是说借助一个指标集

,对于该集合的
,假想那么一个向量的位置,它是第
位的。

或者,若想将其“列出来”,需要借助极限的定义。将其在不可列的空间中商去一个任意小的范围,使之能够“近似”列举出来。如封面的图

25c89357f08f15736dd7bfbed3ad359d.png

所以,向量的维度取决与分割的粒度了。(如果也想要个无穷维的,可以将分割粒度设定为两个相邻有理数间距的一半。)


带入其他理论中的理解

(此处会涉及一些数学高年级课程的内容)

上一节主要说了关于函数向量化的理解,那么这里就将这种理解带入一些理论中进行简单地阐述。由于本人时间有限,也就挑几个比较重要的内容去讲述。

数学分析(微积分)

数学分析主要讲的是实函数上的内容,所以从较高的观点上来看,有以下主要内容:

  • 极限
  • 微分(求导)
  • 积分
  • 多元部分

当然,对于非专业的,还会有微分方程。

1、对于极限

实际上就是上面说的,一种近似表示。这个近似体现在什么地方呢?就是:对于未知的事物能否用已知来代替,且使意外可以忽略

这个代替,就是定义中,

中的
;而那个“意外可以忽略”,就是定义中一大坨的

这样,也能理解所谓区间开闭要做什么的吧(将的得不到的转变成已拥有的)~

众所周知,(以下加斜体字皆为 私货,请酌情阅读

吾生也有涯,而知也无涯 。以有涯随无涯,殆已!——《庄子.内篇.养生主其三》

相比于庄子的想法,可以保身,可以全生,可以养亲,可以尽年,的这种“向内求稳”想法(既然未知无穷,那就停止思考,看着眼前也能过得挺好),能够看出Weierstrass给出了一个“向外求稳”的方法(虽然未知无穷,但是让我停止思考是不可能的,这辈子都不会不思考的!!!只不过面对无穷,我只会放弃思考那些等价于“有穷”的无穷罢了)。也可见中西方人文上的差异。当然对于想知道为什么会这样的人,可以上bilibili上看看(北京大学 吴国盛 所讲的 《科学史》

2、微分

实际上,这就相当于,调取一个一维数组中的一个数与下一各数的差,从而转变成一个

维的向量。(这也就可以解释为啥一些微分的定理,都是说“
闭区间连续,开区间可导”的原因了吧,毕竟导完之后,闭区间就“ 缩”了一小段了~)

同样,也能看出,微分是对函数——这个向量一个子空间的“线性表示”。(可以将高等代数中的特征方程与数学分析中的微分定义相互对比一下,你会有所发现的~)

于是乎,求导就是求特征方程的“

”。

不定积分就是求那个“特征向量”

3、(定)积分

积分呢,顾名思义,有了“积”(不是太美的那个ji),就能联想到“内积”。对一个函数

做积分,就相当于将
一个向量与一个1向量做内积(1向量是向量上所有分量全部为1)。两个函数相乘做积分,就是 两个向量做内积啦~

从而,对于积分的一些性质,可以用高等代数中的正交空间来理解。(或者中积分)

对于级数来说,其实就是可以看做是离散化的积分。也是无穷维向量内积。不过,向量的角度也就只能阐述一下数项级数。对于函数项级数,可以那矩阵*向量来看待。

4、多元部分

西方人在理解自然时(科学),都有这么一个习惯性思维:先研究好最基本、最完美的事物,然后再用它来表示现实中复杂的东西

对于多元函数也不例外。所谓n维空间的东西,就是将其看做n条直线(1维空间)来理解的。

陆艺:微分几何随记(六)浅谈外微分形式​zhuanlan.zhihu.com
7f946e70ea629bf4f5e14e3bf2b34814.png

那么相比于一阶张量的向量来说,二元函数不就再向外扩张一阶——矩阵吗,以此类推扩张下去。

(对这方面理解仅限于定义,相关例题做的少,所以就不多说了。。。)

在说完数分后,后面的理论我就挑几个重点来说了。

实变函数

我个人对此理解比较多的是可测函数部分,对于积分这块也就会证明几道例题,算不上理解,所以就说两句关于可测的理解。

按可测定义来看,就是要外侧度满足Caratheodry(卡拉西奥多里)条件

为任意集合,
则为可测集)

而可测函数,就是:函数像在任意区间上的原像全部为可测集。

因为实变函数毕竟要研究实数轴上的,所以说需要引用一个指标集

来表示向量的每一个分量

对于可测函数,就相当于,随便找一个实数

,从向量中找出那些分量大于
的位置
,并将其打成包,然后看这个包是否满足可测定义。

measure_set 

看该集合是否为可测集(python 语法)

在积分上,与黎曼积分的明显差异在于:黎曼积分用

把函数按段分到了向量的每个分量中;而lebesgue是按像来做划分的(对此处理解不是很深刻,可能会有疑义)。

泛函分析

在泛函分析中,就是在研究无穷维空间的东西了。在这个无穷维中,会有可数的

,或者不可数
,还有可以用“方向”来定义“大小”的(把前面那两个p=2就行),也有不能的。

在一般向量空间中,所有的“函数”都只是一般意义上的函数,没有一个标准来衡量“函数”直接的差别。比如给你两幅画,如果都能用

个像素表示,那么他们就都是
维向量,如何判断它们俩之间的差别?

09ae37510d57bfa0741d3584fcaa68e0.png
图1,本人画的,不存在侵权~~~

64d51ca346028f52afc78e5225b05eef.png
图2

有句话说,公说公有理,婆说婆有理

这个理,往往是一种度量。如果说,一个向量空间中,有了距离(它讲道理了~)的概念,那么,他就是距离空间。如果这个空间有了“原点”(有准了),就是赋范空间。如果Cauchy列收敛(靠谱了——就好比画画,画了一堆线条,越画越像就是收敛)就成了Banach空间。当然,如果该度量能够通过内积来衡量不同方向的函数(就好比各种各样的画派,像什么印象派、抽象派,还有什么黄派、徐派等等,通过一种衡量方式,可以进行跨派别的评审),那就是内积空间。如果说,内积定义的范数Cauchy收敛(就是上述背景中,那种评审方式很靠谱了),那就是Hilbert空间。Hilbert空间有很多完美性质。

还有一句古话讲,无规矩不成方圆

通过前面讲述能够发现,很多都是已经有的对象(向量),之所以有各种各样的空间,是因为他们所遵循的规矩不一样。

回到数学中来看:

对于Hilbert空间,根据表现定理,

上的泛函一定能写成内积的形式,且泛函的范数等于该空间中的向量,那也就是说明:泛函可以看做成这个样子
像分解定理、还有lax-milgram定理,就不多阐述了。

如果不是内积空间,则有可能

像泛函和算子,可以分别当做向量和矩阵。根据他们范数的定义不难发现,就是观察泛函/算子作用在单位闭球上的最大值。在计算时,就可以看成找一个单位向量,看泛函(算子作用后的向量范数)结果最大值是有多大。

如果有界《--》连续《--》逐点连续。也就不难理解了。


傅里叶变换的实现

实际上,在函数——向量的理解下,傅里叶变换就可以转化称为矩阵右乘一个向量的形式了。那积分上下限的无穷怎么理解呢?实际上,函数如果区间有穷的画,那把剩下的部分全部置零延拓出去,或者剩下的部分当做一个“常数”(收敛),按这个常数在正规化(通过对f的整体变换,使常数部分为0)。

该程序用python编写,需要numpy库,

剩下不多说了,直接贴代码了

import numpy as np

def vec_e(omega):#定义了内积向量
    return np.array([np.cos(omega),np.sin(omega)]).T

def fourier(fun,x,t,):#指定频域中频率的傅里叶变换
    '''fun is a n-dim vectors
    interval is 2-tuple show the end points of the interval
    t is frequency'''
    d = len(fun)
    result = np.array(fun).dot(vec_e(-np.linspace(x[0],x[-1],d)*t  ) )

    return (result*(x[-1]-x[0]))/(2*d)

def Fourier(fun,x,img_x,p,appr=3):#一段频率,这里用str是为了将数据输出到excel画图用。
    return [ str(np.linalg.norm(np.around(fourier(fun,x,p*i),appr)))  for i in range(img_x[0],img_x[1])]

完整的测试代码:

import numpy as np

def vec_e(omega):#定义了内积向量
    return np.array([np.cos(omega),np.sin(omega)]).T

def fourier(fun,x,t,):#指定频域中频率的傅里叶变换
    '''fun is a n-dim vectors
    interval is 2-tuple show the end points of the interval
    t is frequency'''
    d = len(fun)
    result = np.array(fun).dot(vec_e(-np.linspace(x[0],x[-1],d)*t  ) )

    return (result*(x[-1]-x[0]))/(2*d)

def Fourier(fun,x,img_x,p,appr=3):#一段频率,这里用str是为了将数据输出到excel画图用。
    return [ str(np.linalg.norm(np.around(fourier(fun,x,p*i),appr)))  for i in range(img_x[0],img_x[1])]

if __name__=='__main__':
#测试的sinx+2*sin3.2x
    x = np.linspace(-4*np.pi  ,4*np.pi,10000)
    y = np.sin(x)+2*np.sin(3.2*x)
    r = Fourier(y,x,[0,5000],0.002)

    with open('abc.csv','w') as file:
        for i in range(len(r)):
            file.write(str(i*0.002)+','+r[i]+'n')

结果,如图

afbfa3ede8c394480aee626d026b79fe.png

从图中能够看出,频率在1,和3.2的位置有特别明显的欺负,且波峰长度为1:2。

(关于x轴上为何这么多起起伏伏呢?如果把f的定义域调大点,起伏就少了。不过,这应该是一些技术性的问题了。)


关于一些代数、几何层面上的含义我并没有说的很细,主要还是说了如何将函数用向量的角度去理解的东西。

毕竟学识有限,有问题之处不吝赐教~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值