Мне необходимо описать матрицу...
От: Julchen  
Дата: 17.02.03 17:14
Оценка:
Мне необходимо описать матрицу, где каждый элемент является двухмерной матрицей с элементами в виде комплексных чисел, необходим свободный доступ к лубому элементу. Так как я не имею свободного доступа к литературе, то для меня это почти невыполнимая задача. Помогите, пожалуйста.
Re: Мне необходимо описать матрицу...
От: Кодт Россия  
Дата: 17.02.03 17:40
Оценка:
Здравствуйте, 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
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.