Мне необходимо описать матрицу, где каждый элемент является двухмерной матрицей с элементами в виде комплексных чисел, необходим свободный доступ к лубому элементу. Так как я не имею свободного доступа к литературе, то для меня это почти невыполнимая задача. Помогите, пожалуйста.
Здравствуйте, Julchen, Вы писали:
J>Мне необходимо описать матрицу, где каждый элемент является двухмерной матрицей с элементами в виде комплексных чисел, необходим свободный доступ к лубому элементу. Так как я не имею свободного доступа к литературе, то для меня это почти невыполнимая задача. Помогите, пожалуйста.
Комплексная арифметика: STL, #include <complex>. Классы complex<float>, complex<double> (первый — вычисления с одинарной, второй — с двойной точностью).
Матрицы: в зависимости от того, что ты хочешь с ними делать.
Если это просто контейнер с 2-мерным доступом, то можно и руками наваять.
template< class ITEM >
class matrix
{
private:
size_t _xsize, _ysize;
std::vector<ITEM> _data; // данные хранятся в векторе
size_t index(size_t x, size_t y) const { return x*_ysize + y; } // индекс элементов вычисляется так.
public:
matrix() : _xsize(0), _ysize(0) {}
matrix(size_t xsize, size_t ysize) : _xsize(xsize), _ysize(ysize) { _data.resize(index(xsize,ysize)); }
matrix(const matrix<ITEM>& src) : _xsize(src._xsize), _ysize(src._ysize), _data(src._data) {}
matrix& operator = (const matrix<ITEM>& src)
{
_xsize = src._xsize; _ysize = src._ysize; _data = src._data;
return *this;
}
ITEM& at(size_t x, size_t y) { return _data[index(x,y)]; }
const ITEM& at(size_t x, size_t y) const { return _data[index(x,y)]; }
};
Матрица матриц одинакового размера — это 4-мерный массив. Его также можно спроецировать на 1-мерный, вычисляя индекс по формуле
index(x1,x2,x3,x4) = ((((x1*size1)+x2)*size2)+x3)*size3+x4
а размер — как index(size1,size2,size3,size4).
Если матрицы имеют какую-то характерную особенность (например, большое количество нулевых элементов) — то можно использовать разреженные матрицы.
Если нужна арифметика — то см. библиотеку
boost.
http://www.boost.org/libs/numeric/ublas/doc/index.htm