【问题标题】:representing matrixes as an array using Jama使用 Jama 将矩阵表示为数组
【发布时间】:2012-12-26 11:05:23
【问题描述】:

我正在使用 Jama 来计算特征向量和特征值,效果很好。

问题是有时将矩阵中的列提取到数组中会导致错误的值。

有人遇到过吗?我该如何处理?

我附上我使用的代码:

import weka.core.matrix.EigenvalueDecomposition;
import weka.core.matrix.Matrix;

public class Main6 {
    public static void main(String[] args) {
        double[][] m = {{1,0,1},{0,1,0},{1,1,1}};
        EigenvalueDecomposition e = new EigenvalueDecomposition(new Matrix(m));

        double[] imgValue = e.getImagEigenvalues();
        double[] realValue = e.getRealEigenvalues();

        double[] columns = e.getV().getColumnPackedCopy();
        int rowDim = e.getV().getRowDimension();

        for(int i = 0; i<e.getImagEigenvalues().length; i++){
            System.out.println("\n<"+imgValue[i] + "," + realValue[i]+">");
            for(int j=i*rowDim;j<(i+1)*rowDim;j++)
                System.out.print(columns[j]+" ");
        }
        System.out.println("\n\n"+e.getV());

    }
}

结果是:

    OUTPUT:

    <0.0,2.0>
    0.7071067811865475 0.0 0.7071067811865475 
    <0.0,0.0>
    -0.7071067811865475 0.0 0.7071067811865475 
    <0.0,1.0>
    -1.0 1.0 -2.220446049250313E-16 

    According to the debugger, the matrix is:
      0.71 -0.71 -1   
      0     0     1   
      0.71  0.71  0   


    the matrix is:

      1 0 1
      0 1 0
      1 1 1

我非常感谢任何有关它发生原因的建议或见解。谢谢!

【问题讨论】:

    标签: java matrix jama


    【解决方案1】:

    您在某些地方(行与列)混淆了 X 轴和 Y 轴,我不确定哪个是正确的。如果您“调试”输出是由toString() 产生的,那可能是正确的。

    【讨论】:

    • 这不是问题。我希望是这样,但我发现了一个更严重的问题。对于矩阵 {{1,0,1,0},{0,1,0,0},{1,0,0,0},{0,0,1,1}},调试器和输出中是相同的:1.618033988749894:V1 = -0.6479361632942984 0.0 -0.40044657145607854 -0.6479361632942985 -0.6180339887498949:V2 = 0.4880538916195737 0.0 -0.7896877849821275 0.4880538916195736 1.0:V3 = 2.220446049250313E-16 0.0 1.2054651028791157E-16 1.4142135623730951 1.0:V4 = 0.0 1.0 0.0 0.0}。有问题的是变量类型:双 2.220446049250313E-16 或 1.2054651028791157E-16 是什么?
    • 尺寸似乎不一样。我会假设值小于 |x|
    • 嗨,彼得,感谢您的帮助!我必须问-你是怎么想出边界的 |x|
    • double 的准确度约为 15-16 位数。矩阵运算可能涉及大量计算,因此出错的可能性很高。我的经验法则是,每计算一次,你就会损失一个数字。例如你有〜10(所以你失去了一个数字)并且你的幅度大约是1所以你在1之后有大约15个数字的精度。如果你的矩阵更大并且你正在做大约100个计算你将有14个数字和1000个计算你将有大约 13 位数字,如果您的震级约为 1000,您的精度将降至 1e-10 左右。 (1e-16 * 1000 计算 * 1000 mag)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多