c++ - 如何使用 Eigen 求解具有 Neumann 型边界条件的方程组?
问题描述
我正在尝试为结构问题编写一个小型 FEM 求解器。我正在用 C++ 编写它并使用Eigen进行矩阵运算。我正在尝试解决问题 Ka=f,其中 K 是稀疏的 n×n 矩阵,f 是稀疏的 1×n 向量。我想在解决方案 a 上应用 Neumann 型边界条件。
如何使用 Eigen 实现这一目标?还是我对这个问题的看法完全错误?
我无法产生我想要实现的 MWE,但这里有一个骨架 MWE:
#include <iostream>
#include <Eigen/Sparse>
int main(int argc, char const *argv[])
{
// K is supposed to be positive definite
Eigen::SparseMatrix<float> K;
Eigen::SparseMatrix<float> f;
Eigen::SparseMatrix<float> a;
K.resize(6,6);
f.resize(6,1);
// fill them with some arbitrary numbers...
K.coeffRef(0,0)=127700;K.coeffRef(0,1)=127700;K.coeffRef(0,2)=127700;K.coeffRef(0,3)=127700;K.coeffRef(0,4)=127700;K.coeffRef(0,5)=127700;
K.coeffRef(1,0)=127700;K.coeffRef(1,1)=39179.1;K.coeffRef(1,2)=-107963;K.coeffRef(1,3)=-294.578;K.coeffRef(1,4)=-19736.8;K.coeffRef(1,5)=-38884.5;
K.coeffRef(2,0)=127700;K.coeffRef(2,1)=-107963;K.coeffRef(2,2)=-19736.8;K.coeffRef(2,3)=39179.1;K.coeffRef(2,4)=294.578;K.coeffRef(2,5)=-39473.7;
K.coeffRef(3,0)=127700;K.coeffRef(3,1)=-294.578;K.coeffRef(3,2)=39179.1;K.coeffRef(3,3)=-10015.7;K.coeffRef(3,4)=-107963;K.coeffRef(3,5)=-39179.1;
K.coeffRef(4,0)=127700;K.coeffRef(4,1)=-19736.8;K.coeffRef(4,2)=294.578;K.coeffRef(4,3)=-107963;K.coeffRef(4,4)=-19736.8;K.coeffRef(4,5)=-39179.1;
K.coeffRef(5,0)=127700;K.coeffRef(5,1)=-38884.5;K.coeffRef(5,2)=-39473.7;K.coeffRef(5,3)=-39179.1;K.coeffRef(5,4)=-39179.1;K.coeffRef(5,5)=-39473.7;
f.coeffRef(5,0)=1.0f;
Eigen::SimplicialLDLT<Eigen::SparseMatrix<float>> solver;
solver.compute(K);
// How to apply boundary conditions on specific values on a?
a = solver.solve(f);
return 0;
}
解决方案
推荐阅读
- mysql - Symfony 5 和 Doctrine,找不到使用 3 个相关实体获取结果的方法
- html - HTML 是否需要在文档末尾换行?
- node.js - 在 fetch 方法中调用 graphql 查询
- java - 消息列表的 RSA 解密速度很慢
- python-sphinx - sphinx:嵌套目录中的嵌套包含
- django - virtualenv中的uwsgi,但django的附加守护进程没有得到venv
- lua - 如何在播放器上放置级联(ESP)?
- c++ - MSBuild - 如何在编译时判断文件是否存在并使用它?
- r - 表格:如何衡量不同日期的维度集的相似性?
- javascript - 使用 axioson 400 和 401 状态码检索响应错误