文章目录

  • 概述
  • 傅里叶变换
    • 傅里叶级数
    • 虚指数e−jωte^{-j{\omega}t}e−jωt的引入
    • 傅里叶级数和变换的区别
    • 傅里叶级数和变换的一点感悟
  • 拉普拉斯变换
  • Z变换
  • 总结
  • 参考文献

概述

只要是做过一点控制类的工程项目,对于时域、频域的相关概念一定不陌生,很可能还被折磨的死去活来。没错,我就是死去活来的那个。本人天资愚钝,信号处理等内容又是半路出家,没有系统的学习过,于是就被时域,频域,傅里叶变换,拉普拉斯变换等内容结结实实的胖揍了多年。举几个实际的工程需求吧,

  • 如果使用软件编写一个一阶低通滤波器,如何根据截止频率 fcf_cfc​设计不同的滤波系数α\alphaα实现所需的滤波效果?
  • 如何使用传递函数设计对应的控制器?

记得第一次接触相关的内容,是研究生时学习信号与系统,本科时的学习偏重于软件工程相关的内容,对于控制类的内容接触几乎为零,当时的老师也默认每个人都有相关的功底,直接就跳过了基础环节,虽然课程考试通过了,但是不仅不知其然,也不知其所以然。幸好现在网络上有众多的大神们,以深入浅出的语言给出了诸多的介绍。本文即是从我实用的角度触发,汇集整理了一些相关的内容,也方便日后我重新回顾。

傅里叶变换

傅里叶变换的公式定义如下:对于任意一个满足狄里克莱条件的函数,可以通过以下变换将其从时域转到频域
F(ω)=∫−∞∞f(t)e−jωtdt\displaystyle F(\omega)=\int_{-\infty}^{\infty}f(t)e^{-j{\omega}t}dtF(ω)=∫−∞∞​f(t)e−jωtdt

这个公式需进一步说明的点是,e−jωte^{-j{\omega}t}e−jωt和三角函数有什么关系?这里要引入一个新的名词,“虚指数”。 e−jωte^{-j{\omega}t}e−jωt就是虚指数,联系虚指数和三角函数的就是大名鼎鼎的欧拉公式
ejx=cos⁡(x)+jsin⁡(x)e^{jx}=\cos(x)+j\sin(x)ejx=cos(x)+jsin(x)
不过在说明虚指数之前,先要了解的背景知识是傅里叶级数

傅里叶级数

傅里叶级数的具体推导过程可以参见此文傅里叶级数的推导。这里直接列出其表达式
f(t)=a02+∑n=1∞[ancos⁡(nω0t)+bnsin⁡(nω0t)]a0=2T∫t0t0+Tf(t)dtan=2T∫t0t0+Tf(t)cos⁡(nω0t)dtbn=2T∫t0t0+Tf(t)sin⁡(nω0t)dt\displaystyle \begin{align*} f(t)&=\frac{a_0}{2}+\sum_{n=1}^{\infty}[a_n\cos(n\omega_0 t)+b_n\sin(n\omega_0 t)] \\a_0&=\frac{2}{T}\int_{t_0}^{t_0+T}f(t)dt \\a_n&=\frac{2}{T}\int_{t_0}^{t_0+T}f(t)\cos(n\omega_0 t)dt \\b_n&=\frac{2}{T}\int_{t_0}^{t_0+T}f(t)\sin(n\omega_0 t)dt \end{align*} f(t)a0​an​bn​​=2a0​​+n=1∑∞​[an​cos(nω0​t)+bn​sin(nω0​t)]=T2​∫t0​t0​+T​f(t)dt=T2​∫t0​t0​+T​f(t)cos(nω0​t)dt=T2​∫t0​t0​+T​f(t)sin(nω0​t)dt​

