⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transv.h

📁 本系统采用VC开发.可实现点云数据的处理,图像缩放,生成曲面.
💻 H
字号:
// Template Numerical Toolkit (TNT) for Linear Algebra//// BETA VERSION INCOMPLETE AND SUBJECT TO CHANGE// Please see http://math.nist.gov/tnt for updates//// R. Pozo// Mathematical and Computational Sciences Division// National Institute of Standards and Technology// Matrix Transpose Views#ifndef TRANSV_H#define TRANSV_H#include <iostream.h>#include <assert.h>#include "vec.h"template <class Array2D>class Transpose_View{    protected:        const Array2D &  A_;    public:        typedef typename Array2D::element_type T;        typedef         T   value_type;        typedef         T   element_type;        typedef         T*  pointer;        typedef         T*  iterator;        typedef         T&  reference;        typedef const   T*  const_iterator;        typedef const   T&  const_reference;        const Array2D & array()  const { return A_; }        Subscript num_rows() const { return A_.num_cols();}        Subscript num_cols() const { return A_.num_rows();}        Subscript lbound() const { return A_.lbound(); }        Subscript dim(Subscript i) const        {#ifdef TNT_BOUNDS_CHECK            assert( A_.lbound() <= i);            assert( i<= A_.lbound()+1);#endif            if (i== A_.lbound())                return num_rows();            else                return num_cols();        }        Transpose_View(const Transpose_View<Array2D> &A) : A_(A.A_) {};        Transpose_View(const Array2D &A) : A_(A) {};        inline const typename Array2D::element_type & operator()(            Subscript i, Subscript j) const        {#ifdef TNT_BOUNDS_CHECK        assert(lbound()<=i);        assert(i<=A_.num_cols() + lbound() - 1);        assert(lbound()<=j);        assert(j<=A_.num_rows() + lbound() - 1);#endif            return A_(j,i);        }};template <class Matrix>Transpose_View<Matrix> Transpose_view(const Matrix &A){    return Transpose_View<Matrix>(A);}template <class Matrix, class T>Vector<T> matmult(    const Transpose_View<Matrix> & A,     const Vector<T> &B){    Subscript  M = A.num_rows();    Subscript  N = A.num_cols();    assert(B.dim() == N);    Vector<T> x(N);    Subscript i, j;    T tmp = 0;    for (i=1; i<=M; i++)    {        tmp = 0;        for (j=1; j<=N; j++)            tmp += A(i,j) * B(j);        x(i) = tmp;    }    return x;}template <class Matrix, class T>inline Vector<T> operator*(const Transpose_View<Matrix> & A, const Vector<T> &B){    return matmult(A,B);}template <class Matrix>ostream& operator<<(ostream &s, const Transpose_View<Matrix> &A){    Subscript M=A.num_rows();    Subscript N=A.num_cols();    Subscript start = A.lbound();    Subscript Mend = M + A.lbound() - 1;    Subscript Nend = N + A.lbound() - 1;    s << M << "  " << N << endl;    for (Subscript i=start; i<=Mend; i++)    {        for (Subscript j=start; j<=Nend; j++)        {            s << A(i,j) << " ";        }        s << endl;    }    return s;}#endif// TRANSV_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -