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[],
|
||||
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) {
|
||||
double *output = malloc(aMatrix.getDataSize(), aMatrix.getValueType() == Complex);
|
||||
//复数时,+和-需要特别操作,只影响实部
|
||||
@@ -39,6 +55,25 @@ namespace Aurora{
|
||||
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) {
|
||||
if (aMatrix.getValueType() == Complex) {
|
||||
//针对实部操作
|
||||
|
||||
Reference in New Issue
Block a user