Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 矩阵求解器

矩阵求解器

已定时 已固定 已锁定 已移动 OpenFOAM
7 帖子 4 发布者 5.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 肖恩曼肖 离线
    肖恩曼肖 离线
    肖恩曼
    写于 最后由 编辑
    #1

    小白请教一个简单问题,of里面怎么求解一个我自己定义的线性代数方程组?

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #2
    scalarDiagonalMatrix rhsU(3, 0);
    			scalarDiagonalMatrix rhsV(3, 0);
    
    			//- U component
    			{
    				SquareMatrix<scalar>  momentsMatrix(3);
    
    				for(int i = 0; i < 3; i++)
    				{
    					for(int j = 0; j < 3; j++)
    					{
    						momentsMatrix(i, j) = M_[i + j][cellI];
    					}
    				}
    
    
    				for(int i = 0; i < 3; i++)
    				{
    					rhsU[i] = M_[i + 6][cellI];
    				}
    
    				LUsolve(momentsMatrix, rhsU);
    			}
    

    给你举个栗子,主要是后面的LUsolve,第一个参数momentsMatrix是$x=Ab$中的$A$,第二个参数rhsU是$b$。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 王 离线
    王 离线
    王慧博
    写于 最后由 编辑
    #3

    我也设置了一个自己的矩阵方程求解,Ax=b,A是一个40*40的矩阵,x的求解使用了两种方法:

    • 使用SVDinv(A)×b;
    • 使用LUsolve(A,b)求解,最后b就是所得的x的解。
      但是随着代码的运行,我发现Ax-b的值越来越大,所以想请教一下是我的设置有问题么,还是说是矩阵本身条件数的问题,或者是LU分解不太适用于这么大的矩阵呢。
      :135: 希望看到的老师同学们能帮助我解答疑惑,万分感谢!!
    李东岳李 MicroM 2 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 王慧博 最后由 编辑
    #4

    @王慧博 问题解决了么 我自己的代码里用的是LUSolve求解3 4 5阶矩阵,目前没啥问题。你那个40阶矩阵,直接解有慢很多么?

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    王 1 条回复 最后回复
  • 王 离线
    王 离线
    王慧博
    在 中回复了 李东岳 最后由 编辑
    #5

    @李东岳 李老师您好,40阶的矩阵,使用LU分解速度感觉还可以,但是计算出来的结果带入Ax-b会产生很大的差,然后代码在几步内就会崩溃。之后我换了Jacobi迭代的方法,程序能够正常运行了。但是我也不是特别清楚是我的矩阵本身的问题还是LU分解不太适用于比较高阶的矩阵求解。:papa:

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #6

    我看了一下Numerical Recipes,他说从理论上:对于近似奇异的矩阵,高斯消去或者LU分解可能会失败,可以采用SVD算法。估计就是你的情况了吧。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • MicroM 离线
    MicroM 离线
    Micro
    在 中回复了 王慧博 最后由 编辑
    #7

    @王慧博 在 矩阵求解器 中说:

    LUsolve

    您好。请问LUsolve是OF自带的函数吗? 还有一个问题,为啥LUsolve可以直接调用而不是通过对象访问成员函数的方式调用呢?难道LUsolve是一个全局函数吗?谢谢大神!!!

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]