为什么 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
}
我的代码中定义了以下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
}