注意,在此表达式里,为了同意a0,an,bna_0,a_n,b_na0​,an​,bn​前面的系数为2T\frac{2}{T}T2​,在傅里叶级数里直流常量的定义是a02\frac{a_0}{2}2a0​​,有的表达式里,直流常量使用的是a0a_0a0​,此时对应的a0a_0a0​表达式为 a0=1T∫t0t0+Tf(t)dta_0=\frac{1}{T}\int_{t_0}^{t_0+T}f(t)dta0​=T1​∫t0​t0​+T​f(t)dt。
在傅里叶级数的推导过程里,还用到了几个必要的概念,麦克劳林待定系数法,以及三角函数的正交性,具体可以参见傅里叶级数的推导。

虚指数e−jωte^{-j{\omega}t}e−jωt的引入

使用欧拉公式 ejx=cos⁡(x)+jsin⁡(x)e^{jx}=\cos(x)+j\sin(x)ejx=cos(x)+jsin(x)将三角函数改写成如下
sin⁡(nωt)=ejnω0t−e−jnω0t2jcos⁡(nωt)=ejnω0t+e−jnω0t2\displaystyle \sin(n\omega t)=\frac{e^{jn\omega_0 t}-e^{-jn\omega_0 t}}{2j} \\\cos(n\omega t)=\frac{e^{jn\omega_0 t}+e^{-jn\omega_0 t}}{2}sin(nωt)=2jejnω0​t−e−jnω0​t​cos(nωt)=2ejnω0​t+e−jnω0​t​

将两式代入傅里叶级数可得

f(t)=a02+∑n=1∞[an−jbn2ejnω0t+an+jbn2e−jnω0t]\displaystyle f(t)=\frac{a_0}{2}+\sum_{n=1}^{\infty}[\frac{a_n -jb_n}{2}e^{jn\omega_0 t}+\frac{a_n +jb_n}{2}e^{-jn\omega_0 t}]f(t)=2a0​​+n=1∑∞​[2an​−jbn​​ejnω0​t+2an​+jbn​​e−jnω0​t]

从ana_nan​和bbb_bbb​的定义可以得到
a−n=2T∫t0t0+Tf(t)cos⁡(−nω0t)dt=anb−n=2T∫t0t0+Tf(t)sin⁡(−nω0t)dt=−bn\displaystyle a_{-n}=\frac{2}{T}\int_{t_0}^{t_0+T}f(t)\cos(-n\omega_0 t)dt=a_n \\b_{-n}=\frac{2}{T}\int_{t_0}^{t_0+T}f(t)\sin(-n\omega_0 t)dt=-b_na−n​=T2​∫t0​t0​+T​f(t)cos(−nω0​t)dt=an​b−n​=T2​∫t0​t0​+T​f(t)sin(−nω0​t)dt=−bn​

于是引入虚指数的傅里叶级数可以进一步转化为
f(t)=a02+∑n=1∞[an−jbn2ejnω0t+an+jbn2e−jnω0t]=a02+∑n=1∞[an−jbn2ejnω0t]+∑n=−∞−1[a−n+jb−n2ejnω0t]=a02+∑n=1∞[an−jbn2ejnω0t]+∑n=−∞−1[an−jbn2ejnω0t]\displaystyle \begin{align*} f(t)&=\frac{a_0}{2}+\sum_{n=1}^{\infty}[\frac{a_n -jb_n}{2}e^{jn\omega_0 t}+\frac{a_n +jb_n}{2}e^{-jn\omega_0 t}] \\&=\frac{a_0}{2}+\sum_{n=1}^{\infty}[\frac{a_n -jb_n}{2}e^{jn\omega_0 t}]+\sum_{n=-\infty}^{-1}[\frac{a_{-n} +jb_{-n}}{2}e^{jn\omega_0 t}] \\&=\frac{a_0}{2}+\sum_{n=1}^{\infty}[\frac{a_n -jb_n}{2}e^{jn\omega_0 t}]+\sum_{n=-\infty}^{-1}[\frac{a_{n} -jb_{n}}{2}e^{jn\omega_0 t}]\end{align*}f(t)​=2a0​​+n=1∑∞​[2an​−jbn​​ejnω0​t+2an​+jbn​​e−jnω0​t]=2a0​​+n=1∑∞​[2an​−jbn​​ejnω0​t]+n=−∞∑−1​[2a−n​+jb−n​​ejnω0​t]=2a0​​+n=1∑∞​[2an​−jbn​​ejnω0​t]+n=−∞∑−1​[2an​−jbn​​ejnω0​t]​

