当我的矩阵"不确定"时出了什么问题?

jor*_*bor -1 java math matrix

我正在使用Jahmm java lib进行分类.我想做一些测试,所以我生成一些随机数据集.

我以这种格式创建数据集:

[val_1.1 val_1.2 val_1.3];[val_2.1 val_2.2 val_2.3]; [val_3.1 val_3.2 val_3.3] etc...
Run Code Online (Sandbox Code Playgroud)

我使用随机函数

 val_1.1 == val_1.2 == val_1.3
Run Code Online (Sandbox Code Playgroud)

val_2.1 == val_2.2 == val_2.3 
Run Code Online (Sandbox Code Playgroud)

等等.

当我使用此数据集调用以下函数时,它会抛出IllegalArgumentException

static double[][] decomposeCholesky(double[][] m)
{
    if (!isSquare(m))
        throw new IllegalArgumentException("Matrix is not square");

    double[][] l = matrix(nbRows(m), nbColumns(m));

    for (int j = 0; j < nbRows(m); j++)
    {
        double[] lj = l[j];
        double d = 0.;

        for (int k = 0; k < j; k++) {
            double[] lk = l[k];
            double s = 0.;

            for (int i = 0; i < k; i++)
                s += lk[i] * lj[i];

            lj[k] = s = (m[j][k] - s) / l[k][k];
            d = d + s * s;
        }

        if ((d = m[j][j] - d) <= 0.)
            throw new IllegalArgumentException("Matrix is not positive " + 
            "defined");

        l[j][j] = Math.sqrt(d);
        for (int k = j+1; k < nbRows(m); k++)
            l[j][k] = 0.;
    }

    return l;
}
Run Code Online (Sandbox Code Playgroud)

所以我的序列矩阵不是"正定义",但它是什么意思?我应该怎样对待我的数据集以避免它?

我数学不好!提前致谢

spa*_*ead 5

我认为代码的作者意味着"肯定的".矩阵必须是正定的,以便用Cholesky分解来计算.形式定义是方阵A当且仅当对于所有向量x时,它是正定的:

x'Ax> 0

所有正定矩阵都是关于对角线和方形对称的,所以一个好的开始是在测试中只使用方形对称矩阵,看看它是如何工作的.为了绝对确保矩阵是正定的,你可以测试它的所有特征值,看它们是否都是0.我不知道JAHMM是否有获取矩阵特征值的方法,但如果是,你可以这样做.