为什么 Jama 矩阵内部维度在第一次迭代时一致,但后来却不一致?

Why does the Jama matrix inner dimension agree in the first iteration, but later it does not?

我的代码中定义了以下Jama矩阵:

P: 3*3 Matrix
I: 3*3 identity Matrix
K: 3*2 Matrix
H: 2*3 Matrix
Q: 3*3 Matrix

以下是我的代码片段:

private Matrix getP() {
        P= (I.minus(K.times(H))).times(Q);
        Log.d("csv", "P is calculated");
        return P;
    }

虽然 运行 代码在第一次迭代时有效,即 P is calculated 打印在 Logcat 处。但是,它只发生一次,应用程序就会停止。以下是错误:

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

如果矩阵内部维度是错误的,为什么它会在第一次迭代时运行?我在thislink处获得了一些关于内部维度的信息。但是,我想不出解决办法。当手动检查方程时,矩阵维度匹配。 我的方法有什么问题吗??

谢谢。

您介意展示一下您的通话方式 getP 吗?无论我点击 fab 按钮多少次,以下内容都有效。

class MainActivity : AppCompatActivity() {

    val I = Matrix.identity(3,3)
    val K = Matrix(3,2,5.0)
    val H = Matrix(2,3,7.0)
    val Q = Matrix(3,3,8.0)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fab.setOnClickListener { view ->
            getP()
        }
    }

    private fun getP():Matrix{
        val P = (I.minus(K.times(H))).times(Q)
        Log.d("MainActivity","P is calculated")
        return P
    }
}

getP returns 您将结果存储在哪里?您可能会覆盖其中一个矩阵吗?

更新

如果您的情况使变量成为最终变量不适合您,那么您可以记录每个矩阵的维数,然后调试发生变化的维数。

private fun getP():Matrix{
    Log.d(TAG,"I dimension: ${I.rowDimension} x ${I.columnDimension}")
    Log.d(TAG,"K dimension: ${K.rowDimension} x ${K.columnDimension}")
    Log.d(TAG,"H dimension: ${H.rowDimension} x ${H.columnDimension}")
    Log.d(TAG,"Q dimension: ${Q.rowDimension} x ${Q.columnDimension}")

    val P = (I.minus(K.times(H))).times(Q)
    Log.d(TAG,"P is calculated")
    return P
}