added example and doc for 3d plotting

Changes to be committed:
modified:   dspl/doc/html/formula.repository
modified:   dspl/dox/ru/inout.dox
modified:   dspl/src/inout.c
modified:   examples/src/writetxt_3d_test.c
pull/6/merge
Dsplib 2020-06-04 16:26:02 +03:00
rodzic c5be8c45b0
commit 1b72c263a4
4 zmienionych plików z 204 dodań i 92 usunięć

Wyświetl plik

@ -64,86 +64,88 @@
\form#63:$ k<1 $
\form#64:$ y = \textrm{sn}(u K(k), k)$
\form#65:$n = n_0 \times n_1 \times n_2 \ldots \times n_p \times m$
\form#66:$\frac{P}{Q}$
\form#67:$P$
\form#68:$Q$
\form#69:$1/F_{\textrm{s}}$
\form#70:\[ Y(k) = \frac{1}{N} \sum_{m = 0}^{n-1} x(m) \exp \left( j \frac{2\pi}{n} m k \right), \]
\form#71:$n = n_0 \times n_1 \times n_2 \times n_3 \times \ldots \times n_p \times m$
\form#72:$ n = 725760 $
\form#73:$725760 = 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 \cdot 7 \cdot 9 \cdot 16 $
\form#74:$ n = 172804 = 43201 \cdot 4 $
\form#75:$ n = 13 \cdot 17 \cdot 23 \cdot 13 = 66079 $
\form#76:$\sqrt{2^{31}} = 46340.95$
\form#77:$x_0$
\form#78:$x_1$
\form#79:$x(k) = x_0 + k \cdot dx$
\form#80:$dx = \frac{x_1 - x_0}{n-1}$
\form#81:$k = 0 \ldots n-1.$
\form#82:$dx = \frac{x_1 - x_0}{n}$
\form#83:$10^{x_0}$
\form#84:$10^{x_1}$
\form#85:$x(k) = 10^{x_0} \cdot dx^k$
\form#86:$dx = \sqrt[n-1]{10^{x_1 - x_0}}$
\form#87:$dx = \sqrt[n]{10^{x_1 - x_0}}$
\form#88:$ H(j \omega) $
\form#89:$ H(j \omega)$
\form#90:$ H(s) $
\form#91:\[ H(s) = \frac {\sum_{k = 0}^{N} b_k s^k} {\sum_{m = 0}^{N} a_m s^m}, \]
\form#92:$ N $
\form#93:$ s = j \omega $
\form#94:$ \omega $
\form#95:$H(s)$
\form#96:$ H \left(\mathrm{e}^{j\omega} \right) $
\form#97:$ 2\pi $
\form#98:$ \pi $
\form#99:$ -\pi $
\form#100:$ H \left(e^{j \omega} \right)$
\form#101:\[ H(z) = \frac {\sum_{k = 0}^{N} b_k z^{-k}} {\sum_{m = 0}^{N} a_m z^{-m}}, \]
\form#102:$N$
\form#103:$z = e^{j \omega} $
\form#104:$\omega$
\form#105:$ 2 \pi-$
\form#106:$2 \pi$
\form#107:$-\pi$
\form#108:$ \pi$
\form#109:$ H \left(e^{j \omega} \right) = H^* \left(e^{-j \omega} \right)$
\form#110:$\pi$
\form#111:$ -R_p $
\form#112:$ H(s)$
\form#113:$-R_p$
\form#114:$ R_p $
\form#115:$-R_s$
\form#116:$H(j\cdot 1) = -R_s$
\form#117:\[ H(s) = \frac{\sum_{n = 0}^{N_z} b_n \cdot s^n}{\sum_{m = 0}^{N_p} a_m \cdot s^m} = \frac{\prod_{n = 0}^{N_z}(s-z_n)}{\prod_{m = 0}^{N_p} (s-p_m)} \]
\form#118:\[ H(z) = \sum_{n = 0}^{ord} h_n z^{-n} \]
\form#119:$ F(s) $
\form#120:$F(s)$
\form#121:$Y(s) = (H \circ F)(s) = H(F(s))$
\form#122:\[ H(s) = \frac{\sum\limits_{m = 0}^{n} b_m s^m} {\sum\limits_{k = 0}^{n} a_k s^k}, \quad F(s) = \frac{\sum\limits_{m = 0}^{p} d_m s^m} {\sum\limits_{k = 0}^{p} c_k s^k}, \quad Y(s) = \frac{\sum\limits_{m = 0}^{n p} \beta_m s^m} {\sum\limits_{k = 0}^{n p} \alpha_k s^k} \]
\form#123:$Y(s) = (H \circ F)(s)$
\form#124:\[ s \leftarrow \frac{1 - z^{-1}}{1 - z^{-1}}. \]
\form#125:$\Omega$
\form#126:\[ \Omega = \tan(\omega / 2). \]
\form#127:\[ s(t) = \sum\limits_{n = 0}^{n_{\omega}-1} S(\omega_n) \exp(j\omega_n t) \]
\form#128:$\omega_n$
\form#129:$S(\omega_n)$
\form#130:$ I_0(x)$
\form#131:$ x $
\form#132:$[0 \ 3]$
\form#133:$ \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}$
\form#134:\[ \textrm{Si}(x) = \int_{0}^{x} \frac{\sin(x)}{x} \, dx\]
\form#135:$[-6\pi \ 6\pi]$
\form#136:$P_N(x)$
\form#137:$N-$
\form#138:\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N. \]
\form#139:\[ P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) \]
\form#140:$\mu$
\form#141:$\sigma$
\form#142:$\sigma^2$
\form#143:$\mu = 0$
\form#144:$\sigma=1$
\form#145:\[ P_N(x) = a_0 + a_1 x + a_2 x^2 + \ldots a_N x^N \]
\form#146:$a_N$
\form#147:\[ P_N(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + ... a_N x^N. \]
\form#148:\[ P(x) = 2 + 2x + x^2 \]
\form#66:$N$
\form#67:\[ P_N(x) = a_0 + a_1 x + a_2 x^2 + \ldots a_N x^N \]
\form#68:$a_N$
\form#69:$\frac{P}{Q}$
\form#70:$P$
\form#71:$Q$
\form#72:$1/F_{\textrm{s}}$
\form#73:\[ Y(k) = \frac{1}{N} \sum_{m = 0}^{n-1} x(m) \exp \left( j \frac{2\pi}{n} m k \right), \]
\form#74:$n = n_0 \times n_1 \times n_2 \times n_3 \times \ldots \times n_p \times m$
\form#75:$ n = 725760 $
\form#76:$725760 = 2 \cdot 3 \cdot 4 \cdot 5 \cdot 6 \cdot 7 \cdot 9 \cdot 16 $
\form#77:$ n = 172804 = 43201 \cdot 4 $
\form#78:$ n = 13 \cdot 17 \cdot 23 \cdot 13 = 66079 $
\form#79:$\sqrt{2^{31}} = 46340.95$
\form#80:$x_0$
\form#81:$x_1$
\form#82:$x(k) = x_0 + k \cdot dx$
\form#83:$dx = \frac{x_1 - x_0}{n-1}$
\form#84:$k = 0 \ldots n-1.$
\form#85:$dx = \frac{x_1 - x_0}{n}$
\form#86:$10^{x_0}$
\form#87:$10^{x_1}$
\form#88:$x(k) = 10^{x_0} \cdot dx^k$
\form#89:$dx = \sqrt[n-1]{10^{x_1 - x_0}}$
\form#90:$dx = \sqrt[n]{10^{x_1 - x_0}}$
\form#91:$ H(j \omega) $
\form#92:$ H(j \omega)$
\form#93:$ H(s) $
\form#94:\[ H(s) = \frac {\sum_{k = 0}^{N} b_k s^k} {\sum_{m = 0}^{N} a_m s^m}, \]
\form#95:$ N $
\form#96:$ s = j \omega $
\form#97:$ \omega $
\form#98:$H(s)$
\form#99:$ H \left(\mathrm{e}^{j\omega} \right) $
\form#100:$ 2\pi $
\form#101:$ \pi $
\form#102:$ -\pi $
\form#103:$ H \left(e^{j \omega} \right)$
\form#104:\[ H(z) = \frac {\sum_{k = 0}^{N} b_k z^{-k}} {\sum_{m = 0}^{N} a_m z^{-m}}, \]
\form#105:$z = e^{j \omega} $
\form#106:$\omega$
\form#107:$ 2 \pi-$
\form#108:$2 \pi$
\form#109:$-\pi$
\form#110:$ \pi$
\form#111:$ H \left(e^{j \omega} \right) = H^* \left(e^{-j \omega} \right)$
\form#112:$\pi$
\form#113:$ -R_p $
\form#114:$ H(s)$
\form#115:$-R_p$
\form#116:$ R_p $
\form#117:$-R_s$
\form#118:$H(j\cdot 1) = -R_s$
\form#119:\[ H(s) = \frac{\sum_{n = 0}^{N_z} b_n \cdot s^n}{\sum_{m = 0}^{N_p} a_m \cdot s^m} = \frac{\prod_{n = 0}^{N_z}(s-z_n)}{\prod_{m = 0}^{N_p} (s-p_m)} \]
\form#120:\[ H(z) = \sum_{n = 0}^{ord} h_n z^{-n} \]
\form#121:$ F(s) $
\form#122:$F(s)$
\form#123:$Y(s) = (H \circ F)(s) = H(F(s))$
\form#124:\[ H(s) = \frac{\sum\limits_{m = 0}^{n} b_m s^m} {\sum\limits_{k = 0}^{n} a_k s^k}, \quad F(s) = \frac{\sum\limits_{m = 0}^{p} d_m s^m} {\sum\limits_{k = 0}^{p} c_k s^k}, \quad Y(s) = \frac{\sum\limits_{m = 0}^{n p} \beta_m s^m} {\sum\limits_{k = 0}^{n p} \alpha_k s^k} \]
\form#125:$Y(s) = (H \circ F)(s)$
\form#126:\[ s \leftarrow \frac{1 - z^{-1}}{1 - z^{-1}}. \]
\form#127:$\Omega$
\form#128:\[ \Omega = \tan(\omega / 2). \]
\form#129:\[ s(t) = \sum\limits_{n = 0}^{n_{\omega}-1} S(\omega_n) \exp(j\omega_n t) \]
\form#130:$\omega_n$
\form#131:$S(\omega_n)$
\form#132:$ z(x,y)$
\form#133:\[ z(x,y) = x \exp(-x^2 -y^2) \]
\form#134:$ I_0(x)$
\form#135:$ x $
\form#136:$[0 \ 3]$
\form#137:$ \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}$
\form#138:\[ \textrm{Si}(x) = \int_{0}^{x} \frac{\sin(x)}{x} \, dx\]
\form#139:$[-6\pi \ 6\pi]$
\form#140:$P_N(x)$
\form#141:$N-$
\form#142:\[ P_N(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + ... a_N x^N. \]
\form#143:\[ P(x) = 2 + 2x + x^2 \]
\form#144:\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N. \]
\form#145:\[ P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) \]
\form#146:$\mu$
\form#147:$\sigma$
\form#148:$\sigma^2$
\form#149:$\mu = 0$
\form#150:$\sigma=1$