此时

an−jbn2=1T[∫t0t0+Tf(t)cos⁡(nω0t)dt−j∗∫t0t0+Tf(t)sin⁡(nω0t)dt]=1T∫t0t0+Tf(t)[cos⁡(nω0t)−j∗sin⁡(nω0t)]dt=1T∫t0t0+Tf(t)[ejnω0t+e−jnω0t2−j∗ejnω0t−e−jnω0t2j]dt=1T∫t0t0+Tf(t)e−jnω0tdt\displaystyle \begin{align*} \frac{a_n -jb_n}{2}&=\frac{1}{T}[\int_{t_0}^{t_0+T}f(t)\cos(n\omega_0 t)dt-j*\int_{t_0}^{t_0+T}f(t)\sin(n\omega_0 t)dt] \\&=\frac{1}{T}\int_{t_0}^{t_0+T}f(t)[\cos(n\omega_0 t)-j*\sin(n\omega_0 t)]dt \\&=\frac{1}{T}\int_{t_0}^{t_0+T}f(t)[\frac{e^{jn\omega_0 t}+e^{-jn\omega_0 t}}{2}-j*\frac{e^{jn\omega_0 t}-e^{-jn\omega_0 t}}{2j}]dt \\&=\frac{1}{T}\int_{t_0}^{t_0+T}f(t)e^{-jn\omega_0 t}dt\end{align*}2an​−jbn​​​=T1​[∫t0​t0​+T​f(t)cos(nω0​t)dt−j∗∫t0​t0​+T​f(t)sin(nω0​t)dt]=T1​∫t0​t0​+T​f(t)[cos(nω0​t)−j∗sin(nω0​t)]dt=T1​∫t0​t0​+T​f(t)[2ejnω0​t+e−jnω0​t​−j∗2jejnω0​t−e−jnω0​t​]dt=T1​∫t0​t0​+T​f(t)e−jnω0​tdt​

将a0,an−jbn2a_0,\frac{a_n -jb_n}{2}a0​,2an​−jbn​​的公式全部代入得到傅里叶级数可得

f(t)=a02+∑n=1∞[an−jbn2ejnω0t]+∑n=−∞−1[an−jbn2ejnω0t]=1T∫t0t0+Tf(t)dt+∑n=1∞1T∫t0t0+Tf(t)e−jnω0tdt∗ejnω0t+∑n=−∞−11T∫t0t0+Tf(t)e−jnω0tdt∗ejnω0t=1T∑n=−∞∞∫t0t0+Tf(t)e−jnω0tdt∗ejnω0t\displaystyle \begin{align*} f(t)&=\frac{a_0}{2}+\sum_{n=1}^{\infty}[\frac{a_n -jb_n}{2}e^{jn\omega_0 t}]+\sum_{n=-\infty}^{-1}[\frac{a_{n} -jb_{n}}{2}e^{jn\omega_0 t}] \\&=\frac{1}{T}\int_{t_0}^{t_0+T}f(t)dt+\sum_{n=1}^{\infty}\frac{1}{T}\int_{t_0}^{t_0+T}f(t)e^{-jn\omega_0 t}dt*e^{jn\omega_0 t}+\sum_{n=-\infty}^{-1}\frac{1}{T}\int_{t_0}^{t_0+T}f(t)e^{-jn\omega_0 t}dt*e^{jn\omega_0 t} \\&=\textcolor{blue}{\frac{1}{T}\sum_{n=-\infty}^{\infty}\int_{t_0}^{t_0+T}f(t)e^{-jn\omega_0 t}dt*e^{jn\omega_0 t}} \end{align*}f(t)​=2a0​​+n=1∑∞​[2an​−jbn​​ejnω0​t]+n=−∞∑−1​[2an​−jbn​​ejnω0​t]=T1​∫t0​t0​+T​f(t)dt+n=1∑∞​T1​∫t0​t0​+T​f(t)e−jnω0​tdt∗ejnω0​t+n=−∞∑−1​T1​∫t0​t0​+T​f(t)e−jnω0​tdt∗ejnω0​t=T1​n=−∞∑∞​∫t0​t0​+T​f(t)e−jnω0​tdt∗ejnω0​t​

