[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. Класс mglData

Это класс для работы с массивами данных, определенный в #include <mgl/mgl_data.h>. Он содержит функции для выделения памяти и изменения размера данных, чтения данных из файла, численного дифференцирования/интегрирования/интерполяции и пр., заполнения по текстовой формуле и т.д. Класс позволяет работать с данными размерности не более 3 (как функции от трех переменных – x,y,z). По умолчанию внутреннее представление данных – float, выбранный в силу меньшего размера занимаемой памяти и достаточной для построения графиков точности. Базовый тип можно сменить на этапе установки (see section Установка MathGL) указав опцию --enable-double. Однако, в дальнейшем в документации будет использован тип float.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 Переменные

Variable of mglData: float * a

Указатель на массив данных. Это одномерный массив. Например, матрица [nx x ny x nz] представляется одномерным массивом длиной nx*ny*nz, где элемент с индексами {i, j, k} находится как a[i+nx*j+nx*ny*k] (индексы отсчитываются от нуля).

Variable of mglData: int nx

Размер массива по 1-ой размерности (’x’ размерности).

Variable of mglData: int ny

Размер массива по 2-ой размерности (’y’ размерности).

Variable of mglData: int nz

Размер массива по 3-ей размерности (’z’ размерности).

Variable of mglData: char * id

Имена колонки (или среза при nz>1) – один символ на колонку.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 Создание и удаление

Конструктор on mglData: mglData (int mx=1, int my=1, int mz=1)

Конструктор по умолчанию. Выделяет память для массива данных и заполняет ее нулями.

Конструктор on mglData: mglData (const char *fname)

Читает данные из файла.

Конструктор on mglData: mglData (const mglData &dat)

Копирует данные из другого экземпляра mglData.

Метод класса mglData (C++, Python): void Create (int mx, int my=1, int mz=1)
Функция С: void mgl_data_create (HMDT dat, int mx, int my, int mz)

Создает/пересоздает массив данных указанного размера и заполняет его нулями. Ничего не делает при mx, my, mz отрицательных или равных нулю.

Метод класса mglData (C++): void Set (const float *A, int NX, int NY=1, int NZ=1)
Метод класса mglData (C++): void Set (const double *A, int NX, int NY=1, int NZ=1)
Функция С: void mgl_data_set_float (HMDT dat, const float *A, int NX, int NY, int NZ)
Функция С: void mgl_data_set_double (HMDT dat, const double *A, int NX, int NY, int NZ)

Выделяет память и копирует данные из массивов типа float* или double*, т.е. из массивов определенных как float a[NX*NY*NZ];.

Метод класса mglData (C++): void Set (const float **A, int N1, int N2)
Метод класса mglData (C++): void Set (const double **A, int N1, int N2)
Функция С: void mgl_data_set_float2 (HMDT dat, const float **A, int N1, int N2)
Функция С: void mgl_data_set_double2 (HMDT dat, const double **A, int N1, int N2)

Выделяет память и копирует данные из массивов типа float** или double** с размерностями N1, N2, т.е. из массивов определенных как float a[N1][N2];.

Метод класса mglData (C++): void Set (const float ***A, int N1, int N2)
Метод класса mglData (C++): void Set (const double ***A, int N1, int N2)
Функция С: void mgl_data_set_float3 (HMDT dat, const float ***A, int N1, int N2)
Функция С: void mgl_data_set_double3 (HMDT dat, const double ***A, int N1, int N2)

Выделяет память и копирует данные из массивов типа float*** или double*** с размерностями N1, N2, N3, т.е. из массивов определенных как float a[N1][N2][N3];.

Метод класса mglData (C++): void Set (gsl_vector *v)
Функция С: void mgl_data_set_vector (HMDT dat, gsl_vector *v)

Выделяет память и копирует данные из структуры типа gsl_vector *.

Метод класса mglData (C++): void Set (gsl_matrix *m)
Функция С: void mgl_data_set_matrix (HMDT dat, gsl_matrix *m)

Выделяет память и копирует данные из структуры типа gsl_matrix *.

Метод класса mglData (C++, Python): inline void Set (const mglData &from)
Функция С: void mgl_data_set (HMDT dat, const HMDT from)

Выделяет память и копирует данные из другого экземпляра from.

Метод класса mglData (C++): void Set (const std::vector<int> &d)
Метод класса mglData (C++): void Set (const std::vector<float> &d)
Метод класса mglData (C++): void Set (const std::vector<double> &d)

Выделяет память и копирует данные из массива типа std::vector<T>.

Метод класса mglData (C+, Python): void Set (const char *str, int NX, int NY=1, int NZ=1)
Функция С: void mgl_data_set_values (const char *str, int NX, int NY, int NZ)

Выделяет память и сканирует (scanf) данные из строки.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 Заполнение данных

Метод класса mglData (C++, Python): void Fill (float x1, float x2, char dir='x')
Функция С: void mgl_data_fill (HMDT dat, float x1, float x2, char dir)

Заполняет значениями равно распределенными в диапазоне [x1, x2] в направлении dir={‘x’,‘y’,‘z’}.

Метод класса mglData (C++, Python): void Fill (const char *eq, mglPoint Min, mglPoint Max, const mglData *vdat=0, const mglData *wdat=0)
Функция С: void mgl_data_fill (HMGL gr, HMDT dat, const char *eq, const HMDT *vdat, const HMDT *wdat)

Заполняет значениями вычисленными по формуле eq. Формула представляет собой произвольное выражение, зависящее от переменных ‘x’, ‘y’, ‘z’, ‘u’, ‘v’, ‘w’. Координаты ‘x’, ‘y’, ‘z’ полагаются меняющимися в диапазоне Min x Max (в отличие от функции Modify). Переменная ‘u’ – значения исходного массива, переменные ‘v’, ‘w’ – значения массивов vdat, wdat. Последние могут быть NULL, т.е. опущены.

Метод класса mglData (C++, Python): void Modify (const char *eq, int dim=0)
Метод класса mglData (C++, Python): void Modify (const char *eq, const mglData &v)
Метод класса mglData (C++, Python): void Modify (const char *eq, const mglData &v, const mglData &w)
Функция С: void mgl_data_modify (HMDT dat, const char *eq, int dim)
Функция С: void mgl_data_modify_vw (HMDT dat, const char *eq, const HMDT v, const HMDT w)

Заполняет значениями вычисленными по формуле eq. Формула представляет собой произвольное выражение, зависящее от переменных ‘x’, ‘y’, ‘z’, ‘u’, ‘v’, ‘w’. Координаты ‘x’, ‘y’, ‘z’ полагаются меняющимися в диапазоне [0,1] (в отличие от функции Fill). Переменная ‘u’ – значения исходного массива, переменные ‘v’, ‘w’ – значения массивов vdat, wdat. Последние могут быть NULL, т.е. опущены. Если указан dim>0, то изменяются только слои >=dim.

Метод класса mglData (C++, Python): void Put (float val, int i=-1, int j=-1, int k=-1)
mglData: void mgl_data_put_val (HMDT a, float val, int i, int j, int k)

Присваивает значения (под-)массива dat[i, j, k] = val. Индексы i, j, k равные ‘-1’ задают значениия val для всего диапазона соответствующего направления(ий). Например, Put(val,-1,0,-1); задает a[i,0,j]=val для i=0...(nx-1), j=0...(nz-1).

Метод класса mglData (C++, Python): void Put (const mglData &v, int i=-1, int j=-1, int k=-1)
mglData: void mgl_data_put_dat (HMDT a, const HMDT v, int i, int j, int k)

Копирует значения из массива v в диапазон значений данного массива. Индексы i, j, k равные ‘-1’ задают диапазон изменения значений в соответствующих направление(ях). Младшие размерности массива v должны быть больше выбранного диапазона массива. Например, Put(v,-1,0,-1); присвоитa[i,0,j]=v.ny>nz ? v.a[i,j] : v.a[i], где i=0...(nx-1), j=0...(nz-1) и условие v.nx>=nx выполнено.

Функция С: void mgl_data_set_value (HMDT dat, float v, int i, int j, int k)

Присваивает значение выбранной ячейке массива данных.

Функция С: float mgl_data_get_value (HMDT dat, int i, int j, int k)

Возвращает значение выбранной ячейки массива данных.

Метод класса mglData (C+, Python): void GetNx ()
Функция С: float mgl_data_get_nx (HMDT dat)

Возвращает размер по x-направлению.

Метод класса mglData (C+, Python): void GetNy ()
Функция С: float mgl_data_get_ny (HMDT dat)

Возвращает размер по y-направлению.

Метод класса mglData (C+, Python): void GetNz ()
Функция С: float mgl_data_get_nz (HMDT dat)

Возвращает размер по z-направлению.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 Изменение размеров данных

Метод класса mglData (C++, Python): void Rearrange (int mx, int my=0, int mz=0)
Функция С: void mgl_data_rearrange (HMDT dat, int mx, int my, int mz)

Изменяет размерность данных без изменения самого массива данных, так что результирующий массив mx*my*mz < nx*ny*nz. Если один из параметров my или mz ноль, то он будет выбран оптимальным образом. Например, если my=0, то будет my=nx*ny*nz/mx и mz=1.

Метод класса mglData (C++, Python): void Extend (int n1, int n2=0)
Функция С: void mgl_data_extend (HMDT dat, int n1, int n2)

Увеличивает размер данных путем вставки (|n1|+1) новых срезов после (для n1>0) или перед (для n1<0) существующими данными. Можно добавить сразу 2 размерности для 1d массива, используя второй параметр n2. Данные в новые срезы будут скопированы из существующих. Например, для n1>0 новый массив будет a_ij^new = a_i^old where j=0...n1. Соответственно, для n1<0 новый массив будет a_ij^new = a_j^old, где i=0...|n1|.

Метод класса mglData (C++, Python): void Transpose (const char *dim="yx")
Функция С: void mgl_data_transpose (const char *dim)

Транспонирует (меняет порядок размерностей) массив данных. Новый порядок размерностей задается строкой dim.

Метод класса mglData (C++, Python): void Squeeze (int rx, int ry=1, int rz=1, bool smooth=false)
Функция С: void mgl_data_squeeze (HMDT dat, int rx, int ry, int rz, int smooth)

Уменьшает размер данных путем удаления элементов с индексами не кратными rx, ry, rz соответственно. Параметр smooth задает использовать сглаживания (т.е. out[i]=\sum_{j=i,i+r} a[j]/r) или нет (т.е. out[i]=a[j*r]).

Метод класса mglData (C++, Python): void Crop (int n1, int n2, char dir='x')
Функция С: void mgl_data_crop (HMDT dat, int n1, int n2, char dir)

Обрезает границы данных при i<n1 и i>n2 (при n2>0) или i>n[xyz]-n2 (при n2<=0) вдоль направления dir.

Метод класса mglData (C++, Python): void InsertRows (int at, int num=1, const char *eq=NULL)

Вставляет num срезов вдоль направления ’y’ (строк) с позиции at и заполняет их по формуле eq (при eq!=0) или нулями.

Метод класса mglData (C++, Python): void InsertColumns (int at, int num=1, const char *eq=NULL)

Вставляет num срезов вдоль направления ’x’ (колонок) с позиции at и заполняет их по формуле eq (при eq!=0) или нулями.

Метод класса mglData (C++, Python): void InsertSlices (int at, int num=1, const char *eq=NULL)

Вставляет num срезов вдоль направления ’z’ с позиции at и заполняет их по формуле eq (при eq!=0) или нулями.

Метод класса mglData (C++, Python): void DeleteRows (int at, int num=1)

Удаляет num срезов вдоль направления ’y’ (строк) с позиции at.

Метод класса mglData (C++, Python): void DeleteColumns (int at, int num=1)

Удаляет num срезов вдоль направления ’x’ (колонок) с позиции at.

Метод класса mglData (C++, Python): void DeleteSlices (int at, int num=1)

Удаляет num срезов вдоль направления ’z’ с позиции at.

Метод класса mglData (C++, Python): void Insert (char dir, int pos=0, int num=1)
Функция С: void mgl_data_insert (HMDT dat, char dir, int pos, char num)

Вставляет num срезов вдоль направления dir с позиции pos и заполняет их нулями.

Метод класса mglData (C++, Python): void Delete (char dir, int pos=0, int num=1)
Функция С: void mgl_data_delete (HMDT dat, char dir, int pos, char num)

Удаляет num срезов вдоль направления dir с позиции pos.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.5 Чтение/сохранение данных

Метод класса mglData (C++, Python): void Read (const char *fname)
Функция С: void mgl_data_read (HMDT dat, const char *fname)

Читает данные из текстового файла с разделителями символом пробела/табуляции с автоматическим определением размера массива. Двойной перевод строки начинает новый срез данных (по направлению z).

Метод класса mglData (C++, Python): void Read (const char *fname, int mx, int my=1, int mz=1)
Функция С: void mgl_data_read_dim (HMDT dat, const char *fname, int mx, int my, int mz)

Читает данные из текстового файла с заданными размерами. Ничего не делается если параметры mx, my или mz равны нулю или отрицательны.

Метод класса mglData (C++, Python): void ReadMat (const char *fname, int dim=2)
Функция С: void mgl_data_read_mat (HMDT dat, const char *fname, int dim)

Читает данные из текстового файла с размерами, указанными в первых dim числах файла. При этом переменная dim задает размерность (1d, 2d, 3d) данных.

Метод класса mglData (C++, Python): void ReadRange (const char *templ, float from, float to, float step=1.f, bool as_slice=false)

Объединяет данные из нескольких текстовых файлов. Имена файлов определяются вызовом функции sprintf(fname,templ,val);, где val меняется от from до to с шагом step. Данные загружаются один за другим в один и тот же срез данных (при as_slice=false) или срез-за-срезом (при as_slice=true).

Метод класса mglData (C++, Python): void ReadAll (const char *templ, bool as_slice=false)

Объединяет данные из нескольких текстовых файлов, чьи имена удовлетворяют шаблону templ (например, templ="t_*.dat"). Данные загружаются один за другим в один и тот же срез данных (при as_slice=false) или срез-за-срезом (при as_slice=true).

Метод класса mglData (C++, Python): void Save (const char *fname, int ns=-1) const
Функция С: void mgl_data_save (const HMDT dat, const char *fname, int ns)

Сохраняет весь массив данных при ns=-1 или только ns-ый срез в текстовый файл.

Метод класса mglData (C++, Python): void ReadHDF (const char *fname, const char *dname)

Читает массив с именем dname из HDF5 или HDF4 файла fname. Функция ничего не делает если библиотека была собрана с флагами NO_HDF5|NO_HDF4.

Метод класса mglData (C++, Python): void SaveHDF (const char *fname, const char *dname, bool rewrite=false) const

Сохраняет массив под именем dname в HDF5 или HDF4 файл fname. Функция ничего не делает если библиотека была собрана с флагами NO_HDF5|NO_HDF4.

Метод класса mglData (C++, Python): void Import (const char *fname, const char *scheme, float v1=0, float v2=1)
Функция С: void mgl_data_import (HMDT dat, const char *fname, const char *scheme, float v1, float v2)

Читает данные из растрового файла. RGB значения пикселов преобразуются в число в диапазоне [v1, v2] используя цветовую схему sch (see section Цветовая схема).

Метод класса mglData (C++, Python): void Export (const char *fname, const char *scheme, float v1=0, float v2=0, int ns=-1) const
Функция С: void mgl_data_export (HMDT dat, const char *fname, const char *scheme, float v1, float v2, int ns) const

Сохраняет данные в растровый файл. Числовые значения, нормированные в диапазон [v1, v2], преобразуются в RGB значения пикселов, используя цветовую схему sch (see section Цветовая схема). Если v1>=v2, то значения v1, v2 определяются автоматически как минимальное и максимальное значение данных.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.6 Создание новых данных

Метод класса mglData (C++, Python): mglData SubData (int xx, int yy=-1, int zz=-1) const
Функция С: HMDT mgl_data_subdata (const HMDT dat, int xx, int yy, int zz)

Возвращает в res подмассив массива данных dat с фиксированными значениями индексов с положительными значениями. Например, SubData(-1,2) выделяет третью строку (индексы начинаются с нуля), SubData(4,-1) выделяет 5-ую колонку, SubData(-1,-1,3) выделяет 4-ый срез и т.д.

Метод класса mglData (C++, Python): mglData SubData (const mglData &xx, const mglData &yy, const mglData &zz) const
Функция С: HMDT mgl_data_subdata_ext (const HMDT dat, const HMDT xx, const HMDT yy, const HMDT zz)

Extracts sub-array data from the original data array for indexes specified by arrays xx, yy, zz (indirect access). The resulting array have the same dimensions as input arrays for 2D and 3D arguments. This function work like previous one for 1D arguments (or numbers). The dimensions of all argument must be the same if they are 2D or 3D arrays.

Метод класса mglData (C++, Python): mglData Column (const char *eq) const
Функция С: HMDT mgl_data_column (const HMDT dat, const char *eq)

Возвращает массив данных заполненный по формуле eq, вычисленной для именованных колонок (или срезов). Например, Column("n*w^2/exp(t)");. Имена колонок задается функцией SetColumnId() или при чтении файлов данных.

Метод класса mglData (C++, Python): void SetColumnId (const char *ids)
Функция С: void mgl_data_set_id (HMDT dat, const char *ids)

Устанавливает символьные обозначения для колонок данных. Строка должна содержать символы ’a’...’z’ один на колонку (без пробелов).

Метод класса mglData (C++, Python): mglData Trace () const

Возвращает массив диагональных элементов a[i,i] (для 2D данных) или a[i,i,i] (для 3D данных) где i=0...nx-1. В 1D случае возвращается сам массив данных. Размеры массива данных должен быть ny,nz >= nx или ny,nz = 1.

Метод класса mglData (C++, Python): mglData Hist (int n, float v1=0, float v2=1, int nsub=0) const
Функция С: HMDT mgl_data_hist (const HMDT dat, int n, float v1, float v2, int nsub)

Возвращает распределение (гистограмму) из n точек от значений массива в диапазоне [v1, v2]. Параметр nsub задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы).

