matrix of permutationalgebra and type conversions
This commit is contained in:
		
							parent
							
								
									8f61a5d208
								
							
						
					
					
						commit
						680fa93425
					
				
							
								
								
									
										21
									
								
								mat.cc
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								mat.cc
									
									
									
									
									
								
							@ -3173,6 +3173,27 @@ T alpha= parity? p.parity():1;
 | 
				
			|||||||
axpy(alpha,p,direction);
 | 
					axpy(alpha,p,direction);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<typename T>
 | 
				
			||||||
 | 
					NRMat<T>::NRMat(const WeightPermutation<int,T> &wp, const bool direction)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int n=wp.size();
 | 
				
			||||||
 | 
					resize(n,n);
 | 
				
			||||||
 | 
					clear(); 
 | 
				
			||||||
 | 
					axpy(wp.weight,wp.perm,direction);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<typename T>
 | 
				
			||||||
 | 
					NRMat<T>::NRMat(const PermutationAlgebra<int,T> &ap, const bool direction)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int na= ap.size();
 | 
				
			||||||
 | 
					if(na<=0) laerror("cannot deduce matrix size from empty PermutationAlgebra");
 | 
				
			||||||
 | 
					int n=ap[0].size();
 | 
				
			||||||
 | 
					resize(n,n);
 | 
				
			||||||
 | 
					clear();
 | 
				
			||||||
 | 
					for(int i=0; i<na; ++i) axpy(ap[i].weight,ap[i].perm,direction);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//apply permutations
 | 
					//apply permutations
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								mat.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								mat.h
									
									
									
									
									
								
							@ -31,6 +31,8 @@ namespace LA {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//forward declaration
 | 
					//forward declaration
 | 
				
			||||||
template<typename T> class NRPerm;
 | 
					template<typename T> class NRPerm;
 | 
				
			||||||
 | 
					template<typename T, typename R> class WeightPermutation;
 | 
				
			||||||
 | 
					template<typename T, typename R> class PermutationAlgebra;
 | 
				
			||||||
template<typename T> class CyclePerm;
 | 
					template<typename T> class CyclePerm;
 | 
				
			||||||
template<typename T> class NRMat_from1;
 | 
					template<typename T> class NRMat_from1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -136,6 +138,8 @@ public:
 | 
				
			|||||||
	void scale_col(const int i, const T f); //in place
 | 
						void scale_col(const int i, const T f); //in place
 | 
				
			||||||
	void axpy(const T alpha, const NRPerm<int> &p, const bool direction);
 | 
						void axpy(const T alpha, const NRPerm<int> &p, const bool direction);
 | 
				
			||||||
	explicit NRMat(const NRPerm<int> &p, const bool direction, const bool parity=false); //permutation matrix
 | 
						explicit NRMat(const NRPerm<int> &p, const bool direction, const bool parity=false); //permutation matrix
 | 
				
			||||||
 | 
						explicit NRMat(const WeightPermutation<int,T> &p, const bool direction); 
 | 
				
			||||||
 | 
						explicit NRMat(const PermutationAlgebra<int,T> &p, const bool direction); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/***************************************************************************//**
 | 
						/***************************************************************************//**
 | 
				
			||||||
@ -1556,6 +1560,17 @@ NRMat<typename LA_traits<T>::normtype>  NRMat<T>::abs() const {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//convert whole matrix between types
 | 
				
			||||||
 | 
					template <typename T, typename S>
 | 
				
			||||||
 | 
					void NRMat_convert(NRMat<T> &a, const NRMat<S> &b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					a.resize(b.nrows(),b.ncols());
 | 
				
			||||||
 | 
					for(int i=0; i<b.nrows(); ++i)
 | 
				
			||||||
 | 
						for(int j=0; j<b.ncols(); ++j)
 | 
				
			||||||
 | 
							a(i,j) = (T) b(i,j);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								smat.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								smat.h
									
									
									
									
									
								
							@ -1223,6 +1223,16 @@ std::istream& operator>>(std::istream  &s, NRSMat<T> &x) {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//convert whole matrix between types
 | 
				
			||||||
 | 
					template <typename T, typename S>
 | 
				
			||||||
 | 
					void NRSMat_convert(NRSMat<T> &a, const NRSMat<S> &b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					a.resize(b.nrows(),b.ncols());
 | 
				
			||||||
 | 
					for(int i=0; i<b.nrows(); ++i)
 | 
				
			||||||
 | 
					        for(int j=0; j<=i; ++j)
 | 
				
			||||||
 | 
					                a(i,j) = (T) b(i,j);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/***************************************************************************//**
 | 
					/***************************************************************************//**
 | 
				
			||||||
 * generate operators relating NRSMat<T> objects and scalars
 | 
					 * generate operators relating NRSMat<T> objects and scalars
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										9
									
								
								vec.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								vec.h
									
									
									
									
									
								
							@ -2039,6 +2039,15 @@ for(int next=0; next<newsize; ++next)
 | 
				
			|||||||
x.resize(newsize2,true);
 | 
					x.resize(newsize2,true);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//convert whole vector between types
 | 
				
			||||||
 | 
					template <typename T, typename S>
 | 
				
			||||||
 | 
					void NRVec_convert(NRVec<T> &a, const NRVec<S> &b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					a.resize(b.size());
 | 
				
			||||||
 | 
					for(int i=0; i<b.size(); ++i)
 | 
				
			||||||
 | 
					                a[i] = (T) b[i];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}//namespace
 | 
					}//namespace
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user