首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从Java库中找到伪逆?

如何从Java库中找到伪逆?
EN

Stack Overflow用户
提问于 2020-05-13 04:36:40
回答 1查看 552关注 0票数 1

根据这个密码。利用库可以找到伪逆.

代码语言:javascript
运行
AI代码解释
复制
RealMatrix Swinv = new LUDecomposition(Sw).getSolver().getInverse(); // MATLAB: Swinv = pinv(Sw)

但是即使Sw是正方形的,我也可以得到异常org.apache.commons.math3.linear.SingularMatrixException:

根据文档,这个getInverse()是伪逆的。

得到分解矩阵的伪逆。

这等于分解矩阵的逆,如果存在这样的逆。

如果不存在这样的逆,则结果具有类似于逆的性质。

特别是,在这种情况下,如果分解的矩阵是A,那么方程组(A=b)可能没有解,或者有许多解。如果它没有解,则伪逆( A^+ )给出“最近”的解(z= A^+ b ),这意味着(\左_~~_‘“最小”。如果存在多个解,则(z= A^+ b)是最小的解,这意味着(\左\z\右|_2 )最小。

那我在这里该怎么办?我要找到伪逆。但是我仍然有一个错误,因为Sw是单数的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-18 12:32:30

所以我不知道你是从哪里得到的,LUDecomposition的求解器产生了伪逆。实际上,如果您查看代码,您可以看到这只适用于如果存在“精确线性意义上的”解

相反,您应该首先创建一个SingularValueDecomposition

代码语言:javascript
运行
AI代码解释
复制
SingularValueDecomposition svd = new SingularValueDecomposition(A);

然后得到这个奇异值分解所创建的分解求解器,

代码语言:javascript
运行
AI代码解释
复制
DecompositionSolver solver = svd.getSolver();

那么你可以:

  1. 得到伪逆
代码语言:javascript
运行
AI代码解释
复制
RealMatrix pinv = solver.getInverse();
  1. 或者用它来求解像Ax =b这样的方程组
代码语言:javascript
运行
AI代码解释
复制
RealVector x = decompositionSolver.solve(b);
  1. 或者用它来求解矩阵方程组,如Ax =B。
代码语言:javascript
运行
AI代码解释
复制
RealMatrix X = decompositionSolver.solve(B);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61774858

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文