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

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

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

Команда MGL: transform DAT 'type' real imag
Global function: mglData mglTransform (const mglData &real, const mglData &imag, const char *type)
Функция С: HMDT mgl_transform (HCDT real, HCDT imag, const char *type)

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

Команда MGL: transforma DAT 'type' ampl phase
Global function: mglData mglTransformA const mglData &ampl, const mglData &phase, const char *type)
Функция С: HMDT mgl_transform_a HCDT ampl, HCDT phase, const char *type)

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

Команда MGL: fourier reDat imDat 'dir'
Global function: void mglFourier const mglData &re, const mglData &im, const char *dir)
Функция С: void mgl_data_fourier HCDT re, HCDT im, const char *dir)

Выполняет Фурье преобразование для комплексных данных re+i*im в направлениях dir. Результат помещается обратно в массивы re и im.

Команда MGL: stfad RES real imag dn ['dir'='x']
Global function: mglData mglSTFA (const mglData &real, const mglData &imag, int dn, char dir='x')
Функция С: HMDT mgl_data_stfa (HCDT real, HCDT 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.

Команда MGL: pde RES 'ham' ini_re ini_im [dz=0.1 k0=100]
Global function: mglData mglPDE (HMGL gr, const char *ham, const mglData &ini_re, const mglData &ini_im, mreal dz=0.1, mreal k0=100, const char *opt="")
Функция С: HMDT mgl_pde_solve (HMGL gr, const char *ham, HCDT ini_re, HCDT ini_im, mreal dz, mreal k0, const char *opt)

Решает уравнение в частных производных 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 solving hints, для примеров кода и графика.

Команда MGL: ray RES 'ham' x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]
Global function: mglData mglRay (const char *ham, mglPoint r0, mglPoint p0, mreal dt=0.1, mreal tmax=10)
Функция С: HMDT mgl_ray_trace (const char *ham, mreal x0, mreal y0, mreal z0, mreal px, mreal py, mreal pz, mreal dt, mreal 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) }.

Команда MGL: qo2d RES 'ham' ini_re ini_im ray [r=1 k0=100 xx yy]
Global function: mglData mglQO2d (const char *ham, const mglData &ini_re, const mglData &ini_im, const mglData &ray, mreal r=1, mreal k0=100, mglData *xx=0, mglData *yy=0)
Global function: mglData mglQO2d (const char *ham, const mglData &ini_re, const mglData &ini_im, const mglData &ray, mglData &xx, mglData &yy, mreal r=1, mreal k0=100)
Функция С: HMDT mgl_qo2d_solve (const char *ham, HCDT ini_re, HCDT ini_im, HCDT ray, mreal r, mreal 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(). См. раздел PDE solving hints, для примеров кода и графика.

Команда MGL: jacobian RES xdat ydat [zdat]
Global function: mglData mglJacobian (const mglData &x, const mglData &y)
Global function: mglData mglJacobian (const mglData &x, const mglData &y, const mglData &z)
Функция С: HMDT mgl_jacobian_2d (HCDT x, HCDT y)
Функция С: HMDT mgl_jacobian_3d (HCDT x, HCDT y, HCDT 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}.

Команда MGL: triangulation RES xdat ydat [zdat]
Global function: mglData mglTriangulation (const mglData &x, const mglData &y)
Global function: mglData mglTriangulation (const mglData &x, const mglData &y, const mglData &z)
Функция С: HMDT mgl_triangulation_2d (HCDT x, HCDT y)
Функция С: HMDT mgl_triangulation_3d (HCDT x, HCDT y, HCDT z)

Выполняет триангуляцию для произвольно расположенных точек с координатами {x,y,z} (т.е. находит треугольники, соединяющие точки). Первая размерность всех массивов должна быть одинакова x.nx=y.nx=z.nx. Получившийся массив можно использовать в triplot или tricont для визуализации реконструированной поверхности.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated by Autobuild on September 28, 2013 using texi2html 1.82.