float support for sparse matrices
This commit is contained in:
1 parent
2ed864bda4
commit
c711270e25
6 files changed
+187
-33
No files matched your search
+74
@@ -2691,6 +2691,18 @@ if(a.issymmetric()) result.setsymmetric();
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseMat<float> realpart<SparseMat< std::complex<float> > >(const SparseMat< std::complex<float> > &a)
|
||||
{
|
||||
SparseMat<float> result(a.nrows(), a.ncols());
|
||||
for(SparseMat< std::complex<float> >::iterator p=a.begin(); p!=a.end(); ++p)
|
||||
{
|
||||
result.add(p->row,p->col,p->elem.real());
|
||||
}
|
||||
if(a.issymmetric()) result.setsymmetric();
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseMat<double> imagpart<SparseMat< std::complex<double> > >(const SparseMat< std::complex<double> > &a)
|
||||
{
|
||||
@@ -2703,6 +2715,18 @@ if(a.issymmetric()) result.setsymmetric();
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseMat<float> imagpart<SparseMat< std::complex<float> > >(const SparseMat< std::complex<float> > &a)
|
||||
{
|
||||
SparseMat<float> result(a.nrows(), a.ncols());
|
||||
for(SparseMat< std::complex<float> >::iterator p=a.begin(); p!=a.end(); ++p)
|
||||
{
|
||||
result.add(p->row,p->col,p->elem.imag());
|
||||
}
|
||||
if(a.issymmetric()) result.setsymmetric();
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const NRMat<double> realpart<NRMat< std::complex<double> > >(const NRMat< std::complex<double> > &a)
|
||||
{
|
||||
@@ -3044,6 +3068,27 @@ const SparseSMat< std::complex<double> > complexmatrix<SparseSMat<double> >(cons
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseSMat< std::complex<float> > complexmatrix<SparseSMat<float> >(const SparseSMat<float> &re, const SparseSMat<float> &im) {
|
||||
if(re.nrows()!=im.nrows() || re.ncols() != im.ncols()) laerror("incompatible sizes of real and imaginary parts");
|
||||
SparseSMat< std::complex<float> > result(re.nrows(),re.ncols());
|
||||
std::complex<float> tmp;
|
||||
|
||||
SparseSMat<float>::iterator pre(re);
|
||||
for(; pre.notend(); ++pre) {
|
||||
tmp = pre->elem;
|
||||
result.add(pre->row,pre->col,tmp,false);
|
||||
}
|
||||
|
||||
SparseSMat<float>::iterator pim(im);
|
||||
for(; pim.notend(); ++pim) {
|
||||
tmp = std::complex<float>(0,1)*(pim->elem);
|
||||
result.add(pim->row,pim->col,tmp,false);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseSMat< std::complex<double> > realmatrix<SparseSMat<double> >(const SparseSMat<double> &re) {
|
||||
SparseSMat< std::complex<double> > result(re.nrows(),re.ncols());
|
||||
@@ -3058,6 +3103,20 @@ const SparseSMat< std::complex<double> > realmatrix<SparseSMat<double> >(const S
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseSMat< std::complex<float> > realmatrix<SparseSMat<float> >(const SparseSMat<float> &re) {
|
||||
SparseSMat< std::complex<float> > result(re.nrows(),re.ncols());
|
||||
std::complex<float> tmp;
|
||||
|
||||
SparseSMat<float>::iterator pre(re);
|
||||
for(; pre.notend(); ++pre) {
|
||||
tmp = pre->elem;
|
||||
result.add(pre->row,pre->col,tmp,false);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseSMat< std::complex<double> > imagmatrix<SparseSMat<double> >(const SparseSMat<double> &im) {
|
||||
SparseSMat< std::complex<double> > result(im.nrows(),im.ncols());
|
||||
@@ -3073,6 +3132,21 @@ const SparseSMat< std::complex<double> > imagmatrix<SparseSMat<double> >(const S
|
||||
return result;
|
||||
}
|
||||
|
||||
template<>
|
||||
const SparseSMat< std::complex<float> > imagmatrix<SparseSMat<float> >(const SparseSMat<float> &im) {
|
||||
SparseSMat< std::complex<float> > result(im.nrows(),im.ncols());
|
||||
std::complex<float> tmp;
|
||||
|
||||
|
||||
SparseSMat<float>::iterator pim(im);
|
||||
for(; pim.notend(); ++pim) {
|
||||
tmp = std::complex<float>(0,1)*(pim->elem);
|
||||
result.add(pim->row,pim->col,tmp,false);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user