Метод класса mglData (C++, Python): mglData Hist (const mglData &w, int n, float v1=0, float v2=1, int nsub=0) const
Функция С: HMDT mgl_data_hist_w (const HMDT dat, const HMDT w, int n, float v1, float v2, int nsub)

Возвращает распределение (гистограмму) из n точек от значений массива в диапазоне [v1, v2]. Массив w задает веса элементов. Параметр nsub задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы).

Метод класса mglData (C++, Python): mglData Momentum (char dir, const char *how) const
Функция С: HMDT mgl_data_momentum (const HMDT dat, char dir, const char *how)

Возвращает момент (1d массив) данных вдоль направления dir. Строка how определяет тип момента. Момент определяется как res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij если dir=‘z’ и т.д. Координаты ‘x’, ‘y’, ‘z’ – индексы массива в диапазоне [0,1].

Метод класса mglData (C++, Python): mglData Sum (const char *dir) const
Функция С: HMDT mgl_data_sum (const HMDT dat, const char *dir)

Возвращает результат суммирования данных вдоль направления(ий) dir.

Метод класса mglData (C++, Python): mglData Max (const char *dir) const
Функция С: HMDT mgl_data_max_dir (const HMDT dat, const char *dir)

Возвращает максимальное значение данных вдоль направления(ий) dir.