当n=0时,1T∫t0t0+Tf(t)e−jnω0tdt∗ejnω0t=1T∫t0t0+Tf(t)dt当n=0时,\frac{1}{T}\int_{t_0}^{t_0+T}f(t)e^{-jn\omega_0 t}dt*e^{jn\omega_0 t}=\frac{1}{T}\int_{t_0}^{t_0+T}f(t)dt 当n=0时,T1​∫t0​t0​+T​f(t)e−jnω0​tdt∗ejnω0​t=T1​∫t0​t0​+T​f(t)dt

此蓝色公式即为傅里叶级数的虚指数表达形式。令
【这里需要进一步补充如何将周期T推广到无限的情况】

傅里叶级数和变换的区别

  • 傅立叶级数对应的是周期信号,而傅立叶变换则对应的是一个时间连续可积信号(不一定是周期信号)
  • 傅立叶级数要求信号在一个周期内能量有限,而后者则要求在整个区间能量有限
  • 傅立叶级数的对应是离散的,而傅立叶变换则对应是连续的。

故而,两者的物理含义不同,且其量纲也是不同的,F(jkw)F(jkw)F(jkw)代表周期信号的第k次谐波幅度的大小,而F(jw)F(jw)F(jw)则是频谱密度的概念。所以答案是这两者从本质上不是一个概念,傅立叶级数是周期信号的另一种时域的表达方式,也就是正交级数,它是不同的频率的波形的时域叠加。而傅立叶变换则是完全的频域分析,傅里叶级数适用于对周期性现象做数学上的分析,傅里叶变换可以看作傅里叶级数的极限形式,也可以看作是对周期现象进行数学上的分析,同时也适用于非周期性现象的分析。

傅里叶级数和变换的一点感悟

抛开具体数学公式,这里试图从感性的角度来认知傅里叶变换。

首先,傅里叶变换和其逆变换不是定理,而是人为定义的两个公式,其作用是可以将函数从时域变换到频域,这个前提假设非常重要。
因为这涉及到了一个很有意思的点,时域和频域也是人为定义的两个“域”概念,如果脑洞大一点,用近世代数的群环域的概念去套用(需特别说明,这里的脑洞没有理论证明过),“域”这个概念,代表的是由其定义的基元素以及基于基元素定义的符合“加减乘除”运算规律(如加法交换律,乘法分配律等)的一类元素和运算集合。于是,时域里,基元素和“加减乘除”都是我们常规认知的运算(姑且称其为常规域),而频域里,基元素是不同频率的正弦函数,而将此基元素由三个因素确定(频率,幅值和相位),比如在频域里的“乘法”,对应的常规域的运算就是卷积。所以,第一个感性认知是,傅里叶变换和其逆变换是一种数学工具,是为了转换运算域而定义的数学工具,不是公理。

其次,因为选取的域是以正弦函数为基元素的(余弦函数可以转化为等价的正弦函数,因此下述讨论统一使用正弦函数),那么根据傅里叶级数的定义,任何一个周期为T的函数f(t),都可以拆解成为一组正弦函数的叠加,这里就需要确定每一个正弦函数的三要素(频率,幅值和相位)。其中,频率可以用遍历的方式从小到大,而幅值和相位就是需要确定的值。根据三角函数的正交性(即不同频率的两个三角函数,其乘积在一个周期内的积分值为0,参考文章【1】),用一个固定频率ωn\omega_nωn​的正弦函数和余弦函数去乘以周期函数f(t),然后再在一个周期内对其乘积结果做积分,所有非相同频率的基分量,其与ωn\omega_nωn​的正弦函数和余弦相乘后的积分都是零,只有同频的基会留下来,此时就实现了对于指定基元素的幅值和相位的抽取,从而得到了这一个基元素的三要素(频率ωn\omega_nωn​,幅值AnA_nAn​,相位ϕn\phi_nϕn​)。如果让n的取值是正整数,就得到了离散傅里叶级数的各个频率点所需数值;如果让n取值为正实数(此时相当于周期T为无穷大,让频谱之间的间隔小到称为连续的实数),就变成了连续傅里叶变换。

