首页 > 其他分享 >理解傅里叶

理解傅里叶

时间:2024-09-30 19:23:18浏览次数:7  
标签:begin end 1.3 傅里叶 理解 bmatrix frac omega

笔者是电子信息工程专业的学生,在学习专业课时逐渐发现线性代数、复变函数与积分变换、信号与系统等数学基础类课程几乎渗透在专业的方方面面。只有充分理解底层数学的本质,才能更好地对信号处理、控制系统等进行理解、分析,从而应用于实践,进行学术研究。故笔者决定开设此专栏,后续陆续更新一些站在工科生角度对这些底层数学的感性认识。
傅里叶变换和拉普拉斯变换贯穿于电信专业的所有专业课,以至于大家看到微分方程就下意识地想要进行变换。但似乎在题目被解决后,很少人会去思考其原因和本质,更不要谈去质疑、理解、成为傅里叶老先生。好奇心驱使笔者决定暂时从巨人的肩膀上下来,重新认识傅里叶。

一、关于i

1. 写在前面和结论

在复变函数的第一章第一节,复数域就被引入,i也就来到了我们面前。我们只知道,i的存在扩充了我们学习的数域,同时显著提升了我们的挂科率,成功把无数e人逼成了i人… …;自从染上了它,似乎就再也没放下过,日日夜夜都只能与它为伴。有没有一刻隐隐约约觉得,它似乎没有看上去那么单纯?
知乎规矩,先写结论:在平面中,i是一个与状态始终垂直的变化率,即平面中逆时针旋转90°。而 e i t e^{it} eit可以描述这个平面中的所有旋转。

2. 推导前准备

2.1 思想准备

众所周知,我们学习的路线一般是这样的:

Definition Helpful_constructs General_problems Specific_problem

但是请注意,我们需要站在数学家的角度思考问题,他们更可能是这样的:

Specific_problem General_problems Helpful_constructs Definition

是的,完全相反。请做好背道而驰的思想准备。

2.2 矩阵的理解方式

先说结论,矩阵的本质是坐标变换
假如有一个矩阵, [ a b c d ] (1.2.1) \left[ \begin{matrix} a & b \\ c & d \\ \end{matrix} \right] \tag{1.2.1} [ac​bd​](1.2.1)
其与一对基向量 [ 1 0 ] \begin{bmatrix} 1 \\ 0 \end{bmatrix} [10​]、 [ 0 1 ] \begin{bmatrix} 0 \\ 1 \end{bmatrix} [01​]的乘积分别为 [ a c ] (1.2.2) \begin{bmatrix} a \\ c \end{bmatrix}\tag{1.2.2} [ac​](1.2.2)
[ b d ] (1.2.3) \begin{bmatrix} b \\ d \end{bmatrix}\tag{1.2.3} [bd​](1.2.3)
可以理解为,该矩阵使得这一对基向量分别变为 [ a c ] \begin{bmatrix} a \\ c \end{bmatrix} [ac​]和 [ b d ] \begin{bmatrix} b \\ d \end{bmatrix} [bd​],在二维坐标轴中进行了如下的平移变换(图源:3Blue1Brown youtube官方账号):![[1.png]]
![[2.png]]
类似于这样的,将某一数学元素理解为一种运算方式的思想会给我们打开新世界的大门。

3. 数学推导

我们从Specific problem出发。
假设有一位古玩卖家。如果卖家这次出售较多的古玩,则会增加下次进货的数量来维持库存;但如果卖家这次进货量较多,为了防止市场价下跌,卖家反而会在下次减少出售的古玩数。
在此基础上,定义出售的古玩数量为   y ( t ) \ y(t)  y(t) ,进货量为 x ( t ) x(t) x(t)。

则可用以下式表示其关系:

d d x [ x ( t ) y ( t ) ]   = [ 0 − 1 1 0 ] [ x ( t ) y ( t ) ] (1.3.1) \frac{d}{dx} \begin{bmatrix} x(t) \\ y(t) \end{bmatrix}\ = \left[ \begin{matrix} 0 & -1 \\ 1 & 0 \\ \end{matrix} \right]\begin{bmatrix} x(t) \\ y(t) \end{bmatrix}\tag{1.3.1} dxd​[x(t)y(t)​] =[01​−10​][x(t)y(t)​](1.3.1)

