我对Java很陌生,并且遇到了一个问题,我相信它可以很容易地掌握。

我正在生成一个与Apache - Commons Math库链接的项目。

在项目中,我使用了大量的RealMatrix对象。我有一种方法如下

public static RealMatrix DistCalc(RealMatrix YCoord, RealMatrix ZCoord){
        RealMatrix Distance = new Array2DRowRealMatrix(YCoord.getRowDimension(),ZCoord.getRowDimension());
        for(int ii = 0; ii < YCoord.getRowDimension(); ii++){
            for(int jj = 0; jj < ZCoord.getRowDimension(); jj++){
                Distance.setEntry(ii,jj,Math.sqrt((YCoord.getEntry(ii, 0) - YCoord.getEntry(jj, 0))*(YCoord.getEntry(ii, 0) - YCoord.getEntry(jj, 0)) + (ZCoord.getEntry(jj, 0) - ZCoord.getEntry(ii, 0))*(ZCoord.getEntry(jj, 0) - ZCoord.getEntry(ii, 0))));
            }
        }
        return Distance;
    }


另一个生成特定的Complex矩阵,

// Define the random phase for the u- component
    public static Complex[][] RandPhi(int N, int nFFT){
        Complex[][] nn_u = new Complex[N][nFFT];
        for(int ii = 0; ii < N; ii++){
            for(int jj = 0; jj < nFFT; jj++){
                nn_u[ii][jj] = new Complex(Math.cos(new Random().nextDouble()*2*Math.PI),Math.sin(new Random().nextDouble()*2*Math.PI));
            }
        }
        return nn_u;
    }


现在,我想将RealMatrix距离与Complex矩阵nn_u逐列相乘:最后,我应该得出一个Complex[N][nFFT]矩阵。

您介意阐明一些想法吗?

最佳答案

我建议您基于ComplexMatrix接口创建自己的RealMatrix接口,然后基于Array2DRowComplexMatrix类创建自己的Array2DRowRealMatrix类。要创建类,只需download the source code,更改类名,将double data[][]更改为Complex data[][],然后将所有引用更新为data

创建一个接受ComplexMatrixRealMatrix构造函数,或者包括一个带有multiply参数的RealMatrix方法。

Commons应该具有所需的所有方法,您可能只需要稍微调整一下它们的参数/返回类型。

08-04 15:38