*** empty log message ***
This commit is contained in:
		
							parent
							
								
									04b4ef9f72
								
							
						
					
					
						commit
						b0a83b6d6e
					
				@ -622,7 +622,7 @@ public:
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<class T, class I> 
 | 
					template<class T, class I> 
 | 
				
			||||||
fourindex_dense<twoelectronrealmullikan,T,I>::fourindex_dense<twoelectronrealmullikan,T,I>(const fourindex<I,T> &rhs) : NRSMat<T>((T)0,rhs.size()*(rhs.size()+1)/2)
 | 
					fourindex_dense<twoelectronrealmullikan,T,I>::fourindex_dense(const fourindex<I,T> &rhs) : NRSMat<T>((T)0,rhs.size()*(rhs.size()+1)/2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
 | 
					if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
 | 
				
			||||||
typename fourindex<I,T>::iterator p;
 | 
					typename fourindex<I,T>::iterator p;
 | 
				
			||||||
@ -635,7 +635,7 @@ for(p=rhs.begin(); p!= rhs.end(); ++p) (*this)(p->index.indiv.i,p->index.indiv.j
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<class T, class I>
 | 
					template<class T, class I>
 | 
				
			||||||
fourindex_dense<twoelectronrealmullikan,T,I>::fourindex_dense<twoelectronrealmullikan,T,I>(const fourindex_ext<I,T> &rhs) : NRSMat<T>((T)0,rhs.size()*(rhs.size()+1)/2)
 | 
					fourindex_dense<twoelectronrealmullikan,T,I>::fourindex_dense(const fourindex_ext<I,T> &rhs) : NRSMat<T>((T)0,rhs.size()*(rhs.size()+1)/2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
 | 
					if(rhs.getsymmetry() != twoelectronrealmullikan ) laerror("fourindex_dense symmetry mismatch");
 | 
				
			||||||
typename fourindex_ext<I,T>::iterator p;
 | 
					typename fourindex_ext<I,T>::iterator p;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										22
									
								
								mat.cc
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								mat.cc
									
									
									
									
									
								
							@ -11,17 +11,6 @@ extern ssize_t write(int, const void *, size_t);
 | 
				
			|||||||
// TODO :
 | 
					// TODO :
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
//// forced instantization in the corresponding object file
 | 
					 | 
				
			||||||
template class NRMat<double>;
 | 
					 | 
				
			||||||
template class NRMat<complex<double> >;
 | 
					 | 
				
			||||||
template class NRMat<int>;
 | 
					 | 
				
			||||||
template class NRMat<short>;
 | 
					 | 
				
			||||||
template class NRMat<char>;
 | 
					 | 
				
			||||||
template class NRMat<unsigned char>;
 | 
					 | 
				
			||||||
template class NRMat<unsigned int>;
 | 
					 | 
				
			||||||
template class NRMat<unsigned long>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *  Templates first, specializations for BLAS next
 | 
					 *  Templates first, specializations for BLAS next
 | 
				
			||||||
@ -1113,3 +1102,14 @@ istream& operator>>(istream  &s, NRMat<T> &x)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//// forced instantization in the corresponding object file
 | 
				
			||||||
 | 
					template class NRMat<double>;
 | 
				
			||||||
 | 
					template class NRMat<complex<double> >;
 | 
				
			||||||
 | 
					template class NRMat<int>;
 | 
				
			||||||
 | 
					template class NRMat<short>;
 | 
				
			||||||
 | 
					template class NRMat<char>;
 | 
				
			||||||
 | 
					template class NRMat<unsigned char>;
 | 
				
			||||||
 | 
					template class NRMat<unsigned int>;
 | 
				
			||||||
 | 
					template class NRMat<unsigned long>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								mat.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								mat.h
									
									
									
									
									
								
							@ -560,6 +560,7 @@ public:
 | 
				
			|||||||
        NRMat_from1(): NRMat<T>() {};
 | 
					        NRMat_from1(): NRMat<T>() {};
 | 
				
			||||||
        explicit NRMat_from1(const int n): NRMat<T>(n) {};
 | 
					        explicit NRMat_from1(const int n): NRMat<T>(n) {};
 | 
				
			||||||
        NRMat_from1(const NRMat<T> &rhs): NRMat<T>(rhs) {}; //be able to convert the parent class  transparently to this
 | 
					        NRMat_from1(const NRMat<T> &rhs): NRMat<T>(rhs) {}; //be able to convert the parent class  transparently to this
 | 
				
			||||||
 | 
					        NRMat_from1(const int n, const int m): NRMat<T>(n,m) {};
 | 
				
			||||||
        NRMat_from1(const T &a, const int n, const int m): NRMat<T>(a,n,m) {};
 | 
					        NRMat_from1(const T &a, const int n, const int m): NRMat<T>(a,n,m) {};
 | 
				
			||||||
        NRMat_from1(const T *a, const int n, const int m): NRMat<T>(a,n,m) {};
 | 
					        NRMat_from1(const T *a, const int n, const int m): NRMat<T>(a,n,m) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								matexp.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								matexp.h
									
									
									
									
									
								
							@ -109,7 +109,7 @@ return z;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//general BCH expansion (can be written more efficiently in a specialization for matrices)
 | 
					//general BCH expansion (can be written more efficiently in a specialization for matrices)
 | 
				
			||||||
template<class T>
 | 
					template<class T>
 | 
				
			||||||
const T BCHexpansion (const T &h, const T &t, const int n, const bool verbose=1)\
 | 
					const T BCHexpansion (const T &h, const T &t, const int n, const bool verbose=0)\
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
T result=h;
 | 
					T result=h;
 | 
				
			||||||
double factor=1.;
 | 
					double factor=1.;
 | 
				
			||||||
@ -118,7 +118,7 @@ for(int i=1; i<=n; ++i)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
	factor/=i;
 | 
						factor/=i;
 | 
				
			||||||
	z= z*t-t*z;
 | 
						z= z*t-t*z;
 | 
				
			||||||
	if(verbose) cerr << "BCH contribution at order "<<i<<" : "<<z.norm()<<endl;
 | 
						if(verbose) cerr << "BCH contribution at order "<<i<<" : "<<z.norm()*factor<<endl;
 | 
				
			||||||
	result+= z*factor; 
 | 
						result+= z*factor; 
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
return result;
 | 
					return result;
 | 
				
			||||||
@ -189,7 +189,7 @@ double scale=exp(-log(2.)*power);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//find how long taylor expansion will be necessary
 | 
					//find how long taylor expansion will be necessary
 | 
				
			||||||
const double precision=1e-16;
 | 
					const double precision=1e-14; //decreasing brings nothing
 | 
				
			||||||
double s,t;
 | 
					double s,t;
 | 
				
			||||||
s=mnorm*scale;
 | 
					s=mnorm*scale;
 | 
				
			||||||
int n=0;
 | 
					int n=0;
 | 
				
			||||||
@ -202,6 +202,7 @@ while(t*exptaylor[n]>precision);//taylor 0 will terminate in any case
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int i; //adjust the coefficients in order to avoid scaling the argument
 | 
					int i; //adjust the coefficients in order to avoid scaling the argument
 | 
				
			||||||
NRVec<typename LA_traits<T>::elementtype> taylor2(n+1);
 | 
					NRVec<typename LA_traits<T>::elementtype> taylor2(n+1);
 | 
				
			||||||
for(i=0,t=1.;i<=n;i++)
 | 
					for(i=0,t=1.;i<=n;i++)
 | 
				
			||||||
@ -214,8 +215,9 @@ return taylor2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//it seems that we do not gain anything by polynom vs polynom0, check the m-optimization!
 | 
				
			||||||
template<class T>
 | 
					template<class T>
 | 
				
			||||||
const T exp(const T &x, const bool simple=false)
 | 
					const T exp(const T &x, const bool horner=true)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
int power;
 | 
					int power;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -223,7 +225,7 @@ int power;
 | 
				
			|||||||
NRVec<typename LA_traits<T>::elementtype> taylor2=exp_aux(x,power);
 | 
					NRVec<typename LA_traits<T>::elementtype> taylor2=exp_aux(x,power);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
T r= simple?polynom0(x,taylor2):polynom(x,taylor2); 
 | 
					T r= horner?polynom0(x,taylor2):polynom(x,taylor2); 
 | 
				
			||||||
//for accuracy summing from the smallest terms up would be better, but this is more efficient for matrices
 | 
					//for accuracy summing from the smallest terms up would be better, but this is more efficient for matrices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//power the result back
 | 
					//power the result back
 | 
				
			||||||
 | 
				
			|||||||
@ -617,7 +617,9 @@ NRMat<double> matrixfunction(NRMat<double> a, complex<double>
 | 
				
			|||||||
	int n = a.nrows();
 | 
						int n = a.nrows();
 | 
				
			||||||
	NRMat< complex<double> > u(n, n), v(n, n);
 | 
						NRMat< complex<double> > u(n, n), v(n, n);
 | 
				
			||||||
	NRVec< complex<double> > w(n);
 | 
						NRVec< complex<double> > w(n);
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
NRMat<complex<double> > a0=complexify(a);
 | 
					NRMat<complex<double> > a0=complexify(a);
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
	gdiagonalize(a, w, &u, &v);//a gets destroyed, eigenvectors are rows
 | 
						gdiagonalize(a, w, &u, &v);//a gets destroyed, eigenvectors are rows
 | 
				
			||||||
	NRVec< complex<double> > z = diagofproduct(u, v, 1, 1);
 | 
						NRVec< complex<double> > z = diagofproduct(u, v, 1, 1);
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 | 
				
			|||||||
@ -70,6 +70,7 @@ extern const  NRVec<T> diagofproduct(const NRMat<T> &a, const NRMat<T> &b,\
 | 
				
			|||||||
		bool trb=0, bool conjb=0); \
 | 
							bool trb=0, bool conjb=0); \
 | 
				
			||||||
extern T trace2(const NRMat<T> &a, const NRMat<T> &b, bool trb=0); \
 | 
					extern T trace2(const NRMat<T> &a, const NRMat<T> &b, bool trb=0); \
 | 
				
			||||||
extern T trace2(const NRSMat<T> &a, const NRSMat<T> &b, const bool diagscaled=0);\
 | 
					extern T trace2(const NRSMat<T> &a, const NRSMat<T> &b, const bool diagscaled=0);\
 | 
				
			||||||
 | 
					extern T trace2(const NRSMat<T> &a, const NRMat<T> &b, const bool diagscaled=0);\
 | 
				
			||||||
extern void linear_solve(NRMat<T> &a, NRMat<T> *b, double *det=0,int n=0); \
 | 
					extern void linear_solve(NRMat<T> &a, NRMat<T> *b, double *det=0,int n=0); \
 | 
				
			||||||
extern void linear_solve(NRSMat<T> &a, NRMat<T> *b, double *det=0, int n=0); \
 | 
					extern void linear_solve(NRSMat<T> &a, NRMat<T> *b, double *det=0, int n=0); \
 | 
				
			||||||
extern void linear_solve(NRMat<T> &a, NRVec<T> &b, double *det=0, int n=0); \
 | 
					extern void linear_solve(NRMat<T> &a, NRVec<T> &b, double *det=0, int n=0); \
 | 
				
			||||||
@ -108,6 +109,7 @@ inline NRMat<double>  realsqrt(const NRMat<double> &a) { return realmatrixfuncti
 | 
				
			|||||||
inline NRMat<double>  realsqrtinv(const NRMat<double> &a) { return realmatrixfunction(a,&sqrtinv); }
 | 
					inline NRMat<double>  realsqrtinv(const NRMat<double> &a) { return realmatrixfunction(a,&sqrtinv); }
 | 
				
			||||||
inline NRMat<double>  log(const NRSMat<double> &a) { return matrixfunction(a,&log); }
 | 
					inline NRMat<double>  log(const NRSMat<double> &a) { return matrixfunction(a,&log); }
 | 
				
			||||||
extern NRMat<double> log(const NRMat<double> &a);
 | 
					extern NRMat<double> log(const NRMat<double> &a);
 | 
				
			||||||
 | 
					extern NRMat<double> exp0(const NRMat<double> &a);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern const NRMat<double> realpart(const NRMat< complex<double> >&);
 | 
					extern const NRMat<double> realpart(const NRMat< complex<double> >&);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										22
									
								
								smat.cc
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								smat.cc
									
									
									
									
									
								
							@ -12,16 +12,6 @@ extern ssize_t write(int, const void *, size_t);
 | 
				
			|||||||
// specialize unary minus
 | 
					// specialize unary minus
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
////// forced instantization in the corresponding object file
 | 
					 | 
				
			||||||
template class NRSMat<double>;
 | 
					 | 
				
			||||||
template class NRSMat< complex<double> >;
 | 
					 | 
				
			||||||
template class NRSMat<int>;
 | 
					 | 
				
			||||||
template class NRSMat<short>;
 | 
					 | 
				
			||||||
template class NRSMat<char>;
 | 
					 | 
				
			||||||
template class NRSMat<unsigned int>;
 | 
					 | 
				
			||||||
template class NRSMat<unsigned long>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@ -411,3 +401,15 @@ INSTANTIZE(char)
 | 
				
			|||||||
INSTANTIZE(unsigned int)
 | 
					INSTANTIZE(unsigned int)
 | 
				
			||||||
INSTANTIZE(unsigned long)
 | 
					INSTANTIZE(unsigned long)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					////// forced instantization in the corresponding object file
 | 
				
			||||||
 | 
					template class NRSMat<double>;
 | 
				
			||||||
 | 
					template class NRSMat< complex<double> >;
 | 
				
			||||||
 | 
					template class NRSMat<int>;
 | 
				
			||||||
 | 
					template class NRSMat<short>;
 | 
				
			||||||
 | 
					template class NRSMat<char>;
 | 
				
			||||||
 | 
					template class NRSMat<unsigned int>;
 | 
				
			||||||
 | 
					template class NRSMat<unsigned long>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								sparsemat.cc
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								sparsemat.cc
									
									
									
									
									
								
							@ -17,11 +17,6 @@ static inline void SWAP(T &a, T &b)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
//// forced instantization in the corresponding object file
 | 
					 | 
				
			||||||
template class SparseMat<double>;
 | 
					 | 
				
			||||||
template class SparseMat<complex<double> >;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export template <class T>
 | 
					export template <class T>
 | 
				
			||||||
@ -1327,13 +1322,13 @@ template unsigned int SparseMat<T>::length() const; \
 | 
				
			|||||||
template void SparseMat<T>::deletelist(); \
 | 
					template void SparseMat<T>::deletelist(); \
 | 
				
			||||||
template void SparseMat<T>::simplify(); \
 | 
					template void SparseMat<T>::simplify(); \
 | 
				
			||||||
template void SparseMat<T>::copylist(const matel<T> *l); \
 | 
					template void SparseMat<T>::copylist(const matel<T> *l); \
 | 
				
			||||||
template void SparseMat<T>::add(const SPMatindex n, const SPMatindex m, const T elem); \
 | 
					 | 
				
			||||||
template SparseMat<T> & SparseMat<T>::operator=(const SparseMat<T> &rhs); \
 | 
					template SparseMat<T> & SparseMat<T>::operator=(const SparseMat<T> &rhs); \
 | 
				
			||||||
template SparseMat<T> & SparseMat<T>::operator+=(const SparseMat<T> &rhs); \
 | 
					template SparseMat<T> & SparseMat<T>::operator+=(const SparseMat<T> &rhs); \
 | 
				
			||||||
template SparseMat<T> & SparseMat<T>::operator-=(const SparseMat<T> &rhs); \
 | 
					template SparseMat<T> & SparseMat<T>::operator-=(const SparseMat<T> &rhs); \
 | 
				
			||||||
template SparseMat<T>::SparseMat(const NRMat<T> &rhs); \
 | 
					template SparseMat<T>::SparseMat(const NRMat<T> &rhs); \
 | 
				
			||||||
template SparseMat<T>::SparseMat(const NRSMat<T> &rhs); \
 | 
					template SparseMat<T>::SparseMat(const NRSMat<T> &rhs); \
 | 
				
			||||||
template void SparseMat<T>::transposeme(); \
 | 
					template void SparseMat<T>::transposeme(); \
 | 
				
			||||||
 | 
					template const T* SparseMat<T>::diagonalof(NRVec<T> &r, const bool divide, bool cache) const; \
 | 
				
			||||||
template SparseMat<T> & SparseMat<T>::operator*=(const T a); \
 | 
					template SparseMat<T> & SparseMat<T>::operator*=(const T a); \
 | 
				
			||||||
template void SparseMat<T>::setunsymmetric(); \
 | 
					template void SparseMat<T>::setunsymmetric(); \
 | 
				
			||||||
template SparseMat<T> & SparseMat<T>::operator=(const T a); \
 | 
					template SparseMat<T> & SparseMat<T>::operator=(const T a); \
 | 
				
			||||||
@ -1362,3 +1357,8 @@ INSTANTIZE(double)
 | 
				
			|||||||
INSTANTIZE(complex<double>) //some functions are not OK for hermitean matrices, needs a revision!!!
 | 
					INSTANTIZE(complex<double>) //some functions are not OK for hermitean matrices, needs a revision!!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//// forced instantization in the corresponding object file
 | 
				
			||||||
 | 
					template class SparseMat<double>;
 | 
				
			||||||
 | 
					template class SparseMat<complex<double> >;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								t.cc
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								t.cc
									
									
									
									
									
								
							@ -52,7 +52,8 @@ NRVec<double> x(1.,10);
 | 
				
			|||||||
NRVec<double> y(2.,10);
 | 
					NRVec<double> y(2.,10);
 | 
				
			||||||
NRVec<double> z(-2.,10);
 | 
					NRVec<double> z(-2.,10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cout.setf(ios::fixed);
 | 
					cout.setf(ios::scientific);
 | 
				
			||||||
 | 
					//cc:cout.setf(ios::fixed);
 | 
				
			||||||
cout.precision(12);
 | 
					cout.precision(12);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -646,7 +647,6 @@ cout <<"test orthogonality\n" << vl.transpose() * vr;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if(0)
 | 
					if(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
int n;
 | 
					int n;
 | 
				
			||||||
cin>>n;
 | 
					cin>>n;
 | 
				
			||||||
NRMat<double> a(n,n);
 | 
					NRMat<double> a(n,n);
 | 
				
			||||||
@ -655,39 +655,49 @@ for(int i=0;i<n;++i) for(int j=0;j<i;++j)
 | 
				
			|||||||
        a(i,j)= random()/(1.+RAND_MAX);
 | 
					        a(i,j)= random()/(1.+RAND_MAX);
 | 
				
			||||||
        a(j,i)= -a(i,j);
 | 
					        a(j,i)= -a(i,j);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
NRMat<double> b=exp(a);
 | 
					cout <<"a matrix \n"<<a;
 | 
				
			||||||
cout <<a;
 | 
					cout<<"EXP\n";
 | 
				
			||||||
*/
 | 
					NRMat<double> b=exp0(a);
 | 
				
			||||||
NRMat<double> a,b;
 | 
					cout <<"b=exp(a) matrix\n"<<b;
 | 
				
			||||||
cin >>b;
 | 
					 | 
				
			||||||
int n=b.nrows();
 | 
					 | 
				
			||||||
cout <<"difference from identity = "<<b.norm(1.)<<endl;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
NRMat<double> x(0.,n,n),x0;
 | 
					cout <<"LOG\n";
 | 
				
			||||||
	double r;
 | 
					 | 
				
			||||||
int i=0;
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	x0=x;
 | 
					 | 
				
			||||||
	NRMat<double> y=exp(x*-.5);
 | 
					 | 
				
			||||||
	x+= y*b*y; 
 | 
					 | 
				
			||||||
	x-= 1.;
 | 
					 | 
				
			||||||
	x=(x-x.transpose())*.5;
 | 
					 | 
				
			||||||
	cout <<"matrix x\n"<<x;
 | 
					 | 
				
			||||||
	cout <<"iter "<<i <<" residue "<< (r=(exp(x)-b).norm())<<endl;
 | 
					 | 
				
			||||||
	cout <<"iter "<<i <<" conv "<<(r=(x-x0).norm())<<endl;
 | 
					 | 
				
			||||||
	++i;
 | 
					 | 
				
			||||||
	} while(abs(r)>1e-10);
 | 
					 | 
				
			||||||
cout <<"result\n"<<x<<endl;
 | 
					 | 
				
			||||||
cout <<"exp(result)"<<exp(x)<<endl;
 | 
					 | 
				
			||||||
NRMat<double> c=log(b); //matrixfunction(a,&mycident,1);
 | 
					NRMat<double> c=log(b); //matrixfunction(a,&mycident,1);
 | 
				
			||||||
cout <<c;
 | 
					cout <<"c=log(exp(a))\n"<<c <<"error: "<<(c-a).norm()<<endl;
 | 
				
			||||||
NRMat<double> d=exp(c);
 | 
					cout <<"EXP-MY\n";
 | 
				
			||||||
cout <<"exp(log(x))\n"<<d;
 | 
					NRMat<double> e=exp(c);
 | 
				
			||||||
cout<<(d-b).norm()<<endl;
 | 
					cout <<"e=exp(c)\n"<<e;
 | 
				
			||||||
 | 
					cout<<"error2 = "<<(e-b).norm()<<endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if(1)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int n;
 | 
				
			||||||
 | 
					double f;
 | 
				
			||||||
 | 
					cin>>n >>f ;
 | 
				
			||||||
 | 
					NRMat<double> a(n,n);
 | 
				
			||||||
 | 
					for(int i=0;i<n;++i) for(int j=0;j<n;++j)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        a(i,j)= f*random()/(1.+RAND_MAX);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					//cout <<"a matrix \n"<<a;
 | 
				
			||||||
 | 
					//cout<<"EXP\n";
 | 
				
			||||||
 | 
					double t=clock()/((double) (CLOCKS_PER_SEC));
 | 
				
			||||||
 | 
					NRMat<double> b=exp0(a);
 | 
				
			||||||
 | 
					cout <<"exp0 took "<<clock()/((double) (CLOCKS_PER_SEC))-t<<endl;
 | 
				
			||||||
 | 
					//cout <<"b=exp0(a) matrix\n"<<b;
 | 
				
			||||||
 | 
					t=clock()/((double) (CLOCKS_PER_SEC));
 | 
				
			||||||
 | 
					NRMat<double> c=exp(a,true);
 | 
				
			||||||
 | 
					cout <<" horner exp  took "<<clock()/((double) (CLOCKS_PER_SEC))-t<<endl;
 | 
				
			||||||
 | 
					//cout <<"exp(a)\n"<<c;
 | 
				
			||||||
 | 
					cout<<"error1 = "<<(c-b).norm()/b.norm()<<endl;
 | 
				
			||||||
 | 
					t=clock()/((double) (CLOCKS_PER_SEC));
 | 
				
			||||||
 | 
					c=exp(a,false);
 | 
				
			||||||
 | 
					cout <<" tricky exp  took "<<clock()/((double) (CLOCKS_PER_SEC))-t<<endl;
 | 
				
			||||||
 | 
					cout<<"error2 = "<<(c-b).norm()/b.norm()<<endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(0)
 | 
					if(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
int n;
 | 
					int n;
 | 
				
			||||||
@ -1115,7 +1125,7 @@ cout <<b*b;
 | 
				
			|||||||
cout <<(b*b-a).norm();
 | 
					cout <<(b*b-a).norm();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(1)
 | 
					if(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
NRSMat<double> a;
 | 
					NRSMat<double> a;
 | 
				
			||||||
NRMat<double> b;
 | 
					NRMat<double> b;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										53
									
								
								vec.cc
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								vec.cc
									
									
									
									
									
								
							@ -25,20 +25,13 @@ template void NRVec<T>::get(int fd, bool dim, bool transp); \
 | 
				
			|||||||
INSTANTIZE(double)
 | 
					INSTANTIZE(double)
 | 
				
			||||||
INSTANTIZE(complex<double>)
 | 
					INSTANTIZE(complex<double>)
 | 
				
			||||||
INSTANTIZE(int)
 | 
					INSTANTIZE(int)
 | 
				
			||||||
INSTANTIZE(unsigned int)
 | 
					 | 
				
			||||||
INSTANTIZE(short)
 | 
					INSTANTIZE(short)
 | 
				
			||||||
INSTANTIZE(unsigned short)
 | 
					INSTANTIZE(unsigned short)
 | 
				
			||||||
INSTANTIZE(char)
 | 
					INSTANTIZE(char)
 | 
				
			||||||
INSTANTIZE(unsigned char)
 | 
					INSTANTIZE(unsigned char)
 | 
				
			||||||
 | 
					INSTANTIZE(unsigned int)
 | 
				
			||||||
INSTANTIZE(unsigned long)
 | 
					INSTANTIZE(unsigned long)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template class NRVec<double>;
 | 
					 | 
				
			||||||
template class NRVec<complex<double> >;
 | 
					 | 
				
			||||||
template class NRVec<char>;
 | 
					 | 
				
			||||||
template class NRVec<short>;
 | 
					 | 
				
			||||||
template class NRVec<int>;
 | 
					 | 
				
			||||||
template class NRVec<unsigned long>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -288,6 +281,8 @@ template<>
 | 
				
			|||||||
NRVec<char> &  NRVec<char>::normalize() {laerror("normalize() impossible for integer types"); return *this;}
 | 
					NRVec<char> &  NRVec<char>::normalize() {laerror("normalize() impossible for integer types"); return *this;}
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
NRVec<unsigned long> &  NRVec<unsigned long>::normalize() {laerror("normalize() impossible for integer types"); return *this;}
 | 
					NRVec<unsigned long> &  NRVec<unsigned long>::normalize() {laerror("normalize() impossible for integer types"); return *this;}
 | 
				
			||||||
 | 
					template<>
 | 
				
			||||||
 | 
					NRVec<unsigned int> &  NRVec<unsigned int>::normalize() {laerror("normalize() impossible for integer types"); return *this;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
@ -314,6 +309,15 @@ void NRVec<unsigned long>::gemv(const unsigned long beta,
 | 
				
			|||||||
laerror("not yet implemented");
 | 
					laerror("not yet implemented");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<>
 | 
				
			||||||
 | 
					void NRVec<unsigned int>::gemv(const unsigned int beta,
 | 
				
			||||||
 | 
					                const NRSMat<unsigned int> &A, const char trans,
 | 
				
			||||||
 | 
					                const unsigned int alpha, const NRVec &x)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					laerror("not yet implemented");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
void NRVec<unsigned char>::gemv(const unsigned char beta,
 | 
					void NRVec<unsigned char>::gemv(const unsigned char beta,
 | 
				
			||||||
                const NRSMat<unsigned char> &A, const char trans,
 | 
					                const NRSMat<unsigned char> &A, const char trans,
 | 
				
			||||||
@ -355,6 +359,15 @@ void NRVec<unsigned long>::gemv(const unsigned long beta,
 | 
				
			|||||||
laerror("not yet implemented");
 | 
					laerror("not yet implemented");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<>
 | 
				
			||||||
 | 
					void NRVec<unsigned int>::gemv(const unsigned int beta,
 | 
				
			||||||
 | 
					                const NRMat<unsigned int> &A, const char trans,
 | 
				
			||||||
 | 
					                const unsigned int alpha, const NRVec &x)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					laerror("not yet implemented");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
void NRVec<unsigned char>::gemv(const unsigned char beta,
 | 
					void NRVec<unsigned char>::gemv(const unsigned char beta,
 | 
				
			||||||
                const NRMat<unsigned char> &A, const char trans,
 | 
					                const NRMat<unsigned char> &A, const char trans,
 | 
				
			||||||
@ -407,6 +420,16 @@ void NRVec<unsigned long>::gemv(const unsigned long beta,
 | 
				
			|||||||
laerror("not yet implemented");
 | 
					laerror("not yet implemented");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<>
 | 
				
			||||||
 | 
					void NRVec<unsigned int>::gemv(const unsigned int beta,
 | 
				
			||||||
 | 
					                const SparseMat<unsigned int> &A, const char trans,
 | 
				
			||||||
 | 
					                const unsigned int alpha, const NRVec &x, bool s)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					laerror("not yet implemented");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
void NRVec<unsigned char>::gemv(const unsigned char beta,
 | 
					void NRVec<unsigned char>::gemv(const unsigned char beta,
 | 
				
			||||||
                const SparseMat<unsigned char> &A, const char trans,
 | 
					                const SparseMat<unsigned char> &A, const char trans,
 | 
				
			||||||
@ -501,3 +524,17 @@ if(to == -1) to=nn-1;
 | 
				
			|||||||
if(direction) return memqsort<1,NRVec<T>,int,int>(*this,perm,from,to);
 | 
					if(direction) return memqsort<1,NRVec<T>,int,int>(*this,perm,from,to);
 | 
				
			||||||
else return memqsort<0,NRVec<T>,int,int>(*this,perm,from,to);
 | 
					else return memqsort<0,NRVec<T>,int,int>(*this,perm,from,to);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//// forced instantization in the corespoding object file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template class NRVec<double>;
 | 
				
			||||||
 | 
					template class NRVec<complex<double> >;
 | 
				
			||||||
 | 
					template class NRVec<char>;
 | 
				
			||||||
 | 
					template class NRVec<short>;
 | 
				
			||||||
 | 
					template class NRVec<int>;
 | 
				
			||||||
 | 
					template class NRVec<unsigned int>;
 | 
				
			||||||
 | 
					template class NRVec<unsigned long>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user