回顾欧拉公式ejx=cos⁡(x)+jsin⁡(x)e^{jx}=\cos(x)+j\sin(x)ejx=cos(x)+jsin(x),其恰好包含了所需的正弦基与余弦基,更因为虚数的引入,包含了角度信息(旋转操作),因此这就是傅里叶变换里为什么使用了虚指数,因为虚指数既包含了数值信息,又包含了角度(相位)信息。

当认识到以上两件事之后,再来看傅里叶变换后的结果,存在频率谱,相位谱就不足为奇了,因为每一个基元素都需要三要素(频率,幅值,相位),其中频率谱就是以频率为横轴,幅值为纵轴,而相位谱是以频率为横轴,相位为纵轴,三者合一就可以表示任意一个基元素。

几个不错的文章
【1】傅里叶变换推导详解
【2】傅里叶系列(一)傅里叶级数的推导
【3】信号的傅里叶变换后的虚数怎样理解?
【4】傅里叶级数
【5】傅里叶分析之掐死教程(完整版)更新于2014.06.06
【6】【从原理的视角】傅里叶级数以及三角表达式、虚指数表达式,Matlab仿真程序
【7】一幅图弄清DFT与DTFT,DFS的关系

拉普拉斯变换

傅里叶变换强调函数要满足绝对可积,感性理解这个要求,即在正无穷的远端,函数要趋向x轴以便积分值收敛。对于不满足上述要求的函数f(t),可以考虑将其乘以一个衰减函数e−σte^{-\sigma t}e−σt,使得 f(t)e−σtf(t)e^{-\sigma t}f(t)e−σt满足绝对可积的要求,从而可以对 f(t)e−σtf(t)e^{-\sigma t}f(t)e−σt进行傅里叶变换,同时为了保证e−σte^{-\sigma t}e−σt一直为衰减函数,将t的定义域缩减到正半轴,此时的公式为
F(f(t)e−σt)=∫0∞f(t)e−σte−jωtdt=∫0∞f(t)e−(σ+jω)tdt\displaystyle \begin{align*} F(f(t)e^{-\sigma t})&=\int_{0}^{\infty}f(t)e^{-\sigma t}e^{-j{\omega}t}dt \\&=\int_{0}^{\infty}f(t)e^{-(\sigma+j\omega) t}dt \end{align*}F(f(t)e−σt)​=∫0∞​f(t)e−σte−jωtdt=∫0∞​f(t)e−(σ+jω)tdt​

令s=σ+jωs=\sigma+j\omegas=σ+jω,则上式就可以变成

F(s)=∫0∞f(t)e−stdt\displaystyle F(s)=\int_{0}^{\infty}f(t)e^{-st}dtF(s)=∫0∞​f(t)e−stdt

这就是拉普拉斯变换。

拉普拉斯变换解决了不满足绝对可积条件的连续信号,变换到频率域的问题,同时也对“频率”的定义进行了扩充。拉普拉斯变换与连续时间傅里叶变换的关系是:拉普拉斯变换将频率从实数推广为复数,因而傅里叶变换变成了拉普拉斯变换的一个特例。当s为纯虚数时,f(t)的拉普拉斯变换,即为f(t)的傅里叶变换

关于拉普拉斯变换的收敛域问题,可以参见此文章傅里叶变换到拉普拉斯变换及收敛域分析。这个视频也对拉普拉斯变换做了比较好的介绍「珂学原理」No. 26「拉普拉斯变换了什么?」。

Z变换

