tensor(3)

NAME

tensor - a N*N tensor, N=1,2,3

SYNOPSYS

The tensor class defines a 3*3 tensor, as the value of a tensorial valued field. Basic algebra with scalars, vectors of R^3 (i.e. the point class) and tensor objects are supported.

IMPLEMENTATION

class tensor {
public:

typedef size_t size_type;
typedef Float element_type;
// allocators:

tensor (const Float& init_val = 0);
tensor (Float x[3][3]);
tensor (const tensor& a);
// affectation:

tensor& operator = (const tensor& a);
tensor& operator = (const Float& val);
// modifiers:

void fill (const Float& init_val);
void reset ();
void set_row (const point& r, size_t i, size_t d = 3);
void set_column (const point& c, size_t j, size_t d = 3);
// accessors:

Float& operator()(size_type i, size_type j);
Float operator()(size_type i, size_type j) const;
point row(size_type i) const;
point col(size_type i) const;
size_t nrow() const; // = 3, for template matrix compatibility size_t ncol() const;
// inputs/outputs:

friend std::istream& operator >> (std::istream& in, tensor& a);
friend std::ostream& operator << (std::ostream& out, const tensor& a);
std::ostream& put (std::ostream& s, size_type d = 3) const;
// algebra:

friend bool operator == (const tensor&, const tensor&);
friend tensor operator - (const tensor&);
friend tensor operator + (const tensor&, const tensor&);
friend tensor operator - (const tensor&, const tensor&);
friend tensor operator * (Float, const tensor&);
friend tensor operator * (const tensor& a, Float k);
friend tensor operator / (const tensor& a, Float k);
friend point operator * (const tensor& a, const point& x);
friend point operator * (const point& yt, const tensor& a);
point trans_mult (const point& x) const;
friend tensor trans (const tensor& a, size_type d = 3);
friend tensor operator * (const tensor& a, const tensor& b);
friend tensor inv (const tensor& a, size_type d = 3);
friend tensor diag (const point& d);
// metric and geometric transformations:

friend Float dotdot (const tensor&, const tensor&);
friend Float norm2 (const tensor& a) { return dotdot(a,a); }
friend Float dist2 (const tensor& a, const tensor& b) { return norm2(a-b); } friend Float norm (const tensor& a) { return sqrt(norm2(a)); } friend Float dist (const tensor& a, const tensor& b) { return norm(a-b); } Float determinant (size_type d = 3) const;
friend Float determinant (const tensor& A, size_t d = 3);
friend bool invert_3x3 (const tensor& A, tensor& result);
// spectral:
// eigenvalues & eigenvectors:
// a = q*d*q^T
// a may be symmetric
// where q=(q1,q2,q3) are eigenvectors in rows (othonormal matrix) // and d=(d1,d2,d3) are eigenvalues, sorted in decreasing order d1 >= d2 >= d3 // return d
point eig (tensor& q, size_t dim = 3) const;
point eig (size_t dim = 3) const;
// singular value decomposition:
// a = u*s*v^T
// a can be unsymmetric
// where u=(u1,u2,u3) are left pseudo-eigenvectors in rows (othonormal matrix) // v=(v1,v2,v3) are right pseudo-eigenvectors in rows (othonormal matrix) // and s=(s1,s2,s3) are eigenvalues, sorted in decreasing order s1 >= s2 >= s3 // return s
point svd (tensor& u, tensor& v, size_t dim = 3) const;
// data:
Float _x[3][3];
// internal:
std::istream& get (std::istream&);
};
// t = a otimes b
tensor otimes (const point& a, const point& b, size_t na = 3);
// t += a otimes b
void cumul_otimes (tensor& t, const point& a, const point& b, size_t na = 3);
void cumul_otimes (tensor& t, const point& a, const point& b, size_t na, size_t nb);
Copyright © 2010-2025 Platon Technologies, s.r.o.           Index | Man stránky | tLDP | Dokumenty | Utilitky | O projekte
Design by styleshout