From 99b8d812100cc9becfe48affe0090c6c43cf97ea Mon Sep 17 00:00:00 2001 From: sunwen Date: Mon, 24 Apr 2023 13:05:44 +0800 Subject: [PATCH] Add conj and conj's unittest. --- src/Function1D.cpp | 12 ++++++++++++ src/Function1D.h | 2 ++ test/Function1D_Test.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/Function1D.cpp b/src/Function1D.cpp index 2602f4e..e06e33c 100644 --- a/src/Function1D.cpp +++ b/src/Function1D.cpp @@ -403,3 +403,15 @@ Matrix Aurora::acosd(const Matrix& aMatrix) } return Matrix::New(resultData, aMatrix); } + +Matrix Aurora::conj(const Matrix& aMatrix) +{ + if(!aMatrix.isComplex()) + { + return Matrix::copyFromRawData(aMatrix.getData(),aMatrix.getDimSize(0),aMatrix.getDimSize(1),aMatrix.getDimSize(2)); + } + size_t size = aMatrix.getDataSize(); + double* data = malloc(size,true); + vzConj(size,(MKL_Complex16*)aMatrix.getData(), (MKL_Complex16*)data); + return Matrix::New(data, aMatrix); +} diff --git a/src/Function1D.h b/src/Function1D.h index 4fcfdbd..076dc80 100644 --- a/src/Function1D.h +++ b/src/Function1D.h @@ -57,6 +57,8 @@ namespace Aurora { Matrix acosd(const Matrix& aMatrix); + Matrix conj(const Matrix& aMatrix); + /** * 多项式计算 * @brief 例如p[1 0 1],x[3 2 5],代表对多项式 y = x^2 + 1 求(x=3, x=2, x=5)时所有的y diff --git a/test/Function1D_Test.cpp b/test/Function1D_Test.cpp index d8cb1ea..85e2d1d 100644 --- a/test/Function1D_Test.cpp +++ b/test/Function1D_Test.cpp @@ -260,8 +260,31 @@ TEST_F(Function1D_Test, acosd) { double *data = new double[3]{0.02,0.83,0.4,}; auto matrix = Aurora::Matrix::fromRawData(data, 3); auto result = Aurora::acosd(matrix); - result.printf(); EXPECT_DOUBLE_AE(result.getData()[0],88.854); EXPECT_DOUBLE_AE(result.getData()[1],33.9013); EXPECT_DOUBLE_AE(result.getData()[2],66.4218); } + +TEST_F(Function1D_Test, conj) { + double *data = new double[6]{0.02,1,0.83,-1,0.4,2}; + auto matrix = Aurora::Matrix::fromRawData(data, 3,1,1,Aurora::Complex); + auto result = Aurora::conj(matrix); + EXPECT_DOUBLE_AE(result.getData()[0],0.02); + EXPECT_DOUBLE_AE(result.getData()[1],-1); + EXPECT_DOUBLE_AE(result.getData()[2],0.83); + EXPECT_DOUBLE_AE(result.getData()[3],1); + EXPECT_DOUBLE_AE(result.getData()[4],0.4); + EXPECT_DOUBLE_AE(result.getData()[5],-2); + EXPECT_DOUBLE_AE((double)result.getValueType(), (double)Aurora::Complex); + + data = new double[6]{0.02,1,0.83,-1,0.4,2}; + matrix = Aurora::Matrix::fromRawData(data, 6,1,1); + result = Aurora::conj(matrix); + EXPECT_DOUBLE_AE(result.getData()[0],0.02); + EXPECT_DOUBLE_AE(result.getData()[1],1); + EXPECT_DOUBLE_AE(result.getData()[2],0.83); + EXPECT_DOUBLE_AE(result.getData()[3],-1); + EXPECT_DOUBLE_AE(result.getData()[4],0.4); + EXPECT_DOUBLE_AE(result.getData()[5],2); + EXPECT_DOUBLE_AE((double)result.getValueType(), (double)Aurora::Normal); +}