关于向量值函数方程变分的一点注记
Posted 陆嵩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于向量值函数方程变分的一点注记相关的知识,希望对你有一定的参考价值。
关于向量值函数方程变分的一点注记
有人说,自己做的都是标量解函数的偏微分方程变分,当遇到解函数是向量值函数时,就不知道有限元空间怎么取,变分也不知道怎么做了。其实是一样的,我这里做个注记。
预备知识
矩阵内积
矩阵内积(Frobenius 含义下的)定义为:
A
:
B
=
∑
i
,
j
a
i
j
b
i
j
A: B=\\sum_i, j a_i j b_i j
A:B=i,j∑aijbij
它表示的是矩阵的对应位置相乘最后再求和。
对于矩阵内积,我们有如下性质,
- D A : B = A : D T B DA:B = A:D^TB DA:B=A:DTB
- A D : B = A : B D T AD:B=A:BD^T AD:B=A:BDT
- A : D B = D T A : B A:DB = D^TA:B A:DB=DTA:B
- A : B D = A D T : B A:BD=AD^T:B A:BD=ADT:B
它从如下表达很容易看出:
A
:
B
=
tr
(
A
T
B
)
=
tr
(
A
B
T
)
A: B=\\operatornametr\\left(A^T B\\right)=\\operatornametr\\left(A B^T\\right)
A:B=tr(ATB)=tr(ABT)
函数向量的梯度
为了方便和统一,我们以后记标量的梯度是个列向量,而矢量的梯度是个矩阵,每一行都表示矢量的某个分量的梯度,即,形如:
∇
f
=
(
f
x
1
f
y
1
f
z
1
f
x
2
f
y
2
f
z
2
)
\\nabla \\mathbff=\\left(\\beginarrayccc f_x^1 & f_y^1 & f_z^1 \\\\ f_x^2 & f_y^2 & f_z^2 \\endarray\\right)
∇f=(fx1fx2fy1fy2fz1fz2)
有些地方,关于矢量梯度的定义差一个转置。那么,拉普拉斯算子为:
Δ
f
=
(
Δ
f
1
Δ
f
2
)
\\Delta \\mathbff=\\left(\\beginarrayccc \\Delta f_^1 \\\\ \\Delta f_^2 \\endarray\\right)
Δf=(Δf1Δf2)
有些人的这两个的定义跟我这里的定义差一个转置。做问题搞程序的时候,要搞清楚有没有转置。
向量值有限元空间
类似于标量函数的有限元空间,考虑向量值函数有限元空间,以二维向量值为例,可以定义为:
V
=
span
[
φ
1
0
]
,
…
,
[
φ
m
0
]
,
[
0
φ
1
]
,
…
,
[
0
φ
m
]
:
=
span
(
ϕ
i
)
\\mathbfV=\\operatornamespan\\left\\\\left[\\beginarrayc \\varphi_1 \\\\ 0 \\endarray\\right], \\ldots,\\left[\\beginarrayc \\varphi_m \\\\ 0 \\endarray\\right],\\left[\\beginarrayc 0 \\\\ \\varphi_1 \\endarray\\right], \\ldots,\\left[\\beginarrayc 0 \\\\ \\varphi_m \\endarray\\right]\\right\\:=\\operatornamespan\\left\\\\left(\\phi_i\\right)\\right\\
V=span[φ10],…,[φm0],[0φ1],…,[0φm]:=span(ϕi)
常数矩阵可穿算子
所有用到常矩阵 D \\mathbfD D 的地方,是可以随意进出梯度和散度算子的,即 ∇ D u = D ∇ u \\nabla_ \\mathbfD \\mathbfu=\\mathbfD \\nabla_ \\mathbfu ∇Du=D∇u ,且 div D u = D div \\operatornamediv \\mathbfD u=\\mathbfD \\operatornamediv divDu=Ddiv 。再 一个对于矩阵的散度和梯度算子,是支持分块矩阵的操作的。
举个简单的例子
有了以上的准备,我们举个简单的例子来看向量值解的方程的变分,
我们考虑这样一个例子:
u t − d u u Δ u − d u v Δ v = a u ( 1 − u ) − b u v u + α v t − d v u Δ u − d v v Δ v = c u v u + α − d v \\left\\\\beginarrayl u_t-d_u u \\Delta_ u-d_u v \\Delta_ v=a u(1-u)-b \\fracu vu+\\alpha \\\\ v_t-d_v u \\Delta_ u-d_v v \\Delta_ v=c \\fracu vu+\\alpha-d v \\endarray\\right. ut−duuΔu−duvΔv=au(1−u)−bu+αuvvt−dvuΔu−dvvΔv=cu+αuv−dv
令
u
=
[
u
,
v
]
T
\\mathbfu=[u, v]^T
u=[u,v]T ,那么上面的方程组可以写为:
u
t
−
D
Δ
u
=
f
(
u
)
\\mathbfu_t-D \\Delta \\mathbfu=\\mathbff(\\mathbfu)
ut关于主定理的几点注记