模型降阶方法之 DEIM
为什么叫插值,为什么叫greedy,可以看得出来,我们选的就是投影之后,距离最大的一个点,然后把它固定。也就是说,我们对于$\mathbf{F}$选行,我们只要计算里面必要分量作用即可,也就是可以把选行操作放到$\mathbf{F}$里面去。POD方法固有的局限性,使得无法很好地处理非线性项,所以必须有一个合适的方法处理非线性项。这里看起来,似乎还需要把非线性项施加于每个分量算出来,其实并不然,这
模型降阶方法之 DEIM
POD 方法可以参考:
https://blog.csdn.net/lusongno1/article/details/125944587
POD 方法固有的局限性,使得无法很好地处理非线性项,所以必须有一个合适的方法处理非线性项。
模型问题
我们考虑的问题依然是,
d d t y ( t ) = A y ( t ) + F ( y ( t ) ) \frac{d}{d t} \mathbf{y}(t)=\mathbf{A} \mathbf{y}(t)+\mathbf{F}(\mathbf{y}(t)) dtdy(t)=Ay(t)+F(y(t))
它对应的稳态问题是,
A y ( μ ) + F ( y ( μ ) ) = 0 \mathbf{A} \mathbf{y}(\mu)+\mathbf{F}(\mathbf{y}(\mu))=0 Ay(μ)+F(y(μ))=0
一些迭代法,比如牛顿法,需要雅克比矩阵。把 ( y (\mathbf{y} (y 看做变量,稳态问题对应的雅克比是,
J ( y ( μ ) ) : = A + J F ( y ( μ ) ) \mathbf{J}(\mathbf{y}(\mu)):=\mathbf{A}+\mathbf{J}_{\mathbf{F}}(\mathbf{y}(\mu)) J(y(μ)):=A+JF(y(μ))
其中,
J F ( y ( μ ) ) = diag { F ′ ( y 1 ( μ ) ) , … , F ′ ( y n ( μ ) ) } \mathbf{J}_{\mathbf{F}}(\mathbf{y}(\mu))=\operatorname{diag}\left\{F^{\prime}\left(\mathbf{y}_{1}(\mu)\right), \ldots, F^{\prime}\left(\mathbf{y}_{n}(\mu)\right)\right\} JF(y(μ))=diag{F′(y1(μ)),…,F′(yn(μ))}
POD 方法回顾
根据之前提的 POD 方法,我们取 snapshot 矩阵 Y = [ y 1 , … , y n s ] \mathbf{Y}=\left[\mathbf{y}_{1}, \ldots, \mathbf{y}_{n_{s}}\right] Y=[y1,…,yns] 的奇异值分解,
Y = V Σ W T \mathbf{Y}=\mathbf{V} \Sigma \mathbf{W}^{T} Y=VΣWT
取左奇异向量前 k k k 列,
V k = [ v 1 , … , v k ] \mathbf{V_k}=\left[\mathbf{v}_{1}, \ldots, \mathbf{v}_{k}\right] Vk=[v1,…,vk]
那么,上述的稳态问题和非稳态问题就约为了,
d d t y ~ ( t ) = V k T A V k ⏟ A ~ y ~ ( t ) + V k T F ( V k y ~ ( t ) ) \frac{d}{d t} \tilde{\mathbf{y}}(t)=\underbrace{\mathbf{V}_{k}^{T} \mathbf{A} \mathbf{V}_{k}}_{\tilde{\mathbf{A}}} \tilde{\mathbf{y}}(t)+\mathbf{V}_{k}^{T} \mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(t)\right) dtdy~(t)=A~ VkTAVky~(t)+VkTF(Vky~(t))
V k T A V k ⏟ A ~ y ~ ( μ ) + V k T F ( V k y ~ ( μ ) ) = 0 \underbrace{\mathbf{V}_{k}^{T} \mathbf{A} \mathbf{V}_{k}}_{\tilde{\mathbf{A}}} \tilde{\mathbf{y}}(\mu)+\mathbf{V}_{k}^{T} \mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(\mu)\right)=0 A~ VkTAVky~(μ)+VkTF(Vky~(μ))=0
稳态问题的雅克比为,
J ~ ( y ~ ( μ ) ) : = A ~ + V k T J F ( V k y ~ ( μ ) ) V k . \tilde{\mathbf{J}}(\tilde{\mathbf{y}}(\mu)):=\tilde{\mathbf{A}}+\mathbf{V}_{k}^{T} \mathbf{J}_{\mathbf{F}}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(\mu)\right) \mathbf{V}_{k}. J~(y~(μ)):=A~+VkTJF(Vky~(μ))Vk.
离散经验插值方法
离散经验插值方法(DISCRETE EMPIRICAL INTERPOLATION METHOD),简称 DEIM,是处理非线性项的一种方法。下面我们来介绍一下,它的计算流程,最后再来考虑它的原理。
如前所述,我们只要考虑非线性项,
N ~ ( y ~ ) : = V k T ⏟ k × n F ( V k y ~ ( t ) ) ⏟ n × 1 . \tilde{\mathbf{N}}(\tilde{\mathbf{y}}):=\underbrace{\mathbf{V}_{k}^{T}}_{k \times n} \underbrace{\mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(t)\right)}_{n \times 1} . N~(y~):=k×n VkTn×1 F(Vky~(t)).
为了方便,我们统一用记号 f ( τ ) \mathbf{f}(\tau) f(τ) 来表示 F ( V k y ~ ( μ ) ) \mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(\mu)\right) F(Vky~(μ)) 和 F ( V k y ~ ( t ) ) \mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(t)\right) F(Vky~(t))。
我们企图获得非线性项的线性表示,即
f ( τ ) ≈ U c ( τ ) \mathbf{f}(\tau) \approx \mathbf{U c}(\tau) f(τ)≈Uc(τ)
其中, U = [ u 1 , … , u m ] \mathbf{U}=\left[\mathbf{u}_{1}, \ldots, \mathbf{u}_{m}\right] U=[u1,…,um] 是对应于 f \mathbf{f} f 的 POD 基。为了确定 c ( τ ) \mathbf{c}(\tau) c(τ) 的表达,我们不妨求解矛盾方程组,
f ( τ ) = U c ( τ ) \mathbf{f}(\tau) = \mathbf{U c}(\tau) f(τ)=Uc(τ)
求解这个矛盾方程组,我们可以玄奇其中的 m m m 行来求解,即
P T f ( τ ) = ( P T U ) c ( τ ) \mathbf{P}^{T} \mathbf{f}(\tau)=\left(\mathbf{P}^{T} \mathbf{U}\right) \mathbf{c}(\tau) PTf(τ)=(PTU)c(τ)
其中,
P = [ e ℘ 1 , … , e ℘ m ] \mathbf{P}=\left[\mathbf{e}_{\wp_{1}}, \ldots, \mathbf{e}_{\wp_{m}}\right] P=[e℘1,…,e℘m]
e j \mathbf{e}_{j} ej 表示只有第 j j j 个位置是 1,其他都是 0 的列向量。那么,
f ( τ ) ≈ U c ( τ ) = U ( P T U ) − 1 P T f ( τ ) \mathbf{f}(\tau) \approx \mathbf{U c}(\tau)=\mathbf{U}\left(\mathbf{P}^{T} \mathbf{U}\right)^{-1} \mathbf{P}^{T} \mathbf{f}(\tau) f(τ)≈Uc(τ)=U(PTU)−1PTf(τ)
这里看起来,似乎还需要把非线性项施加于每个分量算出来,其实并不然,这里的 P T \mathbf{P}^{T} PT 其实就是个选行操作。我们只要计算选出的哪些行即可。
如何选定这个 U \mathbf{U} U 的若干行去逼近这个 U \mathbf{U} U,我们可以用 greedy 的策略,也就是所谓的 DEIM 方法。
这里的 P \mathbf{P} P (选哪些行)怎么确定?这边是 DEIM 的精髓。
如此一来,DEIM 是怎么操作的就很清楚了。为什么叫插值,为什么叫 greedy,可以看得出来,我们选的就是投影之后,距离最大的一个点,然后把它固定。固定点不就是插值么,选最大不就是贪婪么。
DEIM 误差界
容易证明,非线性项的逼近误差其实是满足,
∥ f ( τ ) − f ^ ( τ ) ∥ 2 ≤ C E ∗ ( τ ) \|\mathbf{f}(\tau)-\hat{\mathbf{f}}(\tau)\|_{2} \leq \mathbf{C} \mathscr{E}_{*}(\tau) ∥f(τ)−f^(τ)∥2≤CE∗(τ)
其中,
E ∗ ( τ ) = ∥ ( I − U U T ) f ( τ ) ∥ 2 \mathscr{E}_{*}(\tau)=\left\|\left(\mathbf{I}-\mathbf{U U}^{T}\right) \mathbf{f}(\tau)\right\|_{2} E∗(τ)=∥
∥(I−UUT)f(τ)∥
∥2
C = ∥ ( P T U ) − 1 ∥ ≤ ( 1 + 2 n ) m \mathbf{C}=\left\|\left(\mathbf{P}^{T} \mathbf{U}\right)^{-1}\right\| \leq(1+\sqrt{2 n})^{m} C=∥
∥(PTU)−1∥
∥≤(1+2n)m
DEIM 应用细节
上面提到的 P \mathbf{P} P 其实只是一些选行的操作,那么,容易想到
F ( V k y ~ ( t ) ) ≈ U ( P T U ) − 1 P T F ( V k y ~ ( t ) ) = U ( P T U ) − 1 F ( P T V k y ~ ( t ) ) \begin{aligned} \mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(t)\right) & \approx \mathbf{U}\left(\mathbf{P}^{T} \mathbf{U}\right)^{-1} \mathbf{P}^{T} \mathbf{F}\left(\mathbf{V}_{k} \tilde{\mathbf{y}}(t)\right) \\ &=\mathbf{U}\left(\mathbf{P}^{T} \mathbf{U}\right)^{-1} \mathbf{F}\left(\mathbf{P}^{T} \mathbf{V}_{k} \tilde{\mathbf{y}}(t)\right) \end{aligned} F(Vky~(t))≈U(PTU)−1PTF(Vky~(t))=U(PTU)−1F(PTVky~(t))
也就是说,我们对于 $ \mathbf{F}$ 选行,我们只要计算里面必要分量作用即可,也就是可以把选行操作放到 $ \mathbf{F}$ 里面去。
这么操作之后,前置项可以提前算好。那么,在每次迭代中,就没有跟 n n n 次相关的操作了,大大缩减了计算量。
同理,对于稳态相关的问题,我们需要计算其雅克比,非线性项的雅克比矩阵为,
J ~ F ( y ~ ( μ ) ) ≈ V k T U ( P T U ) − 1 ⏟ precomputed:k × m J F ( P T V k y ~ ( μ ) ) ⏟ m × m P T V k ⏟ m × k , \tilde{\mathbf{J}}_{\mathbf{F}}(\tilde{\mathbf{y}}(\mu)) \approx \underbrace{\mathbf{V}_{k}^{T} \mathbf{U}\left(\mathbf{P}^{T} \mathbf{U}\right)^{-1}}_{\text {precomputed:k } \times m} \underbrace{\mathbf{J}_{\mathbf{F}}\left(\mathbf{P}^{T} \mathbf{V}_{k} \tilde{\mathbf{y}}(\mu)\right)}_{m \times m} \underbrace{\mathbf{P}^{T} \mathbf{V}_{k}}_{m \times k}, J~F(y~(μ))≈precomputed:k ×m VkTU(PTU)−1m×m JF(PTVky~(μ))m×k PTVk,
其中,
J F ( P T V k y ~ ( μ ) ) = diag { F ′ ( y 1 r ( μ ) ) , … , F ′ ( y m r ( μ ) ) } \mathbf{J}_{\mathbf{F}}\left(\mathbf{P}^{T} \mathbf{V}_{k} \tilde{\mathbf{y}}(\mu)\right)=\operatorname{diag}\left\{F^{\prime}\left(\mathbf{y}_{1}^{r}(\mu)\right), \ldots, F^{\prime}\left(\mathbf{y}_{m}^{r}(\mu)\right)\right\} JF(PTVky~(μ))=diag{F′(y1r(μ)),…,F′(ymr(μ))}
y r ( μ ) = P T V k y ~ ( μ ) \mathbf{y}^{r}(\mu)=\mathbf{P}^{T} \mathbf{V}_{k} \tilde{\mathbf{y}}(\mu) yr(μ)=PTVky~(μ)
同样可知,它的计算量也不大。
参考
Chaturantabut S, Sorensen D C. Discrete empirical interpolation for nonlinear model reduction[C]//Proceedings of the 48h IEEE Conference on Decision and Control (CDC) held jointly with 2009 28th Chinese Control Conference. IEEE, 2009: 4316-4321.
Model reduction and approximation: theory and algorithms[M]. Society for Industrial and Applied Mathematics, 2017.

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)