
|
If you were logged in you would be able to see more operations.
|
|
|
|
Environment:
|
Mac OS X, NetBeans
|
|
| Resolution Date: |
04/Jun/09 08:11 PM
|
I used this matrix:
double[][] cv = {
{0.40434286, 0.09376327, 0.30328980, 0.04909388},
{0.09376327, 0.10400408, 0.07137959, 0.04762857},
{0.30328980, 0.07137959, 0.30458776, 0.04882449},
{0.04909388, 0.04762857, 0.04882449, 0.07543265}
};
And it works fine, because it is symmetric positive definite
I tried this matrix:
double[][] cv = {
{0.40434286, -0.09376327, 0.30328980, 0.04909388},
{-0.09376327, 0.10400408, 0.07137959, 0.04762857},
{0.30328980, 0.07137959, 0.30458776, 0.04882449},
{0.04909388, 0.04762857, 0.04882449, 0.07543265}
};
And it should throw an exception but it does not. I tested the matrix in R and R's cholesky decomposition method returns that the matrix is not symmetric positive definite.
Obviously your code is not catching this appropriately.
By the way (in my opinion) the use of exceptions to check these conditions is not the best design or use for exceptions. If you are going to force the use to try and catch these exceptions at least provide methods to test the conditions prior to the possibility of the exception.
|
|
Description
|
I used this matrix:
double[][] cv = {
{0.40434286, 0.09376327, 0.30328980, 0.04909388},
{0.09376327, 0.10400408, 0.07137959, 0.04762857},
{0.30328980, 0.07137959, 0.30458776, 0.04882449},
{0.04909388, 0.04762857, 0.04882449, 0.07543265}
};
And it works fine, because it is symmetric positive definite
I tried this matrix:
double[][] cv = {
{0.40434286, -0.09376327, 0.30328980, 0.04909388},
{-0.09376327, 0.10400408, 0.07137959, 0.04762857},
{0.30328980, 0.07137959, 0.30458776, 0.04882449},
{0.04909388, 0.04762857, 0.04882449, 0.07543265}
};
And it should throw an exception but it does not. I tested the matrix in R and R's cholesky decomposition method returns that the matrix is not symmetric positive definite.
Obviously your code is not catching this appropriately.
By the way (in my opinion) the use of exceptions to check these conditions is not the best design or use for exceptions. If you are going to force the use to try and catch these exceptions at least provide methods to test the conditions prior to the possibility of the exception.
|
Show » |
|
Concerning the exception, it is not possible to check the matrix without trying to decompose it, so providing an external check would be a waste as it would already do almost everything. In fact, it was exactly the reason for the bug: the check was done too early on the raw matrix, not on the matrix after some changes have been made to its elements.
thanks for the report