Fix scalar / matrix bug.
This commit is contained in:
@@ -23,6 +23,22 @@ namespace Aurora{
|
|||||||
typedef void(*CalcFuncZ)(const MKL_INT n, const MKL_Complex16 a[], const MKL_INT inca, const MKL_Complex16 b[],
|
typedef void(*CalcFuncZ)(const MKL_INT n, const MKL_Complex16 a[], const MKL_INT inca, const MKL_Complex16 b[],
|
||||||
const MKL_INT incb, MKL_Complex16 r[], const MKL_INT incr);
|
const MKL_INT incb, MKL_Complex16 r[], const MKL_INT incr);
|
||||||
|
|
||||||
|
inline Matrix operatorAxM(CalcFuncD aFunc, double aScalar, const Matrix &aMatrix) {
|
||||||
|
double *output = malloc(aMatrix.getDataSize(), aMatrix.getValueType() == Complex);
|
||||||
|
//复数时,+和-需要特别操作,只影响实部
|
||||||
|
if (aMatrix.getValueType() == Complex && (aFunc == &vdAddI || aFunc == &vdSubI)) {
|
||||||
|
aFunc(aMatrix.getDataSize(), &aScalar, 0,aMatrix.getData() , 2, output ,
|
||||||
|
2);
|
||||||
|
double zero = 0.0;
|
||||||
|
aFunc(aMatrix.getDataSize(), &zero, 0,aMatrix.getData()+1 , 2, output+1 ,
|
||||||
|
2);
|
||||||
|
} else{
|
||||||
|
aFunc(aMatrix.getDataSize(), &aScalar, 0,aMatrix.getData(), 1, output, 1);
|
||||||
|
}
|
||||||
|
return Matrix::New(output, aMatrix.getDimSize(0), aMatrix.getDimSize(1), aMatrix.getDimSize(2),
|
||||||
|
aMatrix.getValueType());
|
||||||
|
}
|
||||||
|
|
||||||
inline Matrix operatorMxA(CalcFuncD aFunc, double aScalar, const Matrix &aMatrix) {
|
inline Matrix operatorMxA(CalcFuncD aFunc, double aScalar, const Matrix &aMatrix) {
|
||||||
double *output = malloc(aMatrix.getDataSize(), aMatrix.getValueType() == Complex);
|
double *output = malloc(aMatrix.getDataSize(), aMatrix.getValueType() == Complex);
|
||||||
//复数时,+和-需要特别操作,只影响实部
|
//复数时,+和-需要特别操作,只影响实部
|
||||||
@@ -39,6 +55,25 @@ namespace Aurora{
|
|||||||
aMatrix.getValueType());
|
aMatrix.getValueType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Matrix &operatorAxM_RR(CalcFuncD aFunc, double aScalar, Aurora::Matrix &&aMatrix) {
|
||||||
|
if (aMatrix.getValueType() == Complex) {
|
||||||
|
//针对实部操作
|
||||||
|
aFunc(aMatrix.getDataSize(), &aScalar, 0,aMatrix.getData(), 2,
|
||||||
|
aMatrix.getData(),
|
||||||
|
2);
|
||||||
|
//乘法除法需特别操作,影响虚部
|
||||||
|
if (aFunc == &vdDivI || aFunc == &vdMulI){
|
||||||
|
aFunc(aMatrix.getDataSize(), &aScalar, 0,aMatrix.getData() + 1, 2,
|
||||||
|
aMatrix.getData() + 1, 2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
aFunc(aMatrix.getDataSize(), &aScalar, 0,aMatrix.getData(), 1,
|
||||||
|
aMatrix.getData(),
|
||||||
|
1);
|
||||||
|
}
|
||||||
|
return aMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
inline Matrix &operatorMxA_RR(CalcFuncD aFunc, double aScalar, Aurora::Matrix &&aMatrix) {
|
inline Matrix &operatorMxA_RR(CalcFuncD aFunc, double aScalar, Aurora::Matrix &&aMatrix) {
|
||||||
if (aMatrix.getValueType() == Complex) {
|
if (aMatrix.getValueType() == Complex) {
|
||||||
//针对实部操作
|
//针对实部操作
|
||||||
|
|||||||
Reference in New Issue
Block a user