我正在研究使用 FEM 离散化求解系统
内核由域上的所有线性函数组成,所以总是有特征值 0(其中是网格的维数)。
右侧是系统一致的,我想找到系统的解决方案。这个想法是使用 GMRES,从一个全零的初始猜测开始。
文献中是否有一个很好的预处理器?我与 Dirichlet- 和 Neumann-Laplace 一起玩,但没有取得多大成功。
为了感受一下,以下是如何在 sckit-fem 中创建矩阵并绘制频谱:
import matplotlib.pyplot as plt
import meshzoo
import numpy as np
import skfem
from skfem.helpers import dot, grad
@skfem.BilinearForm
def laplace(u, v, _):
return dot(grad(u), grad(v))
@skfem.BilinearForm
def flux(u, v, w):
return dot(w.n, u.grad) * v
points, cells = meshzoo.disk(6, 20)
pT = np.ascontiguousarray(points.T)
cT = np.ascontiguousarray(cells.T)
mesh = skfem.MeshTri(pT, cT)
element = skfem.ElementTriP1()
basis = skfem.CellBasis(mesh, element)
facet_basis = skfem.FacetBasis(basis.mesh, basis.elem)
lap = skfem.asm(laplace, basis)
boundary_terms = skfem.asm(flux, facet_basis)
A = lap - boundary_terms
out = np.linalg.eigvals(A.toarray())
plt.plot(out.real, out.imag, "o")
plt.savefig("out.png", bbox_inches="tight")
plt.show()