Метод класса mglData (C++, Python): mglData Min (const char *dir) const
Функция С: HMDT mgl_data_min_dir (const HMDT dat, const char *dir)

Возвращает минимальное значение данных вдоль направления(ий) dir.

Метод класса mglData (C++, Python): mglData Combine (const mglData &a) const
Функция С: HMDT mgl_data_combine (const HMDT dat, const HMDT a)

Возвращает прямое произведение массивов (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.).

Метод класса mglData (C++, Python): mglData Evaluate (const mglData &idat, bool norm=true) const
Метод класса mglData (C++, Python): mglData Evaluate (const mglData &idat, const mglData &jdat, bool norm=true) const
Метод класса mglData (C++, Python): mglData Evaluate (const mglData &idat, const mglData &jdat, const mglData &kdat, bool norm=true) const
Функция С: HMDT mgl_data_evaluate_i (const HMDT dat, const HMDT idat, int norm)
Функция С: HMDT mgl_data_evaluate_ij (const HMDT dat, const HMDT idat, const HMDT jdat, int norm)
Функция С: HMDT mgl_data_evaluate_ijk (const HMDT dat, const HMDT idat, const HMDT jdat, const HMDT kdat, int norm)

Возвращает массив данных, полученный в результате интерполяции исходного массива в точках других массивов (например, res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры массивов idat, jdat, kdat должны совпадать. Координаты в idat, jdat, kdat полагаются нормированными в диапазон [0,1] (при norm=true) или в диапазоны [0,nx], [0,ny], [0,nz] соответственно.

Метод класса mglData (C++, Python): mglData Resize (int mx, int my=1, int mz=1, float x1=0, float x2=1, float y1=0, float y2=1, float z1=0, float z2=1) const
Функция С: HMDT mgl_data_resize (const HMDT dat, int mx, int my, int mz)
Функция С: HMDT mgl_data_resize_box (const HMDT dat, int mx, int my, int mz, float x1, float x2, float y1, float y2, float z1, float z2)

Возвращает массив данных размером mx, my, mz со значениями полученными интерполяцией значений из части [x1,x2] x [y1,y2] x [z1,z2] исходного массива. Величины x,y,z полагаются нормированными в диапазоне [0,1].


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.7 Изменение данных

Эти функции изменяют данные вдоль заданного направления(ий) типа например дифференцирования, интегрирования и т.д. Направление указывается строкой dir, которая может содержать символы ‘x’, ‘y’ и/или ‘z’, вдоль которых изменения будут применены.

Метод класса mglData (C++, Python): void CumSum (const char *dir)
Функция С: void mgl_data_cumsum (HMDT dat, const char *dir)

Суммирует с накоплением в выбранном направлении(ях).

Метод класса mglData (C++, Python): void Integral (const char *dir)
Функция С: void mgl_data_integral (HMDT dat, const char *dir)

Выполняет интегрирование (подобно суммированию с накоплением) в выбранном направлении(ях).

Метод класса mglData (C++, Python): void Diff (const char *dir)
Функция С: void mgl_data_diff (HMDT dat, const char *dir)

Выполняет дифференцирование в выбранном направлении(ях).

Метод класса mglData (C++, Python): void Diff (const mglData &x, const mglData &y)
Метод класса mglData (C++, Python): void Diff (const mglData &x, const mglData &y, const mglData &z)
Функция С: void mgl_data_diff_par (HMDT dat, const HMDT x, const HMDTy, const HMDTz)

Выполняет дифференцирование данных, параметрически зависящих от координат, в направлении x с y, z=constant. Параметр z может быть опущен, что соответствует 2D случаю. Используются следующие формулы (2D случай): da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j), где a_i=da/di, a_j=da/dj обозначает дифференцирование вдоль 1-ой и 2-ой размерности. Похожие формулы используются и в 3D случае. Порядок аргументов можно менять – например, если данные a(i,j) зависят от координат {x(i,j), y(i,j)}, то обычная производная по ‘x’ будет равна Diff(x,y);, а обычная производная по ‘y’ будет равна Diff(y,x);.

