关于向量值函数方程变分的一点注记

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,jaijbij
它表示的是矩阵的对应位置相乘最后再求和。

对于矩阵内积,我们有如下性质,

  • 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=Du ,且 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. utduuΔuduvΔv=au(1u)bu+αuvvtdvuΔudvvΔv=cu+αuvdv

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关于主定理的几点注记

OpenCV的Scalar对象怎样取分量值?

常微分方程1:与方程联系的相流

为啥我的函数向返回未定义的对象数组添加键和增量值

获取积分向量值

NHibernate 中的标量值函数