我正在用 MATLAB 中的稀疏矩阵求解 Biot 方程。我对全局稀疏矩阵组装没有问题,但是当我分配 Dirichlet 边界条件时,它太慢了。
从这个主题,如何在全局稀疏有限元刚度矩阵中有效地实现狄利克雷边界条件,@James 还提到如果修改全局矩阵会很慢。我的矩阵是 25000x25000,分配边界条件大约需要 100 秒。
在 MATLAB 中,许多作者指出,通过使用setdiff函数,在求解方程时只考虑自由节点。应用狄利克雷边界条件时只修改右手向量,全局矩阵保持不变。
Hier 是 MATLAB 中的代码:
% Dirichlet conditions
u = sparse(size(coordinates,1),1);
u(unique(dirichlet)) = u_d(coordinates(unique(dirichlet),:));
b = b - A * u;
% Computation of the solution
u(FreeNodes) = A(FreeNodes,FreeNodes) \ b(FreeNodes);
两种方法有什么区别?在 C++ 中是否有与setdiffMATLAB 中类似的功能?