Метод класса mglData (C++, Python): void Diff2 (const char *dir)
Функция С: void mgl_data_diff2 (const char *dir)

Выполняет двойное дифференцирование (как в операторе Лапласа) в выбранном направлении(ях).

Метод класса mglData (C++, Python): void SinFFT (const char *dir)
Функция С: void mgl_data_sinfft (HMDT dat, const char *dir)

Выполняет синус преобразование в выбранном направлении(ях). Синус преобразование есть \sum a_i \sin(k i).

Метод класса mglData (C++, Python): void CosFFT (const char *dir)
Функция С: void mgl_data_cosfft (HMDT dat, const char *dir)

Выполняет косинус преобразование в выбранном направлении(ях). Синус преобразование есть \sum a_i \cos(k i).

Метод класса mglData (C++, Python): void Hankel (const char *dir)
Функция С: void mgl_data_hankel (HMDT dat, const char *dir)

Выполняет преобразование Ханкеля в выбранном направлении(ях). Преобразование Ханкеля есть \sum a_i J_0(k i).

Метод класса mglData (C++, Python): void Swap (const char *dir)
Функция С: void mgl_data_swap (HMDT dat, const char *dir)

Меняет местами левую и правую части данных в выбранном направлении(ях). Полезно для отображения результата FFT.

