[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Это класс для работы с массивами данных, определенный в #include <mgl/mgl_data.h>
. Он содержит функции для выделения памяти и изменения размера данных, чтения данных из файла, численного дифференцирования/интегрирования/интерполяции и пр., заполнения по текстовой формуле и т.д. Класс позволяет работать с данными размерности не более 3 (как функции от трех переменных – x,y,z). По умолчанию внутреннее представление данных – float, выбранный в силу меньшего размера занимаемой памяти и достаточной для построения графиков точности. Базовый тип можно сменить на этапе установки (see section Установка MathGL) указав опцию --enable-double
. Однако, в дальнейшем в документации будет использован тип float
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
float *
aУказатель на массив данных. Это одномерный массив. Например, матрица [nx x ny x nz] представляется одномерным массивом длиной nx*ny*nz, где элемент с индексами {i, j, k} находится как a[i+nx*j+nx*ny*k] (индексы отсчитываются от нуля).
int
nxРазмер массива по 1-ой размерности (’x’ размерности).
int
nyРазмер массива по 2-ой размерности (’y’ размерности).
int
nzРазмер массива по 3-ей размерности (’z’ размерности).
char *
idИмена колонки (или среза при nz>1) – один символ на колонку.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
mglData
:
mglData (int
mx=1
, int
my=1
, int
mz=1
)Конструктор по умолчанию. Выделяет память для массива данных и заполняет ее нулями.
mglData
:
mglData (const char *
fname)Читает данные из файла.
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] | [ ? ] |
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
)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
)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] | [ ? ] |
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] | [ ? ] |
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
) constvoid
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] | [ ? ] |
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] | [ ? ] |
Эти функции изменяют данные вдоль заданного направления(ий) типа например дифференцирования, интегрирования и т.д. Направление указывается строкой 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 HMDT
y, const HMDT
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);
.
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] | [ ? ] |
mglData
(C++, Python): float
Spline (float
x, float
y=0
, float
z=0
) const
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].
mglData
(C++, Python): float
Spline1 (float
x, float
y=0
, float
z=0
) const
float
mgl_data_spline1 (const HMDT
dat, float
x, float
y, float
z)Интерполирует данные кубическим сплайном в точке x, y, z, где координаты полагаются в интервале [0, 1].
mglData
(C++, Python): float
Linear (float
x, float
y=0
, float
z=0
) const
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].
mglData
(C++, Python): float
Linear1 (float
x, float
y=0
, float
z=0
) const
float
mgl_data_linear1 (const HMDT
dat, float
x, float
y, float
z)Интерполирует данные линейной функцией в точке x, y, z, где координаты полагаются в интервале [0, 1].
mglData
(C++, Python): float
v (int
i, int
j=0
, int
k=0
) const
float
mgl_data_get_value (const HMDT
dat, int
i, int
j, int
k)Возвращает значение ячейки с проверкой на границы массива данных.
mglData
(C++, Python): float
Spline5 (float
x, float
y, float
z, float
&dx, float
&dy, float
&dz) const
Интерполирует данные сплайном 5-го порядка в точке x, y, z, где координаты полагаются в интервале [0, 1].
float *
mgl_data_value (HMDT
dat, int
i, int
j, int
k)Возвращает указатель на ячейку данных. Может быть не действителен после вызова любой функции изменяющей данные.
const float *
mgl_data_data (const HMDT
dat)Возвращает указатель на весь массив данных. Может быть не действителен после вызова любой функции изменяющей данные.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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] | [ ? ] |
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)Вычитает число из каждого элемента.
const mglData &
a, const mglData &
b)Возвращает поэлементную сумму данных.
float
a, const mglData &
b)const mglData &
a, float
b)Возвращает поэлементную сумму данных и числа.
const mglData &
a, const mglData &
b)Возвращает поэлементную разность данных.
float
a, const mglData &
b)const mglData &
a, float
b)Возвращает поэлементную разность числа и данных.
const mglData &
a, const mglData &
b)Возвращает поэлементное произведение данных.
float
a, const mglData &
b)const mglData &
a, float
b)Возвращает поэлементное произведение данных на число.
const mglData &
a, const mglData &
b)Возвращает поэлементное деление данных.
const mglData &
a, float
b)Возвращает поэлементное деление данных на число.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Эти функции не методы класса 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 August 8, 2012 using texi2html 1.82.