Wyświetl plik

@ -161,6 +161,112 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup IN_OUT_GROUP
\fn int writetxt_3d(double* x, int nx, double* y, int ny, double* z, char* fn)
\brief
Сохранить данные для построения 3D графика
Функция сохраняет вещественные данные в текстовый файл `fn`
для построения 3D поверхности. \n
Функция \f$ z(x,y)\f$ описывается матрицей значений `z[x[n], y[n]]`
как это показано на рисунке
\image html writetxt_3d_matrix.png
Матрица `z` хранится в памяти по столбцам, как это показано красной стрелкой. \n
Файл имеет следующий формат: \n
\verbatim
x[0] y[0] z[0, 0]
x[1] y[0] z[1, 0]
x[2] y[0] z[2, 0]
... ... ...
x[nx-1] y[0] z[nx-1, 0]
x[0] y[1] z[0, 1]
x[1] y[1] z[1, 1]
x[2] y[1] z[2, 1]
... ... ...
x[nx-1] y[1] z[nx-1, 1]
... ... ...
... ... ...
... ... ...
x[0] y[ny-1] z[0, ny-1]
x[1] y[ny-1] z[1, ny-1]
x[2] y[ny-1] z[2, ny-1]
... ... ...
x[nx-1] y[ny-1] z[nx-1, ny-1]
\endverbatim
Таким образом, каждое значение матрицы `z` записано отдельной строкой со
соответствующими значениями `x` и `y`. Столбцы матрицы отделены пустой строкой.
Файл может быть использован для построения графика сторонней программой,
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). Также данный формат
поддерживается пакетами pgfplot3d издательской системы Latex. \n
\param[in] x
Указатель на вектор значений оси `x`. \n
Размер вектора `[nx x 1]`. \n
\n
\param[in] nx
Размер вектора оси `x`. \n
\n
\param[in] y
Указатель на второй вектор значений оси `y`. \n
Размер вектора `[ny x 1]`. \n
\n
\param[in] ny
Размер вектора оси `y`. \n
\n
\param[in] z
Указатель на матрицу значений функции `z(x, y)`. \n
\n
\param[in] fn
Имя файла. \n
\n
\return
`RES_OK` --- файл сохранен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
Пример использования функции и посторения 3D поверхности приведен
в следующем листинге:
\include writetxt_3d_test.c
Данная программа рассчитывает и строит поверхность функции
\f[
z(x,y) = x \exp(-x^2 -y^2)
\f]
В каталоге `dat` будет создан файл `data3d.txt`.\n
Кроме того программа GNUPLOT произведет построение 3D поверхности
по сохраненным в файл данным:
\image html writetxt_3d.png
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
/*! ****************************************************************************

Wyświetl plik

@ -257,7 +257,7 @@ int DSPL_API writetxt_int(int* x, int* y, int n, char* fn)
/******************************************************************************
* Write a 3d plot data to file "fn" (pgfplots3d acceptable)
******************************************************************************/
int DSPL_API writetxt_3d(double* x, int nx, double *y, int ny,
int DSPL_API writetxt_3d(double* x, int nx, double* y, int ny,
double* z, char* fn)
{
int k, n;

Wyświetl plik

@ -9,7 +9,7 @@
int main(int argc, char* argv[])
{
void* hdspl; /* DSPL handle */
void* hplot; /* GNUPLOT handles */
void* hplot; /* GNUPLOT handles */
hdspl = dspl_load(); /* Load DSPL function */
@ -19,29 +19,33 @@ int main(int argc, char* argv[])
int n, m;
int err;
/* x vector from -4 to 4 */
/* x vector from -2 to 2 */
linspace(-2.0, 2.0, NX, DSPL_SYMMETRIC, x);
/* y vector from -3 to 3 */
linspace(-2.0, 2.0, NY, DSPL_SYMMETRIC, y);
/* y vector from -2.5 to 2.5 */
linspace(-2.5, 2.5, NY, DSPL_SYMMETRIC, y);
/* z(x,y) = x * exp(-x^2 - y^2) */
for(n = 0; n < NX; n++)
{
for(m = 0; m < NY; m++)
{
z[n + m*NX] = x[n]*exp(-x[n]*x[n] - y[m]*y[m]);
}
}
}
/* Save to files "dat/sine.txt" and "dat/cosine.txt" */
/* Save to files "dat/data3d.txt" */
err = writetxt_3d(x, NX, y, NY, z, "dat/data3d.txt");
printf("writetxt_3d error 0x%8x\n", err);
/* plotting by GNUPLOT */
/* plotting 3d surface by GNUPLOT */
/* Create window 0 */
err = gnuplot_create(argc, argv, 560, 480, "img/writetxt_3d.png", &hplot);
printf("GNUPLOT err = %d\n", err);
gnuplot_cmd(hplot, "set pm3d implicit at s");
gnuplot_cmd(hplot, "set view 50, 340, 1, 1");
gnuplot_cmd(hplot, "set xlabel 'x'");
gnuplot_cmd(hplot, "set ylabel 'y'");
gnuplot_cmd(hplot, "splot 'dat/data3d.txt' with lines");
gnuplot_close(hplot);