Метод класса mglData (C++, Python): void Roll (char dir, num)
Функция С: void mgl_data_roll (HMDT dat, char dir, num)

Сдвигает данные на num ячеек в выбранном направлении(ях). Соответствует замене индекса на i->(i+num)%n.

Метод класса mglData (C++, Python): void Mirror (const char *dir)
Функция С: void mgl_data_mirror (HMDT dat, const char *dir)

Отражает данные в выбранном направлении(ях). Соответствует замене индекса на i->n-i.

Метод класса mglData (C++, Python): void Sew (const char *dir, float da=2*M_PI)
Функция С: void mgl_data_sew (HMDT dat, const char *dir, float da)

Удаляет скачки данных (например, скачки фазы после обратных тригонометрических функций) с периодом da в выбранном направлении(ях).

Метод класса mglData (C++, Python): void Smooth (int Type, const char *dir, float delta=0)
Функция С: void mgl_data_smooth (HMDT dat, int Type, float delt, const char *dirs)

Сглаживает данные в выбранном направлении(ях) dir методом Type. Сейчас поддерживаются 4 метода: SMOOTH_NONE=0 ничего не делает при delta=0 или сдвигает данные к нулю на шагом delta, SMOOTH_LINE_3=1 линейное усреднение по 3 точкам, SMOOTH_LINE_5=2 линейное усреднение по 5 точкам, SMOOTH_QUAD_5=3 квадратичное усреднение по 5 точкам. Параметр delta запрещает изменение значений на величину большую delta.

Метод класса mglData (C++, Python): void Smooth (const char *dir)

Smooths the data on specified direction(s). This is the same as Smooth() but argument Type is specified in string as ‘0’ for SMOOTH_NONE, ‘3’ for SMOOTH_LINE_3, ‘5’ for SMOOTH_LINE_5. If string dir don’t contain digits ‘035’ then Type=SMOOTH_QUAD_5 is used.