如果只有一个变量,事实上,上式(3.1)可以被简化为:
d d x x ( t ) = r ∗ x ( t ) (1.3.2) \frac{d}{dx} x(t) = r*x(t) \tag{1.3.2} dxd​x(t)=r∗x(t)(1.3.2)
这个性质看起来是不是有点眼熟?像不像指数函数?
d d x e r x = r ∗ e r x (1.3.3) \frac{d}{dx} e^{rx} = r*e^{rx} \tag{1.3.3} dxd​erx=r∗erx(1.3.3)
因此可以得到:
x ( t ) = e r x ∗ x 0 (1.3.4) x(t) = e^{rx}*x_0\tag{1.3.4} x(t)=erx∗x0​(1.3.4)
其中,   x 0 \ x_0  x0​为   t = 0 \ t = 0  t=0时的初始值。
3.2-3.4可知,若将3.1这个增量式写成状态式,可以这样写:
KaTeX parse error: Got function '\left' with no arguments as superscript at position 51: …bmatrix}\ = e^\̲l̲e̲f̲t̲[ \begin{matri…
注意到,出现了一个非常匪夷所思的矩阵指数。显然我们无法使用一般对于 e n = e ∗ e ∗ e . . . ( n 个 e 相乘 ) e^{n}=e*e*e...(n个e相乘) en=e∗e∗e...(n个e相乘)的理解方式理解它。
幸亏我们学过泰勒级数展开,可以很好地解决这个问题。
e x = ∑ n = 0 ∞ x n n ! = 1 + x + x 2 2 ! + x 3 3 ! + x 4 4 ! + ⋯ (1.3.6) e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \frac{x^4}{4!} + \cdots\tag{1.3.6} ex=n=0∑∞​n!xn​=1+x+2!x2​+3!x3​+4!x4​+⋯(1.3.6)
将矩阵塞进级数中运算,结果如下:
KaTeX parse error: Got function '\left' with no arguments as superscript at position 4: e^\̲l̲e̲f̲t̲[ \begin{matri…
可由 s i n ( x ) sin(x) sin(x)和 c o s ( x ) cos(x) cos(x)的泰勒级数展开推导得到,读者可自行推导。

sin ⁡ ( x ) = x − x 3 3 ! + x 5 5 ! − x 7 7 ! + ⋯ = ∑ n = 0 ∞ ( − 1 ) n x 2 n + 1 ( 2 n + 1 ) ! \sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots = \sum_{n=0}^{\infty} \frac{(-1)^n x^{2n+1}}{(2n+1)!} sin(x)=x−3!x3​+5!x5​−7!x7​+⋯=n=0∑∞​(2n+1)!(−1)nx2n+1​
cos ⁡ ( x ) = 1 − x 2 2 ! + x 4 4 ! − x 6 6 ! + ⋯ = ∑ n = 0 ∞ ( − 1 ) n x 2 n ( 2 n ) ! \cos(x) = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \cdots = \sum_{n=0}^{\infty} \frac{(-1)^n x^{2n}}{(2n)!} cos(x)=1−2!x2​+4!x4​−6!x6​+⋯=n=0∑∞​(2n)!(−1)nx2n​

于是我们得到了:
x ( t ) = c o s ( t ) ∗ x ( 0 ) − s i n ( t ) ∗ y ( 0 ) y ( t ) = s i n ( t ) ∗ x ( 0 ) + c o s ( t ) ∗ y ( 0 ) (1.3.7) \begin{align} & \begin{split} x(t) = cos(t)*x(0) - sin(t)*y(0) \end{split} \\ & \begin{split} y(t) = sin(t)*x(0) + cos(t)*y(0) \end{split} \end{align}\tag{1.3.7} ​x(t)=cos(t)∗x(0)−sin(t)∗y(0)​y(t)=sin(t)∗x(0)+cos(t)∗y(0)​​(1.3.7)
三角函数,条件反射放进单位圆思考。
![[3.png]]
以上可知, e [ 0 − 1 1 0 ] e^{\begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}} e[01​−10​] 可以描述在一个平面内的任意角度旋转。模长由 x ( 0 ) x(0) x(0)和 y ( 0 ) y(0) y(0)决定。
举个例子:按这个结论来说, e [ 0 − π π 0 ] e^{\begin{bmatrix} 0 & -π\\ π & 0 \end{bmatrix}} e[0π​−π0​]即在平面内旋转180°,即模不变,正负取反。
事实上, e [ 0 − π π 0 ] = [ − 1 0 0 − 1 ] e^{\begin{bmatrix} 0 & -π\\ π & 0 \end{bmatrix}}={\begin{bmatrix} -1 & 0\\ 0 & -1 \end{bmatrix}} e[0π​−π0​]=[−10​0−1​],标准的(-1)×单位阵。
所以,重申一遍,将某一数学元素理解为一种运算方式的思想会给我们打开新世界的大门。
记得推导前准备里对矩阵的重新理解吗?带着这个想法,我们重新审视3.1增量式中的状态量系数矩阵: [ 0 − 1 1 0 ] \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix} [01​−10​],它可以被理解为是一对基向量 [ 1 0 ] \begin{bmatrix} 1 \\ 0 \end{bmatrix} [10​]、 [ 0 1 ] \begin{bmatrix} 0 \\ 1 \end{bmatrix} [01​]转换成了 [ 0 − 1 ] \begin{bmatrix} 0 \\ -1 \end{bmatrix} [0−1​]、 [ − 1 0 ] \begin{bmatrix} -1 \\ 0 \end{bmatrix} [−10​]。如果放在平面中,可以认为,逆时针旋转了90°。
你是不是还知道一个在平面里逆时针旋转90°的操作?乘以虚数单位i
所以,如果我们尝试将 x ( t ) x(t) x(t)和 y ( t ) y(t) y(t)以复数形式而非矩阵形式表示,我们可以得到下式:
d d x [ x ( t ) + i y ( t ) ] = i [ x ( t ) + i y ( t ) ] (1.3.8) \frac{d}{dx} [x(t)+iy(t)] = i[x(t) + iy(t)] \tag{1.3.8} dxd​[x(t)+iy(t)]=i[x(t)+iy(t)](1.3.8)
同理,我们可以将增量式变换为状态式。即:
  [ x ( t ) + i y ( t ) ] = e i t [ x ( 0 ) + i y ( 0 ) ] (1.3.9) \ [x(t)+iy(t)] = e^{it}[x(0) + iy(0)] \tag{1.3.9}  [x(t)+iy(t)]=eit[x(0)+iy(0)](1.3.9)
所以,类比来看, e i t e^{it} eit 可以描述在一个平面内的任意角度旋转。模长由 x 2 ( 0 ) + y 2 ( 0 ) \sqrt{x^2(0)+y^2(0)} x2(0)+y2(0) ​决定。
所以,在平面中,i是一个与状态始终垂直的变化率,即平面中逆时针旋转90°。而 e i t e^{it} eit可以描述这个平面中的所有旋转。 事实上,任何一个与状态始终垂直的变化率,即平面中逆时针旋转90°的变换,其指数都可以去描述任意维空间中一个平面中的所有旋转。

二、微分方程

1. 一点形而上的东西

讲点形而上的东西:
我们学过泰勒展开,即:
f ( x ) = f ( a ) + f ′ ( a ) ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + f ′ ′ ′ ( a ) 3 ! ( x − a ) 3 + ⋯ + f ( n ) ( a ) n ! ( x − a ) n + ⋯ \begin{align} & \begin{split} f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \frac{f'''(a)}{3!}(x-a)^3 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + \cdots \end{split} \end{align} ​f(x)=f(a)+f′(a)(x−a)+2!f′′(a)​(x−a)2+3!f′′′(a)​(x−a)3+⋯+n!f(n)(a)​(x−a)n+⋯​​​

泰勒公式也向我们展示了,几乎所有的match function都可以被近似拟合成n阶方程
所以,几乎自然界中所有的物理or数学模型都可以用微分方程来表示。
其实还有一个更感性的理解方法:
在自然界中,变化是最永恒的东西。天崩地裂,冰雪消融,没有什么矢志不渝。
什么是变化?导数就是状态变化。导数即永恒不变。
你知道的,数学不只是处理数字、处理结构。就像音乐不只是处理音符一样。

2. 微分方程与傅里叶变换

几乎自然界中所有的物理or数学模型都可以用微分方程来表示,但是微分方程本身有一个致命的缺点:难解!
y ( n ) + a n − 1 ( x ) y ( n − 1 ) + ⋯ + a 1 ( x ) y ′ + a 0 ( x ) y = g ( n ) + b m − 1 ( x ) g ( m − 1 ) + ⋯ + b 1 ( x ) g ′ + b 0 ( x ) g \begin{align} & \begin{split} y^{(n)} + a_{n-1}(x)y^{(n-1)} + \cdots + a_1(x)y' + a_0(x)y = g^{(n)} + b_{m-1}(x)g^{(m-1)} + \cdots + b_1(x)g' + b_0(x)g \end{split} \end{align} ​y(n)+an−1​(x)y(n−1)+⋯+a1​(x)y′+a0​(x)y=g(n)+bm−1​(x)g(m−1)+⋯+b1​(x)g′+b0​(x)g​​​
这还只是常微分方程,如果再看看远处的偏微分方程,请自便吧… …
所以站在这个角度来看,傅里叶变换提供了一个极好的想法:将n阶方程转化为n次方程去计算,就算算不出来,起码好理解。
简化计算和理解的难度是大多数方法提出的初衷。简洁也是大多数数学家终其一生痴迷和追求的目标。多说一句,记得线性代数矩阵运算最开始是用来做什么的嘛?
是为了简化方程组的表示的,懒得写那么多加减号… …
所以,到这,是不是有点理解傅里叶了?

三、傅里叶变换

接下来,重头戏。
先叠个甲,以下思路是受3Blue1Brown的可视化启发,放个链接在这,各位可以自行学习(强力推荐):[[【【官方双语】形象展示傅里叶变换】 https://www.bilibili.com/video/BV1pW411J7s8/?share_source=copy_web&vd_source=1c0cb7c09703329b9f9b31a3d96b5e74]]

1. 引出公式

老样子,还是从Specific problem出发。
两个声波,波形都是正弦波, f f f不同,叠加到一起形成了一个新的声波。现在需要去分开这两个声波,怎么做?
时域里肯定是没戏了,两个声波都是连续且没有不重叠的区域。
那只能从别的两者不同的特性入手了,比如说,频率。
那怎么去区分出频率呢?
在第一部分,关于i的环节我们得出了结论, e i t e^{it} eit可以描述这个平面中的所有旋转。我们决定从旋转下手。

![[4.png]]

令频率为 f 1 f_1 f1​的波形表达式为 f ( t ) f(t) f(t),频率为 f 2 f_2 f2​的波形表达式为 g ( t ) g(t) g(t)。将两个表达式想象为旋转向量的模长,即将其乘以 e i t e^{it} eit。现在上面这张图应该变成了这样:

![[5.png]]
(图源3Blue1Brown

然后是一个绝妙的想法,想象这是一个有质量的物体,在时间不停推移的过程中想象质心的位置。

![[6.png]]
为什么是质心的位置呢?质心与物体的形状有关,而在坐标轴中的这个图形中,形状显然和频率 f f f有关。嘿,闭环了。
当时间范围为负无穷到正无穷时,周期性函数图形的图形形状是确定的。也就是说,质心位置是确定的。不同的频率 f f f产生了不同形状的图形,质心的位置也就不同。由此,我们就分辨出了不同 f f f的波形。
严谨一些,将这个二维坐标想象为极坐标,某一频率的波形持续的时间越长,极坐标的r越大很合理吧?所以最后来个积分。
好了,傅里叶公式出炉了。其定义如下:
F ( ω ) = ∫ − ∞ ∞ f ( t ) e − j ω t d t (3.1.1) F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dt \tag{3.1.1} F(ω)=∫−∞∞​f(t)e−jωtdt(3.1.1)

2. 公式应用

第二部分我们提到,对于微分方程,傅里叶变换提供了一个极好的想法:将n阶方程转化为n次方程去计算和理解。我不知道傅里叶是先有的这个想法再有的傅里叶公式,还是先有的傅里叶公式再有的这个用途。
笔者这里给出数学推导转换,但是是已知傅里叶公式的基础上对性质的推导。如有大神知道更加本源的相关知识可以分享一下。
已知傅里叶公式:
F ( ω ) = ∫ − ∞ ∞ f ( t ) e − j ω t d t (3.2.1) F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dt \tag{3.2.1} F(ω)=∫−∞∞​f(t)e−jωtdt(3.2.1)

现在,我们考虑 f ( t ) f(t) f(t) 的导数 f ′ ( t ) f'(t) f′(t),并寻找其傅里叶变换 F ′ ( ω ) F'(\omega) F′(ω)。根据导数的定义,我们有:
f ′ ( t ) = lim ⁡ Δ t → 0 f ( t + Δ t ) − f ( t ) Δ t f'(t) = \lim_{\Delta t \to 0} \frac{f(t + \Delta t) - f(t)}{\Delta t} f′(t)=Δt→0lim​Δtf(t+Δt)−f(t)​

将 f ′ ( t ) f'(t) f′(t) 代入傅里叶变换的定义中,我们得到:
F ′ ( ω ) = ∫ − ∞ ∞ f ′ ( t ) e − j ω t d t (3.2.2) F'(\omega) = \int_{-\infty}^{\infty} f'(t) e^{-j\omega t} dt\tag{3.2.2} F′(ω)=∫−∞∞​f′(t)e−jωtdt(3.2.2)

为了简化这个积分,我们可以使用分部积分的方法。设 u = f ′ ( t ) u = f'(t) u=f′(t) 和 d v = e − j ω t d t dv = e^{-j\omega t} dt dv=e−jωtdt,那么我们有 d u = f ′ ′ ( t ) d t du = f''(t) dt du=f′′(t)dt 和 v = − 1 j ω e − j ω t v = -\frac{1}{j\omega} e^{-j\omega t} v=−jω1​e−jωt。应用分部积分公式 ∫ u d v = u v − ∫ v d u \int u dv = uv - \int v du ∫udv=uv−∫vdu,我们得到:
F ′ ( ω ) = [ − 1 j ω f ′ ( t ) e − j ω t ] − ∞ ∞ + 1 j ω ∫ − ∞ ∞ f ′ ′ ( t ) e − j ω t d t (3.2.3) F'(\omega) = \left[ -\frac{1}{j\omega} f'(t) e^{-j\omega t} \right]_{-\infty}^{\infty} + \frac{1}{j\omega} \int_{-\infty}^{\infty} f''(t) e^{-j\omega t} dt\tag{3.2.3} F′(ω)=[−jω1​f′(t)e−jωt]−∞∞​+jω1​∫−∞∞​f′′(t)e−jωtdt(3.2.3)

由于 f ( t ) f(t) f(t) 和其导数 f ′ ( t ) f'(t) f′(t) 通常在无穷远处趋于零,边界项消失,因此我们只剩下:
F ′ ( ω ) = 1 j ω ∫ − ∞ ∞ f ′ ′ ( t ) e − j ω t d t (3.2.4) F'(\omega) = \frac{1}{j\omega} \int_{-\infty}^{\infty} f''(t) e^{-j\omega t} dt\tag{3.2.4} F′(ω)=jω1​∫−∞∞​f′′(t)e−jωtdt(3.2.4)

但是,我们实际上是对 f ′ ( t ) f'(t) f′(t) 进行傅里叶变换,而不是 f ′ ′ ( t ) f''(t) f′′(t)。因此,我们需要回到原始的积分并重新考虑。我们可以直接对 f ( t ) f(t) f(t) 的傅里叶变换 F ( ω ) F(\omega) F(ω) 进行求导,而不是对积分表达式进行分部积分。利用傅里叶变换的性质,我们有:
F ′ ( ω ) = ∫ − ∞ ∞ f ′ ( t ) e − j ω t d t = − j ω ∫ − ∞ ∞ f ( t ) e − j ω t d t = − j ω F ( ω ) F'(\omega) = \int_{-\infty}^{\infty} f'(t) e^{-j\omega t} dt = -j\omega \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dt = -j\omega F(\omega) F′(ω)=∫−∞∞​f′(t)e−jωtdt=−jω∫−∞∞​f(t)e−jωtdt=−jωF(ω)

这里我们使用了 e − j ω t e^{-j\omega t} e−jωt 的导数是 − j ω e − j ω t -j\omega e^{-j\omega t} −jωe−jωt 这一事实。因此,我们得到了傅里叶变换的一个重要性质:时域中的导数 f ′ ( t ) f'(t) f′(t) 在频域中对应于乘以 j ω j\omega jω 的操作。这个性质在信号处理和系统分析中非常有用,因为它将微分方程的求解转换为了频域中的代数操作。

本文站在一个工科生的角度理解傅里叶,数学语言多少有些不严谨,请读者原谅。总而言之,本文想表达的是,自然科学往往有着作为工具之外的美妙之处,甚至很多时候,社会科学和自然科学的底层逻辑是相通的。在融会贯通的一刹那所体验到的美妙,是科学带给我们的礼物。

标签:begin,end,1.3,傅里叶,理解,bmatrix,frac,omega
From: https://blog.csdn.net/FredericAS123/article/details/142662662

相关文章

  • 【C++ STL】深入理解string类的底层实现
    string类的模拟实现一.string的构造与析构函数1.普通构造函数与析构函数2.拷贝构造的浅拷贝所带来的问题3.如何实现深拷贝二.运算符重载1.赋值运算符重载2.大小比较相关的运算符重载三.迭代器的实现四.string常用操作的实现1.静态const成员npos的定义2.插入操作3.查找......
  • 对软件工程的理解
    随着软件变得越来越复杂,传统的软件开发手段的成本急速膨胀,软件工程这门学科也由此诞生。软件工程的目的是以工程的方法与原理,经济地开发与维护高质量的软件,让成本可控。它涉及程序设计语言,数据库,开发工具,系统平台等诸多方面。在实践中,软件工程借鉴传统工程的方法与管理模式,实现在......
  • 对面试官说精通elastic search之底层原理解读(面试可用)
    一串文本,先经过分词分成词项被称为term。我们要搜索一个词项的时候,如果挨个遍历时间复杂度是0n为了解决查询速度,可以将词项按从小到大排序,排序过后通过二分查找的方法,将时间复杂度优化为ologn,这就组成了一个termdictionary,词项对应的docid就叫postinglist,这两个共同组......
  • 代码随想录算法训练营第六天|理解hash表
    WhatisHashTable?引用自文章链接:https://programmercarl.com/哈希表理论基础.html#哈希表哈希表是根据关键码的值而直接进行访问的数据结构。直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。哈希函数通过hashCode把......
  • 理解 Vue 的 setup 应用程序钩子
    title:理解Vue的setup应用程序钩子date:2024/9/30updated:2024/9/30author:cmdragonexcerpt:摘要:本文详细介绍了Vue3中setup函数的应用,包括其概念、特性、使用方法及重要性。setup函数作为组合API的核心,在组件实例化前被调用,用于设置响应式状态、计算属性、方法......
  • 通过一个小故事,理解 HTTPS 工作原理
    通过一个小故事,理解HTTPS工作原理 本文摘录参考:细说CA和证书(主要讲解CA的使用)数字签名是什么?(简单理解原理)深入浅出HTTPS工作原理(深入理解原理)HTTP协议由于是明文传送,所以存在三大风险:1、被窃听的风险:第三方可以截获并查看你的内容2、被篡改的危险:第三方可......
  • 【玩转Linux】如何简单快速理解权限?
     学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天更新Linux部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是权限~目录 循环渐进Forward-CSDN博客shell命令以及运行......
  • 深入理解 Nuxt.js 中的 app:data:refresh 钩子
    title:深入理解Nuxt.js中的app:data:refresh钩子date:2024/9/29updated:2024/9/29author:cmdragonexcerpt:摘要:本文详细介绍了Nuxt.js框架中的app:data:refresh钩子,包括其定义、用途、使用方法及实际应用案例。该钩子用于在数据刷新时执行额外处理,支持服务器端和客......
  • 经典强化学习算法:分层强化学习算法—options算法2(理解篇)
    论文地址:https://people.cs.umass.edu/~barto/courses/cs687/Sutton-Precup-Singh-AIJ99.pdf例子:这是一个寻路问题,该问题使用强化学习算法解决,准确的来说是使用“表格表示的强化学习算法中的规划算法”来进行解决的;之所以没有说是使用规划算法来说是因为这里使用了学习型......
  • 【C++掌中宝】用最少的话让你全方位理解内联函数
    文章目录引言1.什么是内联函数2.工作原理3.内联函数的编程风格4.使用限制5.内联函数与宏的比较6.优缺点7.何时使用内联函数8.补充9.总结结语引言在C++编程中,函数的调用开销是程序运行效率的一个重要影响因素。为了解决频繁调用函数时的性能问题,C++提供了内......