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, HCDT
y, HCDT
z)
¶void
mgl_datac_diff_par (HADT
dat, HCDT
x, HCDT
y, HCDT
z)
¶Выполняет дифференцирование данных, параметрически зависящих от координат, в направлении 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).