Метод класса mglData (C++, Python): void Envelop (char dir='x')
Функция С: void mgl_data_envelop (HMDT dat, char dir)

Находит огибающую данных в выбранном направлении dir.

Метод класса mglData (C++, Python): void Norm (float v1=0, float v2=1, bool sym=false, int dim=0)

Нормирует данные в интервал [v1,v2]. Если sym=true, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Изменения применяются только к срезам >=dim.

Метод класса mglData (C++, Python): void NormSl (float v1=0, float v2=1, char dir='z', bool keep_en=true, bool sym=false)
Функция С: void mgl_data_norm_slice (HMDT dat, float v1, float v2, char dir, int keep_en, int sym)

Нормирует данные срез-за-срезом в выбранном направлении dir в интервал [v1,v2]. Если sym=true, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Если keep=true, то максимальное значение k-го среза ограничено величиной \sqrt\sum a_ij(k)/\sum a_ij(0).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.8 Интерполяция

Method on mglData (C++, Python): float Spline (float x, float y=0, float z=0) const
C function: float mgl_data_spline (const HMDT dat, float x, float y, float z)

Интерполирует данные кубическим сплайном в точке x в [0...nx-1], y в [0...ny-1], z в [0...nz-1].

Method on mglData (C++, Python): float Spline1 (float x, float y=0, float z=0) const
C function: float mgl_data_spline1 (const HMDT dat, float x, float y, float z)

Интерполирует данные кубическим сплайном в точке x, y, z, где координаты полагаются в интервале [0, 1].

Method on mglData (C++, Python): float Linear (float x, float y=0, float z=0) const
C function: float mgl_data_linear (const HMDT dat, float x, float y, float z)

Интерполирует данные линейной функцией в точке x в [0...nx-1], y в [0...ny-1], z в [0...nz-1].

Method on mglData (C++, Python): float Linear1 (float x, float y=0, float z=0) const
C function: float mgl_data_linear1 (const HMDT dat, float x, float y, float z)

Интерполирует данные линейной функцией в точке x, y, z, где координаты полагаются в интервале [0, 1].

Method on mglData (C++, Python): float v (int i, int j=0, int k=0) const
C function: float mgl_data_get_value (const HMDT dat, int i, int j, int k)

Возвращает значение ячейки с проверкой на границы массива данных.

Method on mglData (C++, Python): float Spline5 (float x, float y, float z, float &dx, float &dy, float &dz) const

Интерполирует данные сплайном 5-го порядка в точке x, y, z, где координаты полагаются в интервале [0, 1].

C function: float * mgl_data_value (HMDT dat, int i, int j, int k)

Возвращает указатель на ячейку данных. Может быть не действителен после вызова любой функции изменяющей данные.

C function: const float * mgl_data_data (const HMDT dat)

Возвращает указатель на весь массив данных. Может быть не действителен после вызова любой функции изменяющей данные.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.9 Информационные функции

Метод класса mglData (C++): void PrintInfo (char *buf, bool all=false) const

Печатает информацию о данных (размеры, моменты и пр.) в строку buf. Параметр all устанавливает печатать ли подробную информацию (если true) или только базовую информацию.

Метод класса mglData (C++): void PrintInfo (FILE *fp) const

Аналогично, но выводит в файл (или, например, в stdout).

Метод класса mglData (C++, Python): float Maximal () const
Функция С: float mgl_data_max (const HMDT dat)

Возвращает максимальное значение массива данных.

Метод класса mglData (C++, Python): float Minimal () const
Функция С: float mgl_data_min (HMDT dat) const

Возвращает минимальное значение массива данных.

Метод класса mglData (C++, Python): float Maximal (int &i, int &j, int &k) const
Функция С: float mgl_data_max_int (const HMDT dat, int *i, int *j, int *k)

Возвращает максимальное значение массива данных и его положение в переменные i, j, k.

Метод класса mglData (C++, Python): float Minimal (int &i, int &j, int &k) const
Функция С: float mgl_data_min_int (const HMDT dat, int *i, int *j, int *k)

Возвращает минимальное значение массива данных и его положение в переменные i, j, k.

Метод класса mglData (C++, Python): float Maximal (float &i, float &j, float &k) const
Функция С: float mgl_data_max_real (const HMDT dat, float *x, float *y, float *z)

Возвращает максимальное значение массива данных и его приближенное (интерполированное) положение в переменные i, j, k.

Метод класса mglData (C++, Python): float Minimal (float &i, float &j, float &k) const
Функция С: float mgl_data_min_real (const HMDT dat, float *x, float *y, float *z)

Возвращает минимальное значение массива данных и его приближенное (интерполированное) положение в переменные i, j, k.

Метод класса mglData (C++, Python): float Momentum (char dir, float &m, float &w) const
Функция С: float mgl_data_momentum_mw (const HMDT dat, char dir, float *m, float *w)

Возвращает нулевой момент (энергию, I=\sum a_i) и записывает первый (среднее, m = \sum \xi_i a_i/I) и второй момент (ширину, w^2 = \sum (\xi_i-m)^2 a_i/I). Здесь \xi – соответствующая кордината если dir равно ‘'x'’, ‘'y'’, ‘'z'’. В противном случае среднее и ширина равны m = \sum a_i/N, w^2 = \sum (a_i-m)^2/N.

Метод класса mglData (C++): float Momentum (char dir, float &m, float &w, float &s, float &k) const

