These functions change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain ‘x’, ‘y’ or ‘z’ characters for 1-st, 2-nd and 3-d dimension correspondingly.
dat 'dir' ¶mglData: void CumSum (const char *dir) ¶mglDataC: void CumSum (const char *dir) ¶void mgl_data_cumsum (HMDT dat, const char *dir) ¶void mgl_datac_cumsum (HADT dat, const char *dir) ¶Суммирует с накоплением в выбранном направлении(ях).
dat 'dir' ¶mglData: void Integral (const char *dir) ¶mglDataC: void Integral (const char *dir) ¶void mgl_data_integral (HMDT dat, const char *dir) ¶void mgl_datac_integral (HADT dat, const char *dir) ¶Выполняет интегрирование (методом трапеций) в выбранном направлении(ях).
dat 'dir' ¶mglData: void Diff (const char *dir) ¶mglDataC: void Diff (const char *dir) ¶void mgl_data_diff (HMDT dat, const char *dir) ¶void mgl_datac_diff (HADT dat, const char *dir) ¶Выполняет дифференцирование в выбранном направлении(ях).
dat xdat ydat [zdat] ¶mglData: void Diff (const mglDataA &x) ¶mglData: void Diff (const mglDataA &x, const mglDataA &y) ¶mglData: void Diff (const mglDataA &x, const mglDataA &y, const mglDataA &z) ¶mglDataC: void Diff (const mglDataA &x) ¶mglDataC: void Diff (const mglDataA &x, const mglDataA &y) ¶mglDataC: void Diff (const mglDataA &x, const mglDataA &y, const mglDataA &z) ¶void mgl_data_diff_par (HMDT dat, HCDT x, HCDTy, HCDTz) ¶void mgl_datac_diff_par (HADT dat, HCDT x, HCDTy, HCDTz) ¶Выполняет дифференцирование данных, параметрически зависящих от координат, в направлении 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);.
dat 'dir' ¶mglData: void Diff2 (const char *dir) ¶mglDataC: void Diff2 (const char *dir) ¶void mgl_data_diff2 (HMDT dat, const char *dir) ¶void mgl_datac_diff2 (HADT dat, const char *dir) ¶Выполняет двойное дифференцирование (как в операторе Лапласа) в выбранном направлении(ях).
dat 'dir' ¶mglData: void SinFFT (const char *dir) ¶void mgl_data_sinfft (HMDT dat, const char *dir) ¶Выполняет синус преобразование в выбранном направлении(ях). Синус преобразование есть \sum a_j \sin(k j) (см. http://en.wikipedia.org/wiki/Discrete_sine_transform#DST-I).
dat 'dir' ¶mglData: void CosFFT (const char *dir) ¶void mgl_data_cosfft (HMDT dat, const char *dir) ¶Выполняет косинус преобразование в выбранном направлении(ях). Синус преобразование есть \sum a_j \cos(k j) (см. http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-I).
mglDataC: void FFT (const char *dir) ¶void mgl_datac_fft (HADT dat, const char *dir) ¶Выполняет фурье преобразование в выбранном направлении(ях). Если строка dir содержит ‘i’, то используется обратное преобразование фурье. Фурье преобразование есть \sum a_j \exp(i k j) (см. http://en.wikipedia.org/wiki/Discrete_Fourier_transform).
dat 'dir' ¶mglData: void Hankel (const char *dir) ¶mglDataC: void Hankel (const char *dir) ¶void mgl_data_hankel (HMDT dat, const char *dir) ¶void mgl_datac_hankel (HADT dat, const char *dir) ¶Выполняет преобразование Ханкеля в выбранном направлении(ях). Преобразование Ханкеля есть \sum a_j J_0(k j) (см. http://en.wikipedia.org/wiki/Hankel_transform).
dat 'dir' k ¶mglData: void Wavelet (const char *dir, int k) ¶void mgl_data_wavelet (HMDT dat, const char *dir, int k) ¶Выполняет преобразование wavelet в выбранном направлении(ях). Параметр dir задает тип: ‘d’ для daubechies, ‘D’ для центрированного daubechies, ‘h’ для haar, ‘H’ для центрированного haar, ‘b’ для bspline, ‘B’ для центрированного bspline. Если указан символ ‘i’, то выполняется обратное преобразование. Параметр k задает размер преобразования.
dat 'dir' ¶mglData: void Swap (const char *dir) ¶mglDataC: void Swap (const char *dir) ¶void mgl_data_swap (HMDT dat, const char *dir) ¶void mgl_datac_swap (HADT dat, const char *dir) ¶Меняет местами левую и правую части данных в выбранном направлении(ях). Полезно для отображения результата FFT.
dat 'dir' num ¶mglData: void Roll (char dir, num) ¶mglDataC: void Roll (char dir, num) ¶void mgl_data_roll (HMDT dat, char dir, num) ¶void mgl_datac_roll (HADT dat, char dir, num) ¶Сдвигает данные на num ячеек в выбранном направлении(ях). Соответствует замене индекса на i->(i+num)%nx при dir='x'.
dat 'dir' ¶mglData: void Mirror (const char *dir) ¶mglDataC: void Mirror (const char *dir) ¶void mgl_data_mirror (HMDT dat, const char *dir) ¶void mgl_datac_mirror (HADT dat, const char *dir) ¶Отражает данные в выбранном направлении(ях). Соответствует замене индекса на i->n-i. Отмечу, что похожего эффекта на графике можно достичь используя опции (see Опции команд), например, surf dat; xrange 1 -1.
dat ['dir'='xyz' da=2*pi] ¶mglData: void Sew (const char *dir, mreal da=2*M_PI) ¶void mgl_data_sew (HMDT dat, const char *dir, mreal da) ¶Удаляет скачки данных (например, скачки фазы после обратных тригонометрических функций) с периодом da в выбранном направлении(ях).
data ['dir'='xyz'] ¶mglData: void Smooth (const char *dir="xyz", mreal delta=0) ¶mglDataC: void Smooth (const char *dir="xyz", mreal delta=0) ¶void mgl_data_smooth (HMDT dat, const char *dir, mreal delta) ¶void mgl_datac_smooth (HADT dat, const char *dir, mreal delta) ¶Сглаживает данные в выбранном направлении(ях) dir. Строка dirs задает направления вдоль которых будет производиться сглаживание. Строка dir может содержать:
По умолчанию используется квадратичное усреднение по 5 точкам.
dat ['dir'='x'] ¶mglData: void Envelop (char dir='x') ¶void mgl_data_envelop (HMDT dat, char dir) ¶Находит огибающую данных в выбранном направлении dir.
dat 'how' q ¶mglDataC: void Diffraction (const char *how, mreal q) ¶void mgl_datac_diffr (HADT dat, const char *how, mreal q) ¶Вычисляет один шаг диффракции в конечно-разностной схеме с параметром q=\delta t/\delta x^2 используя метод третьего порядка точности. Параметр how может содержать:
dat v1 v2 [sym=off dim=0] ¶mglData: void Norm (mreal v1=0, mreal v2=1, bool sym=false, long dim=0) ¶void mgl_data_norm (HMDT dat, mreal v1, mreal v2, int sym, long dim) ¶Нормирует данные в интервал [v1,v2]. Если sym=true, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Изменения применяются только к срезам >=dim.
dat v1 v2 ['dir'='z' keep=on sym=off] ¶mglData: void NormSl (mreal v1=0, mreal v2=1, char dir='z', bool keep=true, bool sym=false) ¶void mgl_data_norm_slice (HMDT dat, mreal v1, mreal v2, char dir, int keep, 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)}.
dat 'dir' i [j=0] ¶mglData: void Keep (const char *dir, long i, long j=0) ¶mglDataC: void Keep (const char *dir, long i, long j=0) ¶void mgl_data_keep (HMDT dat, const char *dir, long i, long j) ¶void mgl_datac_keep (HADT dat, const char *dir, long i, long j=0) ¶Ограничивает изменение фазы/знака или амплитуды (если dir содержит ‘a’) данных вдоль направления dir фиксируя значение в точке {i,j} начального среза. Функция полезна для удаления общего набега фазы в комплексных данных. См. раздел Sample ‘keep’, для примеров кода и графика.
dat val ¶mglData: void Limit (mreal val) ¶mglDataC: void Limit (mreal val) ¶void mgl_data_limit (HMDT dat, mreal val) ¶void mgl_datac_limit (HADT dat, mreal val) ¶Ограничивает амплитуду данных диапазоном [-val,val]. При этом сохраняется исходный знак (фаза для комплексных чисел). Эквивалентно операции a[i] *= abs(a[i])<val?1.:val/abs(a[i]);.
dat v1 v2 [sep=on] ¶mglData: void Coil (mreal v1, mreal v2, bool sep=true) ¶void mgl_data_coil (HMDT dat, mreal v1, mreal v2, int sep) ¶Проецирует периодические данные на диапазон [v1,v2] (аналогично функции mod()). Разделяет ветки по значениям равным NAN если sep=true.
dat [val=1 step=1] ¶mglData: void Dilate (mreal val=1, long step=1) ¶void mgl_data_dilate (HMDT dat, mreal val, long step) ¶Возвращает "расширенный" на step ячеек массив из 0 и 1 для данных больших порогового значения val.
dat [val=1 step=1] ¶mglData: void Erode (mreal val=1, long step=1) ¶void mgl_data_erode (HMDT dat, mreal val, long step) ¶Возвращает "суженный" на step ячеек массив из 0 и 1 для данных больших порогового значения val.
dat mask 'how' kdx [iter=0] ¶mglData: void Mode (const mglDataA &mask, const mglDataA &pot, const char *how, double kdx=0, long iter=0)) ¶mglData: void Mode (const mglDataA &mask, const char *how, double kdx=0, long iter=0)) ¶mglDataC: void Mode (const mglDataA &mask, const mglDataA &pot, const char *how, double kdx=0, long iter=0)) ¶mglDataC: void Mode (const mglDataA &mask, const char *how, double kdx=0, long iter=0)) ¶void mgl_data_mode (HMDT dat, HCDT mask, HCDT pot, const char *how, double kdx, long iter) ¶void mgl_datac_mode (HADT dat, HCDT mask, HCDT pot, const char *how, double kdx, long iter) ¶Заменяет начальную моду d найденным решением для уравнения Пуассона u_xx+pot*u=0 в волноводе с границей определенной в mask. Если pot отсутствует (или NULL) то используются нулевые значения потенциала. Параметр how может содержать следующие символы (по умолчанию "xyz0"):
Параметр iter задает максимальное число итераций (выбирается автоматически для 0). См. раздел Sample ‘mode’, для примеров кода и графика.