gpt4 book ai didi

java - 对称矩阵半矢量化

转载 作者:行者123 更新时间:2023-12-01 23:46:48 25 4
gpt4 key购买 nike

我面临的问题是如何将给定对称矩阵(它是距离矩阵)的下三角因子存储到 vector 中。

一般来说,我想通过仅给出矩形网格上一组点的坐标(Y,Z)来直接生成下三角条目:实际上,这就是我陷入困境的地方。

因此,我开始考虑从稍微不同的角度来解决这个问题:生成完整的距离矩阵(再次给出(Y,Z)对),然后对距离进行一半矢量化矩阵。

尽管如此,我对于如何通过 for 循环实现目标并没有真正的想法。

此外我也知道可能有任何外部Java库实现了vech函数:vech返回消除所有 vector 得到的 vector 方阵 X 的对角线元素,并将结果堆叠在另一列之上。这在矩阵微积分中有用,其中基础矩阵是对称的,并且将值保持在主对角线之上是没有意义的。

基本上,给定一个矩阵A = {{a,c},{b,d}},通过应用vech(A),结果将是vech(A) = {a,b,d}

编辑

我的意思是这样的:

    a11 a12 a13 a14
a22 a23 a24
A= a33 a34 (aij = aji)
a44

A上三角的打包存储:

  AP = { a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 }

最佳答案

public static double[] vech(double[][] a) {
int na = Math.min(a.length, a[0].length); // Dimension of the matrix
int nv = na * (na + 1) / 2; // 1 + 2 + 3 + .. + na
double[] v = new double[nv];
int k = 0; // index in v.
for (int i = 0; i < na; ++i) {
for (int j = 0; j <= i; ++j) {
v[k] = a[i][j];
++k;
}
}
return v;
}

案例 2x2 矩阵:

选择 [0][0]、[1][0]、[1][1](跳过 [0][1])

行主序:(C、C#、Java) a[i][j] 是第 i 行、j 列的元素。

代码使左下角的三角形变平。

列主序:(MATLAB、SciLab) a[i][j] 是 i 列、j 行的元素。

代码压平了右上角的三角形。

其他序列

另一个三角形将给出:

        for (int j = i; j < na; ++j) {

结合主对角线的镜像,再次接收到原始三角形:

            a[j][i]

关于java - 对称矩阵半矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16913762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com