Возвращает нулевой момент (энергию, I=\sum a_i) и записывает первый (среднее, m = \sum \xi_i a_i/I), второй (ширину, w^2 = \sum (\xi_i-m)^2 a_i/I), третий (асимметрия, s = \sum (\xi_i-m)^3 a_i/ I w^3) и четвертый моменты (эксцесс, k = \sum (\xi_i-m)^4 a_i / 3 I w^4)). Здесь \xi – соответствующая кордината если dir равно ‘'x'’, ‘'y'’, ‘'z'’. В противном случае среднее, ширина, асимметрия, эксцесс равны m = \sum a_i/N, w^2 = \sum (a_i-m)^2/N и т.д.

Метод класса mglData (C++, Python): float Find (const char *cond, int &i, int &j, int &k) const
Функция С: float mgl_data_first (const HMDT dat, const char *cond, int *i, int *j, int *k)

Находит положение (после заданного в i, j, k) первого не нулевого значения формулы cond. Функция возвращает найденное значение и записывает его положение в i, j, k.

Метод класса mglData (C++, Python): float Last (const char *cond, int &i, int &j, int &k) const
Функция С: float mgl_data_last (const HMDT dat, const char *cond, int *i, int *j, int *k)

Находит положение (перед заданного в i, j, k) последнего не нулевого значения формулы cond. Функция возвращает найденное значение и записывает его положение в i, j, k.

Метод класса mglData (C++, Python): int Find (const char *cond, char dir, int i=0, int j=0, int k=0) const
Функция С: float mgl_data_find (const HMDT dat, const char *cond, int i, int j, int k)

Возвращает положение первого в направлении dir не нулевого значения формулы cond. Поиск начинается с точки {i,j,k}.

Метод класса mglData (C++, Python): bool FindAny (const char *cond) const
Функция С: float mgl_data_find_any (const HMDT dat, const char *cond)

Определяет есть ли хоть одно значение массива, удовлетворяющее условию cond.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.10 Операторы

Метод класса mglData (C++, Python): void operator= (const mglData &d)

Копирует данные из другого экземпляра.

Метод класса mglData (C++, Python): void operator*= (const mglData &d)
Функция С: void mgl_data_mul_dat (HMDT dat, const HMDT d)

Поэлементно умножает массив d.

Метод класса mglData (C++, Python): void operator/= (const mglData &d)
Функция С: void mgl_data_div_dat (HMDT dat, const HMDT d)

Поэлементно делит массив d.

Метод класса mglData (C++, Python): void operator+= (const mglData &d)
Функция С: void mgl_data_add_dat (HMDT dat, const HMDT d)

Поэлементно прибавляет d. Adds the other data.

Метод класса mglData (C++, Python): void operator-= (const mglData &d)
Функция С: void mgl_data_sub_dat (HMDT dat, const HMDT d)

Поэлементно вычитает d.

Метод класса mglData (C++, Python): void operator*= (float d)
Функция С: void mgl_data_mul_num (HMDT dat, float d)

Умножает каждый элемент на число.

Метод класса mglData (C++, Python): void operator/= (float d)
Функция С: void mgl_data_div_num (HMDT dat, float d)

Делит каждый элемент на число.

Метод класса mglData (C++, Python): void operator+= (float d)
Функция С: void mgl_data_add_num (HMDT dat, float d)

Прибавляет число к каждому элементу.

Метод класса mglData (C++, Python): void operator-= (float d)
Функция С: void mgl_data_sub_num (HMDT dat, float d)

Вычитает число из каждого элемента.

Функция библиотеки: mglData operator+ (const mglData &a, const mglData &b)

Возвращает поэлементную сумму данных.

Функция библиотеки: mglData operator+ (float a, const mglData &b)
Функция библиотеки: mglData operator+ (const mglData &a, float b)

Возвращает поэлементную сумму данных и числа.

Функция библиотеки: mglData operator- (const mglData &a, const mglData &b)

Возвращает поэлементную разность данных.

Функция библиотеки: mglData operator- (float a, const mglData &b)
Функция библиотеки: mglData operator- (const mglData &a, float b)

Возвращает поэлементную разность числа и данных.

Функция библиотеки: mglData operator* (const mglData &a, const mglData &b)

Возвращает поэлементное произведение данных.

Функция библиотеки: mglData operator* (float a, const mglData &b)
Функция библиотеки: mglData operator* (const mglData &a, float b)

Возвращает поэлементное произведение данных на число.

Функция библиотеки: mglData operator/ (const mglData &a, const mglData &b)

Возвращает поэлементное деление данных.

Функция библиотеки: mglData operator/ (const mglData &a, float b)

Возвращает поэлементное деление данных на число.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.11 Глобальные функции

Эти функции не методы класса mglData, но они дают дополнительные возможности по обработке данных. Поэтому я поместил их в эту главу.

Функция библиотеки: mglData mglTransform (const mglData &real, const mglData &imag, const char *type)
Функция С: HMDT mgl_transform (const HMDT real, const HMDT imag, const char *type)

Выполняет интегральное преобразование комплексных данных real, imag в выбранном направлении и возвращает модуль результата. Порядок и тип преобразований задается строкой type: первый символ для x-направления, второй для y-направления, третий для z-направления. Возможные символы: ‘f’ – прямое преобразование Фурье, ‘i’ – обратное преобразование Фурье, ‘s’ – синус преобразование, ‘c’ – косинус преобразование, ‘h’ – преобразование Ханкеля, ‘n’ или ‘ ’ – нет преобразования.

