矩阵求解器
-
小白请教一个简单问题,of里面怎么求解一个我自己定义的线性代数方程组?
-
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$。
-
我也设置了一个自己的矩阵方程求解,Ax=b,A是一个40*40的矩阵,x的求解使用了两种方法:
- 使用SVDinv(A)×b;
- 使用LUsolve(A,b)求解,最后b就是所得的x的解。
但是随着代码的运行,我发现Ax-b的值越来越大,所以想请教一下是我的设置有问题么,还是说是矩阵本身条件数的问题,或者是LU分解不太适用于这么大的矩阵呢。
希望看到的老师同学们能帮助我解答疑惑,万分感谢!!
-
@王慧博 问题解决了么 我自己的代码里用的是LUSolve求解3 4 5阶矩阵,目前没啥问题。你那个40阶矩阵,直接解有慢很多么?
-
@李东岳 李老师您好,40阶的矩阵,使用LU分解速度感觉还可以,但是计算出来的结果带入Ax-b会产生很大的差,然后代码在几步内就会崩溃。之后我换了Jacobi迭代的方法,程序能够正常运行了。但是我也不是特别清楚是我的矩阵本身的问题还是LU分解不太适用于比较高阶的矩阵求解。
-
我看了一下Numerical Recipes,他说从理论上:
对于近似奇异的矩阵,高斯消去或者LU分解可能会失败,可以采用SVD算法
。估计就是你的情况了吧。