Z变换本质上是拉普拉斯变换的离散形式。那么Z变换的意义在于什么呢?在数字信号处理以及数字控制系统中,Z变换提供了数学基础。利用Z变换很快就能将一个传递函数描述成差分方程形式,这就为编程实现提供了数学依据,比如一个数字滤波器知道其Z变换形式,写代码就是分分钟的事情了,同样知道一个控制算法的Z变换形式,同样编代码也是水到渠成的事情。详见此文章
傅里叶变换、拉普拉斯变换、Z 变换的联系是什么?为什么要进行这些变换?

总结

要理解三种变换的联系区别,首先要理解什么是数学变换,什么是积分变换。傅立叶变换以及拉普拉斯变换本质上都是连续或有限个第一类间断点函数的积分变换,而傅立叶变换是拉普拉斯变换的特殊形式,而Z变换是拉普拉斯变换的离散形式。每种变换都有其应用价值,傅立叶变换在信号处理的频域分析中提供了强大的数学工具,而拉普拉斯变换在电子学、控制工程、航空航天等领域提供了建模、分析的数学分析工具;Z变换则将这些变换进而落地为数字实现提供数学理论依据。DFT为FFT的离散化形式,而FFT是DFT的算法优化实现。

参考文献

  1. 复数的物理意义

To Do List
频谱,相位谱,功率谱的进一步理解
信号频域分析方法的理解(频谱、能量谱、功率谱、倒频谱、小波分析)
各种谱函数的区别是什么,何时用何种函数?

傅里叶变换与微分方程的相互关系
微分方程(1)-基本概念及分类
补充:微分方程的定义和分类

频率响应分析
为何在传递函数中,可以用jw 替换s
一文讲透一阶系统的系统响应、传递函数和输出响应
一文带你通俗理解幅频响应和相频响应
微分方程(2)-一阶常微分方程的解法

单位冲激响应的测量方法

传递函数与z变换的关系
传递函数转化为差分方程
S域传递函数——Z域传递函数——差分方程的转换方法
传递函数,Z变换与差分方程之间的转化
s域传递函数变为z域传递函数
s域和z域变换笔记

滤波器的设计
低通滤波器的设计与工程实现
一阶低通滤波器软件算法

功率谱密度
对于一个随机信号而言,时域信息是杂乱无章的,唯一的确定性信息但是在统计意义下得到的,即幅值呈正太分布,均方值也就是平均功率是固定的。根据帕斯瓦定理,信号的平均功率在时域和频域是守恒的,按道理说直接对时域信号进行傅里叶变换再取平方就可以。但不幸的事,随机信号的不满足傅里叶变换绝对值可积的条件,严格意义傅里叶变换不存在,于是发明了自相关函数的概念,将信号的蕴含的周期信号识别出来,并将相位信息去掉(相位不影响平均功率),于是就出现了我们在教材上见到的最终形式维纳-辛钦定理:一个信号的功率密度谱,就是其自相关函数的傅里叶变换。提炼一下就是:随机信号→幅值正太分布→均方值(平均功率)→帕斯瓦定理(功率守恒)→自相关函数(去除相位信息)→维纳-辛钦定理(最终形式)
功率谱密度(PSD)
如何理解随机振动的功率谱密度? (非常好的文章)
为什么随机信号不能用频谱表示?而必须用功率谱密度表示呢?
能量信号和功率信号的分别

卷积,自相关和互相关
如何通俗易懂地解释卷积? (非常棒的文章)
卷积、互相关与自相关

控制系统
自控学习笔记系列