Функция библиотеки: mglData mglTransformA const mglData &ampl, const mglData &phase, const char *type)
Функция С: HMDT mgl_transform_a const HMDT ampl, const HMDT phase, const char *type)

Аналогично предыдущему с заданными амплитудой ampl и фазой phase комплексных чисел.

Функция библиотеки: mglData mglSTFA (const mglData &real, const mglData &imag, int dn, char dir='x')
Функция С: HMDT mgl_data_stfa (const HMDT real, const HMDT imag, int dn,char dir)

Выполняет оконное преобразование Фурье длиной dn для комплексных данных real, imag и возвращает модуль результата. Например, для dir=‘x’ результат будет иметь размер {int(nx/dn), dn, ny} и будет равен res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn.

Функция библиотеки: mglData mglPDE (const char *ham, const mglData &ini_re, const mglData &ini_im, mglPoint Min, mglPoint Max, float dz=0.1, float k0=100)
Функция С: HMDT mgl_pde_solve (HMGL gr, const char *ham, const HMDT ini_re, const HMDT ini_im, float dz, float k0)

Решает уравнение в частных производных du/dz = i*k0*ham(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy – псевдо-дифференциальные операторы. Параметры ini_re, ini_im задают начальное распределение поля. Координаты в уравнении и в решении полагаются в диапазоне осей координат. Замечу, что внутри этот диапазон увеличивается в 3/2 раза для уменьшения отражения от границ расчетного интервала. Параметр dz задает шаг по эволюционной координате z. В данный момент использован упрощенный алгоритм, когда все “смешанные” члена (типа ‘x*p’->x*d/dx) исключаются. Например, в 2D случае это функции типа ham = f(p,z) + g(x,z,u). При этом допускаются коммутирующие комбинации (типа ‘x*q’->x*d/dy). Переменная ‘u’ используется для обозначения амплитуды поля |u|. Это позволяет решать нелинейные задачи – например, нелинейное уравнение Шредингера ham='p^2+q^2-u^2'. Также можно указать мнимую часть для поглощения (типа ham = 'p^2+i*x*(x>0)'), но только если зависимость от ‘i’ линейная, т.е. ham = hre+i*him. См. раздел PDE – пример использования, для примеров кода и графика.

Функция библиотеки: mglData mglRay (const char *ham, mglPoint r0, mglPoint p0, float dt=0.1, float tmax=10)
Функция С: HMDT mgl_ray_trace (const char *ham, float x0, float y0, float z0, float px, float py, float pz, float dt, float tmax)

Решает систему геометрооптических уравнений dr/dt = d ham/dp, dp/dt = -d ham/dr. Это гамильтоновы уравнения для траектории частицы в 3D случае. Гамильтониан ham может зависеть от координат ‘x’, ‘y’, ‘z’, импульсов ‘p’=px, ‘q’=py, ‘v’=pz и времени ‘t’: ham = H(x,y,z,p,q,v,t). Начальная точка (при t=0) задается переменными {x0, y0, z0, p0, q0, v0}. Параметры dt и tmax задают шаг и максимальное время интегрирования. Результат – массив {x,y,z,p,q,v,t} с размером {7 * int(tmax/dt+1) }. См. раздел Beam tracing – пример использования, для примеров кода и графика.

Функция библиотеки: mglData mglQO2d (const char *ham, const mglData &ini_re, const mglData &ini_im, const mglData &ray, float r=1, float k0=100, mglData *xx=0, mglData *yy=0, bool UseR=true)
Функция С: HMDT mgl_qo2d_solve (const char *ham, const HMDT ini_re, const HMDT ini_im, const HMDT ray, float r, float k0, HMDT xx, HMDT yy)

Решает уравнение в частных производных du/dt = i*k0*ham(p,q,x,y,|u|)[u] в сопровождающей системе координат, где p=-i/k0*d/dx, q=-i/k0*d/dy – псевдо-дифференциальные операторы. Параметры ini_re, ini_im задают начальное распределение поля. Параметр ray задает опорный луч для сопровождающей системы координат. Можно использовать луч найденный с помощью mglRay(). Опорный луч должен быть достаточно гладкий, чтобы система координат была однозначной и для исключения ошибок интегрирования. Если массивы xx и yy указаны, то в них записываются декартовы координаты для каждой точки найденного решения. См. также mglPDE(). См. раздел Beam tracing – пример использования, для примеров кода и графика.

Функция библиотеки: mglData mglJacobian (const mglData &x, const mglData &y)
Функция библиотеки: mglData mglJacobian (const mglData &x, const mglData &y, const mglData &z)
Функция С: HMDT mgl_jacobian_2d (const HMDT x, const HMDT y)
Функция С: HMDT mgl_jacobian_3d (const HMDT x, const HMDT y, const HMDT z)

Вычисляет якобиан преобразования {i,j,k} в {x,y,z}, где координаты {i,j,k} полагаются нормированными в интервал [0,1]. Якобиан находится по формуле det||dr_\alpha/d\xi_\beta||, где r={x,y,z} и \xi={i,j,k}. Все размерности всех массивов должны быть одинаковы. Данные должны быть трехмерными если указаны все 3 массива {x,y,z} или двумерными если только 2 массива {x,y}.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Build Daemon user on December 14, 2012 using texi2html 1.82.