- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解用java描述矩阵求逆的算法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
今天很开心把困扰几天的问题解决了,在学习线性代数这门课程的时候。想通过程序实现里面的计算方法,比如矩阵求逆,用java代码该如何描述呢?
首先,咱们先用我们所交流语言描述一下算法思路
1.求出一个矩阵a对应的行列式在第i,j(i表示行,j表示列)位置的余子式(余子式前面乘以-1^(i+j)即得代数余子式); 。
2.根据代数余子式求得矩阵a行列式的值。(行列式展开法); 。
3.根据代数余子式和行列式的值求出伴随矩阵; 。
4.由伴随矩阵和矩阵行列式值求逆矩阵。(a^-1 = a* / |a|).
了解上述算法思路后,废话少说,上代码.
1.求出一个矩阵a对应的行列式在第i,j(i表示行,j表示列)位置的余子式(余子式前面乘以-1^(i+j)即得代数余子式); 。
1
|
/**<br> * 求矩阵在i,j处余子式<br> * @param mat<br> * @param i<br> * @param j<br> * @return<br> */
<br>
public
static
matrix getcomplementminor(matrix mat,
int
i,
int
j) {<br>
//创建一个新的矩阵用于接收表示该余子式,需删除本行本列的数值<br> matrix m = new matrix(mat.getrow()-1,mat.getcol()-1); <br> //用于遍历新矩阵m的变量<br> int row =0 ,col=0;<br> /*<br> * 遍历原矩阵的数据,j2表示行,k表示列<br> */<br> for (int j2 = 0; j2 < mat.getrow(); j2++) {<br> //在第i行除的数据省略<br> if(j2 == i) continue; <br> for (int k = 0; k < mat.getcol(); k++) {<br> //在第j列的数据省略<br> if(k == j) continue;<br> //赋值<br> m.setvalue(row, col,mat.getvalue(j2, k));<br> //遍历新矩阵的变量<br> col++;<br> if(col >= m.getcol() ) {<br> col = 0;<br> row++;<br> }<br> }<br> }<br> return m;<br> }
|
a行列式的值。(行列式展开法); 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/**
* 求矩阵的行列式的值
* @param mat
* @return
*/
public
static
double
getmatrixvalue(matrix mat) {
if
(mat.getrow() != mat.getcol()) {
system.out.println(
"该矩阵不是方阵,没有行列式"
);
return
double
.min_value;
}
//若为1*1矩阵则直接返回
if
(mat.getrow() ==
1
)
return
mat.getvalue(
0
,
0
);
//若为2*2矩阵则直接计算返回结果
if
(mat.getrow() ==
2
) {
return
mat.getvalue(
0
,
0
)*mat.getvalue(
1
,
1
) - mat.getvalue(
0
,
1
)*mat.getvalue(
1
,
0
);
}
//行列式的值
double
matrixvalue =
0
;
for
(
int
i =
0
; i < mat.getcol(); i++) {
//获取0,i位置的余子式,即第一行的余子式
matrix m = getcomplementminor(mat,
0
, i);
//将第一行的余子式相加 ,递归下去
matrixvalue += math.pow(-
1
, i) * getmatrixvalue(m);
}
return
matrixvalue;
}
|
3.根据代数余子式和行列式的值求出伴随矩阵; 。
1
|
/**<br> * 求矩阵的伴随矩阵<br> * @param mat<br> * @return<br> */
<br>
public
static
matrix getwithmatrix(matrix mat) {<br>
//创建一个矩阵存放伴随矩阵的值<br> matrix withmatrix = new matrix(mat.getrow(),mat.getcol());<br> //遍历withmatrix存放对应的mat的值<br> for (int i = 0; i < withmatrix.getrow(); i++) {<br> for (int j = 0; j < withmatrix.getcol(); j++) {<br> double temp = math.pow(-1, i+j) * matrixutil.getmatrixvalue(matrixutil.getcomplementminor(mat, j, i));<br> if(math.abs(temp) <= 10e-6) temp = 0;<br> withmatrix.setvalue(i, j,temp);<br> }<br> }<br> //返回结果<br> return withmatrix; <br> }
|
4.由伴随矩阵和矩阵行列式值求逆矩阵。(a^-1 = a* / |a|).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/**
* 求逆矩阵
* @param mat
* @return
*/
public
static
matrix getrematrix(matrix mat) {
//创建一个矩阵接收逆矩阵数据
matrix rematrix =
new
matrix(mat.getrow(),mat.getcol());
//得到原矩阵行列式的值
double
value = matrixutil.getmatrixvalue(mat);
//判断矩阵行列式的值是否为零
if
(math.abs(value) <= 10e-
6
) {
system.out.println(
"该矩阵不可逆!"
);
return
null
;
}
//将原矩阵mat赋值除以原行列式的值value给逆矩阵
for
(
int
i =
0
; i < rematrix.getrow(); i++) {
for
(
int
j =
0
; j < rematrix.getcol(); j++) {
rematrix.setvalue(i, j, matrixutil.getwithmatrix(mat).getvalue(i, j) / value);
}
}
return
rematrix;
}
|
以上所述是小编给大家介绍的用java描述矩阵求逆的算法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://www.cnblogs.com/Thomas-Wang/p/10453195.html 。
最后此篇关于详解用java描述矩阵求逆的算法的文章就讲到这里了,如果你想了解更多关于详解用java描述矩阵求逆的算法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
假设我有两个矩阵,每个矩阵有两列和不同的行数。我想检查并查看一个矩阵的哪些对在另一个矩阵中。如果这些是一维的,我通常只会做 a %in% x得到我的结果。 match似乎只适用于向量。 > a
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 个月前。 Improv
我只处理过 DirectX 矩阵 我读过一些文章,说不能将 DirectX 矩阵数学库用于 openGL 矩阵。 但我也读过,如果你的数学是一致的,你可以获得类似的结果。那只会让我更加困惑。 任何人都
我编写了一个C++代码来解决线性系统A.x = b,其中A是一个对称矩阵,方法是首先使用LAPACK(E)对角矩阵A = V.D.V^T(因为以后需要特征值),然后求解x = A^-1.b = V^T
我遇到了问题。我想创建二维数组 rows=3 cols=2我的代码如下 int **ptr; int row=3; int col=2; ptr=new int *[col]; for (int i=
我有一个 3d mxnxt 矩阵,我希望能够提取 t 2d nxm 矩阵。在我的例子中,我有一个 1024x1024x10 矩阵,我想要 10 张图像显示给我。 这不是 reshape ,我每次只需要
我在 MATLAB 中有一个 3d 矩阵 (n-by-m-by-t) 表示一段时间内网格中的 n-by-m 测量值.我想要一个二维矩阵,其中空间信息消失了,只剩下 n*m 随着时间 t 的测量值(即:
作为一个简化的示例,我有一个 3D numpy 矩阵,如下所示: a = np.array([[[1,2], [4,np.nan], [7,
作为一个简化的示例,我有一个 3D numpy 矩阵,如下所示: a = np.array([[[1,2], [4,np.nan], [7,
使用 eigen2 , 并给定一个矩阵 A a_0_0, a_0_1, a_0_2, ... a_1_0, a_1_0, a_1_2, ... ... 和一个矩阵B: b_0_0, b_0_1, b_
我想知道如何获得下面的布局。 在中型和大型设备上,我希望有 2 行和 2 列的布局(2 x 2 矩阵)。 在小型(和超小型)设备上或调整为小型设备时,我想要一个 4 行和 1 列的矩阵。 我将通过 a
有什么方法可以向量化以下内容: for i = 1:6 te = k(:,:,:,i).*(c(i)); end 我正在尝试将 4D 矩阵 k 乘以向量 c,方法是将其
如何从填充有 1 和 0 的矩阵中抽取 n 个随机点的样本? a=rep(0:1,5) b=rep(0,10) c=rep(1,10) dataset=matrix(cbind(a,b,c),nrow
我正在尝试创建一个包含 X 个 X 的矩阵。以下代码生成从左上角到右下角的 X 对 Angular 线,而不是从右上角到左下角的 X 对 Angular 线。我不确定从哪里开始。是否应该使用新变量创建
我想在 python 中创建一个每行三列的矩阵,并能够通过任何一行对它们进行索引。矩阵中的每个值都是唯一的。 据我所知,我可以设置如下矩阵: matrix = [["username", "name"
我有点迷茫 我创建了一个名为 person 的类,它具有 age 和 name 属性(以及 get set 方法)。然后在另一个类中,我想创建一个 persons 数组,其中每个人都有不同的年龄和姓名
我有 n 个类,它们要么堆叠,要么不堆叠。所有这些类都扩展了同一个类 (CellObject)。我知道更多类将添加到此列表中,我想创建一种易于在一个地方操纵“可堆叠性”的方法。 我正在考虑创建一个矩阵
我有一个包含 x 个字符串名称及其关联 ID 的文件。本质上是两列数据。 我想要的是一个格式为 x x x 的相关样式表(将相关数据同时作为 x 轴和 y 轴),但我想要 fuzzywuzzy 库的函
机器学习与传统编程的一个重要区别在于机器学习比传统编程涉及了更多的数学知识。不过,随着机器学习的飞速发展,各种框架应运而生,在数据分析等应用中使用机器学习时,使用现成的库和框架成为常态,似乎越来越不需
当我在 julia 中输入这个错误跳转但我不知道为什么,它应该工作。/ julia> A = [1 2 3 4; 5 6 7 8; 1 2 3 4; 5 6 7 8] 4×4 Array{Int64,
我是一名优秀的程序员,十分优秀!