繁体   English   中英

我的矩阵“不是正定的”怎么了?

[英]What's wrong when my matrix is “not positive definite”?

我正在使用Jahmm Java库进行分类。 我想进行一些测试,以便生成一些随机数据集。

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

[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...

我使用随机函数

 val_1.1 == val_1.2 == val_1.3

val_2.1 == val_2.2 == val_2.3 

等等。

当我对此数据集调用以下函数时,它将引发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;
}

所以我的序列矩阵不是“正定义的”,但这是什么意思? 而应该如何避免我的数据集呢?

我数学不好! 提前致谢

我认为代码的作者意为“正定”。 矩阵必须是正定的,才能进行Cholesky分解。 形式定义是方阵A当且仅当对于所有向量x为正定:

x'Ax> 0

所有正定矩阵都是关于对角线和正方形对称的,因此一个好的开始是在测试中仅使用正方形对称矩阵,然后看看它是如何工作的。 要绝对确保矩阵是正定的,可以测试其所有特征值以查看它们是否均大于0。我不知道JAHMM是否具有用于获取矩阵特征值的方法,但是如果可以,则可以这样做。

我不知道该库,但我认为您是说“正定”而不是“正定义”。

事情是这样的:如果您有一个正常的数字,则可以通过查看符号来轻松判断它是正数还是负数(或零)。 确定性是将该概念扩展到矩阵世界的方法,在矩阵世界中,仅查看符号不再起作用,因为某些输入可能是肯定的,而某些输入可能是负的。

确定性有许多不同的定义(可以证明是相等的),您可以在此处整齐地列出它们: http : //en.wikipedia.org/wiki/Positive-definite_matrix#Characterizations

现在的问题是,当您平均选择行时不能保证正定性。 实际上3x3矩阵将始终是正半定的,而永远不会是正定的。
我环顾了一下; 以下是一些如何生成正定矩阵的提示: https : //ece.uwaterloo.ca/~dwharder/NumericalAnalysis/04LinearAlgebra/posdef/

( rand(n, n) + (n - 1)*eye( n ) )

因此,您生成了一个xn矩阵,其中所有条目都是0到1之间的随机值,然后将单位矩阵与n-1相乘,如果是[2,0,0]; [0,2,0]; ...

希望有帮助...


ps我忘记了矩阵也必须对称,因为您想对它做cholesky。 但这很简单,只需如上所述生成矩阵A,然后选择B = 1/2 *(A + A.transposed()); 这个矩阵B仍然是正定的,并且也将是对称的:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM