近似∥ Δ f∥2大号2( Ω )‖Δf‖L2(Ω)2在有限元环境中

计算科学 有限元 有限体积
2021-11-28 05:37:36

我有形式的最小化问题

G(f)+ΔfL2(Ω)2min
在所有中,是封闭的和有界的。fC2(Ω)Ω

让我们忘记 ; 我对如何离散化范数感兴趣。在有限体积的情况下,有 所以 其中是质量矩阵和投影到离散空间。GL2

Ω(Δf)2=iVi(Δf)2i|Vi|(Δf)(xi)2i|Vi|(|Vi|1ViΔf)2=i|Vi|1(ViΔf)2,
ΔfL2(Ω)ΔhPh(f)M1
MPh

从数值实验(见下文)看来,这也适用于有限类型的函数(具有相应的质量矩阵;见下面的代码)。

有谁知道这是为什么?


import sympy
from dolfin import (
    Expression,
    FacetNormal,
    Function,
    FunctionSpace,
    TestFunction,
    TrialFunction,
    UnitSquareMesh,
    assemble,
    dot,
    ds,
    dx,
    grad,
    project,
    solve,
)

mesh = UnitSquareMesh(500, 500)
V = FunctionSpace(mesh, "CG", 1)

u = TrialFunction(V)
v = TestFunction(V)

n = FacetNormal(mesh)
A = assemble(dot(grad(u), grad(v)) * dx - dot(n, grad(u)) * v * ds)
M = assemble(u * v * dx)

f = Expression("sin(pi * x[0]) * sin(pi * x[1])", element=V.ufl_element())
x = project(f, V)

Ax = A * x.vector()
Minv_Ax = Function(V).vector()
solve(M, Minv_Ax, Ax)
val = Ax.inner(Minv_Ax)

print(val)


# Exact value
x = sympy.Symbol("x")
y = sympy.Symbol("y")
f = sympy.sin(sympy.pi * x) * sympy.sin(sympy.pi * y)
f2 = -sympy.diff(f, x, x) - sympy.diff(f, y, y)
val2 = sympy.integrate(sympy.integrate(f2 ** 2, (x, 0, 1)), (y, 0, 1))
print(sympy.N(val2))

输出:

97.75031146783857
97.4090910340024
1个回答

当然,问题是典型的有限元形状函数不是二次可微的,因此Δf不存在作为您可以轻松接受规范的功能。更准确地说,典型的形状函数是连续的,因此导数在单元界面上是不连续的,因此二阶导数在单元内部具有易于积分的部分,并且存在于界面上的分布值部分。这部分不能平方和积分。

因此,您想要最小化的目标函数在典型的有限元空间上没有得到很好的定义。您要么必须根据定义明确的范数重述问题,并且以某种方式必须涉及解梯度的跳跃,或者通过一个连续函数来近似解的梯度,该函数的梯度可以平方和整合。