diff --git a/dspl/doc/html/formula.repository b/dspl/doc/html/formula.repository
index a5eabc4..cdfea7f 100644
--- a/dspl/doc/html/formula.repository
+++ b/dspl/doc/html/formula.repository
@@ -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$
diff --git a/dspl/dox/ru/inout.dox b/dspl/dox/ru/inout.dox
index 77bc53d..df0f624 100644
--- a/dspl/dox/ru/inout.dox
+++ b/dspl/dox/ru/inout.dox
@@ -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
+***************************************************************************** */
+
+
+
/*! ****************************************************************************
diff --git a/dspl/src/inout.c b/dspl/src/inout.c
index 39b199e..ed41154 100644
--- a/dspl/src/inout.c
+++ b/dspl/src/inout.c
@@ -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;
diff --git a/examples/src/writetxt_3d_test.c b/examples/src/writetxt_3d_test.c
index 7b77a8d..1bbb809 100644
--- a/examples/src/writetxt_3d_test.c
+++ b/examples/src/writetxt_3d_test.c
@@ -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);