Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android Studio中覆盖/更新Jama矩阵而不出现任何错误?_Android_Android Studio_Matrix_Jama - Fatal编程技术网

如何在Android Studio中覆盖/更新Jama矩阵而不出现任何错误?

如何在Android Studio中覆盖/更新Jama矩阵而不出现任何错误?,android,android-studio,matrix,jama,Android,Android Studio,Matrix,Jama,Jama矩阵在我的代码(矩阵计算类)中定义如下: private Matrix A; private Matrix B; private Matrix C; 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); if(C!=null) C = A.plus(C.times(B)); else { C = new Matrix(2,2); C.set(0,0,1);

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

private Matrix A;
private Matrix B;
private Matrix C;
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);
 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);
java.lang.IllegalArgumentException: Matrix inner dimensions must agree.
矩阵
A
初始化如下:

private Matrix A;
private Matrix B;
private Matrix C;
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);
 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);
java.lang.IllegalArgumentException: Matrix inner dimensions must agree.
矩阵
B
是一个2*2矩阵,初始化为单位矩阵,并由
MainActivity
类中大小相同的下一个矩阵每秒更新一次

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

private Matrix A;
private Matrix B;
private Matrix C;
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);
 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);
java.lang.IllegalArgumentException: Matrix inner dimensions must agree.
这里,MainActivity类每秒调用一次矩阵计算类,并相应地更新矩阵
B
。但是,代码仅在第一次迭代中运行良好,并在稍后抛出错误,如下所示:

private Matrix A;
private Matrix B;
private Matrix C;
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);
 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);
java.lang.IllegalArgumentException: Matrix inner dimensions must agree.

经过一番挖掘,我发现这是由于矩阵覆盖造成的(矩阵
B
C
)。我的代码中的矩阵不能是
静态
最终
。当矩阵不是静态的时,有没有办法使用Jama矩阵?在android studio中是否有其他替代Jama的矩阵运算方法?

查看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;
   }
/**线性代数矩阵乘法,A*B
@参数B另一个矩阵
@返回矩阵积,A*B
@异常ILLEGARGUMENTEXCEPTION矩阵内部尺寸必须一致。
*/
公共矩阵时间(矩阵B){
如果(B.m!=n){
抛出新的IllegalArgumentException(“矩阵内部尺寸必须一致”);
}
矩阵X=新矩阵(m,B.n);
double[]C=X.getArray();
double[]Bcolj=新的double[n];
对于(int j=0;j
因此显然
C.times(B)
失败,这意味着
C
B
维度不一致。我们还可以从下面的行中看到,
C=新矩阵(2,2)
的大小为2x2,这意味着
B
的大小一定不正确

我不明白你说的“矩阵覆盖”是什么意思
C=A.plus(C.times(B))
在内部分配
矩阵的新实例。这与
静态
最终
无关


请提供一份报告。缺少很多部分,比如B初始化的位置。

这与矩阵是静态的或最终的无关。