从入门到放弃系列-傅里叶变换,拉普拉斯变换,Z变换相关推荐

  1. Redis从入门到放弃系列(一) String

    Redis从入门到放弃系列(一) String 本文例子基于:5.0.4 字符串是Redis中最常见的数据结构,底层是采用SDS,是可以修改的字符串,类似ArrayList,采用预分配冗余空间的方式来 ...

  2. 简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换)

    Q:简述计算机三大变换的联系和区别 (傅里叶变换 拉普拉斯变换 z变换) (1) 傅里叶变换定义: 表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合.傅立叶变 ...

  3. SAP KANBAN 从入门到放弃系列之调拨模式

    之前已经有三篇文章写了后台配置相关的介绍,这里不赘述.详见: PP-KANBAN-看板概述 SAP KANBAN 从入门到放弃系列之生产补货模式 SAP KANBAN 从入门到放弃系列之采购补货模式 ...

  4. redis java zset_Redis从入门到放弃系列(五) ZSet

    Redis从入门到放弃系列(五) ZSet 本文例子基于:5.0.4 ZSet是Redis中一种比较复杂的数据结构,当存储大小在128之内且member得长度在64以下,其实现为zipList,超过为 ...

  5. 信号与系统 傅里叶变换 拉普拉斯变换 z变换所有公式和性质 三个变换的联系 整理

    这是我考研整理的笔记.基本上涵盖了信号与系统三大变换所有重要的公式. 1.傅里叶变换 2.拉普拉斯变换 3.Z变换 4.三大变换的关系

  6. 爬虫入门到放弃系列07:js混淆、eval加密、字体加密三大反爬技术

    前言 如果再说IP请求次数检测.验证码这种最常见的反爬虫技术,可能大家听得耳朵都出茧子了.当然,也有的同学写了了几天的爬虫,觉得爬虫太简单.没有啥挑战性.所以特地找了三个有一定难度的网站,希望可以有兴 ...

  7. python从入门到放弃系列恶搞短片-太惨!学Python方法用错,直接从入门到放弃!...

    原标题:太惨!学Python方法用错,直接从入门到放弃! 从你开始学习编程的那一刻起,就注定了以后所要走的路-从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在 ...

  8. laplace变换 z变换本质

    laplace变换: 对一个实变量函数作拉普拉斯变换,并在复数域中作各种运算,再将运算结果作拉普拉斯反变换来求得实数域中的相应结果,往往比直接在实数域中求出同样的结果在计算上容易得多. 可把微分方程化 ...

  9. mvc php 代码审计,代码审计从入门到放弃系列篇一之代码审计学习思路

    学习代码审计要熟悉三种技术,分四部分走 一:编程语言 1:前端语言 html/javascript/dom元素使用 主要是为了挖掘xss漏洞 jquery 主要写一些涉及到CSRF脚本使用的或者DOM ...

最新文章

  1. Christopher Manning​:Uber 出售自动驾驶部门是一个标志性事件​ | AI日报
  2. 2016年云巴产品更新合集
  3. chrome 插件精选之 github 篇
  4. 美团外卖骑手背后的AI技术
  5. java close wait过多_HttpClient当HTTP连接的时候出现大量CLOSE_WAIT连接
  6. Maven学习总结(35)——Maven项目错误 JAX-RS (REST Web Services) 2.0 can not be installed问题...
  7. 【conda】解决 An HTTP error occurred when trying to retrieve this URL.
  8. 深入浅出redux知识
  9. JavaWeb实现记住密码功能(使用Cookie)
  10. [寻找环链表入口点] 快慢指针数学原理剖析
  11. 《WiscKey: Separating Keys from Values in SSD-conscious Storage》阅读笔记
  12. 电磁干扰、电磁兼容性和电磁屏蔽区别及联系
  13. 添加nginx作为系统服务
  14. [转]SAP模块一句话入门
  15. 大数据有哪些基本特征?
  16. Spring boot Mybatis-Plus数据库单测实战(三种方式)
  17. 深度学习 pytorch cifar10数据集训练
  18. 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)
  19. Android的根证书颁发机构列表
  20. 斐讯k3搭建nginx+php+MariaDB(mysql )的教程

热门文章

  1. MSDN帮助文档安装失败解决方案
  2. 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部
  3. Docker 安装 SRS
  4. 计算机专业就业率2018,2018年就业质量报告发布,这个专业就业率竟高达100%!
  5. STM32之SWD连接配置说明
  6. Python免费下载哔哩哔哩视频,只需一行代码!
  7. 从Django的SECTET_KEY到代码执行
  8. **阿里云ECS Linux服务器图形化界面安装方法 Ubuntu**
  9. 深入学习理论:VC维(VC dimensions)
  10. Cesium 监听地图缩放