gpt4 book ai didi

android - 如何在 Android Studio 中无错误地覆盖/更新 Jama Matrix?

转载 作者:行者123 更新时间:2023-11-29 00:51:38 38 4
gpt4 key购买 nike

Jama 矩阵在我的代码(矩阵计算类)中定义如下:

private Matrix A;
private Matrix B;
private Matrix C;

矩阵A初始化如下:

A = new Matrix(2,2);
A.set(0,0,1.5);
A.set(0,1,0.0);
A.set(1,0,0.0);
A.set(1,1,1.5);

矩阵 B 是一个 2*2 矩阵,初始化为单位矩阵,每秒由 MainActivity 类中的下一个相同大小的矩阵更新。

矩阵 C 的初始化和计算如下:

 if(C!=null)
C = A.plus(C.times(B));
else {
C = new Matrix(2,2);
C.set(0,0,1);
C.set(0,1,0.0);
C.set(1,0,0.0);
C.set(1,1,1);

在这里,Matrix 计算类 每秒被MainActivity 类 调用,并且矩阵B 会相应地更新。但是,代码仅在第一次迭代时运行良好,并在稍后抛出错误,如下所示:

java.lang.IllegalArgumentException: Matrix inner dimensions must agree.

经过一番挖掘,我发现这是由于矩阵覆盖(矩阵BC)引起的。我代码中的矩阵不能是 staticfinal。当矩阵不是静态时,有什么方法可以使用 Jama 矩阵吗? android studio 中有没有Jama 的替代品进行Matrix 运算?

最佳答案

查看 JAMA 提供的源代码,在那个地方抛出了 IllegalArgumentException:

   /** Linear algebraic matrix multiplication, A * B
@param B another matrix
@return Matrix product, A * B
@exception IllegalArgumentException Matrix inner dimensions must agree.
*/

public Matrix times (Matrix B) {
if (B.m != n) {
throw new IllegalArgumentException("Matrix inner dimensions must agree.");
}
Matrix X = new Matrix(m,B.n);
double[][] C = X.getArray();
double[] Bcolj = new double[n];
for (int j = 0; j < B.n; j++) {
for (int k = 0; k < n; k++) {
Bcolj[k] = B.A[k][j];
}
for (int i = 0; i < m; i++) {
double[] Arowi = A[i];
double s = 0;
for (int k = 0; k < n; k++) {
s += Arowi[k]*Bcolj[k];
}
C[i][j] = s;
}
}
return X;
}

所以 C.times(B) 显然失败了,这意味着 CB 维度不一致。我们还可以从下面的行中看到,C = new Matrix(2,2) 确实有 2x2 大小,这意味着 B 的大小一定是错误的。

我不明白“矩阵覆盖”是什么意思? C = A.plus(C.times(B)) 确实在内部分配了一个新的 Matrix 实例。这与 staticfinal 无关。

请提供complete, minimal example .缺少很多部分,比如 B 初始化的地方。

关于android - 如何在 Android Studio 中无错误地覆盖/更新 Jama Matrix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024375/

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