[SCM] Packaging for mathgl branch, master, updated. debian/2.0.3-1-15-gc68f3d4

Dimitrios Eftaxiopoulos eftaxi12 at otenet.gr
Sat Sep 15 01:46:38 UTC 2012


The following commit has been merged in the master branch:
commit c68f3d4631d4351c9805e046947700b8500d068b
Author: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>
Date:   Sat Sep 15 04:27:37 2012 +0300

    Clean source tree after branch merging

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75415b9..db2c551 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,31 +6,31 @@ set(MathGL_VERSION_MAJOR 2)
 set(MathGL_VERSION_MINOR 0)
 
 option(enable-double "Enable double precision in MathGL library" ON)
-option(enable-simple "Slightly increase drawing speed but disable mglDataA class" OFF)
-option(enable-mpi "Enable mpi" ON)
-option(enable-all "Enable all features" ON)
-option(enable-langall "Enable all language interfaces" ON)
+option(enable-simple "Slightly increase drawing speed but disable mglDataA class")
+option(enable-mpi "Enable mpi")
+option(enable-all "Enable all features")
+option(enable-langall "Enable all language interfaces")
 option(enable-lgpl "Enable only LGPL part of MathGL" OFF)
 # option(enable-ltdl "Enable loading modules support")
-option(enable-pthread "Enable POSIX threads support" ON)
-option(enable-gsl "Enable gsl support" ON)
-option(enable-jpeg "Enable jpeg support" ON)
+option(enable-pthread "Enable POSIX threads support")
+option(enable-gsl "Enable gsl support")
+option(enable-jpeg "Enable jpeg support")
 option(enable-png "Enable png support" ON)
 option(enable-zlib "Enable zlib support" ON)
 #option(enable-u3d "Enable u3d support")
-option(enable-pdf "Enable pdf support" ON)
-option(enable-gif "Enable gif support" ON)
-option(enable-hdf4 "Enable hdf4 support" ON)
+option(enable-pdf "Enable pdf support")
+option(enable-gif "Enable gif support")
+option(enable-hdf4 "Enable hdf4 support")
 option(enable-hdf5 "Enable hdf5 1.6 support")
-option(enable-hdf5_18 "Enable hdf5 1.8 support" ON)
+option(enable-hdf5_18 "Enable hdf5 1.8 support")
 option(enable-opengl "Enable OpenGL support" ON)
-option(enable-glut "Enable glut support" ON)
-option(enable-fltk "Enable fltk widget" ON)
-option(enable-wx "Enable wxWidget widget" ON)
-option(enable-qt "Enable Qt4 widget" ON)
-option(enable-python "Enable python interface" ON)
-option(enable-octave "Enable octave interface" ON)
-option(enable-doc "Enable documentation building" ON)
+option(enable-glut "Enable glut support")
+option(enable-fltk "Enable fltk widget")
+option(enable-wx "Enable wxWidget widget")
+option(enable-qt "Enable Qt4 widget")
+option(enable-python "Enable python interface")
+option(enable-octave "Enable octave interface")
+option(enable-doc "Enable documentation building")
 
 include_directories( ${MathGL_SOURCE_DIR}/include ${MathGL_BINARY_DIR}/include)
 
diff --git a/debian/changelog.orig b/debian/changelog.orig
deleted file mode 100644
index 4dc213e..0000000
--- a/debian/changelog.orig
+++ /dev/null
@@ -1,435 +0,0 @@
-<<<<<<< HEAD
-mathgl (1.11.2-14) unstable; urgency=low
-
-  * Make several libmgl-wx5 related symbols optional in order to fix FTBFS on
-    several arches.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Thu, 10 May 2012 22:19:03 +0300
-
-mathgl (1.11.2-13) unstable; urgency=low
-
-  * Make several libmgl-qt5 related symbols optional in order to fix FTBFS on 
-    several arches.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Thu, 10 May 2012 19:12:22 +0300
-
-mathgl (1.11.2-12) unstable; urgency=low
-
-  * Make more libmgl5 related symbols optional in order to fix FTBFS on several
-    arches.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Thu, 10 May 2012 16:09:18 +0300
-
-mathgl (1.11.2-11) unstable; urgency=low
-
-  * Update symbols files in order to fix FTBFS (Closes: #671964) 
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Tue, 08 May 2012 20:18:59 +0300
-
-mathgl (1.11.2-10) unstable; urgency=low
-
-  * Replace octave3.2-headers with liboctave-dev in Build-Depends in
-    debian/control (Closes: #666753).
-  * Add zlib1g (>= 1.2.6) to Depends of libmgl5 to deal with a symbol export 
-    problem in earlier versions of mgl, which is not being seen by 
-    debhelper's shlib expansion (spotted by D. Haley).
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Fri, 6 Apr 2012 18:03:00 +0300
-
-mathgl (1.11.2-9) unstable; urgency=low
-
-  * Add patches that fix conflicting pointer type issues in files
-    mgl/mgl_eps.cpp and mgl/mgl_export.cpp (Closes: #661292).
-  * Change dependency of python-mathgl package from python-numpy to 
-    python-numpy-abi9.
-  * Update Debian Policy to 3.9.3.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 26 Feb 2012 09:23:00 +0200
-
-mathgl (1.11.2-8) unstable; urgency=low
-
-  * Team upload
-  * Build only against libhdf5-dev (transition 1.8.6 => 1.8.8)
-
- -- Sylvestre Ledru <sylvestre at debian.org>  Wed, 18 Jan 2012 19:29:33 +0100
-
-mathgl (1.11.2-7) unstable; urgency=low
-
-  * Fix FTBFS for sparc64.
-  * Ammend symbols files for alpha.
-  * Make libmgl-dev package dependent on libmgl-*5 packages (Closes: #646923).
-  * Create new texinfo-png-Makefile.patch in the place of 
-    createpngdirectory.patch.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Mon, 2 Jan 2012 18:32:00 +0200
-=======
-mathgl (2.0.3-1) unstable; urgency=low
-
-  * New upstream release.
-  * Add mpi-default-dev to build dependencies.
-  * Add patch for lang/setup.py.in to enable python to read directory tree 
-    written in utf-8 (not ascii) encoding. 
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Tue, 11 Sep 2012 21:19:08 +0300
-
-mathgl (2.0-1) experimental; urgency=low
-
-  * Add udav manpage.
-  * Add descriptions for the two patches. 
-  * Strip debian revision numbers from symbols in symbols files.
-  * New upstream release.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 18 Apr 2012 17:17:00 +0200
-
-mathgl (2~rc2+svn403-1) experimental; urgency=low
-
-  * Updated source from svn repository.
-  * Replace octave3.2-headers with liboctave-dev in build deps.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 8 Apr 2012 20:49:00 +0200
-
-mathgl (2~rc2+svn400-1) experimental; urgency=low
-
-  * Updated source from svn repository.
-  * Fix installation of manpages for mglview, mglvonv and mgl.
-  * Rename mathgl-doc binary to mathgl-doc-en.
-  * Update symbols for libmgl-glut6.
-  * Fix installation directory in doc-base file mathgl-doc-en.
-  * Fix library package names to reflect soname.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 1 Apr 2012 04:04:00 +0200
-
-mathgl (2~rc2+svn387-1) experimental; urgency=low
-
-  * Updated source from svn repository.
-  * Fix installation directory of python module and files.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Tue, 27 Mar 2012 17:29:00 +0200
-
-mathgl (2~rc2+svn383-1) experimental; urgency=low
-
-  * Updated source from svn repository.
-  * Add udav, libmgl-glut and mathgl-doc packages.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Mon, 26 Mar 2012 15:35:00 +0200
-
-mathgl (2~rc2-1) experimental; urgency=low
-
-  * Updated source from svn repository.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Tue, 6 Mar 2012 17:22:00 +0200
-
-mathgl (2~rc1-4) unreleased; urgency=low
-
-  * Fix symbols FTBFS on armhf.
-  * Make build dependency on libhdf5-dev only.
-  * Make python-mathgl depend on python-numpy-abi9.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 22 Feb 2012 19:39:00 +0200
-
-mathgl (2~rc1-3) experimental; urgency=low
-
-  * Fix symbols FTBFS, related to libmgl-wnd6, on several arches.
-  * Make libmgl-dev dependent on libmgl-wnd6.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 4 Jan 2012 20:16:00 +0200
-
-mathgl (2~rc1-2) experimental; urgency=low
-
-  * Correct typo in mathgl description in debian/control (Closes: #644863).
-  * Try to fix symbols FTBFS on several arches.   
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 4 Jan 2012 15:30:00 +0200
-
-mathgl (2~rc1-1) experimental; urgency=low
-
-  * New experimental upstream release (Closes: #632468).
-  * No documentation debian packages provided.   
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 28 Sep 2011 11:30:00 +0300
->>>>>>> experimental
-
-mathgl (1.11.2-6) unstable; urgency=low
-
-  * Fix FTBFS for sparc (Closes: #642654).  
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Mon, 26 Sep 2011 16:23:12 +0300
-
-mathgl (1.11.2-5) unstable; urgency=low
-
-  * Resolve differences for all non-optional symbols, in symbols files for ia64,
-    sparc and sh4 architectures (Closes: #642654).
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Mon, 26 Sep 2011 10:25:00 +0300
-
-mathgl (1.11.2-4) unstable; urgency=low
-
-  * Add python-numpy to Depnds of python-mathgl in debian/control and add
-    dh_numpy in binary-arch in debian/rules (Closes: #641793).
-<<<<<<< HEAD
-  * Ammend symbols files for ia64, sparc and sh4 architectures (Closes: 642654).
-=======
-  * Ammend symbols files for ia64, sparc and sh4 architectures (Closes: #642654).
->>>>>>> experimental
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sat, 24 Sep 2011 23:16:00 +0300
-
-mathgl (1.11.2-3) unstable; urgency=low
-
-  * Replace libfltk-dev with libfltk1.3-dev | libfltk-dev in debian/control 
-    Build-Depends (Closes: #638834).
-  * Ammend symbols files for s390x architecture (Closes: #639492).
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 7 Sep 2011 06:04:00 +0300
-
-mathgl (1.11.2-2) unstable; urgency=low
-
-  * Add debian/source/options file in order to avoid the generation of unneeded debian-
-    changes patch, due to the creation of extra file config.log during build.
-  * Ammend symbols files.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Thu, 18 Aug 2011 20:48:00 +0300
-
-mathgl (1.11.2-1) unstable; urgency=low
-
-  * Incorporate changes due to the last two NMU's.
-  * New upstream version.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Tue, 28 Jun 2011 17:01:00 +0200
-
-mathgl (1.11.1.1-2.2) unstable; urgency=low
-
-  * Non-maintainer upload (closes: #610777).
-  * debian/libmgl-qt5.symbols: _ZN10QByteArrayD1Ev is needed on sparc and
-    ia64, so add it as optional.
-  * debian/libmgl-wx5.symbols: three destructors known to be undefined on
-    armel/armhf are also not defined on ia64 or sparc, so mark these as
-    optional also.  Destructors of foreign classes are not part of the
-    library ABI, so it's fine to ignore these.
-
- -- Steve Langasek <vorlon at debian.org>  Sun, 19 Jun 2011 07:57:43 +0000
-
-mathgl (1.11.1.1-2.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Fix library symbols files (closes: #610777):
-    - debian/libmgl-qt5.symbols: drop _ZN10QByteArrayD2Ev, which is not
-      present on *any* architecture anymore.
-    - debian/libmgl-fltk5.symbols: _ZN9Fl_PixmapC2EPKPKc is not present on
-      ia64 or sparc and never has been.
-    - debian/libmgl5.symbols:
-      + _ZN7mglFuncD1Ev is present on all architectures, drop the
-        architecture list (fixing the 'kfeebsd' typo that caused a build
-        failure on kfreebsd-amd64).
-      + _ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev,
-        _ZN8u3dLightD2Ev: symbols not seen on *any* archs, drop.
-      + Drop 18 symbols whose exclusion list included all 15 architectures
-        that have been tested.
-      + Other symbols that are template instantiations are now marked as
-        optional symbols instead of tagged with an arch list, since they are
-        not part of the ABI and will come and go based on the compiler
-        version used, *not* just on the architecture.
-      + If there are 8 or more architectures in the arch qualifier, invert
-        it.  In some cases this reveals that certain symbols are actually
-        64-bit specific - so infer that not-yet-tested 32-bit archs follow
-        the pattern.
-    - debian/*.symbols: any symbols marked for armel should also be marked
-      for armhf.
-  * debian/rules: clean the dependency_libs out of .la files at build
-    time, per Policy 10.2.  Closes: #620629.
-
- -- Steve Langasek <vorlon at debian.org>  Sat, 18 Jun 2011 07:33:55 +0000
-
-mathgl (1.11.1.1-3) unreleased; urgency=low
-
-  * Further attempt to fix symbol breakages
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 29 May 2011 19:41:00 +0200
-
-mathgl (1.11.1.1-2) unstable; urgency=low
-
-  * Try to fix libmgl5 related symbols breakage on all arches
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 22 May 2011 20:50:00 +0200
-
-mathgl (1.11.1.1-1) unstable; urgency=low
-
-  * New upstream version
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Tue, 26 Apr 2011 01:15:00 +0200
-
-mathgl (1.11.0.1-9) unreleased; urgency=low
-
-  * Again try to fix build failure due to broken symbols for several architectures
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sat, 2 Apr 2011 02:05:00 +0200
-
-mathgl (1.11.0.1-8) unstable; urgency=low
-
-  * Try to fix build failure due to broken symbols for several architectures
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Thu, 24 Mar 2011 23:56:00 +0200
-
-mathgl (1.11.0.1-7) unstable; urgency=low
-
-  * Create patch for the removal of the texinfo/mgl_ru.info-* files
-  * Update symbols files (Closes: #618235)
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Mon, 14 Mar 2011 00:10:00 +0200
-
-mathgl (1.11.0.1-6) unstable; urgency=low
-
-  * Try to fix build failure due to broken symbols for sparc64
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sat, 5 Mar 2011 21:27:00 +0200
-
-mathgl (1.11.0.1-5) unstable; urgency=low
-
-  * Try to fix build failure due to broken symbols for armel and s390
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Fri, 25 Feb 2011 21:30:00 +0200
-
-mathgl (1.11.0.1-4) unstable; urgency=low
-
-  * Create mixed symbols files for amd64 and i386 with tagged symbols 
-    (Closes: #610777)
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sat, 19 Feb 2011 23:10:00 +0200
-
-mathgl (1.11.0.1-3) unstable; urgency=low
-
-  * Upload in unstable
-  * Change symbols files for pbuilder --distribution unstable (Closes: #610777)
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sat, 12 Feb 2011 22:14:00 +0200
-
-mathgl (1.11.0.1-2) experimental; urgency=low
-
-  * Update symbols files for pbuilder --distribution experimental.
-  * Remove createpngdirectory.patch from series.
-  * Apply patch for FTBFS on i386 (Closes: #607539).
-  * Add Replaces tags for old mathgl-doc package in debian/control.
-  * Various improvements in the debian/rules file.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Mon, 17 Jan 2011 21:43:00 +0200
-
-mathgl (1.11.0.1-1) experimental; urgency=low
-
-  * Correct debian/copyright file.
-  * Create proper patches for the changes in the source tree.
-  * Add new package for Russian documentation.
-  * New upstream release (Closes: #603004).
-  * Correct several spelling mistakes in manpages and in lang/numpy.i
-  * Create symbols files for libraries.
-  * Register documentation to doc-base.
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 12 Dec 2010 19:13:00 +0200
-
-mathgl (1.10.2.1-2) unstable; urgency=low
-
-  * Make .png pictures visible from the html documentation.
-  * Add python support (Closes: #541481).
-
- -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Sun, 11 Sep 2010 12:37:00 +0200
-	
-mathgl (1.10.2.1-1) unstable; urgency=low
-
-  [ D Eftaxiopoulos ]
-  * Update to Debian Policy 3.9.1
-  * Put myself and D. Haley to the maintainers list.
-  * Comment out parallel-build-png.patch in the debian/patches/series file
-    since it seems to apply to a texinfo/Makefile.am file that is not 
-    included in the source tree.
-  * Append package quilt to the build-depends list for the source in the 
-    debian/control file, in order to fix a lintian error.
-  * Reinstate debian/source/format file with content '3.0 (quilt)'.
-  * Fix Lintian warnings related to manpages.
-
-  [ D Haley ]
-  * New upstream release 1.10.2.1 (Closes: #562743).
-
-  [ Salvatore Bonaccorso ]
-  * New Maintainer (Closes: #564422). Set Maintainer to Debian Science
-    Maintainers <debian-science-maintainers at lists.alioth.debian.org>.
-  * Convert to '3.0 (quilt)' package source format. Drop quilt framework for
-    packaging. 
-  * debian/control: 
-    - Change Vcs-Browser and Vcs-Git to the debian-science git repository.
-    - Change Section for source package to 'science' as per debian-science
-      group policy.
-    - Set DM-Upload-Allowed field to yes.
-  * Add myself to Uploaders.
-
-  [ Sylvestre Ledru ]
-  * Missing dependency against automake added.
-
- -- Sylvestre Ledru <sylvestre at debian.org>  Sun, 15 Aug 2010 21:45:47 +0200
-
-mathgl (1.9-3) unstable; urgency=low
-
-  * QA upload.
-  * Properly orphan the package (see #564422), set maintainer to QA.
-  * Bump Standards-Version to 3.8.4, no changes needed.
-  * Add debian/README.source, pointing to quilt doc.
-  * Bump build-deps on octave from 3.0 to 3.2 (Closes: #574025).
-
- -- Stefano Zacchiroli <zack at debian.org>  Fri, 26 Mar 2010 14:06:08 +0100
-
-mathgl (1.9-2) unstable; urgency=low
-
-  * Fix FTBFS. Closes: #545882.
-  * Update Standards-Version to 3.8.3.
-
- -- Bradley Smith <bradsmith at debian.org>  Wed, 09 Sep 2009 22:44:44 +0100
-
-mathgl (1.9-1) unstable; urgency=low
-
-  * New upstream release. Closes: #535503.
-  * QT -> qt in package descriptions. Closes: #534425.
-
- -- Bradley Smith <bradsmith at debian.org>  Sun, 19 Jul 2009 16:41:41 +0100
-
-mathgl (1.8.1-6) unstable; urgency=low
-
-  * Redo descriptions.
-
- -- Bradley Smith <bradsmith at debian.org>  Tue, 09 Jun 2009 20:26:42 +0100
-
-mathgl (1.8.1-5) unstable; urgency=low
-
-  * Correct info-dir-section in texinfo/mathgl.texi. Closes: #528893.
-
- -- Bradley Smith <bradsmith at debian.org>  Wed, 27 May 2009 17:52:50 +0100
-
-mathgl (1.8.1-4) unstable; urgency=low
-
-  * Correct libltdl-dev Build-Depend. Closes: #526426.
-  * Further improve descriptions.
-
- -- Bradley Smith <bradsmith at debian.org>  Fri, 01 May 2009 12:59:05 +0100
-
-mathgl (1.8.1-3) unstable; urgency=low
-
-  * Tidy up descriptions. Closes: #521830, #521917.
-  * Update Standards-Version to 3.8.1. (No changes).
-  * Fix watch file.
-
- -- Bradley Smith <bradsmith at debian.org>  Sat, 18 Apr 2009 17:42:59 +0100
-
-mathgl (1.8.1-2) unstable; urgency=low
-
-  * Fix parallel builds. Closes: #519738.
-
- -- Bradley Smith <bradsmith at debian.org>  Thu, 19 Mar 2009 19:08:37 +0000
-
-mathgl (1.8.1-1) unstable; urgency=low
-
-  * New upstream release. Closes: #518769.
-
- -- Bradley Smith <bradsmith at debian.org>  Sun, 08 Mar 2009 13:29:33 +0000
-
-mathgl (1.8-1) unstable; urgency=low
-
-  * Initial release. Closes: #510378.
-
- -- Bradley Smith <bradsmith at debian.org>  Thu, 01 Jan 2009 11:27:32 +0000
diff --git a/debian/control.orig b/debian/control.orig
deleted file mode 100644
index 0466090..0000000
--- a/debian/control.orig
+++ /dev/null
@@ -1,179 +0,0 @@
-Source: mathgl
-Section: science
-Priority: optional
-Maintainer: Debian Science Maintainers <debian-science-maintainers at lists.alioth.debian.org>
-Uploaders: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>, D Haley <mycae at yahoo.com>
-DM-Upload-Allowed: yes
-<<<<<<< HEAD
-Build-Depends: debhelper (>= 7.2.3~), libltdl-dev, libgsl0-dev, freeglut3-dev, 
- libgl1-mesa-dev | libgl-dev, libpng-dev, libhdf5-dev, gawk, swig,
- libjpeg-dev, libtiff-dev, libfltk1.3-dev | libfltk-dev, libqt4-dev, libwxgtk2.8-dev, 
- texinfo, texi2html, texlive, texlive-generic-recommended, liboctave-dev,
- libgif-dev, autoconf, automake, python, python-dev, python-numpy, python-support,
- libhdf4-dev, chrpath
-=======
-Build-Depends: debhelper (>= 7.2.3~), libltdl-dev, libgsl0-dev, freeglut3-dev,
- libgl1-mesa-dev | libgl-dev, libpng-dev, libhdf5-dev, swig, cmake, libxft-dev,
- libjpeg-dev, libtiff-dev, libfltk1.3-dev, libqt4-dev, libwxgtk2.8-dev, 
- texinfo, texi2html, texlive, texlive-generic-recommended, liboctave-dev,
- libgif-dev, python, python-dev, python-numpy, python-support, libfontconfig1-dev,
- libhdf4-dev, chrpath, libxinerama-dev, libxmu-dev, libxi-dev, libhpdf-dev,
- mpi-default-dev
->>>>>>> experimental
-Standards-Version: 3.9.3
-Homepage: http://mathgl.sourceforge.net/index.html
-Vcs-Git: git://git.debian.org/debian-science/packages/mathgl.git
-Vcs-Browser: http://git.debian.org/?p=debian-science/packages/mathgl.git
-
-Package: mathgl
-Architecture: any
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}, libmgl6.0.0 (= ${binary:Version})
-Description: library for scientific graphs. (utilities and examples)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains MathGL utilities and examples.
-
-Package: udav
-Architecture: any
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}, libmgl6.0.0 (= ${binary:Version})
-Description: library for scientific graphs. (window interface)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the udav window environment based on mathgl.
-
-Package: mathgl-doc-en
-Architecture: all
-Section: doc
-Depends: dpkg (>= 1.15.4) | install-info, ${misc:Depends}
-Replaces: mathgl-doc
-Description: library for scientific graphs. (English documentation)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the MathGL documentation.
-
-Package: libmgl6.0.0
-Architecture: any
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}, libmgl-data, zlib1g (>= 1.2.6)
-Description: library for scientific graphs. (main runtime library)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the shared object files.
-
-<<<<<<< HEAD
-Package: libmgl-data
-Architecture: all
-Section: misc
-Depends: ${misc:Depends}
-Description: library for scientific graphs. (data files)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the MathGL data files.
-
-Package: libmgl-dev
-Architecture: any
-Section: libdevel
-Depends: libmgl5 (= ${binary:Version}), ${misc:Depends}, 
- libmgl-fltk5 (= ${binary:Version}), libmgl-qt5 (= ${binary:Version}), 
- libmgl-wx5 (= ${binary:Version}), libmgl-glut5 (= ${binary:Version}), 
- libgsl0-dev, libpng-dev, libgl1-mesa-dev | libgl-dev 
-Description: library for scientific graphs. (development files)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the development files.
-
-Package: libmgl-fltk5
-=======
-Package: libmgl-wnd6.0.0
->>>>>>> experimental
-Architecture: any
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}, libmgl-data
-Description: library for scientific graphs. (windows runtime library)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the window opening related shared object files.
-
-Package: libmgl-glut6.0.0
-Architecture: any
-Section: libs
-Depends: ${shlibs:Depends}, ${misc:Depends}, libmgl-data
-Description: library for scientific graphs. (glut interface for windows)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the glut interface shared object files for window 
- opening.
-
-Package: libmgl-data
-Architecture: all
-Section: misc
-Depends: ${misc:Depends}
-Description: library for scientific graphs. (data files)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the MathGL data files.
-
-Package: libmgl-dev
-Architecture: any
-Section: libdevel
-Depends: libmgl6.0.0 (= ${binary:Version}), libmgl-wnd6.0.0 (= ${binary:Version}), 
- ${misc:Depends}, libgsl0-dev, libgl1-mesa-dev | libgl-dev, libpng-dev
-Description: library for scientific graphs. (development files)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package contains the development files. 
-
-Package: python-mathgl
-Architecture: any
-Section: python
-Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, python-numpy-abi9
-Description: library for scientific graphs. (Python module)
- A free cross-platform library of fast C++ routines for plotting data in up
- to 3 dimensions. It can export plots to bitmaps and vector EPS, SVG, IDTF
- files. There are simple window interfaces based on GLUT, FLTK and/or Qt.
- MathGL can also be used in the console. There are interfaces to a set of
- languages, such as, C, Fortran, Pascal, Forth, Python, Octave.
- .
- This package provides the Python module for mathgl.
diff --git a/debian/patches/series.orig b/debian/patches/series.orig
deleted file mode 100644
index 1167984..0000000
--- a/debian/patches/series.orig
+++ /dev/null
@@ -1,15 +0,0 @@
-<<<<<<< HEAD
-texinfo-png-Makefile.patch
-mgl-mgl-eps-cpp.patch
-mgl-mgl-export-cpp.patch
-dircategory-and-direntry-mathgl-en-texi.patch
-dircategory-and-direntry-mathgl-ru-texi.patch
-dircategory-and-direntry-mgl-ru-texi.patch
-dircategory-and-direntry-mgl-en-texi.patch
-correct-spelling-error-in-nympy-i.patch
-texinfo-Makefile.patch
-=======
-lang-CMakeLists-txt.patch
-CMakeLists-txt.patch
-lang-setup-py-in.patch
->>>>>>> experimental
diff --git a/debian/source/options b/debian/source/options
deleted file mode 100644
index 6058341..0000000
--- a/debian/source/options
+++ /dev/null
@@ -1 +0,0 @@
- extend-diff-ignore = "(^|/)(install_manifest\.txt|include/mgl/config\.h)$"
\ No newline at end of file
diff --git a/debian/source/options.orig b/debian/source/options.orig
deleted file mode 100644
index 0d9493a..0000000
--- a/debian/source/options.orig
+++ /dev/null
@@ -1,5 +0,0 @@
-<<<<<<< HEAD
- extend-diff-ignore = "(^|/)(config\.log|texinfo/mgl_ru\.info-1|texinfo/mgl_ru\.info-2|Makefile\.in|aclocal\.m4|configure|examples/Makefile\.in|include/Makefile\.in|lang/Makefile\.in|mgl/Makefile\.in|texinfo/Makefile\.in|texinfo/png/Makefile\.in|utils/Makefile\.in|widgets/Makefile\.in)$"
-=======
- extend-diff-ignore = "(^|/)(install_manifest\.txt|include/mgl/config\.h)$"
->>>>>>> experimental
diff --git a/include/mgl/config.h b/include/mgl/config.h
deleted file mode 100644
index cc599d2..0000000
--- a/include/mgl/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* This define enables double precision in MathGL */
-#define MGL_USE_DOUBLE 1
-
diff --git a/install_manifest.txt b/install_manifest.txt
deleted file mode 100644
index 92e77f9..0000000
--- a/install_manifest.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-/usr/local/share/mathgl/fonts/STIX_b.vfm
-/usr/local/share/mathgl/fonts/STIX.vfm
-/usr/local/share/mathgl/fonts/STIX_bi.vfm
-/usr/local/share/mathgl/fonts/STIX_i.vfm
-/usr/local/lib/libmgl.so.6.0.0
-/usr/local/lib/libmgl.so
-/usr/local/lib/libmgl.a
-/usr/local/lib/libmgl-wnd.so.6.0.0
-/usr/local/lib/libmgl-wnd.so
-/usr/local/lib/libmgl-wnd.a
-/usr/local/bin/mglconv
-/usr/local/bin/mgl_example
-/usr/local/include/mgl/fit.h
-/usr/local/include/mgl/mgl.h
-/usr/local/include/mgl/evalc.h
-/usr/local/include/mgl/base_cf.h
-/usr/local/include/mgl/vect.h
-/usr/local/include/mgl/font.h
-/usr/local/include/mgl/type.h
-/usr/local/include/mgl/volume.h
-/usr/local/include/mgl/surf.h
-/usr/local/include/mgl/canvas_cf.h
-/usr/local/include/mgl/canvas.h
-/usr/local/include/mgl/eval.h
-/usr/local/include/mgl/other.h
-/usr/local/include/mgl/addon.h
-/usr/local/include/mgl/config.h
-/usr/local/include/mgl/config.h.in
-/usr/local/include/mgl/plot.h
-/usr/local/include/mgl/define.h
-/usr/local/include/mgl/mgl_cf.h
-/usr/local/include/mgl/base.h
-/usr/local/include/mgl/opengl.h
-/usr/local/include/mgl/cont.h
-/usr/local/include/mgl/prim.h
-/usr/local/include/mgl/parser.h
-/usr/local/include/mgl/window.h
-/usr/local/include/mgl/data.h
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
index bec7d4b..cfdc3a7 100644
--- a/lang/CMakeLists.txt
+++ b/lang/CMakeLists.txt
@@ -43,7 +43,7 @@ if(MGL_HAVE_PYTHON)
 		WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang
 	)
 	add_custom_target(mgl_python_module ALL DEPENDS _mathgl.so mathgl.py)
-	install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/lang/setup.py install --prefix=${CMAKE_SOURCE_DIR}/debian/tmp/usr --install-layout=deb WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang )")
+	install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/lang/setup.py install --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang )")
 	set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "mgl_wrap.cpp;build;mathgl.pyc")
 endif(MGL_HAVE_PYTHON)
 
diff --git a/lang/numpy.i.in.orig b/lang/numpy.i.in.orig
deleted file mode 100644
index 4f74663..0000000
--- a/lang/numpy.i.in.orig
+++ /dev/null
@@ -1,1638 +0,0 @@
-/* -*- C -*-  (not really, but good for syntax highlighting) */
-#ifdef SWIGPYTHON
-
-%{
-#ifndef SWIG_FILE_WITH_INIT
-#  define NO_IMPORT_ARRAY
-#endif
-#include "stdio.h"
-#include <numpy/arrayobject.h>
-%}
-
-/**********************************************************************/
-
-%fragment("NumPy_Backward_Compatibility", "header")
-{
-/* Support older NumPy data type names
-*/
-%#if NDARRAY_VERSION < 0x01000000
-%#define NPY_BOOL          PyArray_BOOL
-%#define NPY_BYTE          PyArray_BYTE
-%#define NPY_UBYTE         PyArray_UBYTE
-%#define NPY_SHORT         PyArray_SHORT
-%#define NPY_USHORT        PyArray_USHORT
-%#define NPY_INT           PyArray_INT
-%#define NPY_UINT          PyArray_UINT
-%#define NPY_LONG          PyArray_LONG
-%#define NPY_ULONG         PyArray_ULONG
-%#define NPY_LONGLONG      PyArray_LONGLONG
-%#define NPY_ULONGLONG     PyArray_ULONGLONG
-%#define NPY_FLOAT         PyArray_FLOAT
-%#define NPY_DOUBLE        PyArray_DOUBLE
-%#define NPY_LONGDOUBLE    PyArray_LONGDOUBLE
-%#define NPY_CFLOAT        PyArray_CFLOAT
-%#define NPY_CDOUBLE       PyArray_CDOUBLE
-%#define NPY_CLONGDOUBLE   PyArray_CLONGDOUBLE
-%#define NPY_OBJECT        PyArray_OBJECT
-%#define NPY_STRING        PyArray_STRING
-%#define NPY_UNICODE       PyArray_UNICODE
-%#define NPY_VOID          PyArray_VOID
-%#define NPY_NTYPES        PyArray_NTYPES
-%#define NPY_NOTYPE        PyArray_NOTYPE
-%#define NPY_CHAR          PyArray_CHAR
-%#define NPY_USERDEF       PyArray_USERDEF
-%#define npy_intp          intp
-
-%#define NPY_MAX_BYTE      MAX_BYTE
-%#define NPY_MIN_BYTE      MIN_BYTE
-%#define NPY_MAX_UBYTE     MAX_UBYTE
-%#define NPY_MAX_SHORT     MAX_SHORT
-%#define NPY_MIN_SHORT     MIN_SHORT
-%#define NPY_MAX_USHORT    MAX_USHORT
-%#define NPY_MAX_INT       MAX_INT
-%#define NPY_MIN_INT       MIN_INT
-%#define NPY_MAX_UINT      MAX_UINT
-%#define NPY_MAX_LONG      MAX_LONG
-%#define NPY_MIN_LONG      MIN_LONG
-%#define NPY_MAX_ULONG     MAX_ULONG
-%#define NPY_MAX_LONGLONG  MAX_LONGLONG
-%#define NPY_MIN_LONGLONG  MIN_LONGLONG
-%#define NPY_MAX_ULONGLONG MAX_ULONGLONG
-%#define NPY_MAX_INTP      MAX_INTP
-%#define NPY_MIN_INTP      MIN_INTP
-
-%#define NPY_FARRAY        FARRAY
-%#define NPY_F_CONTIGUOUS  F_CONTIGUOUS
-%#endif
-}
-
-/**********************************************************************/
-
-/* The following code originally appeared in
- * enthought/kiva/agg/src/numeric.i written by Eric Jones.  It was
- * translated from C++ to C by John Hunter.  Bill Spotz has modified
- * it to fix some minor bugs, upgrade from Numeric to numpy (all
- * versions), add some comments and functionality, and convert from
- * direct code insertion to SWIG fragments.
- */
-
-%fragment("NumPy_Macros", "header")
-{
-/* Macros to extract array attributes.
- */
-%#define is_array(a)            ((a) && PyArray_Check((PyArrayObject *)a))
-%#define array_type(a)          (int)(PyArray_TYPE(a))
-%#define array_numdims(a)       (((PyArrayObject *)a)->nd)
-%#define array_dimensions(a)    (((PyArrayObject *)a)->dimensions)
-%#define array_size(a,i)        (((PyArrayObject *)a)->dimensions[i])
-%#define array_data(a)          (((PyArrayObject *)a)->data)
-%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a))
-%#define array_is_native(a)     (PyArray_ISNOTSWAPPED(a))
-%#define array_is_fortran(a)    (PyArray_ISFORTRAN(a))
-}
-
-/**********************************************************************/
-
-%fragment("NumPy_Utilities", "header")
-{
-  /* Given a PyObject, return a string describing its type.
-   */
-  char* pytype_string(PyObject* py_obj) {
-    if (py_obj == NULL          ) return "C NULL value";
-    if (py_obj == Py_None       ) return "Python None" ;
-    if (PyCallable_Check(py_obj)) return "callable"    ;
-    if (PyString_Check(  py_obj)) return "string"      ;
-    if (PyInt_Check(     py_obj)) return "int"         ;
-    if (PyFloat_Check(   py_obj)) return "float"       ;
-    if (PyDict_Check(    py_obj)) return "dict"        ;
-    if (PyList_Check(    py_obj)) return "list"        ;
-    if (PyTuple_Check(   py_obj)) return "tuple"       ;
-    if (PyFile_Check(    py_obj)) return "file"        ;
-    if (PyModule_Check(  py_obj)) return "module"      ;
-    if (PyInstance_Check(py_obj)) return "instance"    ;
-
-<<<<<<< HEAD:lang/numpy.i
-    return "unkown type";
-=======
-    return "unknow type";
->>>>>>> experimental:lang/numpy.i.in
-  }
-
-  /* Given a NumPy typecode, return a string describing the type.
-   */
-  char* typecode_string(int typecode) {
-    static char* type_names[25] = {"bool", "byte", "unsigned byte",
-                                   "short", "unsigned short", "int",
-                                   "unsigned int", "long", "unsigned long",
-                                   "long long", "unsigned long long",
-                                   "float", "double", "long double",
-                                   "complex float", "complex double",
-                                   "complex long double", "object",
-                                   "string", "unicode", "void", "ntypes",
-                                   "notype", "char", "unknown"};
-    return typecode < 24 ? type_names[typecode] : type_names[24];
-  }
-
-  /* Make sure input has correct numpy type.  Allow character and byte
-   * to match.  Also allow int and long to match.  This is deprecated.
-   * You should use PyArray_EquivTypenums() instead.
-   */
-  int type_match(int actual_type, int desired_type) {
-    return PyArray_EquivTypenums(actual_type, desired_type);
-  }
-}
-
-/**********************************************************************/
-
-%fragment("NumPy_Object_to_Array", "header",
-          fragment="NumPy_Backward_Compatibility",
-          fragment="NumPy_Macros",
-          fragment="NumPy_Utilities")
-{
-  /* Given a PyObject pointer, cast it to a PyArrayObject pointer if
-   * legal.  If not, set the python error string appropriately and
-   * return NULL.
-   */
-  PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode)
-  {
-    PyArrayObject* ary = NULL;
-    if (is_array(input) && (typecode == NPY_NOTYPE ||
-                            PyArray_EquivTypenums(array_type(input), typecode)))
-    {
-      ary = (PyArrayObject*) input;
-    }
-    else if is_array(input)
-    {
-      char* desired_type = typecode_string(typecode);
-      char* actual_type  = typecode_string(array_type(input));
-      PyErr_Format(PyExc_TypeError,
-                   "Array of type '%s' required.  Array of type '%s' given",
-                   desired_type, actual_type);
-      ary = NULL;
-    }
-    else
-    {
-      char * desired_type = typecode_string(typecode);
-      char * actual_type  = pytype_string(input);
-      PyErr_Format(PyExc_TypeError,
-                   "Array of type '%s' required.  A '%s' was given",
-                   desired_type, actual_type);
-      ary = NULL;
-    }
-    return ary;
-  }
-
-  /* Convert the given PyObject to a NumPy array with the given
-   * typecode.  On success, return a valid PyArrayObject* with the
-   * correct type.  On failure, the python error string will be set and
-   * the routine returns NULL.
-   */
-  PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode,
-                                               int* is_new_object)
-  {
-    PyArrayObject* ary = NULL;
-    PyObject* py_obj;
-    if (is_array(input) && (typecode == NPY_NOTYPE ||
-                            PyArray_EquivTypenums(array_type(input),typecode)))
-    {
-      ary = (PyArrayObject*) input;
-      *is_new_object = 0;
-    }
-    else
-    {
-      py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT);
-      /* If NULL, PyArray_FromObject will have set python error value.*/
-      ary = (PyArrayObject*) py_obj;
-      *is_new_object = 1;
-    }
-    return ary;
-  }
-
-  /* Given a PyArrayObject, check to see if it is contiguous.  If so,
-   * return the input pointer and flag it as not a new object.  If it is
-   * not contiguous, create a new PyArrayObject using the original data,
-   * flag it as a new object and return the pointer.
-   */
-  PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object,
-                                 int min_dims, int max_dims)
-  {
-    PyArrayObject* result;
-    if (array_is_contiguous(ary))
-    {
-      result = ary;
-      *is_new_object = 0;
-    }
-    else
-    {
-      result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary,
-                                                             array_type(ary),
-                                                             min_dims,
-                                                             max_dims);
-      *is_new_object = 1;
-    }
-    return result;
-  }
-
-  /* Given a PyArrayObject, check to see if it is Fortran-contiguous.
-   * If so, return the input pointer, but do not flag it as not a new
-   * object.  If it is not Fortran-contiguous, create a new
-   * PyArrayObject using the original data, flag it as a new object
-   * and return the pointer.
-   */
-  PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object,
-                              int min_dims, int max_dims)
-  {
-    PyArrayObject* result;
-    if (array_is_fortran(ary))
-    {
-      result = ary;
-      *is_new_object = 0;
-    }
-    else
-    {
-      Py_INCREF(ary->descr);
-      result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN);
-      *is_new_object = 1;
-    }
-    return result;
-  }
-
-  /* Convert a given PyObject to a contiguous PyArrayObject of the
-   * specified type.  If the input object is not a contiguous
-   * PyArrayObject, a new one will be created and the new object flag
-   * will be set.
-   */
-  PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input,
-                                                          int typecode,
-                                                          int* is_new_object)
-  {
-    int is_new1 = 0;
-    int is_new2 = 0;
-    PyArrayObject* ary2;
-    PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode,
-                                                        &is_new1);
-    if (ary1)
-    {
-      ary2 = make_contiguous(ary1, &is_new2, 0, 0);
-      if ( is_new1 && is_new2)
-      {
-        Py_DECREF(ary1);
-      }
-      ary1 = ary2;
-    }
-    *is_new_object = is_new1 || is_new2;
-    return ary1;
-  }
-
-  /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the
-   * specified type.  If the input object is not a Fortran-ordered
-   * PyArrayObject, a new one will be created and the new object flag
-   * will be set.
-   */
-  PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input,
-                                                       int typecode,
-                                                       int* is_new_object)
-  {
-    int is_new1 = 0;
-    int is_new2 = 0;
-    PyArrayObject* ary2;
-    PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode,
-                                                        &is_new1);
-    if (ary1)
-    {
-      ary2 = make_fortran(ary1, &is_new2, 0, 0);
-      if (is_new1 && is_new2)
-      {
-        Py_DECREF(ary1);
-      }
-      ary1 = ary2;
-    }
-    *is_new_object = is_new1 || is_new2;
-    return ary1;
-  }
-
-} /* end fragment */
-
-
-/**********************************************************************/
-
-%fragment("NumPy_Array_Requirements", "header",
-          fragment="NumPy_Backward_Compatibility",
-          fragment="NumPy_Macros")
-{
-  /* Test whether a python object is contiguous.  If array is
-   * contiguous, return 1.  Otherwise, set the python error string and
-   * return 0.
-   */
-  int require_contiguous(PyArrayObject* ary)
-  {
-    int contiguous = 1;
-    if (!array_is_contiguous(ary))
-    {
-      PyErr_SetString(PyExc_TypeError,
-                      "Array must be contiguous.  A non-contiguous array was given");
-      contiguous = 0;
-    }
-    return contiguous;
-  }
-
-  /* Require that a numpy array is not byte-swapped.  If the array is
-   * not byte-swapped, return 1.  Otherwise, set the python error string
-   * and return 0.
-   */
-  int require_native(PyArrayObject* ary)
-  {
-    int native = 1;
-    if (!array_is_native(ary))
-    {
-      PyErr_SetString(PyExc_TypeError,
-                      "Array must have native byteorder.  "
-                      "A byte-swapped array was given");
-      native = 0;
-    }
-    return native;
-  }
-
-  /* Require the given PyArrayObject to have a specified number of
-   * dimensions.  If the array has the specified number of dimensions,
-   * return 1.  Otherwise, set the python error string and return 0.
-   */
-  int require_dimensions(PyArrayObject* ary, int exact_dimensions)
-  {
-    int success = 1;
-    if (array_numdims(ary) != exact_dimensions)
-    {
-      PyErr_Format(PyExc_TypeError,
-                   "Array must have %d dimensions.  Given array has %d dimensions",
-                   exact_dimensions, array_numdims(ary));
-      success = 0;
-    }
-    return success;
-  }
-
-  /* Require the given PyArrayObject to have one of a list of specified
-   * number of dimensions.  If the array has one of the specified number
-   * of dimensions, return 1.  Otherwise, set the python error string
-   * and return 0.
-   */
-  int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n)
-  {
-    int success = 0;
-    int i;
-    char dims_str[255] = "";
-    char s[255];
-    for (i = 0; i < n && !success; i++)
-    {
-      if (array_numdims(ary) == exact_dimensions[i])
-      {
-        success = 1;
-      }
-    }
-    if (!success)
-    {
-      for (i = 0; i < n-1; i++)
-      {
-        sprintf(s, "%d, ", exact_dimensions[i]);
-        strcat(dims_str,s);
-      }
-      sprintf(s, " or %d", exact_dimensions[n-1]);
-      strcat(dims_str,s);
-      PyErr_Format(PyExc_TypeError,
-                   "Array must have %s dimensions.  Given array has %d dimensions",
-                   dims_str, array_numdims(ary));
-    }
-    return success;
-  }
-
-  /* Require the given PyArrayObject to have a specified shape.  If the
-   * array has the specified shape, return 1.  Otherwise, set the python
-   * error string and return 0.
-   */
-  int require_size(PyArrayObject* ary, npy_intp* size, int n)
-  {
-    int i;
-    int success = 1;
-    int len;
-    char desired_dims[255] = "[";
-    char s[255];
-    char actual_dims[255] = "[";
-    for(i=0; i < n;i++)
-    {
-      if (size[i] != -1 &&  size[i] != array_size(ary,i))
-      {
-        success = 0;
-      }
-    }
-    if (!success)
-    {
-      for (i = 0; i < n; i++)
-      {
-        if (size[i] == -1)
-        {
-          sprintf(s, "*,");
-        }
-        else
-        {
-          sprintf(s, "%ld,", (long int)size[i]);
-        }
-        strcat(desired_dims,s);
-      }
-      len = strlen(desired_dims);
-      desired_dims[len-1] = ']';
-      for (i = 0; i < n; i++)
-      {
-        sprintf(s, "%ld,", (long int)array_size(ary,i));
-        strcat(actual_dims,s);
-      }
-      len = strlen(actual_dims);
-      actual_dims[len-1] = ']';
-      PyErr_Format(PyExc_TypeError,
-                   "Array must have shape of %s.  Given array has shape of %s",
-                   desired_dims, actual_dims);
-    }
-    return success;
-  }
-
-  /* Require the given PyArrayObject to to be FORTRAN ordered.  If the
-   * the PyArrayObject is already FORTRAN ordered, do nothing.  Else,
-   * set the FORTRAN ordering flag and recompute the strides.
-   */
-  int require_fortran(PyArrayObject* ary)
-  {
-    int success = 1;
-    int nd = array_numdims(ary);
-    int i;
-    if (array_is_fortran(ary)) return success;
-    /* Set the FORTRAN ordered flag */
-    ary->flags = NPY_FARRAY;
-    /* Recompute the strides */
-    ary->strides[0] = ary->strides[nd-1];
-    for (i=1; i < nd; ++i)
-      ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1);
-    return success;
-  }
-}
-
-/* Combine all NumPy fragments into one for convenience */
-%fragment("NumPy_Fragments", "header",
-          fragment="NumPy_Backward_Compatibility",
-          fragment="NumPy_Macros",
-          fragment="NumPy_Utilities",
-          fragment="NumPy_Object_to_Array",
-          fragment="NumPy_Array_Requirements") { }
-
-/* End John Hunter translation (with modifications by Bill Spotz)
- */
-
-/* %numpy_typemaps() macro
- *
- * This macro defines a family of 41 typemaps that allow C arguments
- * of the form
- *
- *     (DATA_TYPE IN_ARRAY1[ANY])
- *     (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
- *     (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
- *
- *     (DATA_TYPE IN_ARRAY2[ANY][ANY])
- *     (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
- *     (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
- *
- *     (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
- *     (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
- *     (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
- *
- *     (DATA_TYPE INPLACE_ARRAY1[ANY])
- *     (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
- *     (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
- *
- *     (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
- *     (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
- *     (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
- *
- *     (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
- *     (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
- *     (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
- *     (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
- *
- *     (DATA_TYPE ARGOUT_ARRAY1[ANY])
- *     (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
- *     (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
- *
- *     (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
- *
- *     (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
- *
- *     (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
- *     (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
- *
- *     (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
- *     (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
- *
- *     (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
- *     (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
- *     (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
- *
- * where "DATA_TYPE" is any type supported by the NumPy module, and
- * "DIM_TYPE" is any int-like type suitable for specifying dimensions.
- * The difference between "ARRAY" typemaps and "FARRAY" typemaps is
- * that the "FARRAY" typemaps expect FORTRAN ordering of
- * multidimensional arrays.  In python, the dimensions will not need
- * to be specified (except for the "DATA_TYPE* ARGOUT_ARRAY1"
- * typemaps).  The IN_ARRAYs can be a numpy array or any sequence that
- * can be converted to a numpy array of the specified type.  The
- * INPLACE_ARRAYs must be numpy arrays of the appropriate type.  The
- * ARGOUT_ARRAYs will be returned as new numpy arrays of the
- * appropriate type.
- *
- * These typemaps can be applied to existing functions using the
- * %apply directive.  For example:
- *
- *     %apply (double* IN_ARRAY1, int DIM1) {(double* series, int length)};
- *     double prod(double* series, int length);
- *
- *     %apply (int DIM1, int DIM2, double* INPLACE_ARRAY2)
- *           {(int rows, int cols, double* matrix        )};
- *     void floor(int rows, int cols, double* matrix, double f);
- *
- *     %apply (double IN_ARRAY3[ANY][ANY][ANY])
- *           {(double tensor[2][2][2]         )};
- *     %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY])
- *           {(double low[2][2][2]                )};
- *     %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY])
- *           {(double upp[2][2][2]                )};
- *     void luSplit(double tensor[2][2][2],
- *                  double low[2][2][2],
- *                  double upp[2][2][2]    );
- *
- * or directly with
- *
- *     double prod(double* IN_ARRAY1, int DIM1);
- *
- *     void floor(int DIM1, int DIM2, double* INPLACE_ARRAY2, double f);
- *
- *     void luSplit(double IN_ARRAY3[ANY][ANY][ANY],
- *                  double ARGOUT_ARRAY3[ANY][ANY][ANY],
- *                  double ARGOUT_ARRAY3[ANY][ANY][ANY]);
- */
-
-%define %numpy_typemaps(DATA_TYPE, DATA_TYPECODE, DIM_TYPE)
-
-/************************/
-/* Input Array Typemaps */
-/************************/
-
-/* Typemap suite for (DATA_TYPE IN_ARRAY1[ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE IN_ARRAY1[ANY])
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE IN_ARRAY1[ANY])
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[1] = { $1_dim0 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 1) ||
-      !require_size(array, size, 1)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(freearg)
-  (DATA_TYPE IN_ARRAY1[ANY])
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[1] = { -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 1) ||
-      !require_size(array, size, 1)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[1] = {-1};
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 1) ||
-      !require_size(array, size, 1)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE IN_ARRAY2[ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE IN_ARRAY2[ANY][ANY])
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE IN_ARRAY2[ANY][ANY])
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { $1_dim0, $1_dim1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(freearg)
-  (DATA_TYPE IN_ARRAY2[ANY][ANY])
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE,
-                                                &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[2] = { -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 2) ||
-      !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(freearg)
-  (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY])
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* IN_ARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE,
-                                                &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3) | !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-%typemap(freearg)
-  (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* IN_FARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
-{
-  $1 = is_array($input) || PySequence_Check($input);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
-  (PyArrayObject* array=NULL, int is_new_object=0)
-{
-  npy_intp size[3] = { -1, -1, -1 };
-  array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE,
-                                                   &is_new_object);
-  if (!array || !require_dimensions(array, 3) ||
-      !require_size(array, size, 3) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-%typemap(freearg)
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3)
-{
-  if (is_new_object$argnum && array$argnum)
-    { Py_DECREF(array$argnum); }
-}
-
-/***************************/
-/* In-Place Array Typemaps */
-/***************************/
-
-/* Typemap suite for (DATA_TYPE INPLACE_ARRAY1[ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE INPLACE_ARRAY1[ANY])
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE INPLACE_ARRAY1[ANY])
-  (PyArrayObject* array=NULL)
-{
-  npy_intp size[1] = { $1_dim0 };
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) ||
-      !require_contiguous(array) || !require_native(array)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1)
-  (PyArrayObject* array=NULL, int i=1)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,1) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = 1;
-  for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1)
-  (PyArrayObject* array=NULL, int i=0)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,1) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = 1;
-  for (i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i);
-  $2 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE INPLACE_ARRAY2[ANY][ANY])
-  (PyArrayObject* array=NULL)
-{
-  npy_intp size[2] = { $1_dim0, $1_dim1 };
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) ||
-      !require_contiguous(array) || !require_native(array)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array) ||
-      !require_native(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array)
-      || !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,2) || !require_contiguous(array) ||
-      !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY])
-  (PyArrayObject* array=NULL)
-{
-  npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 };
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) ||
-      !require_contiguous(array) || !require_native(array)) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array) ||
-      !require_native(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* INPLACE_ARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array)
-      || !require_native(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-
-/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2,
- *                    DIM_TYPE DIM3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array) ||
-      !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-  $2 = (DIM_TYPE) array_size(array,0);
-  $3 = (DIM_TYPE) array_size(array,1);
-  $4 = (DIM_TYPE) array_size(array,2);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3,
- *                    DATA_TYPE* INPLACE_FARRAY3)
- */
-%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY,
-           fragment="NumPy_Macros")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
-{
-  $1 = is_array($input) && PyArray_EquivTypenums(array_type($input),
-                                                 DATA_TYPECODE);
-}
-%typemap(in,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3)
-  (PyArrayObject* array=NULL)
-{
-  array = obj_to_array_no_conversion($input, DATA_TYPECODE);
-  if (!array || !require_dimensions(array,3) || !require_contiguous(array)
-      || !require_native(array) || !require_fortran(array)) SWIG_fail;
-  $1 = (DIM_TYPE) array_size(array,0);
-  $2 = (DIM_TYPE) array_size(array,1);
-  $3 = (DIM_TYPE) array_size(array,2);
-  $4 = (DATA_TYPE*) array_data(array);
-}
-
-/*************************/
-/* Argout Array Typemaps */
-/*************************/
-
-/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY1[ANY])
- */
-%typemap(in,numinputs=0,
-         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
-  (DATA_TYPE ARGOUT_ARRAY1[ANY])
-  (PyObject * array = NULL)
-{
-  npy_intp dims[1] = { $1_dim0 };
-  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE ARGOUT_ARRAY1[ANY])
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
- */
-%typemap(in,numinputs=1,
-         fragment="NumPy_Fragments")
-  (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
-  (PyObject * array = NULL)
-{
-  npy_intp dims[1];
-  if (!PyInt_Check($input))
-  {
-    char* typestring = pytype_string($input);
-    PyErr_Format(PyExc_TypeError,
-                 "Int dimension expected.  '%s' given.",
-                 typestring);
-    SWIG_fail;
-  }
-  $2 = (DIM_TYPE) PyInt_AsLong($input);
-  dims[0] = (npy_intp) $2;
-  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = (DATA_TYPE*) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1)
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
- */
-%typemap(in,numinputs=1,
-         fragment="NumPy_Fragments")
-  (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
-  (PyObject * array = NULL)
-{
-  npy_intp dims[1];
-  if (!PyInt_Check($input))
-  {
-    char* typestring = pytype_string($input);
-    PyErr_Format(PyExc_TypeError,
-                 "Int dimension expected.  '%s' given.",
-                 typestring);
-    SWIG_fail;
-  }
-  $1 = (DIM_TYPE) PyInt_AsLong($input);
-  dims[0] = (npy_intp) $1;
-  array = PyArray_SimpleNew(1, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $2 = (DATA_TYPE*) array_data(array);
-}
-%typemap(argout)
-  (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1)
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
- */
-%typemap(in,numinputs=0,
-         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
-  (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
-  (PyObject * array = NULL)
-{
-  npy_intp dims[2] = { $1_dim0, $1_dim1 };
-  array = PyArray_SimpleNew(2, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY])
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
- */
-%typemap(in,numinputs=0,
-         fragment="NumPy_Backward_Compatibility,NumPy_Macros")
-  (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
-  (PyObject * array = NULL)
-{
-  npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 };
-  array = PyArray_SimpleNew(3, dims, DATA_TYPECODE);
-  if (!array) SWIG_fail;
-  $1 = ($1_ltype) array_data(array);
-}
-%typemap(argout)
-  (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY])
-{
-  $result = SWIG_Python_AppendOutput($result,array$argnum);
-}
-
-/*****************************/
-/* Argoutview Array Typemaps */
-/*****************************/
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1    )
-  (DATA_TYPE*  data_temp        , DIM_TYPE  dim_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1)
-{
-  npy_intp dims[1] = { *$2 };
-  PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1    , DATA_TYPE** ARGOUTVIEW_ARRAY1)
-  (DIM_TYPE  dim_temp, DATA_TYPE*  data_temp        )
-{
-  $1 = &dim_temp;
-  $2 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1)
-{
-  npy_intp dims[1] = { *$1 };
-  PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1     , DIM_TYPE* DIM2     )
-  (DATA_TYPE*  data_temp        , DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
-{
-  npy_intp dims[2] = { *$2, *$3 };
-  PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1     , DIM_TYPE* DIM2     , DATA_TYPE** ARGOUTVIEW_ARRAY2)
-  (DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp, DATA_TYPE*  data_temp        )
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2)
-{
-  npy_intp dims[2] = { *$1, *$2 };
-  PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1     , DIM_TYPE* DIM2     )
-  (DATA_TYPE*  data_temp        , DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2)
-{
-  npy_intp dims[2] = { *$2, *$3 };
-  PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || !require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1     , DIM_TYPE* DIM2     , DATA_TYPE** ARGOUTVIEW_FARRAY2)
-  (DIM_TYPE  dim1_temp, DIM_TYPE  dim2_temp, DATA_TYPE*  data_temp        )
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2)
-{
-  npy_intp dims[2] = { *$1, *$2 };
-  PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || !require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2,
-                      DIM_TYPE* DIM3)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-  (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-  $4 = &dim3_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-{
-  npy_intp dims[3] = { *$2, *$3, *$4 };
-  PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3,
-                      DATA_TYPE** ARGOUTVIEW_ARRAY3)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
-  (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp)
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &dim3_temp;
-  $4 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3)
-{
-  npy_intp dims[3] = { *$1, *$2, *$3 };
-  PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3));
-  if (!array) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,array);
-}
-
-/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2,
-                      DIM_TYPE* DIM3)
- */
-%typemap(in,numinputs=0)
-  (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-  (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp)
-{
-  $1 = &data_temp;
-  $2 = &dim1_temp;
-  $3 = &dim2_temp;
-  $4 = &dim3_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3)
-{
-  npy_intp dims[3] = { *$2, *$3, *$4 };
-  PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3,
-                      DATA_TYPE** ARGOUTVIEW_FARRAY3)
- */
-%typemap(in,numinputs=0)
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
-  (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp)
-{
-  $1 = &dim1_temp;
-  $2 = &dim2_temp;
-  $3 = &dim3_temp;
-  $4 = &data_temp;
-}
-%typemap(argout,
-         fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements")
-  (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3)
-{
-  npy_intp dims[3] = { *$1, *$2, *$3 };
-  PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3));
-  PyArrayObject * array = (PyArrayObject*) obj;
-  if (!array || require_fortran(array)) SWIG_fail;
-  $result = SWIG_Python_AppendOutput($result,obj);
-}
-
-%enddef    /* %numpy_typemaps() macro */
-/* *************************************************************** */
-
-/* Concrete instances of the %numpy_typemaps() macro: Each invocation
- * below applies all of the typemaps above to the specified data type.
- */
-%numpy_typemaps(signed char       , NPY_BYTE     , int)
-%numpy_typemaps(unsigned char     , NPY_UBYTE    , int)
-%numpy_typemaps(short             , NPY_SHORT    , int)
-%numpy_typemaps(unsigned short    , NPY_USHORT   , int)
-%numpy_typemaps(int               , NPY_INT      , int)
-%numpy_typemaps(unsigned int      , NPY_UINT     , int)
-%numpy_typemaps(long              , NPY_LONG     , int)
-%numpy_typemaps(unsigned long     , NPY_ULONG    , int)
-%numpy_typemaps(long long         , NPY_LONGLONG , int)
-%numpy_typemaps(unsigned long long, NPY_ULONGLONG, int)
-%numpy_typemaps(float             , NPY_FLOAT    , int)
-%numpy_typemaps(double            , NPY_DOUBLE   , int)
-
-/* ***************************************************************
- * The follow macro expansion does not work, because C++ bool is 4
- * bytes and NPY_BOOL is 1 byte
- *
- *    %numpy_typemaps(bool, NPY_BOOL, int)
- */
-
-/* ***************************************************************
- * On my Mac, I get the following warning for this macro expansion:
- * 'swig/python detected a memory leak of type 'long double *', no destructor found.'
- *
- *    %numpy_typemaps(long double, NPY_LONGDOUBLE, int)
- */
-
-/* ***************************************************************
- * Swig complains about a syntax error for the following macro
- * expansions:
- *
- *    %numpy_typemaps(complex float,  NPY_CFLOAT , int)
- *
- *    %numpy_typemaps(complex double, NPY_CDOUBLE, int)
- *
- *    %numpy_typemaps(complex long double, NPY_CLONGDOUBLE, int)
- */
-
-#endif /* SWIGPYTHON */
diff --git a/lang/setup.py.in b/lang/setup.py.in
index 44c5730..05edce4 100644
--- a/lang/setup.py.in
+++ b/lang/setup.py.in
@@ -1,5 +1,4 @@
 from distutils.core import setup, Extension
-# -*- encoding: utf-8 -*-
 import os
 
 mgl_i="${MGL_I}"
diff --git a/texinfo/mathgl_en.texi b/texinfo/mathgl_en.texi
index a423a14..fdbf3fa 100644
--- a/texinfo/mathgl_en.texi
+++ b/texinfo/mathgl_en.texi
@@ -25,10 +25,10 @@ supports it in developing GNU and promoting software freedom.''
 @end quotation
 @end copying
 
- at c @dircategory MathGL documentation system
- at c @direntry
- at c * MathGL: (mathgl). The library for scientific graphics.
- at c @end direntry
+ at dircategory MathGL documentation system
+ at direntry
+* MathGL: (mathgl). The library for scientific graphics.
+ at end direntry
 
 @titlepage
 @title MathGL
diff --git a/texinfo/mathgl_ru.texi b/texinfo/mathgl_ru.texi
index fbd46a3..e2133b8 100644
--- a/texinfo/mathgl_ru.texi
+++ b/texinfo/mathgl_ru.texi
@@ -27,10 +27,10 @@ supports it in developing GNU and promoting software freedom.''
 @end quotation
 @end copying
 
- at c @dircategory MathGL documentation system
- at c @direntry
- at c * MathGL: (mathgl). The library for scientific graphics.
- at c @end direntry
+ at dircategory MathGL documentation system
+ at direntry
+* MathGL: (mathgl). The library for scientific graphics.
+ at end direntry
 
 @titlepage
 @title MathGL
diff --git a/texinfo/mgl_en.texi b/texinfo/mgl_en.texi
index 1b09abe..9b8e8a3 100644
--- a/texinfo/mgl_en.texi
+++ b/texinfo/mgl_en.texi
@@ -25,10 +25,10 @@ supports it in developing GNU and promoting software freedom.''
 @end quotation
 @end copying
 
- at c @dircategory MathGL documentation system
- at c @direntry
- at c * MathGL: (mathgl). The library for scientific graphics.
- at c @end direntry
+ at dircategory MathGL documentation system
+ at direntry
+* MathGL: (mathgl). The library for scientific graphics.
+ at end direntry
 
 @titlepage
 @title MGL script language
diff --git a/texinfo/mgl_ru.info-1 b/texinfo/mgl_ru.info-1
deleted file mode 100644
index e80adfa..0000000
--- a/texinfo/mgl_ru.info-1
+++ /dev/null
@@ -1,7151 +0,0 @@
-This is mgl_ru.info, produced by makeinfo version 4.13 from mgl_ru.texi.
-
-Это документация для MathGL (версии 1.11) -
-библиотеки классов и функций для
-построения научной графики.
-Пожалуйста сообщайте о любых ошибках в
-этом руководстве на <mathgl.abalakin at gmail.org>.
-
-   Copyright (C) 2009 Алексей Балакин.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.2 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover Texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy
-     and modify this GNU manual.  Buying copies from the FSF supports
-     it in developing GNU and promoting software freedom."
-
-INFO-DIR-SECTION MathGL documentation system
-START-INFO-DIR-ENTRY
-* MathGL: (mathgl). The library for scientific graphics.
-END-INFO-DIR-ENTRY
-
-
-File: mgl_ru.info,  Node: Top,  Next: MGL interface,  Up: (dir)
-
-Язык MGL
-************
-
-Это документация для языка MGL (версии
-1.11). Пожалуйста сообщайте о любых
-ошибках в этом руководстве на
-<mathgl.abalakin at gmail.org>. Дополнительную
-информацию о MGL и MathGL можно найти на
-домашней странице проекта
-`http://mathgl.sourceforge.net/'.
-
-   Copyright (C) 2010 Алексей Балакин.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.2 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover Texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy
-     and modify this GNU manual.  Buying copies from the FSF supports
-     it in developing GNU and promoting software freedom."
-
-* Menu:
-
-* MGL interface::
-* Examples::
-* Samples::
-* Copying This Manual::
-* Index::
-
-
-File: mgl_ru.info,  Node: MGL interface,  Next: Examples,  Up: Top
-
-1 Язык MGL
-**************
-
-MathGL имеет встроенный скриптовый язык
-MGL для обработки и отображения данных.
-Скрипты MGL можно использовать как
-независимо (программами UDAV, mgl2png, mgl2eps,
-mgl2svg и пр., *note Utilities::) так и вызовами
-библиотеки.
-
-   Язык MGL достаточно простой. Каждая
-строка - отдельная команда. Первое
-слово - имя команды, а все остальные ее
-аргументы. Команда может иметь до 1000
-аргументов (по крайней мере сейчас).
-Слова разделяются одно от другого
-пробелом или символом табуляции.
-Различий между верхним и нижним
-индексом нет, т.е. переменные A и A
-идентичны. Символ `#' начинает
-комментарий - все символы после него
-игнорируются до конца строки.
-Исключением является случай, когда `#'
-входит в строку. Опции команды
-указываются после символа `;' (*note Command
-options::). Символ `:' начинает новую команду
-(подобно переводу строки) если он
-расположен не внутри скобок или строки.
-
-   Если строка содержит ссылки на
-внешние параметры (`$0', `$1' ... `$9') или
-макроопределения (`$a', `$b' ... `$z'), то
-текущие значения
-параметров/макроопределений
-подставляются в строку вместо ссылки
-до выполнением команды. Это позволяет
-использовать один и тот же скрипт при
-различных входных параметрах
-командной строки или вводить
-макроопределения по ходу исполнения
-команд скрипта.
-
-   Аргументы команды могут быть
-строками, переменными или числами.
-   * Строка - произвольный набор
-     символов между метками `''.
-
-   * Обычно переменная имеет имя,
-     состоящее из букв и чисел (должно
-     начинаться с буквы и не быть длиннее
-     64 символов). В качестве переменной
-     можно использовать временные
-     массивы, включающие в себя:
-        * срезы ("подмассивы") массивов
-          данных (подобно команде *note subdata::).
-          Например, `a(1)' или `a(1,:)' или `a(1,:,:)' -
-          вторая строка массива A, `a(:,2)' или
-          `a(:,2,:)' - третий столбец, `a(:,:,0)' -
-          первый срез и т.д. Также можно
-          выделить часть массива с m-го по
-          n-ый элемент `a(m:n,:,:)' или просто
-          `a(m:n)'.
-
-        * произвольные комбинации
-          столбцов данных (например,
-          `a('n*w^2/exp(t)')'), если столбцы данных
-          были именованы командой *note idset::
-          или в файле данных (в строке
-          начинающейся с `##').
-
-        * произвольное выражение из
-          существующих переменных и
-          констант. Например, `sqrt(dat(:,5)+1)'
-          даст временный массив данных с
-          элементами равными `tmp[i,j] =
-          sqrt(dat[i,5,j]+1)'.
-
-        * массивы с элементами заданными в
-          квадратных скобках [],
-          разделенные `,'. При этом внутри
-          выражения не должно быть
-          пробелов! Например, `[1,2,3]' даст
-          временный массив из 3 элементов {1,
-          2, 3}; `[[11,12],[21,22]]' даст матрицу 2*2 и
-          т.д. Элементами такой конструкции
-          могут быть и массивы если их
-          размерности одинаковые, например
-          `[v1,v2,...,vn]'.
-
-        * результат команд построения
-          новых данных (*note Make another data::), если
-          они заключены в фигурные скобки
-          {}. Например, `{sum dat 'x'}' даст
-          временный массив, который есть
-          результат суммирования DAT вдоль
-          'x'. Это такой же массив как и TMP,
-          полученный командой `sum tmp dat 'x''.
-          При этом можно использовать
-          вложенные конструкции, например
-          `{sum {max dat 'z'} 'x'}'.
-     Временные массивы не могут стоять в
-     качестве первого аргумента команд,
-     создающих массивы (например, `new',
-     `read', `hist' и т.д.).
-
-   * К скалярным переменным, кроме
-     собственно чисел, относятся:
-     специальные переменные `nan=#QNAN,
-     pi=3.1415926..., on=1, off=0, :=-1', переменные с
-     суффиксами (*note Suffixes::), переменные
-     определенные командой *note define::.
-     Также массивы размером 1x1x1
-     считаются скалярами (например,
-     `pi/dat.nx').
-   Перед первым использованием все
-переменные должны быть определены с
-помощью команд, создающих массивы (*note
-new::, *note var::, *note list::, *note copy::, *note read::, *note
-hist::, *note sum:: и др., *note Data create:: и *note Make another
-data::).
-
-   Команды могут иметь несколько
-наборов аргументов (например, `plot ydat' и
-`plot xdat ydat'). Все аргументы команды для
-выбранного набора должны быть указаны,
-однако часть из них могут иметь
-значения по умолчанию. Такие аргументы
-в описании команд будут помещены в
-квадратные скобки [], например `plot ydat
-['stl'='' zval=nan]'. При этом запись `[arg1 arg2 arg3
-...]' подразумевает `[arg1 [arg2 [arg3 ...]]]', т.е.
-опускать можно только аргументы с
-конца, если вы согласны с их значениями
-по умолчанию. Например, `plot ydat '' 1' или
-`plot ydat ''' правильно, а `plot ydat 1' не
-правильно (аргумент `'stl'' пропущен).
-
-   Все команды MGL можно разделить на
-несколько групп. В дальнейшем будет
-использованы следующие обозначения
-при описании команд: имя команды
-выделено жирным, строки заключены в
-одинарные кавычки ", переменные
-выделены курсивом, числа (скаляры)
-выделены моноширинным шрифтом.
-Необязательные аргументы будут
-помещены в квадратные скобки [] и
-показаны их значения по умолчанию.
-Подробную информацию о цвете и стиле
-линий (*note Line styles::), цветовых схемах (*note
-Color scheme::), стиле текста и символах TeX (*note
-Font styles::), текстовых формулах (*note Textual
-formulas::) можно найти в соответствующих
-разделах.
-
-* Menu:
-
-
-* General concepts::
-* Graphics setup ::
-* Axis settings ::
-* Transformation matrix ::
-* Export to file ::
-* Primitives drawing ::
-* Text printing ::
-* Axis and Colorbar ::
-* Legend ::
-* 1D plotting ::
-* 2D plotting ::
-* 3D plotting ::
-* Dual plotting ::
-* Vector fields ::
-* Other plotting ::
-* Nonlinear fitting ::
-* Data create ::
-* Data filling ::
-* Rearrange data ::
-* File I/O ::
-* Make another data ::
-* Change data ::
-* Operators ::
-* Program flow ::
-* Command options ::
-* Suffixes::
-* Utilities::
-
-
-File: mgl_ru.info,  Node: General concepts,  Prev: Utilities,  Up: MGL interface
-
-1.1 Основные принципы
-=====================================
-
-Возможности библиотеки MathGL довольно
-богаты - число только основных типов
-графиков превышает 50 видов. Кроме того,
-есть функции для обработки данных,
-настройки вида графика и пр. и пр. Тем
-не менее, я старался придерживаться
-единого стиля в порядке аргументов
-функций и способе их "настройки". В
-основном все ниже сказанное относится
-к функциям рисования различных
-графиков.
-
-   Всего основных концепций (базисных
-идей) четыре:
-  1. *Все настройки графиков (стиль
-     линий, цветовые схемы поверхностей,
-     стиль и цвет текста) задаются
-     строками.* Это обеспечивает:
-     удобство для пользователя -
-     короткую строку легче читать и
-     здесь тяжелее ошибиться, чем в
-     большом списке параметров;
-     переносимость - строки выглядят
-     одинаково на всех платформах и не
-     надо заботиться о типе и числе
-     аргументов.
-
-  2. *Все функции имеют "упрощенный" и
-     "продвинутый" варианты.* Сделано
-     опять из-за удобства. В "упрощенном"
-     варианте для построения графика
-     нужны только один-два массив(а)
-     данных, которые автоматически
-     равнораспределяются в заданном
-     диапазоне осей координат. В
-     "продвинутой" версии можно не только
-     указать явно диапазон построения
-     графика, но и задать его
-     параметрически. Последнее
-     позволяет легко строить довольно
-     сложные кривые и поверхности. В
-     обоих вариантах функций порядок
-     аргументов стандартен: сначала идут
-     массивы данных, потом
-     необязательный строковый параметр
-     стиля графика, а далее -
-     второстепенные необязательные
-     параметры для более точной
-     настройки графика.
-
-  3. *Все элементы рисунков векторные.*
-     Изначально библиотека MathGL была
-     ориентированна на работу с научными
-     данными, которые по своей природе
-     векторные (линии, грани, матрицы и
-     т.д.). Поэтому векторность
-     используется во всех рисунках!
-     Причем иногда даже в ущерб
-     производительности (например, при
-     выводе шрифтов). Помимо всего
-     прочего, векторность позволяет
-     легко масштабировать рисунок -
-     измените размер картинки в 2 раза, и
-     рисунок пропорционально растянется.
-
-  4. *Новые графики не удаляют уже
-     нарисованное.* Этот, в чем-то
-     неожиданный, подход позволяет
-     создавать огромное количество
-     "комбинированных" графиков.
-     Например, поверхность с наложенными
-     линиями уровня строится двумя
-     последовательными вызовами функций
-     рисования поверхности и линий
-     уровня (в любом порядке). И
-     совершенно не надо писать
-     специальную функцию (как в Matlab и
-     некоторых других программах) для
-     рисования этого графика. Примеров
-     таких графиков можно привести
-     множество (см. раздел *note Hints:: и сайт
-     программы `http://mathgl.sf.net/index.html').
-
-   Кроме основных концепций я хотел бы
-остановиться на нескольких, как
-оказалось, нетривиальных моментах -
-способе указания положения графика,
-осей координат и строковых параметров
-линий, поверхностей, текста.
-
-* Menu:
-
-* Coordinate axes::
-* Line styles::
-* Color scheme::
-* Font styles::
-* Textual formulas::
-
-
-File: mgl_ru.info,  Node: Coordinate axes,  Next: Line styles,  Up: General concepts
-
-1.1.1 Оси координат
--------------------------------
-
-Представление системы координат в MathGL
-состоит из двух частей. Вначале
-координаты нормируются в интервал MINxMAX
-(*note Axis settings::). Если флаг CUT установлен,
-то точки вне интервала отбрасываются,
-в противном случае, они проецируются
-на ограничивающий параллелепипед (*note
-Cutting::). Кроме того, отбрасываются точки
-внутри границ, определенных
-переменными CUTMINxCUTMAX и точки, для
-которых значение функции `CutOff'() не
-равно нулю. После этого формулы
-перехода в криволинейную систему
-координат `SetFunc()'применяются к каждой
-точке. Наконец, точка данных
-отображается с помощью одной из
-графических функций.
-
-   Величины MAX, MIN можно изменять
-вручную. Однако, после этого
-необходимо вызвать функцию `RecalcBorder()'
-для настройки графика. Более удобный и
-безопасный путь состоит в вызове
-функций `Axis(), SetRanges()' и др. В последнем
-случае функция `RecalcBorder()' вызывается
-автоматически. Размеры осей можно
-задавать и автоматически по
-минимальному и максимальному
-значениям массива данных. Для этого
-предназначены функции `XRange(), YRange(),
-ZRange()'. Второй не обязательный аргумент
-указывает, заменять ли новые значения
-диапазона изменения оси координат (по
-умолчанию) или только расширить уже
-существующий диапазон.
-
-   Точка пересечения осей координат
-задается переменной ORG и действует на
-последующие вызовы функций рисования
-осей координат и сетки. По умолчанию,
-если точка пересечения осей координат
-попадает вне диапазона осей координат,
-то она проецируется на границу
-области. Изменить такое поведение
-можно, задав AUTOORG=`false'. В случае, если
-одно из значений ORG равно NAN, то
-соответствующее значение будет
-выбрано автоматически.
-
-   Кроме привычных осей _x, y, z_ есть еще
-одна ось - цветовая шкала - ось _c_. Она
-используется при окрашивании
-поверхностей и задает границы
-изменения функции при окрашивании. При
-вызове `Axis()' ее границы автоматически
-устанавливаются равными Min.z и Max.z.
-Возможно и ручное изменение границ
-цветового интервала посредством
-вызова функции `CAxis()' или изменение
-границ по заданному массиву `CRange()'.
-Используйте `Colorbar()' для отображения
-цветовой шкалы.
-
-   Вид меток по осям определяется
-функцией `SetTicks()' (*note Axis settings::). Она
-имеет 3 аргумента: первый D задает шаг
-меток (если положительны) или их число
-(если отрицательны) или
-логарифмические метки (если равны
-нулю); второ NS задает число "подметок";
-последний определяет начальную точку
-для меток (по умолчанию это точка
-пересечения осей). Функция SETTUNETICKS
-включает/выключает выделение общего
-множителя (большого или малого
-факторов в диапазоне) для меток осей
-координат. Наконец, если стандартный
-вид меток не устраивает пользователя,
-то их шаблон можно задать явно (можно
-использовать и ТеХ символы),
-воспользовавшись функциями  `SetXTT(),
-SetYTT(). SetZTT(). SetCTT()'. Кроме того, в качестве
-меток можно вывести произвольный
-текст использовав функцию `SetTicksVal()'.
-
-
-File: mgl_ru.info,  Node: Line styles,  Next: Color scheme,  Prev: Coordinate axes,  Up: General concepts
-
-1.1.2 Стиль линий
----------------------------
-
-Стиль линии задается строкой, которая
-может содержать символ цвета
-(`wkrgbcymhRGBCYMHWlenupqLENUPQ'), тип пунктира (`-|;:ji'
-или пробел), ширину линии (`0123456789') и тип
-маркера (`o+xsd.^v' и модификатор `#'). Если
-пропущен цвет или тип пунктира, то
-используется значение по умолчанию с
-последним указанным цветом или
-значение из палитры (для *note 1D plotting::).
-По умолчанию палитры содержит
-следующие цвета: темно серый `H', синий
-`b', зеленый `g', красный `r', голубой `c',
-пурпурный `m', yellow `y', серый `h',
-сине-зеленый `l', небесно-синий `n',
-оранжевый `q', желто-зеленый `e',
-сине-фиолетовый `u', фиолетовый `p'.
-
-   Символы цвета те же, что и в классе
-mglColor (*note mglColor class::): `k' - черный, `r' -
-красный, `R' - темно красный, `g' - зеленый,
-`G' - темно зеленый, `b' - синий, `B' - темно
-синий, `c' - голубой, `C' - темно голубой, `m'
-- пурпурный, `M' - темно пурпурный, `y' -
-желтый, `Y' - темно желтый (золотой), `h' -
-серый, `H' - темно серый, `w' - белый, `W' -
-светло серый, `l' - сине-зеленый, `L' -
-темно сине-зеленый, `e' - желто-зеленый,
-`E' - темно желто-зеленый, `n' -
-небесно-синий, `N' - темно небесно-синий,
-`u' - сине-фиолетовый, `U' - темно
-сине-фиолетовый, `p' - фиолетовый, `P' -
-темно фиолетовый, `q' - оранжевый, `Q' -
-темно оранжевый (коричневый).
-
-   Тип пунктира: пробел - нет линии (для
-рисования только маркеров), `-' -
-сплошная линия (################), `|' - длинный
-пунктир (########________), `;' - пунктир
-(####____####____), `=' - короткий пунктир
-(##__##__##__##__), `:' - точки (#___#___#___#___), `j' -
-пунктир с точками  (#######____#____), `i' -
-мелкий пунктир с точками (###__#__###__#__).
-
-   Типы маркеров: `o' - окружность, `+' -
-крест, `x' - косой крест, `s' - квадрат, `d' -
-ромб, `.' - точка, `^' - треугольник вверх,
-`v' - треугольник вниз, `<' - треугольник
-влево, `>' - треугольник вправо, `#*' - знак
-Y, `#+' - крест в квадрате, `#x' - косой крест
-в квадрате, `#.' - точка в окружности.
-Если в строке присутствует символ `#',
-то используются символы с заполнением.
-
- [image src="../png/sample5.png" ]
-
-Стили линий и маркеров.
-
-   На конце и в начале линии можно
-выводить специальный символ (стрелку),
-если в строке указать один из символов:
-`A' - стрелка наружу, `V' - стрелка внутрь,
-`I' - поперечная черта, `K' - стрелка с
-чертой, `T' - треугольник, `S' - квадрат, `D' -
-ромб, `O' - круг, `_' - нет стрелки (по
-умолчанию). При этом действует
-следующее правило: первый символ
-определяет стрелку на конце линии,
-второй символ - стрелку в начале линии.
-Например, `r-A' - красная сплошная линия
-со стрелкой на конце, `b|AI' - синий
-пунктир со стрелкой на конце и чертой
-вначале, `_O' - линия с текущим стилем и
-кружком вначале. Эти стили действуют и
-при построении графиков (например, *note
-1D plotting::).
-
- [image src="../png/sampled.png" ]
-
-Стили стрелок.
-
-
-File: mgl_ru.info,  Node: Color scheme,  Next: Font styles,  Prev: Line styles,  Up: General concepts
-
-1.1.3 Цветовая схема
----------------------------------
-
-Цветовая схема используется для
-определения цвета поверхностей, линий
-уровня и пр. Цветовая схема задается
-строкой _s_, которая содержит символы
-цвета (*note Line styles::) или символы `d#:|'.
-Символ `d' указывает на определение
-цвета в зависимости от положения точки
-в пространстве, а не по амплитуде
-данных. Символ `#' переключает
-рисование поверхности на сетчатое (для
-трехмерных поверхностей) или включает
-рисование сетки на поверхности. Символ
-`|' отключает интерполяцию цвета в
-цветовой схеме. Это может быть полезно
-для "резких" цветов, например, при
-рисовании матриц. Если в строке
-встречается символ `:', то он
-принудительно заканчивает разбор
-строки для стиля поверхности. После
-этого символа могут идти описание
-стиля текста или оси вращения
-кривой/линий уровня. Цветовая схема
-может содержать до 32 значений цвета.
-
-   В цветовой схеме можно использовать
-тональные ("подсвеченные") цвета (_не в
-стиле линий!_). Тональный цвет задается
-двумя символами: первый - обычный цвет,
-второй - его яркость цифрой. Цифра
-может быть в диапазоне `1'...`9'. При этом
-`5' соответствует нормальному цвету, `1' -
-очень темная версия цвета (почти
-черный), `9' - очень светлая версия цвета
-(почти белый). Например цветовая схема
-может быть `b2b7wr7r2'.
-
- [image src="../png/colors.png" ]
-
-Цвета и их идентификаторы.
-
-   При определении цвета по _амплитуде_
-(наиболее часто используется)
-окончательный цвет определяется путем
-линейной интерполяции массива цветов.
-Массив цветов формируется из цветов,
-указанных в строке спецификации.
-Аргумент - амплитуда, нормированная
-между CMIN - CMAX (*note Axis settings::). Например,
-строка из 4 символов `bcyr' соответствует
-изменению цвета от синего (минимальное
-значение) через голубой и желтый
-(промежуточные значения) к красному
-(максимальное значение). Строка `kw'
-соответствует изменению цвета от
-черного (минимальное значение) к
-белому (максимальное значение). Строка
-из одного символа (например, `g')
-соответствует однотонному цвету (в
-данному случае зеленому).
-
-   Есть несколько полезных цветовых
-схем. Строка `kw' дает обычную серую
-(черно-белую) схему, когда большие
-значения светлее. Строка `wk'
-представляет обратную серую схему,
-когда большие значения темнее. Строки
-`kRryw', `kGgw', `kBbcw' представляют собой
-хорошо известные схемы _hot_, _summer_ и _winter_.
-Строки `BbwrR' и `bBkRr' позволяют рисовать
-двухцветные фигуры на белом или черном
-фоне, когда отрицательные значения
-показаны синим цветом, а положительные
-- красным. Строка `BbcyrR' дает цветовую
-схему, близкую к хорошо известной
-схеме _jet_.
-
- [image src="../png/color_schemes.png" ]
-
-Наиболее популярные цветовые схемы.
-
-   При определении цвета по _положению
-точки в пространстве_ окончательный
-цвет определяется по формуле c=x*c[1] + y*c[2]
-+ z*c[3]. Здесь c[1], c[2], c[3] - первые три цвета
-в цветовом массиве; x, y, z - координаты
-точки, нормированные на MINxMAX. Такой тип
-определения цвета полезен, например,
-при построении поверхностей уровня,
-когда цвет дает представление о
-положении точки в пространстве.
-
-
-File: mgl_ru.info,  Node: Font styles,  Next: Textual formulas,  Prev: Color scheme,  Up: General concepts
-
-1.1.4 Стиль текста
------------------------------
-
-Стиль текста задается строкой, которая
-может содержать несколько символов:
-тип шрифта (`ribwou') и/или выравнивания
-(`LRC'), а также цвет текста `wkrgbcymhRGBCYMHW' (*note
-Line styles::) после символа `:'. Например, `biC:b'
-соответствует жирному курсиву с
-выравниванием по центру синего цвета.
-
-   Начертания шрифта: `r' - прямой шрифт,
-`i' - курсив, `b' - жирный. По умолчанию
-используется прямой шрифт. Типы
-выравнивания текста: `L' - по левому краю
-(по умолчанию), `C' - по центру, `R' - по
-правому краю. Дополнительные эффекты
-шрифта: `w' - контурный, `o' - надчеркнутый,
-`u' - подчеркнутый.
-
-   Синтаксический разбор LaTeX-их команд
-по умолчанию включен. Это команды
-смены стиля текста (например, \b для
-жирного текста): \a или \overline -
-надчеркивание, \b или \textbf - жирный, \i или
-\textit - курсив, \r или \textrm - прямой
-(отменяет стили жирного и курсива), \u
-или \underline - подчеркнутый, \w или \wire -
-контурный, \big - большего размера, @ -
-меньшего размера. Нижний и верхний
-индексы задаются символами `_' и `^'. При
-этом изменение стиля применяется
-только к следующему символу или к
-символам в фигурных скобках {}, которые
-понимаются как единый блок. Например,
-сравните строки `sin (x^{2^3})' и `sin (x^2^3)'.
-Можно также менять цвет текста внутри
-строки с помощью команд #? или \color?, где
-`?' - символ цвета (*note Line styles::). Например,
-слова `Blue' и `red' будут окрашены в
-соответствующий цвет в строке `#b{Blue} and
-\colorr{red} text'. Большинство функций
-понимает символ новой строки `\n' и
-позволяет выводить много строчный
-текст. Наконец, можно использовать
-символы с произвольным UTF кодом с
-помощью команды `\utf0x????'. Например,
-`\utf0x3b1' даст символ \alpha.
-
-   Распознаются также большинство
-символов TeX и AMSTeX, команды смены стиля
-текста (\textrm, \textbf, \textit, \textsc, \overline,
-\underline), акценты (\hat, \tilde, \dot, \ddot, \acute, \check,
-\grave, \bar, \breve) и корни (\sqrt, \sqrt3, \sqrt4).
-Полный список содержит около 2000
-символов. Отмечу, что первый пробел
-(пробел, табуляция и пр.) после команды
-игнорируется, а все остальные пробелы
-печатаются обычным образом. Например,
-следующие строки дают одинаковый
-результат \tilde a: `\tilde{a}'; `\tilde a'; `\tilde{}a'.
-
-   В частности, распознаются греческие
-буквы: \alpha - \alpha, \beta - \beta, \gamma - \gamma, \delta -
-\delta, \epsilon - \epsilon, \eta - \eta, \iota - \iota, \chi - \chi,
-\kappa - \kappa, \lambda - \lambda, \mu - \mu, \nu - \nu, o - \o,
-\omega - \omega, \phi - \phi, \pi - \pi, \psi - \psi, \rho - \rho,
-\sigma - \sigma, \theta - \theta, \tau - \tau, \upsilon - \upsilon, \xi
-- \xi, \zeta - \zeta, \varsigma - \varsigma, \varepsilon - \varepsilon,
-\vartheta - \vartheta, \varphi - \varphi, A - \Alpha, B - \Beta, \Gamma
-- \Gamma, \Delta - \Delta, E - \Epsilon, H - \Eta, I - \Iota, C - \Chi,
-K - \Kappa, \Lambda - \Lambda, M - \Mu, N - \Nu, O - \O, \Omega -
-\Omega, \Phi - \Phi, \Pi - \Pi, \Psi - \Psi, R - \Rho, \Sigma - \Sigma,
-\Theta - \Theta, T - \Tau, \Upsilon - \Upsilon, \Xi - \Xi, Z - \Zeta.
-
-   Еще примеры наиболее
-общеупотребительных TeX-их символов:
-\angle - \angle, \aleph - \aleph, \cdot - \cdot, \clubsuit - \clubsuit,
-\cup - \cup, \cap - \cap, \diamondsuit - \diamondsuit, \diamond -
-\diamond, \div - \div, \downarrow - \downarrow, \dag - \dag, \ddag -
-\ddag, \equiv - \equiv, \exists - \exists, \frown - \frown, \flat -
-\flat, \ge - \ge, \geq - \geq, \gets - \gets, \heartsuit - \heartsuit,
-\infty - \infty, \in - \in, \int - \int, \Im - \Im, \langle - \langle,
-\le - \le, \leq - \leq, \leftarrow - \leftarrow, \mp - \mp, \nabla -
-\nabla, \ne - \ne, \neq - \neq, \natural - \natural, \oint - \oint,
-\odot - \odot, \oplus - \oplus, \partial - \partial, \parallel -
-\parallel, \perp - \perp, \pm - \pm, \propto - \propto, \prod - \prod,
-\Re - \Re, \rightarrow - \rightarrow, \rangle - \rangle, \spadesuit -
-\spadesuit, \sim - \sim, \smile - \smile, \subset - \subset, \supset -
-\supset, \surd - \sqrt or \surd, \S - \S, \sharp - \sharp, \sum - \sum,
-\times - \times, \to - \to, \uparrow - \uparrow, \wp - \wp and so on.
-
-   Размер текста может быть задан явно
-(если SIZE>0) или относительно базового
-размера шрифта для рисунка |SIZE|*FONTSIZE
-при SIZE<0. Значение SIZE=0 указывает, что
-соответствующая строка выводиться не
-будет. Базовый размер шрифта
-измеряется во внутренних единицах.
-Специальные функции `SetFontSizePT(),
-SetFontSizeCM(), SetFontSizeIN()' позволяют задавать
-его в более "привычных" единицах.
-
-
-File: mgl_ru.info,  Node: Textual formulas,  Prev: Font styles,  Up: General concepts
-
-1.1.5 Текстовые формулы
----------------------------------------
-
-MathGL имеет быстрый парсер текстовых
-формул , понимающий большое число
-функций и операций. Базовые операции:
-`+' - сложение, `-' - вычитание, `*' -
-умножение, `/' - деление, `^' - возведение в
-целосичленную степень. Также есть
-логические операции: `<' - истина если if
-x<y, `>' - истина если x>y, `=' - истина если x=y,
-`&' - истина если x и y оба не равны нулю, `|'
-- истина если x или y не нуль. Логические
-операции имеют наинизший приоритет и
-возвращают 1 если истина или 0 если
-ложно.
-
-   Базовые функции: `sqrt(x)' - квадратный
-корень из X, `pow(x,y)' - X в степени Y, `ln(x)' -
-натуральный логарифм X, `lg(x)' -
-десятичный логарифм X, `log(a,x)' - логарифм
-по основанию A от X, `abs(x)' - модуль X, `sign(x)'
-- знак X, `mod(x,y)' - остаток от деления x на y,
-`step(x)' - ступенчатая функция, `int(x)' -
-целая часть X, `rnd' - случайное число, `pi' -
-число \pi=3.1415926...
-
-   Тригонометрические функции: `sin(x)',
-`cos(x)', `tan(x)' (или `tg(x)'). Обратные
-тригонометрические функции: `asin(x)',
-`acos(x)', `atan(x)'. Гиперболические функции:
-`sinh(x)' (или `sh(x)'), `cosh(x)' (или `ch(x)'), `tanh(x)'
-(или `th(x)'). Обратные гиперболические
-функции: `asinh(x)', `acosh(x)', `atanh(x)'.
-
-   Специальные функции: `gamma(x)' - гамма
-функция \Gamma(x) = \int_0^\infty dt t^{x-1} \exp(-t) , `psi(x)'
-- дигамма функция \psi(x) =
-\Gamma</samp>’(x)/\Gamma(x) для x!=0, `ai(x)' - Эйри
-функция Ai(x), `bi(x)' - Эйри функция Bi(x), `cl(x)'
-- функция Клаузена, `li2(x)' (или `dilog(x)') -
-дилогарифм Li_2(x) = - \Re \int_0^x ds \log(1-s)/s, `sinc(x)'
-- функция sinc(x) = \sin(\pi x) / (\pi x) для любых x,
-`zeta(x)' - зета функция Римана \zeta(s) =
-\sum_{k=1}^\infty k^{-s} для s!=1, `eta(x)' - эта функция
-\eta(s) = (1-2^{1-s}) \zeta(s) для произвольного s,
-`lp(l,x)' - полином Лежандра P_l(x), (|x|<=1, l>=0),
-`w0(x)', `w1(x)' - функции Ламберта W. Функции
-W(x) определены как решение уравнения W
-\exp(W) = x.
-
-   Экспоненциальные интегралы: `ci(x)' -
-cos-интеграл Ci(x) = \int_0^x dt \cos(t)/t, `si(x)' -
-sin-интеграл Si(x) = \int_0^x dt \sin(t)/t, `erf(x)' -
-функция ошибки erf(x) = (2/\sqrt(\pi)) \int_0^x dt
-\exp(-t^2), `ei(x)' - интеграл Ei(x) := - PV(\int_{-x}^\infty
-dt \exp(-t)/t) (где PV обозначает главное
-значение), `e1(x)' - интеграл E_1(x) := Re
-\int_1^\infty dt \exp(-xt)/t , `e2(x)' - интеграл E_2(x) := Re
-\int_1^\infty dt \exp(-xt)/t^2, `ei3(x)' - интеграл Ei_3(x) =
-\int_0^x dt \exp(-t^3) для x>=0.
-
-   Функции Бесселя: `j(nu,x)' - функция
-Бесселя первого рода, `y(nu,x)' - функция
-Бесселя второго рода, `i(nu,x)' -
-модифицированная функция Бесселя
-первого рода, `k(nu,x)' - модифицированная
-функция Бесселя второго рода.
-
-   Эллиптические интегралы: `ee(k)' -
-полный эллиптический интеграл E(k) =
-E(\pi/2, k), `ek(k)' - полный эллиптический
-интеграл K(k) = F(\pi/2, k), `e(phi,k)' -
-эллиптический интеграл E(\phi,k) = \int_0^\phi dt
-\sqrt((1 - k^2 \sin^2(t))), `f(phi,k)' - эллиптический
-интеграл F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2
-\sin^2(t))).
-
-   Функции Якоби: `sn(u,m)', `cn(u,m)', `dn(u,m)',
-`sc(u,m)', `sd(u,m)', `ns(u,m)', `cs(u,m)', `cd(u,m)', `nc(u,m)',
-`ds(u,m)', `dc(u,m)', `nd(u,m)'.
-
-   Некоторые из функций могут быть
-недоступны если флаг NO_GSL был определен
-при компиляции библиотеки MathGL.
-
-   При разборе формул нет различия
-между верхним и нижним регистром. Если
-аргумент лежит вне области
-определения функции, то возвращается
-NaN.
-
-
-File: mgl_ru.info,  Node: Graphics setup,  Next: Axis settings,  Prev: General concepts,  Up: MGL interface
-
-1.2 Настройка графика
-=====================================
-
-Команды в этой группе влияют на вид
-всего рисунка. Соответственно они
-должны располагаться _перед_ вызовом
-функций непосредственно рисующих
-графики.
-
-* Menu:
-
-* Transparency ::
-* Lighting ::
-* Fog ::
-* Default sizes ::
-* Zooming ::
-* Cutting ::
-* Other settings ::
-
-
-File: mgl_ru.info,  Node: Transparency,  Next: Lighting,  Up: Graphics setup
-
-1.2.1 Прозрачность
-------------------------------
-
-Эти команды настраивают тип и степень
-прозрачности поверхностей. Главной
-является функция *note alpha::, которая
-включает/выключает прозрачность для
-всех графиков, созданных после вызова
-*note alpha::. Функция *note alphadef::
-устанавливает величину alpha-канала по
-умолчанию. Прозрачность можно
-выключить для отдельного графика с
-помощью *note transparent::. Наконец, функция
-*note transptype:: задает тип прозрачности. См.
-раздел *note Transparent surface sample::, для
-примеров кода и графика.
-
- -- Команда MGL: alpha `[val=on]'
-     Включает/выключает прозрачность
-     для _всего_ рисунка. По умолчанию
-     прозрачность выключена.
-     Используйте `transparent off' для
-     конкретного графика для выключения
-     прозрачности.
-   
- -- Команда MGL: alphadef `val'
-     Задает значение прозрачности по
-     умолчанию для всех графиков.
-     Начальное значение 0.5.
-   
- -- Команда MGL: transparent `val'
-     Временно включает/возвращает
-     прозрачность графиков.
-   
- -- Команда MGL: transptype `val'
-     Задает тип прозрачности. Обычная
-     прозрачность (`0') - "закрытые" объекты
-     видны меньше чем закрывающие.
-     "Стеклянная" прозрачность (`1') -
-     закрытые и закрывающие объекты
-     единообразно ослабляют
-     интенсивность света (по RGB каналам).
-     "Ламповая" прозрачность (`2') -
-     закрытые и закрывающие объекты
-     являются источниками
-     дополнительного освещения
-     (рекомендую установить `alphadef 0.3' или
-     меньше в этом случае). *Note Normal
-     transparency::, *note Glass-like transparency::, *note Lamp-like
-     transparency::.
-
-
-File: mgl_ru.info,  Node: Lighting,  Next: Fog,  Prev: Transparency,  Up: Graphics setup
-
-1.2.2 Освещение
-------------------------
-
-Эти функции настраивают освещение
-графика. Главная функция *note light::
-включает/выключает освещение графиков
-построенных после ее вызова. MathGL
-поддерживает до 10 независимых
-источников света. Положение, цвет,
-яркость каждого источника света можно
-задавать по отдельности. По умолчанию
-включен только первый (с порядковым
-номером `0') источник света белого
-цвета, расположенный сверху.
-
- -- Команда MGL: light `[val=on]'
-     Включает/выключает освещение
-     графика. По умолчанию освещение
-     выключено.
-
- -- Команда MGL: light `n val'
-     Включает/выключает N-ый источник
-     света.
-
- -- Команда MGL: light `n xpos ypos zpos' ['col'='w' `br=0.5']
-     Добавляет источник света с номером N
-     в положение {XPOS, YPOS, ZPOS} с цветом COL и
-     яркостью BR, которая должна быть в
-     диапазоне [0,1].
-
- -- Команда MGL: ambient `val'
-     Задает яркость рассеянного
-     освещения. Значение должно быть в
-     диапазоне [0,1].
-
-
-File: mgl_ru.info,  Node: Fog,  Next: Default sizes,  Prev: Lighting,  Up: Graphics setup
-
-1.2.3 Туман
-----------------
-
- -- Команда MGL: fog `val [dz=0.25]'
-     Имитирует туман на графике. Туман
-     начинается на относительном
-     расстоянии DZ от точки обзора и его
-     плотность растет экспоненциально
-     вглубь по закону ~1-exp(-d*z). Здесь _z_ -
-     нормализованная на 1 глубина
-     графика. Если D=`0' то туман
-     отсутствует. См. раздел *note Surface in fog
-     sample::, для примеров кода и графика.
-
-
-File: mgl_ru.info,  Node: Default sizes,  Next: Zooming,  Prev: Fog,  Up: Graphics setup
-
-1.2.4 Базовые размеры
------------------------------------
-
-Эти команды задают величины
-большинства параметров графика,
-включая размеры маркеров, стрелок,
-толщину линий и т.д. Как и любые другие
-настройки, они подействуют только на
-графики созданные после изменения
-настроек.
-
- -- Команда MGL: barwidth `val'
-     Относительный размер
-     прямоугольников в `bars, barh, boxplot'.
-     Значение по умолчанию `0.7'.
-
- -- Команда MGL: marksize `val'
-     Размер маркеров для *note 1D plotting::.
-     Значение по умолчанию `1'.
-
- -- Команда MGL: arrowsize `val'
-     Размер стрелок для *note 1D plotting::, линий
-     и кривых (*note Primitives drawing::). Значение
-     по умолчанию `1'.
-
- -- Команда MGL: linewidth `val'
-     Базовая толщина линий. Значения <1
-     игнорируются. Для значений >1
-     реальная толщина получается
-     перемножением указанной ширины
-     линии на данное значение.
-     Увеличение ширины линии актуально
-     для больших растровых рисунков.
-     Значение по умолчанию `1'.
-
- -- Команда MGL: ticklen `val' [`stt=1']
-     Относительная длина меток осей
-     координат. Значение по умолчанию
-     `0.1'. Параметр STT>0 задает
-     относительную длину подметок,
-     которые в `sqrt(1+stt)' раз меньше.
-
- -- Команда MGL: tickstl 'stl' ['sub'="]
-     Стиль меток (STL) и подметок (SUB) осей
-     координат. Если `stl=''', то
-     используется стиль по умолчанию (`k'
-     или `w' в зависимости от типа
-     прозрачности). Если `sub=''', то
-     используется стиль меток (т.е. STL).
-
-
-File: mgl_ru.info,  Node: Zooming,  Next: Cutting,  Prev: Default sizes,  Up: Graphics setup
-
-1.2.5 Масштабирование
-------------------------------------
-
-Эти команды управляют
-масштабированием всего рисунка (*note
-zoom::) или отдельной картинки (*note
-plotfactor::). Обычно эти функции
-используются для удаления пустого
-места вокруг графиков.
-
- -- Команда MGL: plotfactor `val'
-     Масштаб картинки (значение должно
-     быть больше 1). Не рекомендуется
-     устанавливать значения меньше 1.5.
-     Это аналог *note zoom::, но применяется
-     только к конкретной картинке,
-     заданной *note inplot::. Используйте ноль
-     для включения автоматического
-     масштабирования.
-
- -- Команда MGL: zoom `x1 y1 x2 y2'
-     Масштабирует весь рисунок. После
-     вызова функции текущий график будет
-     очищен и в дальнейшем рисунок будет
-     содержать только область [x1,x2]*[y1,y2]
-     от исходного рисунка. Координаты X1,
-     X2, Y1, Y2 меняются в диапазоне от 0 до 1.
-     Внимание! эти настройки не могут
-     быть переписаны никакими другими
-     функциями. Используйте `zoom 0 0 1 1' для
-     перехода в масштаб по умолчанию.
-
-
-File: mgl_ru.info,  Node: Cutting,  Next: Other settings,  Prev: Zooming,  Up: Graphics setup
-
-1.2.6 Обрезание
-------------------------
-
-Эти команды задают условия когда точка
-будет исключена (вырезана) из
-рисования. Замечу, что все точки со
-значением(-ями) `nan' по одной из
-координат или амплитуде автоматически
-исключаются из рисования.
-
- -- Команда MGL: cut `val'
-     Задает обрезание точек за пределами
-     осей координат. Если `on' то такие
-     точки исключаются из рисования (это
-     по умолчанию) иначе они
-     проецируются на ограничивающий
-     прямоугольник.
-
- -- Команда MGL: cut `x1 y1 z1 x2 y2 z2'
-     Задает границы параллелепипеда
-     внутри которого точки не рисуются.
-     Если границы одинаковы (переменные
-     равны), то параллелепипеда
-     считается пустым. См. раздел *note
-     CutMinMax sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: cut 'cond'
-     Задает условие обрезания по формуле
-     COND. Это условие исключает точки из
-     рисования если результат
-     вычисления формулы не равен нулю.
-     Установите аргумент `''' для
-     выключения условия обрезания. См.
-     раздел *note CutOff sample::, для примеров
-     кода и графика.
-
-
-File: mgl_ru.info,  Node: Other settings,  Prev: Cutting,  Up: Graphics setup
-
-1.2.7 Прочие настройки
--------------------------------------
-
- -- Команда MGL: font 'fnt' [`val=6']
-     Задает стиль и размер шрифта (*note Text
-     printing::). Вначале используется `rC' -
-     прямой шрифт с выравниванием по
-     центру. По умолчанию размер
-     подписей оси координат в 1.4 раза
-     больше.
-
- -- Команда MGL: rotatetext `val'
-     Включает/выключает вращение меток и
-     подписей осей координат вдоль оси.
-     Начальное значение `on'.
-
- -- Команда MGL: palette 'colors'
-     Задает палитру как
-     последовательность цветов.
-     Значение по умолчанию `"Hbgrcmyhlnqeup"',
-     что соответствует цветам: темно
-     серый `H', синий `b', зеленый `g', красный
-     `r', голубой `c', малиновый `m', желтый `y',
-     серый `h', сине-зеленый  `l',
-     небесно-голубой `n', оранжевый `q',
-     желто-зеленый `e', сине-фиолетовый `u',
-     фиолетовый `p'. Палитра в основном
-     используется в 1D графиках (*note 1D
-     plotting::) для кривых с неопределенным
-     стилем линии.
-
- -- Команда MGL: meshnum `num'
-     Задает ориентировочное число линий
-     в *note mesh::, *note fall::, *note grid::, число
-     стрелок (штрихов) в *note vect::, *note dew:: и
-     число ячеек в *note cloud::. По умолчанию
-     (=0) рисуются все линии, стрелки,
-     ячейки.
-
- -- Команда MGL: axialdir 'dir'
-     Задает ось вращения для *note axial::, *note
-     torus::. По умолчанию это 'z'.
-
-
-File: mgl_ru.info,  Node: Axis settings,  Next: Transformation matrix,  Prev: Graphics setup,  Up: MGL interface
-
-1.3 Параметры осей координат
-==================================================
-
-Этот большой набор команд определяет
-вид осей и меток координат. Перед
-построением для каждой точки
-выполняются 3 преобразования: сначала
-определяется возможность рисования
-точки (*note Cutting::), далее применяются
-формулы перехода к криволинейным
-координатам и наконец точка
-отображается.
-
- -- Команда MGL: axis `x1 y1 x2 y2'
- -- Команда MGL: axis `x1 y1 z1 x2 y2 z2'
- -- Команда MGL: ranges `x1 x2 y1 y2 [z1=0 z2=0]'
-     Задает диапазон изменения
-     координат. Если минимальное и
-     максимальное значение координаты
-     равны, то они игнорируются по
-     данному направлению. Также
-     устанавливает размер цветовой
-     шкалы, аналогично команде  `caxis z1 z2'.
-     Начальные диапазоны равны [-1, 1].
-
- -- Команда MGL: axis 'fx' 'fy' ['fz'=" 'fa'="]
-     Задает формулы перехода к
-     криволинейным координатам. Каждая
-     строка является математическим
-     выражением, зависящим от старых
-     координат `x', `y', `z' и `a' или `c' для
-     цветовой шкалы. Например, для
-     цилиндрических координат будет `axis
-     'x*cos(y)' 'x*sin(y)' 'z''. Для удаления формул
-     соответствующий параметр должен
-     быть пустым `'''. Использование
-     формул преобразования слегка
-     замедляет программу, т.е.. `axis '' '' '''
-     быстрее чем `axis '1*x' '1*y' '1*z''. Параметр
-     FA задает аналогичную формулу для
-     цветовой шкалы. *Note Textual formulas::.
-
- -- Команда MGL: axis `how'
-     Устанавливает одну из
-     предопределенных систем
-     криволинейных координат в
-     зависимости от параметра HOW: `0' -
-     декартова система (нет
-     преобразования координат, наиболее
-     быстрая); `1' - полярные координаты
-     x_n=x*cos(y),y_n=x*sin(y), z_n=z; `2' - сферические
-     координаты x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z),
-     z_n=x*cos(y); `3' - параболические
-     координаты x_n=x*y, y_n=(x*x-y*y)/2, z_n=z; `4' -
-     Paraboloidal coordinates x_n=(x*x-y*y)*cos(z)/2,
-     y_n=(x*x-y*y)*sin(z)/2, z_n=x*y; `5' - Oblate coordinates
-     x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z),
-     z_n=sinh(x)*sin(y); `6' - Prolate coordinates
-     x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z),
-     z_n=cosh(x)*cos(y); `7' - эллиптические
-     координаты x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y),
-     z_n=z; `8' - тороидальные координаты
-     x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)),
-     y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y));
-     `9' - бисферические координаты
-     x_n=sin(y)*cos(z)/(cosh(x)-cos(y)),
-     y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y));
-     `10' - биполярные координаты
-     x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z.
-
- -- Команда MGL: caxis `z1 z2'
-     Задает масштаб цветовой шкалы
-     (c-координаты). Эти значения
-     используются для определения цвета
-     поверхностей и прочих 2D и 3D
-     графиков. Начальный диапазон равен
-     [-1, 1].
-
- -- Команда MGL: origin `x0 y0 [z0=nan]'
-     Задает центр пересечения осей
-     координат. Если одно из значений
-     равно `nan', то выбрается оптимальное
-     положение осей координат по этому
-     направлению.
-
- -- Команда MGL: ternary `val'
-     Задает рисование треугольных (Ternary)
-     осей координат. Это специальный тип
-     графика для 3 зависимых координат
-     (компонент) A, B, C таких, что A+B+C=1. MathGL
-     использует только 2 независимые
-     координаты A=x и B=y поскольку их
-     достаточно для построения всех
-     графиков. При этом третья
-     координата z является независимым
-     параметром для построения линий
-     уровня, поверхностей и т.д. См.
-     раздел *note Ternary plot sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: xrange dat [`add=off fact=0']
- -- Команда MGL: yrange dat [`add=off fact=0']
- -- Команда MGL: zrange dat [`add=off fact=0']
- -- Команда MGL: crange dat [`add=off fact=0']
-     Задает диапазон изменения x-,y-,z-,c-
-     координат как минимальное и
-     максимальное значение массива DAT.
-     Параметр ADD указывает добавлять
-     новый диапазон к существующему или
-     заменять его. Параметр FACT
-     дополнительно расширяет диапазон
-     на величину (MAX-MIN)*FACT.
-
- -- Команда MGL: xrange `x1 x2'
- -- Команда MGL: yrange `x1 x2'
- -- Команда MGL: zrange `x1 x2'
- -- Команда MGL: crange `x1 x2'
-     Задает диапазон изменения x-,y-,z-,c-
-     координат. См. также *note axis::.
-
- -- Команда MGL: xtick `val [sub=0 org=nan]'
- -- Команда MGL: ytick `val [sub=0 org=nan]'
- -- Команда MGL: ztick `val [sub=0 org=nan]'
- -- Команда MGL: ctick `val'
-     Задает шаг меток осей VAL, число
-     подметок NS и начальное положение
-     меток ORG. Переменная VAL задает шаг
-     меток (если положительна) или их
-     число на оси (если отрицательна).
-     Нулевое значение задает
-     логарифмические метки. Если ORG=`NAN',
-     то используется значение из *note origin::.
-
- -- Команда MGL: xtick 'templ'
- -- Команда MGL: ytick 'templ'
- -- Команда MGL: ztick 'templ'
- -- Команда MGL: ctick 'templ'
-     Задает шаблоны для меток вдоль
-     x-,y-,z-оси или colorbar. Шаблон может
-     содержать и символы TeX. Если XTT, YTT, ZTT,
-     CTT=`''', то используется шаблон по
-     умолчанию (в простейшем случае `%.2g').
-     Установка шаблона выключает
-     автоматическое улучшение вида
-     меток.
-
- -- Команда MGL: xtick `val1' 'lbl1' [`val2' 'lbl2' ...]
- -- Команда MGL: ytick `val1' 'lbl1' [`val2' 'lbl2' ...]
- -- Команда MGL: ztick `val1' 'lbl1' [`val2' 'lbl2' ...]
-     Задает явное положение VAL и подписи
-     LBL для меток вдоль оси. Метки могут
-     содержать и символы TeX.
-
- -- Команда MGL: adjust ['dir'='xyzc']
-     Автоматически задает шаг меток
-     осей, число подметок и начальное
-     положение меток для осей координат
-     DIR в виде наиболее удобном для
-     человека.
-
-
-File: mgl_ru.info,  Node: Transformation matrix,  Next: Export to file,  Prev: Axis settings,  Up: MGL interface
-
-1.4 Матрица преобразования
-===============================================
-
-Эти команды контролируют где и как
-график будет расположен. Существует
-определенный порядок вызова этих
-функций для лучшего вида графика.
-Вначале должны вызываться команды *note
-subplot:: или *note inplot:: для указания
-местоположения вывода. После них -
-команды вращения *note rotate:: и сжатия *note
-aspect::. И наконец любые другие функции
-для рисования графика. Вместо вращения
-графика можно вызвать команды *note
-columnplot:: для расположения графиков в
-столбец одного над другим или *note
-stickplot:: для расположения в линейку.
-
- -- Команда MGL: subplot `nx ny m [dx=0 dy=0]'
-     Помещает последующий вывод в M-ую
-     ячейку сетки размером NX*NY от всего
-     рисунка. Функция сбрасывает матрицу
-     трансформации (повороты и сжатие
-     графика) и должна вызываться первой
-     для создания "подграфика". С
-     эстетической точки зрения не
-     рекомендуется вызывать эту функцию
-     с различными (или не кратными)
-     размерами сетки. Ячейка может быть
-     дополнительно сдвинута
-     относительно своего обычного
-     положения на относительный размер
-     DX, DY.
-
- -- Команда MGL: subplot `nx ny m' 'style'
-     Аналогично предыдущему, но место
-     для осей/colorbar резервируется только
-     если строка STYLE содержит: `L' или `<' - с
-     левого края, `R' или `>' - с правого
-     края, `A' или `^' - с верхнего края, `U'
-     или `_' - с нижнего края.
-
- -- Команда MGL: inplot `x1 x2 y1 y2 [rel=off]'
-     Помещает последующий вывод в
-     прямоугольную область [X1, X2]*[Y1, Y2]
-     (исходный размер [0,1]*[0,1]). Эта функция
-     позволяет поместить график в
-     произвольную область рисунка. Если
-     параметр REL=`on', то используется
-     позиция относительно текщего *note
-     subplot:: (или *note inplot:: с REL=`off'). Функция
-     сбрасывает матрицу трансформации
-     (повороты и сжатие графика) и должна
-     вызываться первой для создания
-     "подграфика".
-
- -- Команда MGL: columnplot `num ind [d=0]'
-     Помещает последующий вывод в IND-ую
-     строку столбца из NUM строк.
-     Положение столбца выбирается
-     относительно последнего вызова *note
-     subplot:: (или *note inplot:: с REL=`off'). Параметр D
-     задает дополнительный зазор между
-     строк. См. раздел *note ColumnPlot sample::, для
-     примеров кода и графика.
-
- -- Команда MGL: stickplot `num ind tet phi'
-     Помещает последующий вывод в IND-ую
-     ячейку "бруска" из NUM ячеек. При этом
-     сам брусок повернут на углы TET, PHI.
-     Положение выбирается относительно
-     последнего вызова *note subplot:: (или *note
-     inplot:: с REL=`off'). См. раздел *note StickPlot
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: rotate `tetz tetx [tety=0]'
-     Вращает систему координат
-     относительно осей {x, z, y}
-     последовательно на углы TETX, TETZ, TETY.
-
- -- Команда MGL: rotate `tet x y z'
-     Вращает систему координат
-     относительно вектора {X, Y, Z} на угол
-     TET.
-
- -- Команда MGL: aspect `ax ay [az=1]'
-     Устанавливает соотношение размеров
-     осей в отношении AX:AY:AZ. Для лучшего
-     вида следует вызывать после функции
-     *note rotate::.
-
- -- Команда MGL: perspective `val'
-     Добавляет (включает) перспективу
-     для графика. Параметр val ~ 1/z_{eff} \in [0,1).
-     По умолчанию (`val=0') перспектива
-     отключена.
-
-
-File: mgl_ru.info,  Node: Export to file,  Next: Primitives drawing,  Prev: Transformation matrix,  Up: MGL interface
-
-1.5 Экспорт в файл
-==============================
-
- -- Команда MGL: write 'fname' [`solid=off']
-     Экспортирует текущий кадр в файл
-     'fname' (тип определяется по
-     расширению). Параметр SOLID задает
-     вывод картинки на текущем фоне
-     (обычно белом) или полупрозрачной.
-     Если 'fname'=", то используется имя
-     `frame####.jpg', где `####' - текущий номер
-     кадра.
-
- -- Команда MGL: setsize `w h'
-     Изменяет размер картинки в
-     пикселях. Функция должна вызываться
-     *перед* любыми функциями построения
-     потому что полностью очищает
-     содержимое рисунка. В некоторых
-     программах исполнение этой команды
-     может запрещено.
-
-
-File: mgl_ru.info,  Node: Primitives drawing,  Next: Text printing,  Prev: Export to file,  Up: MGL interface
-
-1.6 Рисование примитивов
-===========================================
-
-Эти команды рисуют рисуют простые
-объекты типа линий, точек, сфер, капель,
-конусов, и т.д.
-
- -- Команда MGL: clf
-     Очищает рисунок и заполняет его
-     цветом по умолчанию (обычно белым).
-
- -- Команда MGL: ball `x y' ['col'='r']
- -- Команда MGL: ball `x y z' ['col'='r']
-     Рисует точку (шарик) с координатами
-     {X, Y, Z} и цветом COL.
-
- -- Команда MGL: line `x1 y1 x2 y2' ['stl'="]
- -- Команда MGL: line `x1 y1 z1 x2 y2 z2' ['stl'="]
-     Рисует геодезическую линию
-     (декартовых координатах - прямую) из
-     точки {X1,Y1,Z1} в {X2,Y2,Z2} использую стиль
-     линии STL. Кривая рисуется даже если
-     часть ее лежит вне диапазона осей
-     координат.
-
- -- Команда MGL: curve `x1 y1 dx1 dy1 x2 y2 dx2 dy2' ['stl'="]
- -- Команда MGL: curve `x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2
-          dz2' ['stl'="]
-     Рисует кривую Безье из точки {X1,Y1,Z1} в
-     {X2,Y2,Z2} использую стиль линии STL.
-     Касательные в точках
-     пропорциональны {DX1,DY1,DZ1}, {DX2,DY2,DZ2}.
-     Кривая рисуется даже если часть ее
-     лежит вне диапазона осей координат.
-
- -- Команда MGL: facex `x0 y0 z0 wy wz' ['stl'=" `d1=0 d2=0']
- -- Команда MGL: facey `x0 y0 z0 wx wz' ['stl'=" `d1=0 d2=0']
- -- Команда MGL: facez `x0 y0 z0 wx wy' ['stl'=" `d1=0 d2=0']
-     Рисует закрашенный прямоугольник
-     (грань) перпендикулярно оси [x,y,z] в
-     точке {X0, Y0, Z0} цветом STL и шириной WX, WY,
-     WZ вдоль соответствующего
-     направления. При этом цвет может
-     быть один для всей грани, или
-     различным для разных вершин если
-     указаны все 4 цвета (полезно для
-     градиента цвета, например `wwrr').
-     Параметры D1!=0, D2!=0 задают
-     дополнительный сдвиг последней
-     точки (т.е. рисуют четырехугольник).
-     Грань будет нарисована даже если
-     часть ее лежит вне диапазона осей
-     координат.
-
- -- Команда MGL: sphere `x0 y0 r' ['col'='r']
- -- Команда MGL: sphere `x0 y0 z0 r' ['col'='r']
-     Рисует сферу радиуса R с центром в
-     точке {X, Y, Z} цветом STL.
-
- -- Команда MGL: drop `x0 y0 dx dy r' ['col'='b' `sh=1 asp=1']
- -- Команда MGL: drop `x0 y0 z0 dx dy dz r' ['col'='b' `sh=1
-          asp=1']
-     Рисует каплю радиуса R в точке {X0,Y0,Z0}
-     вытянутую вдоль направления {DX,DY,DZ}
-     цветом COL. Параметр SH определяет
-     степень вытянутости: `0' - сфера, `1' -
-     классическая капля. Параметр ASP
-     определяет относительную ширину
-     капли (аналог "эллиптичности" для
-     сферы). См. раздел *note Drops sample::, для
-     примеров кода и графика.
-
- -- Команда MGL: cone `x1 y1 z1 x2 y2 z2 r1' [`r2=-1' 'stl'="
-          `edge=off']
-     Рисует трубу (или усеченный конус
-     если EDGE=`off') между точками {X1,Y1,Z1},
-     {X2,Y2,Z2} с радиусами на концах R1, R2.
-     Если R2<0, то полагается R2=R1. Цвет
-     конуса задается строкой STL.
-
- -- Команда MGL: rect `x1 y1 x2 y2' ['st'="]
- -- Команда MGL: rect `x1 y1 z1 x2 y2 z2' ['st'="]
-     Рисует закрашенный прямоугольник
-     (грань) с противоположными
-     вершинами в точках {X1,Y1,Z1}, {X2,Y2,Z2}
-     цветом STL. При этом цвет может быть
-     один для всей грани, или различным
-     для разных вершин если указаны все 4
-     цвета (полезно для градиента цвета,
-     например `wwrr'). Грань будет
-     нарисована даже если часть ее лежит
-     вне диапазона осей координат.
-
-
-File: mgl_ru.info,  Node: Text printing,  Next: Axis and Colorbar,  Prev: Primitives drawing,  Up: MGL interface
-
-1.7 Вывод текста
-===========================
-
-Команды для вывода текста позволяют
-вывести строку текста в произвольном
-месте рисунка, в произвольном
-направлении и вдоль произвольной
-кривой. Можно использовать
-произвольное начертание шрифта и
-многие ТеХ-ие команды (детальнее *note Font
-styles::). Аргумент SIZE определяет размер
-текста: размер шрифта если положителен
-или относительный размер (=-SIZE*FONTSIZE)
-если отрицателен.
-
-   Параметры шрифта задаются строкой,
-которая может содержать символы стиля
-(`rbiwou') и/или выравнивания (`LRC'). Также
-строка может содержать символы цвета
-`wkrgbcymhRGBCYMHW' (*note Line styles::) после символа
-`:'. Стили шрифта: `r' - прямой, `i' - курсив,
-`b' - жирный, `w' - контурный, `o' -
-надчеркнутый, `u' - подчеркнутый. По
-умолчанию используется прямой шрифт.
-Типы выравнивания: `L' - по левому краю
-(по умолчанию), `C' - по центру, `R' - по
-правому краю. Например, строка `iC:b'
-соответствует курсиву синего цвета с
-выравниванием по центру. По умолчанию
-используются параметры, определенные
-командой *note font::.
-
-   Если строка содержит символы `aA', то
-текст выводится в абсолютных
-координатах (полагаются в диапазоне
-[0,1]). При этом используются координаты
-относительно рисунка (если указано `A')
-или относительно последнего *note
-subplot::/*note inplot:: (если указано `a').
-
- -- Команда MGL: text `x y' 'text' ['fnt'=" `size=-1.4']
- -- Команда MGL: text `x y z' 'text' ['fnt'=" `size=-1.4']
-     Выводит строку TEXT от точки {X,Y,Z}
-     шрифтом FNT и размером SIZE.
-
- -- Команда MGL: text `x y dx dy' 'text' [`size=-1.4']
- -- Команда MGL: text `x y z dx dy dz' 'text' [`size=-1.4']
-     Выводит строку TEXT от точки {X,Y,Z}
-     вдоль направления {DX,DY,DZ} шрифтом FNT и
-     размером SIZE.
-
- -- Команда MGL: text ydat 'text' ['fnt'=" `size=-1 zval=nan']
- -- Команда MGL: text xdat ydat 'text' ['fnt'=" `size=-1
-          zval=nan']
- -- Команда MGL: text xdat ydat zdat 'text' ['fnt'=" `size=-1']
-     Выводит строку TEXT вдоль кривой {XDAT[i],
-     YDAT[i], ZDAT[i]} шрифтом FONT. Строка FONT
-     может содержать символы: `t' для
-     вывода текста под кривой (по
-     умолчанию), или `T' для вывода текста
-     над кривой. Если массив XDAT не указан,
-     то используется массив со
-     значениями равно распределенными
-     вдоль оси x. Если массив ZDAT не указан,
-     то используется ZDAT[i] = ZVAL. См. раздел
-     *note Text sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: title 'text' ['fnt'=" `size=-2']
-     Выводит строку TEXT как заголовок
-     (сверху рисунка). Может
-     использоваться в любом месте (даже
-     внутри *note subplot::).
-
- -- Команда MGL: fgets `x y' 'fname' [`n=0' 'fnt'=" `size=-1.4']
- -- Команда MGL: fgets `x y z' 'fname' [`n=0' 'fnt'="
-          `size=-1.4']
-     Выводит N-ую строку файла FNAME от
-     точки {X,Y,Z} шрифтом FNT и размером SIZE.
-
-
-File: mgl_ru.info,  Node: Axis and Colorbar,  Next: Legend,  Prev: Text printing,  Up: MGL interface
-
-1.8 Оси и Colorbar
-======================
-
-Эти команды рисуют объекты для
-"измерения" типа осей координат,
-цветовой таблицы (colorbar), сетку по осям,
-обрамляющий параллелепипед и подписи
-по осям координат. См. также *note Axis
-settings::.
-
- -- Команда MGL: axis ['dir'='xyz' `adjust=off']
-     Рисует оси координат и метки на них
-     (*note Axis settings::) в направлениях,
-     указанных строкой DIR. Если строка
-     содержит символ `_', то подписи меток
-     отображаться не будут. Шрифт
-     подписей определяется командой *note
-     font::. Метки будут "подогнаны" если
-     ADJUST=`on' (с помощью вызова `adjust 'dir'').
-
- -- Команда MGL: colorbar ['sch'=" `pos=0']
-     Рисует полосу соответствия цвета и
-     числовых значений (colorbar) для
-     цветовой схемы SCH (используется
-     текущая для `sch=''') с краю от графика.
-     Параметр POS задает местоположение:
-     `0' - справа (по умолчанию), `1' - слева,
-     `2' - сверху, `3' - снизу. Если строка SCH
-     содержит `<>^_', то параметр POS
-     определяется как: `pos=0' для `>'
-     (справа), `pos=1' для `<' (слева), `pos=2' для
-     `^' (сверху), `pos=3' для `_' (снизу). Если
-     строка содержит `A', то используются
-     абсолютные координаты
-     (относительно рисунка). См. раздел
-     *note Dens sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: colorbar vdat ['sch'=" `pos=0']
-     Аналогично предыдущему, но для
-     цветовой схемы без сглаживания с
-     заданными значениями VDAT. См. раздел
-     *note ContD sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: colorbar 'sch' `pos x y w h'
-     Аналогично первому, но в
-     произвольном месте графика {X, Y}
-     (полагаются в диапазоне [0,1]).
-     Параметры W, H задают относительную
-     ширину и высоту colorbar.
-
- -- Команда MGL: grid ['dir'='xyz' 'pen'='B']
-     Рисует линии сетки в направлениях
-     перпендикулярным DIR. Шаг сетки такой
-     же как у меток осей координат. Стиль
-     линий задается параметром PEN (по
-     умолчанию - сплошная темно синяя
-     линия `B-').
-
- -- Команда MGL: box ['stl'='k' `ticks=on']
-     Рисует ограничивающий
-     параллелепипед цветом 'stl'. При `ticks=on'
-     рисуются метки в соответствии с
-     текущими настройками осей
-     координат *note axis::.
-
- -- Команда MGL: xlabel 'text' [`pos=0 size=-1.4 shift=0']
- -- Команда MGL: ylabel 'text' [`pos=0 size=-1.4 shift=0']
- -- Команда MGL: zlabel 'text' [`pos=0 size=-1.4 shift=0']
- -- Команда MGL: tlabel 'text' [`pos=0 size=-1.4 shift=0']
-     Выводит подпись TEXT для x-,y-,z-,t-оси
-     (где `t' - "тернарная" ось t=1-x-y).
-     Параметр POS задает положение
-     подписи: при POS=0 - по центру оси, при
-     POS>0 - около максимальных значений,
-     при POS<0 - около минимальных значений.
-     Параметр SIZE задает размер шрифта (по
-     умолчанию в 1.4 раза больше чем у
-     меток). *Note Text printing::.
-
-
-File: mgl_ru.info,  Node: Legend,  Next: 1D plotting,  Prev: Axis and Colorbar,  Up: MGL interface
-
-1.9 Легенда
-==================
-
-Эти команды обеспечивают рисование
-легенды графика (полезно для *note 1D
-plotting::). Запись в легенде состоит из
-двух строк: одна для стиля линии и
-маркеров, другая с текстом описания (с
-включенным разбором TeX-их команд),
-накапливаемые во внутренние массивы с
-помощью команды *note addlegend:: или опции *note
-legend::. Положение легенды можно задать
-автоматически или вручную. Параметры
-FONT и SIZE задают стиль и размер шрифта.
-Параметр LLEN задает относительную
-ширину примера линии. Ели стиль линии
-пустой, то соответствующий текст
-печатается без отступа. Если строка FONT
-содержит символ `A', то координаты
-легенды считаются относительно
-картинки (а не текущего subplot). См. раздел
-*note Legend sample::, для примеров кода и
-графика.
-
- -- Команда MGL: legend [`pos=3' 'fnt'='rL' `size=-1 llen=0.1']
-     Рисует легенду из накопленных
-     записей шрифтом FNT размером SIZE.
-     Параметр POS задает положение
-     легенды: `0' - в нижнем левом углу, `1' -
-     нижнем правом углу, `2' - верхнем
-     левом углу, `3' - верхнем правом углу
-     (по умолчанию).
-
- -- Команда MGL: legend `x y' ['fnt'='rL' `size=-1 llen=0.1']
-     Рисует легенду из накопленных
-     записей шрифтом FONT размером SIZE.
-     Положение легенды задается
-     параметрами X, Y, которые полагаются
-     нормированными в диапазоне [0,1].
-
- -- Команда MGL: addlegend 'text' 'stl'
-     Добавляет описание TEXT кривой со
-     стилем STL (*note Line styles::) во внутренний
-     массив записей легенды.
-     Максимальное число записей 100.
-
- -- Команда MGL: clearlegend
-     Очищает внутренний массив записей
-     легенды.
-
- -- Команда MGL: legendbox `val'
-     Включает/выключает рисование
-     прямоугольника вокруг легенды. По
-     умолчанию (=`on') прямоугольник
-     рисуется.
-
- -- Команда MGL: legendmarks `val'
-     Задает число маркеров в легенде. По
-     умолчанию используется 1 маркер.
-
-
-File: mgl_ru.info,  Node: 1D plotting,  Next: 2D plotting,  Prev: Legend,  Up: MGL interface
-
-1.10 1D графики
-======================
-
-Эти команды строят графики для
-одномерных (1D) массивов. Одномерными
-считаются массивы, зависящие только от
-одного параметра (индекса) подобно
-кривой в параметрической форме
-{x(i),y(i),z(i)}, i=1...n. Есть 5 основных типов 1D
-графиков: линия (*note plot::), линия с
-заполнением (*note area::), ступеньки (*note
-step::), прямоугольники (*note bars::, *note barh::) и
-вертикальные линии (*note stem::). Все эти
-типы графиков имеют похожий интерфейс.
-Есть версии для рисования в
-пространстве и на плоскости. В
-последнем случае имеется возможность
-использования только одного массива.
-Стиль линии и маркеров указывается
-строковой переменной. Если она равна
-`'''. Кроме того, есть еще несколько
-типов графиков для одномерных
-массивов, имеющих другой интерфейс и
-вид: поверхность вращения кривой (*note
-torus::), диаграмма (*note chart::), размер ошибки
-(*note error::), маркеры переменного размера
-(*note mark::), трубками (*note tube::) и т.д. См.
-раздел *note 1D plot sample::, для примеров кода
-и графика.
-
-   График рисуется для каждой строки
-если один из массивов матрица. Размер
-по 1-ой координате *должен быть
-одинаков* для всех массивов
-`xdat.nx=ydat.nx=zdat.nx'. Если массив XDAT не
-указан, то используется массив со
-значениями равно распределенными
-вдоль оси x. Если массив ZDAT не указан, то
-используется ZDAT[i] = ZVAL. Строка STL задает
-цвет и стиль линии и маркеров (*note Line
-styles::). По умолчанию (`stl=''') рисуется
-сплошная линия с текущим цветом из
-палитры.
-
- -- Команда MGL: plot ydat ['stl'=" `zval=nan']
- -- Команда MGL: plot xdat ydat ['stl'=" `zval=nan']
- -- Команда MGL: plot xdat ydat zdat ['stl'="]
-     Рисует ломанную линию между точками
-     {X[i], Y[i], Z[i]}. См. также *note area::, *note step::,
-     *note stem::, *note tube::, *note mark::, *note error::, *note
-     belt::, *note tens::. См. раздел *note Plot sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: radar adat ['stl'=" `r=-1']
-     Рисует radar chart, представляющий собой
-     ломанную с вершинами на радиальных
-     линиях (типа ломанной в полярных
-     координатах). График рисуется для
-     каждой строки если один из массивов
-     матрица. Параметр R задает
-     дополнительный сдвиг данных (т.е.
-     используется A+R вместо A). Если `r<0', то
-     `r=max(0, -min(a)'. Если STL содержит символ
-     `#', то также рисуется "сетка"
-     (радиальные линии и круг для R). См.
-     также *note plot::. См. раздел *note Radar sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: tens ydat cdat ['stl'=" `zval=nan']
- -- Команда MGL: tens xdat ydat cdat ['stl'=" `zval=nan']
- -- Команда MGL: tens xdat ydat zdat cdat ['stl'="]
-     Рисует ломанную линию по точкам {X[i],
-     Y[i], Z[i]} с цветом, определяемым
-     массивом C[i] (типа графика
-     натяжений). См. также *note plot::, *note mesh::,
-     *note fall::. См. раздел *note Tens sample::, для
-     примеров кода и графика.
-
- -- Команда MGL: area ydat ['stl'=" `zval=nan']
- -- Команда MGL: area xdat ydat ['stl'=" `zval=nan']
- -- Команда MGL: area xdat ydat zdat ['stl'="]
-     Рисует ломанную линию по точками
-     {XDAT[i], YDAT[i], ZDAT[i]} и закрашивает ее
-     вниз до плоскости осей координат.
-     Можно использовать градиентное
-     закрашивание если число указанных
-     цветов в STL равно удвоенному числу
-     кривых для построения. Если строка
-     содержит символ `a', то линии
-     рисуются одна поверх другой (с
-     суммированием) - того же эффекта
-     можно достичь вызовом `cumsum ydat 'y''
-     перед построением графика. См. также
-     *note plot::, *note bars::, *note stem::, *note region::. См.
-     раздел *note Area sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: region fdat gdat ['stl'=" `inside=off']
- -- Команда MGL: region xdat fdat gdat ['stl'=" `inside=off']
-     Закрашивает область между 2 кривыми
-     {XDAT[i], FDAT[i]} и {XDAT[i], GDAT[i]}. При  `inside=off'
-     закрашивается только область y1<y<y2, в
-     противном случае также будет
-     закращена область y2<y<y1. Можно
-     использовать градиентное
-     закрашивание если число указанных
-     цветов STL равно удвоенному числу
-     кривых для построения. См. также *note
-     area::, *note bars::, *note stem::. См. раздел *note
-     Region sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: stem ydat ['stl'=" `zval=nan']
- -- Команда MGL: stem xdat ydat ['stl'=" `zval=nan']
- -- Команда MGL: stem xdat ydat zdat ['stl'="]
-     Рисует вертикальные линии из точек
-     {XDAT[i], YDAT[i], ZDAT[i]} до плоскости осей
-     координат. См. также *note area::, *note bars::,
-     *note plot::, *note mark::. См. раздел *note Stem
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: bars ydat ['stl'=" `zval=nan']
- -- Команда MGL: bars xdat ydat ['stl'=" `zval=nan']
- -- Команда MGL: bars xdat ydat zdat ['stl'="]
-     Рисует вертикальные полосы
-     (прямоугольники) из точек {XDAT[i], YDAT[i],
-     ZDAT[i]} до плоскости осей координат.
-     Если строка STL содержит символ `a', то
-     линии рисуются одна поверх другой.
-     Если строка содержит символ `f', то
-     рисуется график типа waterfall для
-     определения кумулятивного эффекта
-     последовательности положительных и
-     отрицательных значений. Можно
-     использовать разные цвета для
-     положительных и отрицательных
-     значений если число указанных
-     цветов равно удвоенному числу
-     кривых для построения. См. также *note
-     barh::, *note area::, *note stem::, *note chart::. См.
-     раздел *note Bars sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: barh xdat ['stl'=" `zval=nan']
- -- Команда MGL: barh ydat xdat ['stl'=" `zval=nan']
-     Рисует горизонтальные полосы
-     (прямоугольники) из точек {XDAT[i], YDAT[i]}
-     до плоскости оси y. Если массив YDAT не
-     указан, то используется массив со
-     значениями равно распределенными
-     вдоль оси y. Если строка STL содержит
-     символ `a', то линии рисуются одна
-     поверх другой. Если строка содержит
-     символ `f', то рисуется график типа
-     waterfall для определения кумулятивного
-     эффекта последовательности
-     положительных и отрицательных
-     значений. Можно использовать разные
-     цвета для положительных и
-     отрицательных значений если число
-     указанных цветов равно удвоенному
-     числу кривых для построения. См.
-     также *note bars::. См. раздел *note Barh sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: chart adat ['col'="]
-     Рисует цветные полосы (пояса) для
-     массива данных ADAT. Число полос равно
-     числу строк ADAT (равно A.NY). Цвет полос
-     поочередно меняется из цветов
-     указанных в COL или в палитре (если
-     `col='''). Пробел в цветах соответствует
-     прозрачному "цвету", т.е.
-     соответствующая полоса не рисуется.
-     Ширина полосы пропорциональна
-     значению элемента в ADAT. График
-     строится только для массивов не
-     содержащих отрицательных значений.
-     Если строка COL содержит `#', то
-     рисуется также черная граница
-     полос. График выглядит лучше в 3d
-     (после вращения системы координат)
-     и/или в полярной системе координат
-     (становится Pie chart). См. раздел *note Chart
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: step ydat ['stl'=" `zval=nan']
- -- Команда MGL: step xdat ydat ['stl'=" `zval=nan']
- -- Команда MGL: step xdat ydat zdat ['stl'="]
-     Рисует ступеньки для точек массива
-     {XDAT[i], YDAT[i], ZDAT[i]}. См. также *note plot::, *note
-     stem::, *note tile::, *note boxs::. См. раздел *note Step
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: torus zdat ['stl'="]
- -- Команда MGL: torus rdat zdat ['stl'="]
-     Рисует поверхность вращения кривой
-     {RDAT[i], ZDAT[i], ZDAT[i]} относительно оси *note
-     axialdir::. Если массив RDAT не указан, то
-     используется массив со значениями
-     равно распределенными вдоль оси x.
-     См. также *note plot::, *note axial::. См. раздел
-     *note Torus sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: tube ydat rdat ['stl'=" `zval=nan']
- -- Команда MGL: tube ydat `rval' ['stl'=" `zval=nan']
- -- Команда MGL: tube xdat ydat rdat ['stl'=" `zval=nan']
- -- Команда MGL: tube xdat ydat `rval' ['stl'=" `zval=nan']
- -- Команда MGL: tube xdat ydat zdat rdat ['stl'="]
- -- Команда MGL: tube xdat ydat zdat `rval' ['stl'="]
-     Рисует трубу радиуса RDAT[i] (or RVAL)
-     вдоль кривой между точками {XDAT[i],
-     YDAT[i], ZDAT[i]}. См. также *note plot::. См.
-     раздел *note Tube sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: mark ydat rdat ['stl'=" `zval=nan']
- -- Команда MGL: mark xdat ydat rdat ['stl'=" `zval=nan']
- -- Команда MGL: mark xdat ydat zdat rdat ['stl'="]
-     Рисует маркеры размером RDAT[i]*`marksize' в
-     точках {XDAT[i], YDAT[i], ZDAT[i]}. Для
-     рисования маркеров одинакового
-     размера можно использовать функцию
-     `plot' с невидимой линией (со стилем
-     содержащим ` '). См. также *note plot::, *note
-     textmark::, *note stem::, *note error::. См. раздел *note
-     Mark sample::, для примеров кода и графика.
-
- -- Команда MGL: textmark ydat 'txt' ['stl'=" `zval=nan']
- -- Команда MGL: textmark ydat rdat 'txt' ['stl'=" `zval=nan']
- -- Команда MGL: textmark xdat ydat rdat 'txt' ['stl'="
-          `zval=nan']
- -- Команда MGL: textmark xdat ydat zdat rdat 'txt' ['stl'="]
-     Рисует текст TXT как маркер с
-     размером пропорциональным
-     RDAT[i]*`marksize' в точках {XDAT[i], YDAT[i], ZDAT[i]}.
-     Если массив RDAT не указан, то
-     полагается RDAT[i] = 1. См. также *note plot::,
-     *note mark::, *note stem::. См. раздел *note TextMark
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: error ydat yerr ['stl'=" `zval=nan']
- -- Команда MGL: error xdat ydat yerr ['stl'=" `zval=nan']
- -- Команда MGL: error xdat ydat xerr yerr ['stl'=" `zval=nan']
-     Рисует размер ошибки {XERR[i], YERR[i]} в
-     точках {XDAT[i], YDAT[i]} на плоскости Z = ZVAL.
-     Такой график полезен для
-     отображения ошибки эксперимента,
-     вычислений и пр. См. также *note plot::. См.
-     раздел *note Error sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: boxplot adat ['stl'=" `zval=nan']
- -- Команда MGL: boxplot xdat adat ['stl'=" `zval=nan']
-     Рисует boxplot (называемый также как
-     box-and-whisker diagram или как "ящик с усами") в
-     точках XDAT[i] на плоскости Z = ZVAL. Это
-     график, компактно изображающий
-     распределение вероятностей ADAT[i,j]
-     (минимум, нижний квартиль (Q1),
-     медиана (Q2), верхний квартиль (Q3) и
-     максимум) вдоль второго (j-го)
-     направления. См. также *note plot::, *note
-     error::, *note bars::. См. раздел *note BoxPlot sample::,
-     для примеров кода и графика.
-
-
-File: mgl_ru.info,  Node: 2D plotting,  Next: 3D plotting,  Prev: 1D plotting,  Up: MGL interface
-
-1.11 2D графики
-======================
-
-Эти команды строят графики для
-двумерных (2D) массивов. Двумерными
-считаются массивы, зависящие только от
-двух параметров (индексов) подобно
-матрице f(x_i,y_j), i=1...n, j=1...m. Есть
-несколько основных типов 2D графиков:
-сплошная поверхность (*note surf::),
-сетчатая поверхность (*note mesh::),
-поверхность из ящиков (*note boxs::),
-поверхность из плиток (*note tile::), водопад
-(*note fall::), ленточки (*note belt::), график
-плотности (*note dens::), линии уровня (*note
-cont::), линии уровня с заполнением (*note
-contf::) и результат их вращения (*note axial::).
-В функциях *note cont::, *note contf:: и *note axial::
-значения уровней можно задавать
-автоматически и вручную. Можно также
-нарисовать сетку (*note grid::) по массиву
-данных для улучшения вида графика
-плотности или линий уровня. Каждый тип
-графика имеет похожий интерфейс. Есть
-версия для рисования одного массива с
-автоматическими координатами и версия
-для параметрически заданной
-поверхности. См. раздел *note 1D plot sample::,
-для примеров кода и графика.
-
-   Строка SCH задает цветовую схему (*note
-Color scheme::. Предыдущая цветовая схема
-используется по умолчанию. Младшие
-размерности массивов XDAT, YDAT, ZDAT должны
-быть одинаковы `xdat.nx=zdat.nx && ydat.nx=zdat.ny' или
-`xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny'. Массивы
-XDAT и YDAT могут быть векторами (не
-матрицами как ZDAT). Если массивы XDAT, YDAT
-не указаны, то используются массивы со
-значениями равно распределенными
-вдоль осей x, y. График строится для
-каждого z среза данных.
-
- -- Команда MGL: surf zdat ['sch'="]
- -- Команда MGL: surf xdat ydat zdat ['sch'="]
-     Рисует параметрически заданную
-     поверхность {XDAT[i,j], YDAT[i,j], ZDAT[i,j]}. Если
-     SCH содержит `#', то на поверхности
-     рисуется сетка. См. также *note mesh::, *note
-     dens::, *note belt::, *note tile::, *note boxs::, *note surfc::,
-     *note surfa::. См. раздел *note Surf sample::, для
-     примеров кода и графика.
-
- -- Команда MGL: mesh zdat ['sch'="]
- -- Команда MGL: mesh xdat ydat zdat ['sch'="]
-     Рисует сетчатую поверхность,
-     заданную параметрически {XDAT[i,j],
-     YDAT[i,j], ZDAT[i,j]}. См. также *note surf::, *note
-     fall::, *note meshnum::, *note cont::, *note tens::. См.
-     раздел *note Mesh sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: fall zdat ['sch'="]
- -- Команда MGL: fall xdat ydat zdat ['sch'="]
-     Рисует водопад для параметрически
-     заданной поверхности {XDAT[i,j], YDAT[i,j],
-     ZDAT[i,j]}. График удобен для построения
-     нескольких кривых, сдвинутых вглубь
-     друг относительно друга. Если SCH
-     содержит `x', то линии рисуются вдоль
-     x-оси (по умолчанию линии рисуются
-     вдоль y-оси). См. также *note belt::, *note mesh::,
-     *note tens::, *note meshnum::. См. раздел *note Fall
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: belt zdat ['sch'="]
- -- Команда MGL: belt xdat ydat zdat ['sch'="]
-     Рисует ленточки для параметрически
-     заданной поверхности {XDAT[i,j], YDAT[i,j],
-     ZDAT[i,j]}. Если SCH содержит `x', то линии
-     рисуются вдоль x-оси (по умолчанию
-     линии рисуются вдоль y-оси). См. также
-     *note fall::, *note surf::, *note plot::, *note meshnum::. См.
-     раздел *note Belt sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: boxs zdat ['sch'="]
- -- Команда MGL: boxs xdat ydat zdat ['sch'="]
-     Рисует вертикальные ящики для
-     параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]}. См.
-     также *note surf::, *note dens::, *note tile::, *note step::.
-     См. раздел *note Boxs sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: tile zdat ['sch'="]
- -- Команда MGL: tile xdat ydat zdat ['sch'="]
-     Рисует плитки для параметрически
-     заданной поверхности {XDAT[i,j], YDAT[i,j],
-     ZDAT[i,j]}. График может использоваться
-     как 3d обобщение *note step::. См. также *note
-     surf::, *note boxs::, *note step::, *note tiles::. См.
-     раздел *note Tile sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: dens zdat ['sch'=" `zval=nan']
- -- Команда MGL: dens xdat ydat zdat ['sch'=" `zval=nan']
-     Рисует график плотности для
-     параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z
-     = ZVAL. Если SCH содержит `#', то рисуется
-     сетка. См. также *note surf::, *note cont::, *note
-     contf::, *note boxs::, *note tile::, `dens[xyz]'. См.
-     раздел *note Dens sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: cont vdat zdat ['sch'=" `zval=nan']
- -- Команда MGL: cont vdat xdat ydat zdat ['sch'=" `zval=nan']
-     Рисует линии уровня для
-     параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z
-     = ZVAL (или при Z=VDAT[k] если `zval==nan'). Линии
-     уровня рисуются для Z=VDAT[k]. Если SCH
-     содержит `#', то рисуется сетка. Если
-     SCH содержит `t' или `T', то значения VDAT[k]
-     будут выведены вдоль контуров над
-     (или под) кривой. См. также *note dens::, *note
-     contf::, *note contd::, *note axial::, `cont[xyz]'. См.
-     раздел *note Cont sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: cont zdat ['sch'=" `num=7 zval=nan']
- -- Команда MGL: cont xdat ydat zdat ['sch'=" `num=7 zval=nan']
-     Как предыдущий с вектором V из NUM
-     элементов равно распределенных в
-     интервале цветовой шкалы (см., *note
-     caxis::).
-
- -- Команда MGL: contf vdat zdat ['sch'=" `zval=nan']
- -- Команда MGL: contf vdat xdat ydat zdat ['sch'=" `zval=nan']
-     Рисует закрашенные линии (контуры)
-     уровня для параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z
-     = ZVAL (или при Z=V[k] если `zval=nan'). Линии
-     уровня рисуются для Z=VDAT[k]. Если SCH
-     содержит `#', то рисуется сетка. См.
-     также *note dens::, *note cont::, *note contd::,
-     `contf[xyz]'. См. раздел *note ContF sample::, для
-     примеров кода и графика.
-
- -- Команда MGL: contf zdat ['sch'=" `num=7 zval=nan']
- -- Команда MGL: contf xdat ydat zdat ['sch'=" `num=7 zval=nan']
-     Как предыдущий с вектором V из NUM
-     элементов равно распределенных в
-     интервале цветовой шкалы (см., *note
-     caxis::).
-
- -- Команда MGL: contd vdat zdat ['sch'=" `zval=nan']
- -- Команда MGL: contd vdat xdat ydat zdat ['sch'=" `zval=nan']
-     Рисует закрашенные линии (контуры)
-     уровня для параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z
-     = ZVAL (или при Z=V[k] если `zval==nan') цветами
-     заданными явно. Линии уровня
-     рисуются для Z=VDAT[k]. Строка SCH задает
-     цвет контуров: цвет k-го контура
-     определяется символом `sch[k%strlen(sch)]'.
-     См. также *note dens::, *note cont::, *note contf::,
-     `cont[xyz]'. См. раздел *note ContD sample::, для
-     примеров кода и графика.
-
- -- Команда MGL: contd zdat ['sch'=" `num=7 zval=nan']
- -- Команда MGL: contd xdat ydat zdat ['sch'=" `num=7 zval=nan']
-     Как предыдущий с вектором V из NUM
-     элементов равно распределенных в
-     интервале цветовой шкалы (см., *note
-     caxis::).
-
- -- Команда MGL: axial vdat zdat ['sch'="]
- -- Команда MGL: axial vdat xdat ydat zdat ['sch'="]
-     Рисует поверхность вращения линии
-     уровня для параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]}.
-     Линии уровня рисуются для ZDAT[i,j]=VDAT[k].
-     Если SCH содержит `#', то рисуется
-     сетчатая поверхность. Если строка
-     содержит символы `x', `y' или `z', то ось
-     вращения устанавливается в
-     указанное направление (по умолчанию
-     вдоль оси *note axialdir::). См. также *note
-     cont::, *note contf::, *note torus::, *note surf3::. См.
-     раздел *note Axial sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: axial zdat ['sch'=" `num=3']
- -- Команда MGL: axial xdat ydat zdat ['sch'=" `num=3']
-     Как предыдущий с вектором V из NUM
-     элементов равно распределенных в
-     интервале цветовой шкалы (см., *note
-     caxis::).
-
- -- Команда MGL: grad pdat ['sch'=" `num=5 zval=nan']
- -- Команда MGL: grad xdat ydat pdat ['sch'=" `num=5 zval=nan']
- -- Команда MGL: grad xdat ydat zdat pdat ['sch'=" `num=5']
-     Рисует линии градиента скалярного
-     поля PDAT заданного параметрически
-     {XDAT[i,j], YDAT[i,j]} или {XDAT[i,j,k], YDAT[i,j,k],
-     ZDAT[i,j,k]}. Число линий пропорционально
-     NUM. Линии рисуются только с границ
-     интервала при NUM<0. См. также *note dens::,
-     *note cont::, *note dens3::, *note cont3::, *note flow::. См.
-     раздел *note Grad sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: grid2 zdat ['sch'=" `zval=nan']
- -- Команда MGL: grid2 xdat ydat zdat ['sch'=" `zval=nan']
-     Рисует плоскую сету для
-     параметрически заданной
-     поверхности {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} при Z
-     = ZVAL. См. также *note dens::, *note cont::, *note contf::.
-
-
-File: mgl_ru.info,  Node: 3D plotting,  Next: Dual plotting,  Prev: 2D plotting,  Up: MGL interface
-
-1.12 3D графики
-======================
-
-Эти функции строят графики для
-трехмерных (3D) массивов. Трехмерными
-считаются массивы, зависящие от трех
-параметров (индексов) подобно матрице
-f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l. Есть 5 основных
-типов 3D графиков: поверхность
-постоянного уровня (*note surf3::), график
-плотности на срезе (DENS3), линии уровня
-на срезе (*note cont3::), закрашенные контуры
-уровня на срезе (*note contf3::) и график
-объемной прозрачности типа облака (*note
-cloud::). В функциях *note cont3::, *note contf3:: и *note
-surf3:: значения уровней можно задавать
-автоматически и вручную. Можно также
-нарисовать на срезе сетку (*note grid3::) по
-массиву данных для улучшения вида
-графика плотности или линий уровня.
-Каждый тип графика имеет похожий
-интерфейс. Есть версия для рисования
-одного массива с автоматическими
-координатами и версия для
-параметрически заданного массива. См.
-раздел *note 3D plot sample::, для примеров кода
-и графика.
-
-   Строка SCH задает цветовую схему (*note
-Color scheme::). Предыдущая цветовая схема
-используется по умолчанию. Массивы X, Y,
-Z могут быть векторами (не 3d массивами
-как A). Если массивы XDAT, YDAT, ZDAT не
-указаны, то используются массивы со
-значениями равно распределенными
-вдоль осей x, y, z.
-
- -- Команда MGL: surf3 adat `val' ['sch'="]
- -- Команда MGL: surf3 xdat ydat zdat adat `val' ['sch'="]
-     Рисует поверхность уровня для 3d
-     массива, заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]) при
-     ADAT(x,y,z)=VAL. Если SCH содержит `#', то
-     рисуется сетчатая поверхность. См.
-     также *note cloud::, *note dens3::, *note surf3c::, *note
-     surf3a::, *note axial::. См. раздел *note Surf3 sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: surf3 adat ['sch'=" `num=5']
- -- Команда MGL: surf3 xdat ydat zdat adat ['sch'=" `num=5']
-     Рисует NUM поверхностей уровня
-     равномерно распределенных в
-     интервале цветовой шкалы (см. *note
-     caxis::).
-
- -- Команда MGL: dens3 adat 'dir' [`sval=-1' 'sch'="]
- -- Команда MGL: dens3 xdat ydat zdat adat 'dir' [`sval=-1'
-          'sch'="]
-     Рисует график плотности для 3d
-     массива, заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). График
-     рисуется на срезе SVAL в направлении
-     DIR={`x', `y', `z'}. Если STL содержит `#', то на
-     срезе рисуется сетка. См. также *note
-     cont3::, *note contf3::, *note dens::, *note grid3::. См.
-     раздел *note Dens3 sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: densa adat ['sch'="]
- -- Команда MGL: densa xdat ydat zdat adat ['sch'="]
-     Рисует графики плотности на всех
-     центральных срезах 3d данных.
-
- -- Команда MGL: cont3 vdat adat 'dir' [`sval=-1' 'sch'="]
- -- Команда MGL: cont3 vdat xdat ydat zdat adat 'dir' [`sval=-1'
-          'sch'="]
-     Рисует линии уровня для 3d массива,
-     заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). Линии
-     рисуются для значений из массива V
-     на срезе SVAL в направлении DIR={`x', `y',
-     `z'}. Если STL содержит `#', то на срезе
-     рисуется сетка. Если SCH содержит `t'
-     или `T', то значения VDAT[k] будут
-     выведены вдоль контуров над (или
-     под) кривой. См. также *note dens3::, *note
-     contf3::, *note cont::, *note grid3::. См. раздел *note
-     Cont3 sample::, для примеров кода и графика.
-
- -- Команда MGL: cont3 adat 'dir' [`sval=-1' 'sch'=" `num=7']
- -- Команда MGL: cont3 xdat ydat zdat adat 'dir' [`sval=-1'
-          'sch'=" `num=7']
-     Как предыдущий с вектором V из NUM
-     элементов равно распределенных в
-     интервале цветовой шкалы (см., *note
-     caxis::).
-
- -- Команда MGL: conta adat ['sch'=" `num=7']
- -- Команда MGL: conta xdat ydat zdat adat ['sch'=" `num=7']
-     Рисует линии уровня на всех
-     центральных срезах 3d данных.
-
- -- Команда MGL: contf3 vdat adat 'dir' [`sval=-1' 'sch'="]
- -- Команда MGL: contf3 vdat xdat ydat zdat adat 'dir'
-          [`sval=-1' 'sch'="]
-     Рисует закрашенные линии (контуры)
-     уровня для 3d массива, заданного
-     параметрически ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k],
-     ZDAT[i,j,k]). Линии рисуются для значений
-     из массива V на срезе SVAL в
-     направлении DIR={`x', `y', `z'}. Если STL
-     содержит `#', то на срезе рисуется
-     сетка. См. также *note dens3::, *note cont3::, *note
-     contf::, *note grid3::. См. раздел *note ContF3 sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: contf3 adat 'dir' [`sval=-1' 'sch'=" `num=7']
- -- Команда MGL: contf3 xdat ydat zdat adat 'dir' [`sval=-1'
-          'sch'=" `num=7']
-     Как предыдущий с вектором V из NUM
-     элементов равно распределенных в
-     интервале цветовой шкалы (см., *note
-     caxis::).
-
- -- Команда MGL: contfa adat ['sch'=" `num=7']
- -- Команда MGL: contfa xdat ydat zdat adat ['sch'=" `num=7']
-     Рисует закрашенные линии (контуры)
-     уровня на всех центральных срезах 3d
-     данных.
-
- -- Команда MGL: grid3 adat 'dir' [`sval=-1' 'sch'="]
- -- Команда MGL: grid3 xdat ydat zdat adat 'dir' [`sval=-1'
-          'sch'="]
-     Рисует сетку для 3d массива,
-     заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). График
-     рисуется на срезе SVAL в направлении
-     DIR={`x', `y', `z'}. См. также *note cont3::, *note
-     contf3::, *note dens3::, *note grid2::.
-
- -- Команда MGL: grida adat ['sch'="]
- -- Команда MGL: grida xdat ydat zdat adat ['sch'="]
-     Рисует сетку на всех центральных
-     срезах 3d данных.
-
- -- Команда MGL: cloud adat ['sch'="]
- -- Команда MGL: cloud xdat ydat zdat adat ['sch'="]
-     Рисует облачный график для 3d
-     массива, заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]). График
-     состоит из кубиков с цветом и
-     прозрачностью пропорциональной
-     значениям ADAT. Результат похож на
-     облако - малые значения прозрачны, а
-     большие нет. Число кубиков зависит
-     от *note meshnum::. Параметр ALPHA меняет
-     общую прозрачность графика. См.
-     также *note surf3::. См. раздел *note Cloud sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: beam tr g1 g2 adat `rval' ['sch'=" `flag=0
-          num=3']
-     Рисует поверхность уровня для 3d
-     массива ADAT при постоянном значении
-     ADAT=VAL. Это специальный тип графика
-     для ADAT заданного в сопровождающей
-     системе координат вдоль кривой TR с
-     ортами G1, G2 и с поперечным размером
-     RVAL. Переменная FLAG - битовый флаг: `0x1' -
-     рисовать в сопровождающих (не
-     лабораторных) координатах; `0x2' -
-     рисовать проекцию на плоскость \rho-z;
-     `0x4' - рисовать нормированное в
-     каждом сечении поле. Размеры
-     массивов по 1-му индексу TR, G1, G2
-     должны быть nx>2. Размеры массивов по
-     2-му индексу TR, G1, G2 и размер по 3-му
-     индексу массива ADAT должны быть
-     одинаковы. См. также *note surf3::.
-
-
-File: mgl_ru.info,  Node: Dual plotting,  Next: Vector fields,  Prev: 3D plotting,  Up: MGL interface
-
-1.13 Парные графики
-================================
-
-Эти команды строят графики для двух
-связанных массивов. Есть несколько
-основных типов 3D графиков: поверхность
-и поверхность уровня с окраской по
-второму массиву (*note surfc::, *note surf3c::),
-поверхность и поверхность уровня с
-прозрачностью по второму массиву (*note
-surfa::, *note surf3a::), плитки переменного
-размера (*note tiles::), диаграмма точечного
-отображения (*note map::), STFA диаграмма (*note
-stfa::). В командах *note surf3a:: и *note surf3c::
-значения уровней можно задавать
-автоматически и вручную. Каждый тип
-графика имеет похожий интерфейс. Есть
-версия для рисования одного массива с
-автоматическими координатами и версия
-для параметрически заданного массива.
-
-   Строка SCH задает цветовую схему (*note
-Color scheme::). Предыдущая цветовая схема
-используется по умолчанию. Массивы X, Y,
-Z могут быть векторами (не 3d массивами
-как A). Если массивы XDAT, YDAT, ZDAT не
-указаны, то используются массивы со
-значениями равно распределенными
-вдоль осей x, y, z.
-
- -- Команда MGL: surfc zdat cdat ['sch'="]
- -- Команда MGL: surfc xdat ydat zdat cdat ['sch'="]
-     Рисует параметрически заданную
-     поверхность {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} с
-     цветом, заданным массивом CDAT[i,j].
-     Если SCH содержит `#', то на
-     поверхности рисуется сетка. См.
-     также *note surf::, *note surfa::, *note surf3c::. См.
-     раздел *note SurfC sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: surf3c adat cdat `val' ['sch'="]
- -- Команда MGL: surf3c xdat ydat zdat adat cdat `val' ['sch'="]
-     Рисует поверхность уровня для 3d
-     массива, заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]) при
-     A(x,y,z)=VAL. Аналогично *note surf3::, но цвет
-     задается массивом CDAT. Если SCH
-     содержит `#', то рисуется сетчатая
-     поверхность. См. также *note surf3::, *note
-     surfc::, *note surf3a::. См. раздел *note Surf3C sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: surf3c adat cdat ['sch'=" `num=5']
- -- Команда MGL: surf3c xdat ydat zdat adat cdat ['sch'="
-          `num=5']
-     Рисует NUM поверхностей уровня
-     равномерно распределенных в
-     интервале цветовой шкалы (см. *note
-     caxis::).
-
- -- Команда MGL: surfa zdat cdat ['sch'="]
- -- Команда MGL: surfa xdat ydat zdat cdat ['sch'="]
-     Рисует параметрически заданную
-     поверхность {XDAT[i,j], YDAT[i,j], ZDAT[i,j]} с
-     прозрачностью, заданным массивом
-     CDAT[i,j]. Если SCH содержит `#', то на
-     поверхности рисуется сетка. См.
-     также *note surf::, *note surfc::, *note surf3a::. См.
-     раздел *note SurfA sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: surf3a adat cdat `val' ['sch'="]
- -- Команда MGL: surf3a xdat ydat zdat adat cdat `val' ['sch'="]
-     Рисует поверхность уровня для 3d
-     массива, заданного параметрически
-     ADAT[i,j,k](XDAT[i,j,k], YDAT[i,j,k], ZDAT[i,j,k]) при
-     A(x,y,z)=VAL. Аналогично *note surf3::, но
-     прозрачность задается массивом CDAT.
-     Если SCH содержит `#', то рисуется
-     сетчатая поверхность. См. также *note
-     surf3::, *note surfa::, *note surf3c::. См. раздел *note
-     Surf3A sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: surf3a adat cdat ['sch'=" `num=5']
- -- Команда MGL: surf3a xdat ydat zdat adat cdat ['sch'="
-          `num=5']
-     Рисует NUM поверхностей уровня
-     равномерно распределенных в
-     интервале цветовой шкалы (см. *note
-     caxis::).
-
- -- Команда MGL: tiles zdat rdat ['sch'="]
- -- Команда MGL: tiles xdat ydat zdat rdat ['sch'="]
-     Рисует плитки для параметрически
-     заданной поверхности {XDAT[i,j], YDAT[i,j],
-     ZDAT[i,j]}. Аналогично *note tile::, но размер
-     плиток задается массивов RDAT. Это
-     создает эффект "прозрачности" при
-     экспорте в файлы EPS. См. также *note
-     surfa::, *note tile::. См. раздел *note TileS sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: map udat vdat ['sch'=" `pnts=on']
- -- Команда MGL: map xdat ydat udat vdat ['sch'=" `pnts=on']
-     Визуализирует точечное отображение
-     для матриц {UDAT, VDAT } параметрически
-     зависящих от координат XDAT, YDAT.
-     Исходное положение ячейки задает ее
-     цвет. Высота пропорциональна
-     якобиану Jacobian(udat,vdat). График
-     является аналогом диаграммы
-     Арнольда. Если `pnts=off', то рисуются
-     грани, иначе цветные точки рисуются
-     в узлах матриц (полезно для
-     "запутанного" отображения). См.
-     раздел *note Map sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: stfa re im `dn' ['sch'=" `pnts=on']
- -- Команда MGL: stfa xdat ydat re im `dn' ['sch'=" `pnts=on']
-     Рисует спектрограмму комплексного
-     массива RE+i*`im' для Фурье размером DN
-     точек. Параметр DN - любое четное
-     число. Например в 1D случае,
-     результатом будет график плотности
-     от массива res[i,j]=|\sum_d^dn
-     exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn размером
-     {int(nx/dn), dn, ny}. Массивы RE, IM
-     параметрически зависят от
-     координат XDAT, YDAT. См. раздел *note STFA
-     sample::, для примеров кода и графика.
-
-
-File: mgl_ru.info,  Node: Vector fields,  Next: Other plotting,  Prev: Dual plotting,  Up: MGL interface
-
-1.14 Векторные поля
-================================
-
-Эти функции рисуют графики для 2D и 3D
-векторных полей. Есть несколько типов
-графиков: просто векторное поле (*note
-vect::), вектора вдоль траектории (*note traj::),
-векторное поле каплями (*note dew::), нити
-тока (*note flow::), трубки тока (*note pipe::).
-Каждый тип графика имеет похожий
-интерфейс. Есть версия для рисования
-одного массива с автоматическими
-координатами и версия для
-параметрически заданного массива.
-
-   Строка SCH задает цветовую схему (*note
-Color scheme::). Предыдущая цветовая схема
-используется по умолчанию. Все размеры
-массивов AX и AY должны быть одинаковы.
-Младшие размерности массивов X, Y и AX
-должны быть одинаковы. Массивы X и Y
-могут быть векторами (не матрицами как
-AX). График строится для каждого z среза
-AX, AY для 2D случаев.
-
- -- Команда MGL: traj xdat ydat udat vdat ['sch'=" `zval=nan
-          len=0']
- -- Команда MGL: traj xdat ydat zdat udat vdat wdat ['sch'="
-          `len=0']
-     Рисует вектора {UDAT, VDAT, WDAT} вдоль
-     кривой {XDAT, YDAT, ZDAT}. Длина векторов
-     пропорциональна \sqrt{udat^2+vdat^2+wdat^2}.
-     Строка PEN задает цвет (*note Line styles::). По
-     умолчанию (`pen='''). Параметр LEN задает
-     фактор длины векторов (если не нуль)
-     или выбирать длину пропорционально
-     расстоянию между точками кривой
-     (если LEN=0). См. также *note vect::. См.
-     раздел *note Traj sample::, для примеров кода
-     и графика.
-
- -- Команда MGL: vect udat vdat ['sch'=" `zval=nan flag=0']
- -- Команда MGL: vect xdat ydat udat vdat ['sch'=" `zval=nan
-          flag=0']
-     Рисует векторное поле {UDAT, VDAT}
-     параметрически зависящее от
-     координат XDAT, YDAT на плоскости при
-     Z=ZVAL. Длина и цвет векторов
-     пропорциональна \sqrt{ax^2+ay^2}. Число
-     рисуемых векторов зависит от *note
-     meshnum::. Параметр FLAG побитовый флаг
-     для настройки вид векторов: `1' -
-     двуцветный вектор, `2' - одинаковая
-     длина векторов, `4' - рисует стрелку в
-     точку сетки, `8' - рисует стрелку с
-     серединой в точке сетки, `16' - рисует
-     штрихи вместо стрелок. См. также *note
-     flow::, *note dew::, *note vectc::. См. раздел *note Vect
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: vect udat vdat wdat ['sch'=" `flag=0']
- -- Команда MGL: vect xdat ydat zdat udat vdat wdat ['sch'="
-          `flag=0']
-     Это 3D версия графика. Здесь массивы
-     UDAT, VDAT, WDAT должны быть 3d массивами, а
-     длина и цвет пропорциональны
-     \sqrt{udat^2+vdat^2+wdat^2}. См. раздел *note Vect 3D
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: vectc udat vdat ['sch'=" `zval=nan']
- -- Команда MGL: vectc xdat ydat udat vdat ['sch'=" `zval=nan']
-     Аналогично *note vect:: c `flag=2+16=18'. См.
-     раздел *note VectC sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: vectc udat vdat wdat ['sch'="]
- -- Команда MGL: vectc xdat ydat zdat udat vdat wdat ['sch'="]
-     Это 3D версия графика. Здесь массивы
-     UDAT, VDAT, WDAT должны быть 3d массивами, а
-     длина и цвет пропорциональны
-     \sqrt{udat^2+vdat^2+wdat^2}. См. раздел *note VectC 3D
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: vectl udat vdat ['sch'=" `zval=nan']
- -- Команда MGL: vectl xdat ydat udat vdat ['sch'=" `zval=nan']
-     Аналогично *note vect:: c `flag=1+16=17'. См.
-     раздел *note VectL sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: vectl udat vdat wdat ['sch'="]
- -- Команда MGL: vectl xdat ydat zdat udat vdat wdat ['sch'="]
-     Это 3D версия графика. Здесь массивы
-     UDAT, VDAT, WDAT должны быть 3d массивами, а
-     длина и цвет пропорциональны
-     \sqrt{udat^2+vdat^2+wdat^2}. См. раздел *note VectL 3D
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: dew udat vdat ['sch'=" `zval=nan']
- -- Команда MGL: dew xdat ydat udat vdat ['sch'=" `zval=nan']
-     Рисует капли для векторного поля
-     {UDAT, VDAT}, параметрически зависящего
-     от координат XDAT, YDAT при Z=ZVAL. Замечу,
-     что график требует много памяти и
-     процессорного времени для своего
-     создания! Цвет капель
-     пропорционален \sqrt{ax^2+ay^2}. Число
-     капель определяется *note meshnum::. См.
-     также *note vect::. См. раздел *note Dew sample::,
-     для примеров кода и графика.
-
- -- Команда MGL: flow udat vdat ['sch'=" `num=5 zval=nan']
- -- Команда MGL: flow xdat ydat udat vdat ['sch'=" `num=5
-          zval=nan']
-     Рисует нити тока для векторного
-     поля {UDAT, VDAT}, параметрически
-     зависящего от координат XDAT, YDAT на
-     плоскости при z = ZVAL. Число нитей
-     пропорционально NUM. При NUM>0 нитей
-     могут стартовать и изнутри сетки, в
-     противном случае только с краев.
-     Цвет нитей пропорционален
-     \sqrt{udat^2+vdat^2}. Теплые цвета
-     соответствуют нормальному току
-     (типа стока). Холодные цвета
-     соответствуют обратному току (типа
-     источника). См. также *note pipe::, *note vect::.
-     См. раздел *note Flow sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: flow udat vdat wdat ['sch'=" `num=3']
- -- Команда MGL: flow xdat ydat zdat udat vdat wdat ['sch'="
-          `num=3']
-     Это 3D версия графика. Здесь массивы
-     UDAT, VDAT, WDAT должны быть 3d массивами, а
-     цвет пропорционален \sqrt{udat^2+vdat^2+wdat^2}.
-     См. раздел *note Flow 3D sample::, для примеров
-     кода и графика.
-
- -- Команда MGL: flow `x0 y0' udat vdat ['sch'=" `zval=nan']
- -- Команда MGL: flow `x0 y0' xdat ydat udat vdat ['sch'="
-          `zval=nan']
-     Рисует нить тока из точки {X0, Y0} для
-     векторного поля {UDAT, VDAT},
-     параметрически зависящего от
-     координат XDAT, YDAT на плоскости при z =
-     ZVAL. Цвет нити пропорционален
-     \sqrt{udat^2+vdat^2}. Теплые цвета
-     соответствуют нормальному току
-     (типа стока). Холодные цвета
-     соответствуют обратному току (типа
-     источника).
-
- -- Команда MGL: flow `x0 y0 z0' udat vdat wdat ['sch'="]
- -- Команда MGL: flow `x0 y0 z0' xdat ydat zdat udat vdat wdat
-          ['sch'="]
-     Это 3D версия графика. Здесь массивы
-     UDAT, VDAT, WDAT должны быть 3d массивами, а
-     цвет пропорционален \sqrt{udat^2+vdat^2+wdat^2}.
-
- -- Команда MGL: pipe udat vdat ['sch'=" `r0=0.05 num=5
-          zval=nan']
- -- Команда MGL: pipe xdat ydat udat vdat ['sch'=" `r0=0.05
-          num=5 zval=nan']
-     Рисует трубки тока для векторного
-     поля {UDAT, VDAT}, параметрически
-     зависящего от координат XDAT, YDAT на
-     плоскости при z = ZVAL. Число трубок
-     пропорционально NUM. При NUM>0 нитей
-     могут стартовать и изнутри сетки, в
-     противном случае только с краев.
-     Цвет и радиус трубок пропорционален
-     \sqrt{udat^2+vdat^2}. Теплые цвета
-     соответствуют нормальному току
-     (типа стока). Холодные цвета
-     соответствуют обратному току (типа
-     источника). Параметр R0 задает радиус
-     трубок. При R0<0 радиус трубок обратно
-     пропорционален их амплитуде. См.
-     также *note flow::, *note vect::. См. раздел *note
-     Pipe sample::, для примеров кода и графика.
-
- -- Команда MGL: pipe udat vdat wdat ['sch'=" `r0=0.05 num=3']
- -- Команда MGL: pipe xdat ydat zdat udat vdat wdat ['sch'="
-          `r0=0.05 num=3']
-     Это 3D версия графика. Здесь массивы
-     UDAT, VDAT, WDAT должны быть 3d массивами, а
-     цвет пропорционален \sqrt{udat^2+vdat^2+wdat^2}.
-     См. раздел *note Pipe 3D sample::, для примеров
-     кода и графика.
-
-
-File: mgl_ru.info,  Node: Other plotting,  Next: Nonlinear fitting,  Prev: Vector fields,  Up: MGL interface
-
-1.15 Прочие графики
-================================
-
-Это команды, не относящиеся к какой-то
-специальной категории. Сюда входят
-функции построения графиков по
-текстовым формулам (*note fplot::, *note fsurf::),
-рисования поверхностей из
-треугольников (*note triplot::), произвольных
-точек в пространстве (*note dots::) и
-реконструкции по ним поверхности (*note
-crust::), графики плотности и линии уровня
-на плоскостях, перпендикулярных осям x,
-y или z (dens[xyz], cont[xyz], contf[xyz]). Каждый тип
-графика имеет похожий интерфейс. Есть
-версия для рисования одного массива с
-автоматическими координатами и версия
-для параметрически заданного массива.
-Строка SCH задает цветовую схему (*note Color
-scheme::). Предыдущая цветовая схема
-используется по умолчанию.
-
- -- Команда MGL: densx dat ['sch'=" `val=nan']
- -- Команда MGL: densy dat ['sch'=" `val=nan']
- -- Команда MGL: densz dat ['sch'=" `val=nan']
-     Рисуют график плотности на x, y или z
-     плоскостях. Если DAT - 3d массив, то
-     выполняется интерполяция к
-     заданному срезу VAL. Функции полезны
-     для создания проекций 3D массивов на
-     оси координат. См. также `cont[xyz],
-     contf[xyz]', *note dens::. См. раздел *note Dens
-     projection sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: contx dat ['sch'=" `val=nan num=7']
- -- Команда MGL: conty dat ['sch'=" `val=nan num=7']
- -- Команда MGL: contz dat ['sch'=" `val=nan num=7']
-     Рисуют линии уровня на x, y или z
-     плоскостях. Если DAT - 3d массив, то
-     выполняется интерполяция к
-     заданному срезу VAL. Функции полезны
-     для создания проекций 3D массивов на
-     оси координат. См. также `dens[xyz],
-     contf[xyz]', *note cont::. См. раздел *note Cont
-     projection sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: contfx dat ['sch'=" `val=nan num=7']
- -- Команда MGL: contfy dat ['sch'=" `val=nan num=7']
- -- Команда MGL: contfz dat ['sch'=" `val=nan num=7']
-     Рисуют закрашенные контуры уровня
-     на x, y или z плоскостях. Если DAT - 3d
-     массив, то выполняется интерполяция
-     к заданному срезу VAL. Функции
-     полезны для создания проекций 3D
-     массивов на оси координат. См. также
-     `dens[xyz], cont[xyz]', *note contf::.
-
- -- Команда MGL: dots xdat ydat zdat ['sch'="]
- -- Команда MGL: dots xdat ydat zdat adat ['sch'="]
-     Рисует произвольно расположенные
-     точки {XDAT[i], YDAT[i], ZDAT[i]}. Если
-     определен массив ADAT[i], то он задает
-     прозрачность точек. См. также *note
-     crust::, *note mark::, *note plot::. См. раздел *note Dots
-     sample::, для примеров кода и графика.
-
- -- Команда MGL: crust xdat ydat zdat ['sch'="]
-     Реконструирует и рисует
-     поверхность по произвольно
-     расположенным точкам {XDAT[i], YDAT[i],
-     ZDAT[i]}. Если строка содержит `#', то
-     рисуется сетчатая поверхность. См.
-     также *note dots::, *note triplot::. См. раздел *note
-     Crust sample::, для примеров кода и графика.
-
- -- Команда MGL: triplot idat xdat ydat ['sch'=" `zval=nan']
- -- Команда MGL: triplot idat xdat ydat zdat ['sch'="]
- -- Команда MGL: triplot idat xdat ydat zdat cdat ['sch'="]
-     Рисует поверхность из
-     треугольников. Вершины
-     треугольников задаются индексами
-     IDAT в массиве точек {XDAT[i], YDAT[i], ZDAT[i]}.
-     Если строка содержит `#', то рисуется
-     сетчатая поверхность. Размер по 1-му
-     индексу массива IDAT должен быть 3 или
-     больше. Массивы XDAT, YDAT, ZDAT должны
-     иметь одинаковые размеры. Массив CDAT
-     задает цвет треугольников (если
-     IDAT.ny=CDAT.nx) или цвет вершин (если
-     XDAT.nx=CDAT.nx). См. также *note dots::, *note crust::,
-     *note quadplot::, *note tricont::.
-
- -- Команда MGL: tricont vdat idat xdat ydat zdat cdat ['sch'="
-          `zval=nan']
- -- Команда MGL: tricont vdat idat xdat ydat zdat ['sch'="
-          `zval=nan']
- -- Команда MGL: tricont idat xdat ydat zdat ['sch'=" `num=7
-          zval=nan']
-     Рисует линии уровня поверхности из
-     треугольников при Z = ZVAL (или для
-     z=VDAT[k] если `zval==NAN'). Вершины
-     треугольников задаются индексами
-     IDAT в массиве точек {XDAT[i], YDAT[i], ZDAT[i]}.
-     Размер по 1-му индексу массива IDAT
-     должен быть 3 или больше. Массивы XDAT,
-     YDAT, ZDAT должны иметь одинаковые
-     размеры. Массив CDAT (если указан)
-     задает цвет треугольников (если
-     IDAT.ny=CDAT.nx) или цвет вершин (если
-     XDAT.nx=CDAT.nx). См. также *note triplot::, *note cont::.
-
- -- Команда MGL: quadplot idat xdat ydat ['sch'=" `zval=nan']
- -- Команда MGL: quadplot idat xdat ydat zdat ['sch'="]
- -- Команда MGL: quadplot idat xdat ydat zdat cdat ['sch'="]
-     Рисует поверхность из
-     четырехугольников. Вершины
-     треугольников задаются индексами
-     IDAT в массиве точек {XDAT[i], YDAT[i], ZDAT[i]}.
-     Если строка содержит `#', то рисуется
-     сетчатая поверхность. Размер по 1-му
-     индексу массива IDAT должен быть 4 или
-     больше. Массивы XDAT, YDAT, ZDAT должны
-     иметь одинаковые размеры. Массив CDAT
-     задает цвет четырехугольников (если
-     IDAT.ny=CDAT.nx) или цвет вершин (если
-     XDAT.nx=CDAT.nx). См. также *note triplot::.
-
- -- Команда MGL: fplot 'y(x)' ['pen'=" `zval=nan num=100']
-     Рисует функцию `y(x)' в плоскости z=ZVAL с
-     координатой `x' в диапазоне x-оси
-     координат. Параметр NUM задает
-     минимальное число точек по
-     координате для графика. См. также *note
-     plot::.
-
- -- Команда MGL: fplot 'x(t)' 'y(t)' 'z(t)' ['pen'=" `num=100']
-     Рисует параметрическую кривую {`x(t)',
-     `y(t)', `z(t)'}, где координата `t' меняется
-     в диапазоне [0, 1]. Параметр NUM задает
-     минимальное число точек по
-     координате для графика. См. также *note
-     plot::.
-
- -- Команда MGL: fsurf 'z(x,y)' ['sch'=" `num=100']
-     Рисует поверхность `z(x,y)' с
-     координатами `x', `y' в диапазоне
-     x-,y-осей координат. Параметр NUM
-     задает минимальное число точек по
-     координатам для графика. См. также
-     *note surf::.
-
- -- Команда MGL: fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'="
-          `num=100']
-     Рисует параметрическую поверхность
-     {`x(u,v)', `y(u,v)', `z(u,v)'}, где координаты `u',
-     `v' меняются в диапазоне [0, 1].
-     Параметр NUM задает минимальное
-     число точек по координатам для
-     графика. См. также *note surf::.
-
-
-File: mgl_ru.info,  Node: Nonlinear fitting,  Next: Data create,  Prev: Other plotting,  Up: MGL interface
-
-1.16 Nonlinear fitting
-======================
-
-Эти команды подбирают параметры
-функций для наилучшей аппроксимации
-данных, т.е. минимизируют сумму \sum_i (f(x_i,
-y_i, z_i) - a_i)^2/s_i^2. При этом
-аппроксимирующая функция `f' может
-зависеть от одного аргумента `x' (1D
-случай), от двух аргументов `x,y' (2D
-случай) или от трех аргументов `x,y,z' (3D
-случай). Функция `f' также может
-зависеть от параметров. Список
-параметров задается строкой VAR
-(например, `abcd'). Обычно пользователь
-должен предоставить начальные
-значения параметров в переменной INI.
-Однако, при его отсутствии
-используются нулевые значения.
-
-   Команды *note fit:: и *note fits:: не рисуют
-полученные массивы. Они заполняют
-массив FIT по формуле `f' с найденными
-коэффициентами. При этом, координаты
-`x,y,z' равно распределены в вдоль осей
-координат. Число точек в FIT выбирается
-максимальным из размера массива FIT и 100.
-Формулу с найденными коэффициентами
-можно вывести с помощью команды *note
-putsfit::. См. раздел *note Fitting sample::, для
-примеров кода и графика.
-
-   Размерность массивов должны быть не
-меньше, чем число указанных массивов
-XDAT, YDAT, ZDAT. Также подбор коэффициентов
-будет осуществляться только вдоль
-указанных направлений (например, вдоль
-x и y если указаны только XDAT и YDAT). Если
-массив XDAT не указан, то используется
-массив со значениями равно
-распределенными вдоль оси x.
-
- -- Команда MGL: fits adat sdat 'func' 'var' [ini=0]
- -- Команда MGL: fits xdat adat sdat 'func' 'var' [ini=0]
- -- Команда MGL: fits xdat ydat adat sdat 'func' 'var' [ini=0]
- -- Команда MGL: fits xdat ydat zdat adat sdat 'func' 'var'
-          [ini=0]
-     "Подгоняют" формулу вдоль x-, y- и
-     z-направлений для массива заданного
-     параметрически A[i,j,k](X[i,j,k], Y[i,j,k],
-     Z[i,j,k]) с весовыми коэффициентами
-     SDAT[i,j,k].
-
- -- Команда MGL: fit adat 'func' 'var' [ini=0]
- -- Команда MGL: fit xdat adat 'func' 'var' [ini=0]
- -- Команда MGL: fit xdat ydat adat 'func' 'var' [ini=0]
- -- Команда MGL: fit xdat ydat zdat adat 'func' 'var' [ini=0]
-     "Подгоняют" формулу вдоль x-, y- и
-     z-направлений для массива заданного
-     параметрически A[i,j,k](X[i,j,k], Y[i,j,k],
-     Z[i,j,k]) с весовыми коэффициентами
-     равными 1.
-
- -- Команда MGL: putsfit `x y' ['pre'=" 'fnt'=" `size=-1']
-     Печатает последнюю подобранную
-     формулу с найденными
-     коэффициентами в точке {X, Y}. Строка
-     PRE будет напечатана перед формулой.
-     Все другие параметры такие же как в
-     *note Text printing::.
-
-
-File: mgl_ru.info,  Node: Data create,  Next: Data filling,  Prev: Nonlinear fitting,  Up: MGL interface
-
-1.17 Создание данных
-==================================
-
- -- Команда MGL: new dat [`nx=1 ny=1 nz=1']
-     Создает/пересоздает массив с именем
-     DAT данных указанного размера и
-     заполняет его нулями. Ничего не
-     делает при NX, NY, NZ отрицательных или
-     равных нулю.
-
- -- Команда MGL: var dat `num v1 [v2=nan]'
-     Создает одномерный массив с именем
-     DAT размером `num' и заполняет его
-     равномерно в диапазоне [V1, V2]. Если
-     V2=`nan', то используется V2=V1.
-
- -- Команда MGL: list dat `v1 ...'
-     Создает массив с именем DAT и
-     заполняет его числовыми значениями
-     аргументов `v1 ...'. Команда может
-     создавать 1d- и 2d-массивы. Для
-     создания 2d-массивов требуется
-     указать разделитель строк данных `|'.
-     Размер массива будет [максимальное
-     число чисел в строке * число строк].
-     Например, команда `list 1 | 2 3' создаст
-     массив [1 0; 2 3]. Отмечу, что
-     максимальное число аргументов 1000.
-
- -- Команда MGL: list dat d1 ...
-     Создает массив с именем DAT и
-     заполняет его числами из массивов `d1
-     ...'. Команда может создавать 2d- и
-     3d-массивы (если аргументы 2d массивы).
-     Младшие размерности всех массивов в
-     аргументах должны быть равны
-     размерности D1. Отмечу, что
-     максимальное число аргументов 1000.
-
- -- Команда MGL: copy dat dat2 ['eq'=" `on_axis=on']
- -- Команда MGL: copy dat `val'
-     Создает массив с именем DAT и
-     копирует в него данные из массива
-     DAT2. При этом, если указан параметр EQ,
-     то данные будут изменены по формуле
-     аналогично команде *note fill:: (для
-     `on_axis=on') или *note modify:: (для `on_axis=off').
-
- -- Команда MGL: idset dat 'ids'
-     Устанавливает символьные
-     обозначения для колонок данных.
-     Строка должна содержать символы
-     'a'...'z' один на колонку (без пробелов).
-
- -- Команда MGL: info dat [`detail=off']
-     Выводит информацию о массиве
-     (размер, максимальное/минимальное
-     значение, моменты и пр.). При `detail=off'
-     показывается только краткая
-     информация.
-
- -- Команда MGL: info 'text'
-     Выводит текст TEXT как информацию
-     (предупреждение).
-
-
-File: mgl_ru.info,  Node: Data filling,  Next: Rearrange data,  Prev: Data create,  Up: MGL interface
-
-1.18 Заполнение данных
-======================================
-
- -- Команда MGL: fill dat v1 v2 ['dir'='x']
-     Заполняет значениями равно
-     распределенными в диапазоне [V1, V2] в
-     направлении DIR={`x',`y',`z'}.
-
- -- Команда MGL: fill dat 'eq' [vdat=0 wdat=0]
-     Заполняет значениями вычисленными
-     по формуле EQ. Формула представляет
-     собой произвольное выражение,
-     зависящее от переменных `x', `y', `z', `u',
-     `v', `w'. Координаты `x', `y', `z' полагаются
-     меняющимися в диапазоне осей
-     координат (в отличие от *note modify::).
-     Переменная `u' - значения исходного
-     массива, переменные `v', `w' - значения
-     массивов VDAT, WDAT. Последние могут
-     быть опущены.
-
- -- Команда MGL: modify dat 'eq' [`dim=0']
- -- Команда MGL: modify dat 'eq' vdat [wdat=0]
-     Заполняет значениями вычисленными
-     по формуле EQ. Формула представляет
-     собой произвольное выражение,
-     зависящее от переменных `x', `y', `z', `u',
-     `v', `w'. Координаты `x', `y', `z' полагаются
-     меняющимися в диапазоне [0,1] (в
-     отличие от *note fill::). Переменная `u' -
-     значения исходного массива,
-     переменные `v', `w' - значения массивов
-     VDAT, WDAT. Последние могут быть опущены.
-     Если указан DIM>0, то изменяются
-     только слои >=DIM.
-
- -- MGL command: put dat `val [i=: j=: k=:]'
-     Присваивает значения (под-)массива
-     DAT[I, J, K] = VAL. Индексы I, J, K равные `:'
-     задают значениия VAL для всего
-     диапазона соответствующего
-     направления(ий). Например, `put dat val : 0
-     :' задает DAT[i,0,j]=VAL для i=0...(DAT.nx-1),
-     j=0...(DAT.nz-1).
-
- -- MGL command: put dat vdat [`i=: j=: k=:']
-     Копирует значения из массива VDAT в
-     диапазон значений массива DAT.
-     Индексы I, J, K равные `:' задают
-     диапазон изменения значений в
-     соответствующих направление(ях).
-     Младшие размерности массива VDAT
-     должны быть больше выбранного
-     диапазона массива DAT. Например, `put dat
-     v : 0 :' присвоит DAT[i,0,j]=VDAT.ny>DAT.nz ? VDAT[i,j] :
-     VDAT[i], где i=0...(DAT.nx-1), j=0...(DAT.nz-1) и
-     условие vdat.nx>=dat.nx выполнено.
-
-
-File: mgl_ru.info,  Node: Rearrange data,  Next: File I/O,  Prev: Data filling,  Up: MGL interface
-
-1.19 Изменение размеров данных
-=====================================================
-
- -- Команда MGL: rearrange dat `mx [my=0 mz=0]'
-     Изменяет размерность данных без
-     изменения самого массива данных,
-     так что результирующий массив MX*MY*MZ <
-     nx*ny*nz. Если один из параметров MY или MZ
-     ноль, то он будет выбран оптимальным
-     образом. Например, если MY=0, то будет
-     MY=nx*ny*nz/MX и MZ=1.
-
- -- Команда MGL: extend dat `n1 [n2=0]'
-     Увеличивает размер данных путем
-     вставки (|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|.
-
- -- Команда MGL: transpose dat ['dim'='yxz']
-     Транспонирует (меняет порядок
-     размерностей) массив данных. Новый
-     порядок размерностей задается
-     строкой DIM.
-
- -- Команда MGL: squeeze dat `rx [ry=1 rz=1 sm=off]'
-     Уменьшает размер данных путем
-     удаления элементов с индексами не
-     кратными RX, RY, RZ соответственно.
-     Параметр SMOOTH задает использовать
-     сглаживания (т.е. out[i]=\sum_{j=i,i+r} a[j]/r)
-     или нет (т.е. out[i]=a[j*r]).
-
- -- Команда MGL: crop dat `n1 n2' 'dir'
-     Обрезает границы данных при I<N1 и I>N2
-     (при N2>0) или I>`n[xyz]'-N2 (при N2<=0) вдоль
-     направления DIR.
-
- -- Команда MGL: delete dat
-     Удаляет массив DAT и освобождает
-     использованную память. Может быть
-     полезно для больших неиспользуемых
-     массивов.
-
- -- Команда MGL: delete dat 'dir' `[pos=off num=0]'
-     Удаляет NUM срезов вдоль направления
-     DIR с позиции POS.
-
- -- Команда MGL: insert dat 'dir' `[pos=off num=0]'
-     Вставляет NUM срезов вдоль
-     направления DIR с позиции POS и
-     заполняет их нулями.
-
-
-File: mgl_ru.info,  Node: File I/O,  Next: Make another data,  Prev: Rearrange data,  Up: MGL interface
-
-1.20 Чтение/сохранение данных
-===================================================
-
- -- Команда MGL: read dat 'fname'
-     Читает данные из текстового файла с
-     разделителями символом
-     пробела/табуляции с автоматическим
-     определением размера массива.
-     Двойной перевод строки начинает
-     новый срез данных (по направлению z).
-
- -- Команда MGL: read dat 'fname' `mx [my=1 mz=1]'
-     Читает данные из текстового файла с
-     заданными размерами. Ничего не
-     делается если параметры MX, MY или MZ
-     равны нулю или отрицательны.
-
- -- Команда MGL: readmat dat 'fname' [`dim=2']
-     Читает данные из текстового файла с
-     размерами, указанными в первых DIM
-     числах файла. При этом переменная DIM
-     задает размерность (1d, 2d, 3d) данных.
-
- -- Команда MGL: readall dat 'templ' `v1 v2 [dv=1 slice=off]'
-     Объединяет данные из нескольких
-     текстовых файлов. Имена файлов
-     определяются вызовом функции
-     `sprintf(fname,templ,val);', где VAL меняется от V1
-     до V2 с шагом DV. Данные загружаются
-     один за другим в один и тот же срез
-     данных (при SLICE=`off') или
-     срез-за-срезом (при SLICE=`on').
-
- -- Команда MGL: readall dat 'templ' `[slice=off]'
-     Объединяет данные из нескольких
-     текстовых файлов, чьи имена
-     удовлетворяют шаблону TEMPL (например,
-     TEMPL=`"t_*.dat"'). Данные загружаются один
-     за другим в один и тот же срез данных
-     (при SLICE=`off') или срез-за-срезом (при
-     SLICE=`on').
-
- -- Команда MGL: save dat 'fname'
-     Сохраняет массив данных в текстовый
-     файл.
-
- -- Команда MGL: readhdf dat 'fname' 'dname'
-     Читает массив с именем DNAME из HDF5 или
-     HDF4 файла FNAME.
-
- -- Команда MGL: savehdf dat 'fname' 'dname'
-     Сохраняет массив под именем DNAME в HDF5
-     или HDF4 файл FNAME.
-
- -- Команда MGL: import dat 'fname' 'sch' [`v1=0 v2=1']
-     Читает данные из растрового файла.
-     RGB значения пикселов преобразуются
-     в число в диапазоне [V1, V2] используя
-     цветовую схему SCH (*note Color scheme::).
-
- -- Команда MGL: export dat 'fname' 'sch' [`v1=0 v2=0']
-     Сохраняет данные в растровый файл.
-     Числовые значения, нормированные в
-     диапазон [V1, V2], преобразуются в RGB
-     значения пикселов, используя
-     цветовую схему SCH (*note Color scheme::). Если
-     V1>=V2, то значения V1, V2 определяются
-     автоматически как минимальное и
-     максимальное значение данных.
-
-
-File: mgl_ru.info,  Node: Make another data,  Next: Change data,  Prev: File I/O,  Up: MGL interface
-
-1.21 Создание новых данных
-=============================================
-
- -- Команда MGL: combine res adat bdat
-     Возвращает в массиве данных RES
-     прямое произведение массивов
-     (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.).
-
- -- Команда MGL: evaluate res dat idat [`norm=on']
- -- Команда MGL: evaluate res dat idat jdat [`norm=on']
- -- Команда MGL: evaluate res dat idat jdat kdat [`norm=on']
-     Возвращает массив данных RES,
-     полученный в результате
-     интерполяции исходного массива в
-     точках других массивов (например,
-     res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры
-     массивов IDAT, JDAT, KDAT должны совпадать.
-     Координаты в IDAT, JDAT, KDAT полагаются
-     нормированными в диапазон [0,1] (при
-     NORM=`on') или в диапазоны [0,nx], [0,ny], [0,nz]
-     соответственно.
-
- -- Команда MGL: hist res dat `num v1 v2 [nsub=0]'
- -- Команда MGL: hist res dat wdat `num v1 v2 [nsub=0]'
-     Возвращает распределение
-     (гистограмму) RES из NUM точек от
-     значений массива DAT в диапазоне [V1,
-     V2]. Массив WDAT задает веса элементов
-     (все веса равны 1 если WDAT не указан).
-     Параметр NSUB задает число
-     дополнительных точек интерполяции
-     (для сглаживания получившейся
-     гистограммы).
-
- -- Команда MGL: hist res xdat adat
- -- Команда MGL: hist res xdat ydat adat
- -- Команда MGL: hist res xdat ydat zdat adat
-     Возвращает распределение
-     (гистограмму) RES от значений массива
-     ADAT, параметрически зависящего от
-     координат {XDAT,YDAT,ZDAT} в диапазоне осей
-     координат. Массив ADAT играет роль
-     веса точки. Число точек в результате
-     RES - максимум из размера RES и 100.
-
- -- Команда MGL: momentum res dat 'how' ['dir'='z']
-     Возвращает в массиве данных RES
-     момент (1d массив) данных DAT вдоль
-     направления DIR. Строка HOW определяет
-     тип момента. Момент определяется как
-     res_k = \sum_ij how(x_i,y_j,z_k) dat_ij/ \sum_ij a_ij если
-     DIR=`z' и т.д. Координаты `x', `y', `z' -
-     индексы массива в диапазоне [0,1].
-
- -- Команда MGL: sum res dat 'dir'
-     Возвращает в массиве данных RES
-     результат суммирования DAT вдоль
-     направления(ий) DIR.
-
- -- Команда MGL: max res dat 'dir'
-     Возвращает в массиве данных RES
-     максимальное значение DAT вдоль
-     направления(ий) DIR.  Gets array which is the maximal
-     data values in given direction or direction(s).
-
- -- Команда MGL: min res dat 'dir'
-     Возвращает в массиве данных RES
-     минимальное значение DAT вдоль
-     направления(ий) DIR.
-
- -- Команда MGL: resize res dat `mx [my=1 mz=1]'
-     Возвращает массив данных RES
-     размером MX, MY, MZ со значениями
-     полученными интерполяцией значений
-     массива DAT.
-
- -- Команда MGL: subdata res dat `xx [yy=: zz=:]'
-     Возвращает в RES подмассив массива
-     данных DAT с фиксированными
-     значениями индексов с
-     положительными значениями.
-     Например, `subdata a b : 2' выделяет третью
-     строку (индексы начинаются с нуля),
-     `subdata a b 4 :' выделяет 5-ую колонку, `subdata
-     a b : : 3' выделяет 4-ый срез и т.д.
-
- -- Команда MGL: trace res dat
-     Возвращает массив REF диагональных
-     элементов DAT[i,i] (для 2D данных) или
-     DAT[i,i,i] (для 3D данных) где i=0...nx-1. В 1D
-     случае возвращается сам массив
-     данных DAT. Размеры массива данных
-     должен быть DAT.ny, DAT.nz >= DAT.nx или DAT.ny,
-     DAT.nz = 1.
-
- -- Команда MGL: transform dat 'type' real imag
-     Выполняет интегральное
-     преобразование комплексных данных
-     REAL, IMAG в выбранном направлении и
-     возвращает модуль результата в RES.
-     Порядок и тип преобразований
-     задается строкой TYPE: первый символ
-     для x-направления, второй для
-     y-направления, третий для
-     z-направления. Возможные символы: `f' -
-     прямое преобразование Фурье, `i' -
-     обратное преобразование Фурье, `s' -
-     синус преобразование, `c' - косинус
-     преобразование, `h' - преобразование
-     Ханкеля, `n' или ` ' - нет
-     преобразования.
-
- -- Команда MGL: transforma dat 'type' ampl phase
-     Аналогично предыдущему с заданными
-     амплитудой AMPL и фазой PHASE
-     комплексных чисел.
-
- -- Команда MGL: stfad res real imag `dn' ['dir'='x']
-     Выполняет оконное преобразование
-     Фурье длиной DN для комплексных
-     данных REAL, IMAG и возвращает модуль
-     результата в RES. Например, для 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']
-     Решает уравнение в частных
-     производных 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. См. раздел *note
-     PDE sample::, для примеров кода и графика.
-
- -- Команда MGL: ray res 'ham' `x0 y0 z0 p0 q0 v0 [dt=0.1
-          tmax=10]'
-     Решает систему геометрооптических
-     уравнений d_r_/dt = d HAM/d_p_, d_p_/dt = -d HAM/d_r_.
-     Это гамильтоновы уравнения для
-     траектории частицы в 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 задают шаг и
-     максимальное время интегрирования.
-     Результат RES - массив {x,y,z,p,q,v,t} с
-     размером {7 * int(TMAX/DT+1) }. См. раздел *note
-     Beam tracing sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: qo2d res 'ham' ini_re ini_im ray [`r=1 k0=100'
-          xx=0 yy=0]
-     Решает уравнение в частных
-     производных 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
-     задает опорный луч для
-     сопровождающей системы координат.
-     Можно использовать луч найденный с
-     помощью `ray'. Опорный луч должен быть
-     достаточно гладкий, чтобы система
-     координат была однозначной и для
-     исключения ошибок интегрирования.
-     Если массивы XX и YY указаны, то в них
-     записываются декартовы координаты
-     для каждой точки найденного
-     решения. См. также *note pde::. См. раздел
-     *note Beam tracing sample::, для примеров кода и
-     графика.
-
- -- Команда MGL: jacobian res xdat ydat [zdat=0]
-     Вычисляет якобиан преобразования
-     {i,j,k} в {XDAT,YDAT,ZDAT}, где координаты {i,j,k}
-     полагаются нормированными в
-     интервал [0,1]. Якобиан находится по
-     формуле det||dr_\alpha/d\xi_\beta||, где
-     r={XDAT,YDAT,ZDAT} и \xi={i,j,k}. Все размерности
-     всех массивов должны быть
-     одинаковы. Данные должны быть
-     трехмерными если указаны все 3
-     массива {XDAT,YDAT,ZDAT} или двумерными
-     если только 2 массива {XDAT,YDAT}.
-
-
-File: mgl_ru.info,  Node: Change data,  Next: Operators,  Prev: Make another data,  Up: MGL interface
-
-1.22 Изменение данных
-====================================
-
-Эти команды изменяют данные вдоль
-заданного направления(ий) типа
-например дифференцирования,
-интегрирования и т.д. Направление
-указывается строкой DIR, которая может
-содержать символы `x', `y' и/или `z', вдоль
-которых изменения будут применены.
-
- -- Команда MGL: cumsum dat 'dir'
-     Суммирует с накоплением в выбранном
-     направлении(ях).
-   
- -- Команда MGL: integrate dat 'dir'
-     Выполняет интегрирование (подобно
-     суммированию с накоплением) в
-     выбранном направлении(ях).
-   
- -- Команда MGL: diff dat 'dir'
-     Выполняет дифференцирование в
-     выбранном направлении(ях).
-
- -- Команда MGL: diff dat xdat ydat [zdat=0]
-     Выполняет дифференцирование данных
-     DAT, параметрически зависящих от
-     координат, в направлении XDAT с YDAT,
-     ZDAT=constant. Параметр ZDAT может быть
-     опущен, что соответствует 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 a x
-     y', а обычная производная по `y' будет
-     равна `diff a y x'.
-
- -- Команда MGL: diff2 dat 'dir'
-     Выполняет двойное
-     дифференцирование (как в операторе
-     Лапласа) в выбранном направлении(ях).
-
- -- Команда MGL: sinfft dat 'dir'
-     Выполняет синус преобразование в
-     выбранном направлении(ях). Синус
-     преобразование есть \sum a_i \sin(k i).
-   
- -- Команда MGL: cosfft dat 'dir'
-     Выполняет косинус преобразование в
-     выбранном направлении(ях). Синус
-     преобразование есть \sum a_i \cos(k i).
-   
- -- Команда MGL: hankel dat 'dir'
-     Выполняет преобразование Ханкеля в
-     выбранном направлении(ях).
-     Преобразование Ханкеля есть \sum a_i
-     J_0(k i).
-
- -- Команда MGL: swap dat 'dir'
-     Меняет местами левую и правую части
-     данных в выбранном направлении(ях).
-     Полезно для отображения результата
-     FFT.
-   
- -- Команда MGL: roll dat 'dir' num
-     Сдвигает данные на NUM ячеек в
-     выбранном направлении(ях).
-     Соответствует замене индекса на
-     I->(I+NUM)%N.
-
- -- Команда MGL: mirror dat 'dir'
-     Отражает данные в выбранном
-     направлении(ях). Соответствует
-     замене индекса на I->N-I.
-
- -- Команда MGL: sew dat ['dir'='xyz' `da=2*pi']
-     Удаляет скачки данных (например,
-     скачки фазы после обратных
-     тригонометрических функций) с
-     периодом DA в выбранном
-     направлении(ях).
-
- -- Команда MGL: smooth data `type' ['dir'='xyz']
-     Сглаживает данные в выбранном
-     направлении(ях) методом TYPE. Сейчас
-     поддерживаются 4 метода: `0' ничего не
-     делает, `1' линейное усреднение по 3
-     точкам, `2' линейное усреднение по 5
-     точкам, `3' квадратичное усреднение
-     по 5 точкам.
-
- -- Команда MGL: envelop dat ['dir'='x']
-     Находит огибающую данных в
-     выбранном направлении. Только одно
-     направление может быть выбрано за
-     раз.
-
- -- Команда MGL: normsl dat `v1 v2' ['dir'='z' `keep=on sym=off']
-     Нормирует данные срез-за-срезом в
-     выбранном направлении DIR в интервал
-     [V1,V2]. Если SYM=`on', то используется
-     симметричный интервал [-max(|v1|,|v2|),
-     max(|v1|,|v2|)]. Если KEEP=`on', то максимальное
-     значение k-го среза ограничено
-     величиной \sqrt{\sum a_ij(k)/\sum a_ij(0)}.
-
- -- Команда MGL: norm dat `v1 v2 [sym=off dim=0]'
-     Нормирует данные в интервал [V1,V2].
-     Если SYM=`on', то используется
-     симметричный интервал [-max(|v1|,|v2|),
-     max(|v1|,|v2|)]. Изменения применяются
-     только к срезам >=DIM.
-
-
-File: mgl_ru.info,  Node: Operators,  Next: Program flow,  Prev: Change data,  Up: MGL interface
-
-1.23 Операторы
-=======================
-
- -- Команда MGL: multo dat dat2
-     Поэлементно умножает массив DAT на DAT2.
-
- -- Команда MGL: multo dat `val'
-     Умножает каждый элемент на число.
-
- -- Команда MGL: divto dat dat2
-     Поэлементно делит массив DAT на DAT2.
-
- -- Команда MGL: divto dat `val'
-     Делит каждый элемент на число.
-
- -- Команда MGL: addto dat dat2
-     Поэлементно прибавляет DAT2 к массиву
-     DAT.
-
- -- Команда MGL: addto dat `val'
-     Прибавляет число к каждому элементу.
-
- -- Команда MGL: subto dat dat2
-     Поэлементно вычитает DAT2 из массива
-     DAT.
-
- -- Команда MGL: subto dat `val'
-     Вычитает число из каждого элемента.
-
-
-File: mgl_ru.info,  Node: Program flow,  Next: Command options,  Prev: Operators,  Up: MGL interface
-
-1.24 Программирование
-=====================================
-
-Эти команды управляют порядком
-выполнения других команд (условия,
-циклы, подпрограммы), (пере-)определяют
-аргументы скрипта и пр.
-
- -- Команда MGL: chdir 'path'
-     Переходит в папку PATH.
-
- -- Команда MGL: define $N smth
-     Задает N-ый аргумент скрипта равным
-     SMTH. Отмечу, что SMTH используется как
-     есть (с символами `'' если
-     присутствуют). Выполняется только
-     подстановка других
-     макроопределений $0...$9, $a...$z. Здесь N
-     это цифра (0...9) или буква (a...z).
-
- -- Команда MGL: define name smth
-     Определяет константу (скаляр) с
-     именем `name' и числовым значением `smth'.
-     Позднее она может быть использована
-     как обычное число.
-   
- -- Команда MGL: defchr $N smth
-     Задает N-ый аргумент скрипта равным
-     символу с UTF кодом SMTH. Здесь N это
-     цифра (0...9) или буква (a...z).
-   
- -- Команда MGL: defnum $N smth
-     Задает N-ый аргумент скрипта равным
-     числовому значению SMTH. Здесь N это
-     цифра (0...9) или буква (a...z).
-   
- -- Команда MGL: defpal $N smth
-     Задает N-ый аргумент скрипта равным
-     символу палитры с индексом,
-     найденным из SMTH. Здесь N это цифра
-     (0...9) или буква (a...z).
-
- -- Команда MGL: call 'fname' [ARG1 ARG2 ... ARG9]
-     Переходит к выполнению (вызывает)
-     подпрограммы FNAME (или внешнего
-     скрипта, если функция не была
-     найдена). Опциональные аргументы
-     передаются в подпрограмму. См. также
-     *note func::.
-   
- -- Команда MGL: func 'fname' [narg=0]
-     Определяет подпрограмму с именем
-     FNAME и задает число требуемых
-     аргументов. Аргументы будут
-     помещены в параметры скрипта $1, $2, ...
-     $9. Отмечу, что выполнение основной
-     программы должно быть остановлено
-     до начала определений подпрограмм.
-     См. также *note stop::,  *note return::.
-   
- -- Команда MGL: return
-     Возвращается из подпрограммы.
-
- -- Команда MGL: if dat 'cond'
-     Начинает блок команд, выполняемый
-     если каждый элемент DAT
-     удовлетворяет условию COND.
-
- -- Команда MGL: if `val'
-     Начинает блок команд, выполняемый
-     если `val' не ноль.
-   
- -- Команда MGL: elseif dat 'cond'
-     Начинает блок команд, выполняемый
-     если предыдущий `if' или `elseif' не был
-     выполнен и каждый элемент DAT
-     удовлетворяет условию COND.
-
- -- Команда MGL: elseif `val'
-     Начинает блок команд, выполняемый
-     если предыдущий `if' или `elseif' не был
-     выполнен и `val' не ноль.
-   
- -- Команда MGL: else
-     Начинает блок команд, выполняемый
-     если предыдущий `if' или `elseif' не был
-     выполнен.
-   
- -- Команда MGL: endif
-     Заканчивает определение блока
-     `if/elseif/else'.
-
- -- Команда MGL: for $N `v1 v2 [dv=1]'
-     Начинает блок команд, выполняемый в
-     цикле с $N-ым аргументом
-     изменяющимся от V1 до V2 с шагом DV.
-     Здесь N это цифра (0...9) или буква (a...z).
-
- -- Команда MGL: for $N dat
-     Начинает блок команд, выполняемый в
-     цикле с $N-ым аргументом пробегающим
-     значения массива DAT. Здесь N это
-     цифра (0...9) или буква (a...z).
-   
- -- Команда MGL: next
-     Заканчивает блок цикла `for'.
-
- -- Команда MGL: once `val'
-     Определяет код (между `once on' и `once off')
-     который будет выполнен только один
-     раз. Полезно для работы с большими
-     данными в программах типа UDAV.
-   
- -- Команда MGL: stop
-     Останавливает выполнение скрипта.
-
-
-File: mgl_ru.info,  Node: Command options,  Next: Suffixes,  Prev: Program flow,  Up: MGL interface
-
-1.25 Опции команд
-============================
-
-Опции команд позволяют легко
-настроить вид отдельного графика не
-меняя глобальных настроек для все
-рисунка. Опции указываются после
-команды. Каждая опция отделяется от
-предыдущей символом `;'. Опции работают
-так, что запоминают текущие настройки
-рисунка, применяют собственные
-настройки, выполняют команду и
-возвращают глобальные настройки
-обратно. Поэтому использование опций
-для команд обработки данных или
-настройки графика бесполезно.
-
-   Наиболее часто используемые опции -
-`xrange, yrange, zrange', устанавливающие границы
-изменения осей координат (и тем самым
-автоматических массивов). Например,
-команда `plot y; xrange 0.1 0.9' построит кривую
-с x-координатой равно распределенной в
-интервале 0.1 ... 0.9, а не вдоль текущей
-оси x.
-
-   Полный список опций: 
-
- -- Опция MGL: alpha `val'
- -- Опция MGL: alphadef `val'
-     Задает величину прозрачности
-     поверхности. Значение должно быть в
-     диапазоне [0, 1]. См. также *note alphadef::
-   
- -- Опция MGL: ambient `val'
-     Задает яркость фонового освещения.
-     Значение должно быть в диапазоне [0,
-     1]. См. также *note ambient::
-   
- -- Опция MGL: crange `val1 val2'
-     Задает границы цветовой шкалы. См.
-     также *note crange::
-   
- -- Опция MGL: xrange `val1 val2'
-     Задает границы изменения
-     координаты x. См. также *note xrange::
-   
- -- Опция MGL: yrange `val1 val2'
-     Задает границы изменения
-     координаты y. См. также *note yrange::
-   
- -- Опция MGL: zrange `val1 val2'
-     Задает границы изменения
-     координаты z. См. также *note zrange::
-   
- -- Опция MGL: cut `val'
-     Задает обрезание точек за пределами
-     осей координат. См. также *note cut::
-   
- -- Опция MGL: fontsize `val'
-     Задает размер текста. См. также *note
-     font::
-   
- -- Опция MGL: marksize `val'
-     Задает размер маркеров. См. также *note
-     marksize::
-   
- -- Опция MGL: meshnum `val'
-     Задает ориентировочное число линий,
-     стрелок, ячеек и пр. См. также *note
-     meshnum::
-   
- -- Опция MGL: legend 'txt'
-     Добавляет строку 'txt' во внутренний
-     массив записей легенды. Стиль линии
-     и маркера аргумента последней
-     вызванной команды построения *note 1D
-     plotting::. См. также *note legend::
-
-
-File: mgl_ru.info,  Node: Suffixes,  Next: Utilities,  Prev: Command options,  Up: MGL interface
-
-1.26 Суффиксы переменных
-==========================================
-
-Суффиксы позволяют быстро получить
-числовую характеристику (размер,
-максимальное или минимальное
-значение, сумму элементов и т.д.)
-массива данных и использовать ее как
-число (скаляр) в аргументах. Суффиксы
-начинаются с точки `.' сразу после (без
-пробелов) имени переменной и
-временного массива. Например, `a.nx' даст
-размер массива A по оси х, `b(1).max' даст
-максимальное значение второй строки
-массива B, `(c(:,0)^2).sum' даст сумму
-квадратов элементов первой колонки
-массива C и т.д.
-
-   Полный список суффиксов:
-*nx, ny, nz*
-     Размер массива в направлении x, y, z
-     соответственно.
-
-*max*
-     Максимальное значение массива.
-
-*min*
-     Минимальное значение массива.
-
-*sum*
-     Сумма элементов массива.
-
-*a*
-     Первый элемент массива (элемент с
-     индексами 0,0,0).
-
-*fst*
-     Первое не нулевое значение массива.
-
-*lst*
-     Последнее не нулевое значение
-     массива.
-
-*mx, my, mz*
-     Положение максимума в направлении x,
-     y, z соответственно.
-
-*ax, ay, az, aa*
-     Положение центра масс в направлении
-     x, y, z соответственно или среднее
-     значение массива.
-
-*wx, wy, wz, wa*
-     Ширина в направлении x, y, z
-     соответственно или дисперсия
-     элементов массива.
-
-*sx, sy, sz, sa*
-     Асимметрия в направлении x, y, z
-     соответственно или элементов
-     массива.
-
-*kx, ky, kz, ka*
-     Эксцесс в направлении x, y, z
-     соответственно или элементов
-     массива.
-
-
-File: mgl_ru.info,  Node: Utilities,  Prev: Suffixes,  Up: MGL interface
-
-1.27 Утилиты для MGL
-==============================
-
-MathGL содержит несколько программ для
-работы со скриптами MGL. Есть утилита
-для сохранения в растровое (`mgl2png',
-`mgl2gif') или векторное (`mgl2eps', `mgl2svg')
-изображения. Программа `mglview'
-показывает результат выполнения
-скрипта MGL и позволяет вращать и
-настраивать график. Также можно
-транслировать MGL скрипт в C++ файл с
-помощью программы `mgl2cpp'.
-
-   Все эти программы имеют схожий набор
-аргументов. Первым идет имя скрипта, а
-вторым идет имя выходного файлы (может
-быть опущено), последние аргументы -
-опции скрипта и программы. К опциям
-относятся параметры скрипта (это `$0, $1,
-... $9') и настройки локали. Параметры
-скрипта имеют формат `-Nval', где N=0,1...9 -
-номер параметра, val - его значние.
-Например, опция `-1test' заменит `$1' на `test'
-в скрипте. Опция -Lval устанавливает
-локаль в значение val. Например, `-Lutf8'
-будет использовать UTF-8 в скрипте.
-
-   Также можно создавать анимированные
-изображения GIF или набор JPEG файлов с
-именами `frameNNNN.jpg' (где `NNNN' - номер кадра).
-Для этого в скрипте надо указать
-параметры анимации для каждого кадра
-(строками с коментариями `##a val' или
-опциями `-Aval') или в цикле (строкой с
-комментарием `##с v1 v2 [dv]' или опцию
-`-Cn1:n2'), которые будут подставлены в
-качестве параметра `$0' при
-последовательном вызове скрипта. Для
-сохранения кадров в JPEG просто добавьте
-команду `write ''' в конце скрипта.
-
-
-File: mgl_ru.info,  Node: Examples,  Next: Samples,  Prev: MGL interface,  Up: Top
-
-2 MathGL examples
-*****************
-
-This chapter contain information about basic and advanced MathGL, hints
-and samples for all types of graphics. I recommend you read first 2
-sections one after another and at least look on "Hints" section. Also I
-recommend you to look at *note General concepts::. Sample code for some
-of these examples can be found in `http://mathgl.sf.net/pictures.html'
-and in *note Samples::.
-
-* Menu:
-
-* Basic usage::
-* Advanced usage::
-* Data handling::
-* Data plotting::
-* Hints::
-
-
-File: mgl_ru.info,  Node: Basic usage,  Next: Advanced usage,  Up: Examples
-
-2.1 Basic usage
-===============
-
-MGL script can be used by several manners. Each has positive and
-negative sides:
-   * _The using of MGL in UDAV._
-
-     Positive side is the possibility to view the plot at once and to
-     modify it, rotate, zoom or switch on transparency or lighting) by
-     hand or by mouse. Negative sides are: the need of X-terminal.
-
-   * _Direct writing to file in bitmap or vector format without
-     creation of graphical window._
-
-     Positive aspects are: batch processing of similar data set, for
-     example, a set of resulting data files for different calculation
-     parameters), running from the console program, including the
-     cluster calculation), fast and automated drawing, saving pictures
-     for further analysis, or demonstration). Negative sides are: the
-     usage of the external program for picture viewing. Also, the data
-     plotting is non-visual. So, you have to imagine the picture, view
-     angles, lighting and so on) before the plotting. I recommend to
-     use graphical window for determining the optimal parameters of
-     plotting on the base of some typical data set. And later use these
-     parameters for batch processing in console program.
-
-     In this case you can use a set of programs: `mgl2png', `mgl2gif',
-     `mgl2eps', `mgl2svg' or `mglview' for viewing.
-
-   The simplest script is
-box         # draw bounding box
-axis        # draw axis
-fplot 'x^3' # draw some function
-
-   Just type it in UDAV and press F5. Also you can save it in text file
-`test.mgl' and type in the console `mgl2png test.mgl' what produce file
-`test.mgl.png' with resulting picture.
-
-
-File: mgl_ru.info,  Node: Advanced usage,  Next: Data handling,  Prev: Basic usage,  Up: Examples
-
-2.2 Advanced usage
-==================
-
-Now I show several non-obvious features of MGL: several subplots in a
-single picture, curvilinear coordinates, text printing and so on.
-Generally you may miss this section at first reading, but I don't
-recommend it.
-
-* Menu:
-
-* Subplots::
-* Axis and grids::
-* Curvilinear coordinates::
-* Text printing example::
-
-
-File: mgl_ru.info,  Node: Subplots,  Next: Axis and grids,  Up: Advanced usage
-
-2.2.1 Subplots
---------------
-
-Let me demonstrate possibilities of axes transformation. MathGL has the
-following functions: `SubPlot', `InPlot', `Aspect' and `Rotate', *note
-Transformation matrix::). The order of their calling is strictly
-determined. First, one changes the position of axes in image area,
-functions `SubPlot' and `InPlot'). After that one may rotate the plot,
-function `Rotate'). Finally, one may change aspects of axes, function
-`Aspect'). The following code illustrates the aforesaid it:
-subplot 2 2 0:box
-text -1 1.1 'Just box' 'L'
-inplot 0.2 0.5 0.7 1:box
-text 0 1.2 'Inplot example'
-
-subplot 2 2 1
-rotate 60 40:aspect 1 1 1
-box:text 1 1 1.5 'rotate only' 'R'
-
-subplot 2 2 2
-rotate 60 40:aspect 1 1 2
-box:text 0 0 2 'aspect and rotate'
-
-subplot 2 2 3
-rotate 60 40:aspect 1 2 2
-box:text 0 0 1.5 'Aspect in other direction'
- Here I used function `text' for printing the text in arbitrary
-position of picture, *note Text printing::). Text coordinates and size
-are connected with axes. However, text coordinates may be everywhere,
-including the outside the bounding box. I shall show its features later
-in *Note Text printing example::.
-
-   Note that several commands can be placed in a string if they are
-separated by `:' symbol.
-
- [image src="../png/sample1.png" ]
-
-Example of several subplots on the single picture.
-
-
-File: mgl_ru.info,  Node: Axis and grids,  Next: Curvilinear coordinates,  Prev: Subplots,  Up: Advanced usage
-
-2.2.2 Axis and grids
---------------------
-
-MathGL library can draw not only the bounding box but also the axes,
-grids, labels and so on. The limits of axes and their origin (the point
-of intersection) are determined by function `axis'. Also you can use
-`xrange, yrange, zrange' functions (*note Axis settings::). Ticks on
-axis are specified by functions `xtick, ytick, ztick, ttick'. First
-argument the direction for each change will be applied. Second argument
-gives the step between ticks (if positive) or gives the number of ticks
-on the axis (if negative) or set to use logarithmic ticks (if zero).
-Third argument gives numbers of sub-ticks between ticks (default is
-zero). Last argument define the initial ticks position.
-
-   Function `Axis' draws axes. Its textual string shows in which
-directions the axis or axes will be drawn (by default `'xyz'', function
-draws axes in all directions). Function `Grid' draws grid
-perpendicularly to specified directions. Example of axes and grid
-drawing is:
-subplot 2 2 0
-xtick 0.4 3     # sets tick step to 0.5
-ytick 0.4 3     # and draws 3 subticks
-box             # should be after the ticks change
-axis 'xy': grid
-text 0 1.3 1 'axis and grid'
-
-xtick -5: ytick -5  # restore back
-subplot 2 2 1:rotate 60 40
-origin 0 0 0
-axis
-xlabel 'x' 1
-ylabel 'y' 1
-zlabel 'z' 1
-text 0 0 1.5 'axis and labels'
-
-subplot 2 2 2:rotate 60 40
-xtick 0.2: ytick 0.2: ztick 0.2 # too low step of ticks
-origin -1 -1 -1
-axis:grid
-text 0 0 1.5 'shift origin and add grid'
-text 0 0 1.2 '(note, too many ticks)'
-
-subplot 2 2 3:rotate 60 40
-xtick -6: ytick -6  # decrease the number of ticks
-axis 'yz'
-ylabel 'y axis'
-zlabel 'z axis'
-text 0 0 1.5 'remove x axis, and'
-text 0 0 1.2 'decrease number of ticks'
-
-   This example shows the importance of the correct choosing of the
-number of ticks on axis. If tick step is too small then its text may
-overlap and becomes unreadable. This code has the example of `Label'
-function. It draws label for axis in specified direction. The text
-position on axis is specified by third argument of `Label' function. If
-it is positive then then text is drawn near the axis maximum, if
-negative then the same takes place near the minimum of axis, if zero -
-then at the center of axis.
-
- [image src="../png/sample2.png" ]
-
-Example of setting up axis range and axis ticks.
-
-
-File: mgl_ru.info,  Node: Curvilinear coordinates,  Next: Text printing example,  Prev: Axis and grids,  Up: Advanced usage
-
-2.2.3 Curvilinear coordinates
------------------------------
-
-Now let use curvilinear coordinates. In difference from other systems
-of plot creation, MathGL uses textual formulas for connection of the
-old (data) and new (output) coordinates. This allows one to plot in
-arbitrary coordinates. The following code plots the line Y=0, Z=0 in
-Cartesian, polar, parabolic and spiral coordinates:
-new x 50: new y 50: new z 50
-fill y 0.5 0.5: fill x -1 1 # creates data arrays
-origin -1 1 -1
-
-subplot 2 2 0:rotate 60 40
-plot x y z 'r2'
-axis: grid
-text 0 1.3 1 'cartesian'
-
-subplot 2 2 1:rotate 60 40
-axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
-plot x y z 'r2'
-axis: grid
-text 0 1.3 1 'cylindrical'
-
-subplot 2 2 2:rotate 60 40
-axis '2*y*x' 'y*y - x*x' ''
-plot x y z 'r2'
-axis: grid
-text 0 1.3 1 'parabolic'
-
-subplot 2 2 3:rotate 60 40
-axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
-plot x y z 'r2'
-axis: grid
-text 0 1.3 1 'spiral'
-
- [image src="../png/sample3.png" ]
-
-Example of curvilinear coordinates
-
-
-File: mgl_ru.info,  Node: Text printing example,  Prev: Curvilinear coordinates,  Up: Advanced usage
-
-2.2.4 Text printing example
----------------------------
-
-MathGL prints text by vector font. There are functions for manual
-specifying of text position (like `Puts') and for its automatic
-selection (like `Label', `legend' and so on). MathGL prints text always
-in specified position even if it lies outside the bounding box. The
-default size of font is specified by command FONTSIZE. However, the
-actual size of output string depends on position of axes (depends on
-functions `SubPlot', `InPlot'). The switching of the font style
-(italic, bold, wire and so on) can be done for the whole string (by
-function parameter) or inside the string. By default MathGL parses
-TeX-like commands for symbols and indexes (see *note Font styles::).
-Example of MathGL font drawing is:
-text 0 1 'Text can be in ASCII and in Unicode'
-text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
-text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
-text 0 -0.2 'Easy to \a{overline} or \u{underline}'
-text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
-text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
-
- [image src="../png/sample4.png" ]
-
-Example of text printing with different font effects
-
-   Another example demonstrate the features of TeX formula parsing.
-text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}', 0, -4
-
- [image src="../png/samplee.png" ]
-
-Example of TeX formula parsing
-
-
-File: mgl_ru.info,  Node: Data handling,  Next: Data plotting,  Prev: Advanced usage,  Up: Examples
-
-2.3 Data handling
-=================
-
-* Menu:
-
-* Array creation::
-* Data changing::
-
-
-File: mgl_ru.info,  Node: Array creation,  Next: Data changing,  Up: Data handling
-
-2.3.1 Array creation
---------------------
-
-One can put numbers into the data instance by several ways. Let us do
-it for sinus function:
-   * one can create array by `list' command list a 0 0.04 0.16 0.36 0.64 1
-
-   * another way is to copy from "inline" array copy a [0,0.04,0.16,0.36,0.64,1]
-
-   * next way is to fill the data by textual formula with the help of
-     `modify' function new a 6
-     modify a 'x^2'
-
-   * or one may fill the array in some interval and modify it later new a 6
-     fill a 0 1
-     modify a 'u^2'
-
-   * or fill the array using current axis range new a 6
-     fill a '(x+1)^2/4'
-
-   * finally it can be loaded from file new s 6: modify s 'x^2'
-     save s 'sqr.dat'    # create file first
-     read a 'sqr.dat'    # load it
-
-   * at this one can read only part of data new s 6: modify s 'x^2'
-     save s 'sqr.dat'    # create file first
-     read a 'sqr.dat' 5  # load it
-
-   Creation of 2d- and 3d-arrays is mostly the same. One can use direct
-data filling by `list' command
-list a 11 12 13 | 21 22 23 | 31 32 33
- or by inline arrays
-copy a [[11,12,13],[21,22,23],[31,32,33]]
- Also data can be filled by formula
-new z 30 40
-fill z 'sin(pi*x)*cos(pi*y)'
- or loaded from file.
-
-   The only non-obvious thing here is using multidimensional arrays in
-C/C++, i.e. arrays defined like `float dat[40][30];'. Since, formaly
-this arrays element `dat[i]' can address the memory in arbitrary place
-you should use the proper function to convert such arrays to `mglData'
-object. For C++ this is functions like `mglData::Set(float **dat, int
-N1, int N2'. For C this is functions like `mgl_data_set_float2(HMDT d,
-const float **dat, int N1, int N2'. At this, you should keep in mind
-that `nx=N2' and `ny=N1' after conversion.
-
-
-File: mgl_ru.info,  Node: Data changing,  Prev: Array creation,  Up: Data handling
-
-2.3.2 Data changing
--------------------
-
-MathGL has functions for data processing: differentiating, integrating,
-smoothing and so on. Let us consider some examples. The simplest ones
-are integration and differentiation. The direction in which operation
-will be performed is specified by textual string, which may contain
-symbols `x', `y' or `z'. For example, the call of `diff a 'x'' will
-differentiate data along `x' direction; the call of `integrate a 'xy''
-perform the double integration of data along `x' and `y' directions;
-the call of `diff2 a 'xyz'' will apply 3d Laplace operator to data and
-so on. Example of this operations on 2d array a=x*y is presented in
-code:
-new a 30 40: modify a 'x*y'
-axis 0 0 0 1 1 1
-subplot 2 2 0:rotate 60 40
-surf a: box
-text 0.7 1 1.2 'a(x,y)'
-subplot 2 2 1:rotate 60 40
-diff a 'x': surf a: box
-text 0.7 1 1.2 'da/dx'
-subplot 2 2 2:rotate 60 40
-integrate a 'xy': surf a: box
-text 0.7 1 1.2 '\int da/dx dxdy'
-subplot 2 2 3:rotate 60 40
-diff2 a 'y': surf a: box
-text 0.7 1 1.2 '\int {d^2}a/dxdy dx'
-
- [image src="../png/sample6.png" ]
-
-Example of data differentiation and integration
-
-   Data smoothing (function `Smooth') is more interesting and
-important. This function has 2 main arguments: type of smoothing and
-its direction. Now 4 methods are supported: `0' does nothing for
-delta=0 or approaches data to zero with the step delta, `1' linear
-averaging by 3 points, `2' linear averaging by 5 points, `3' quadratic
-averaging by 5 points. Let me demonstrate it for 1d case:
-new y0 30
-modify y0 '0.4*sin(2*pi*x)+0.3*cos(3*pi*x)-0.4*sin(4*pi*x)+0.2*rnd'
-copy y1 y0: smooth y1 1
-copy y2 y0: smooth y2 2
-copy y3 y0: smooth y3 3
-
-plot y0 'k': addlegend 'none' 'k'
-plot y1 'r': addlegend 'line 3' 'r'
-plot y2 'g': addlegend 'line 5' 'g'
-plot y3 'b': addlegend 'quad 5' 'b'
-legend: box
-
- [image src="../png/sample7.png" ]
-
-Example of data smoothing
-
-   Finally one can create new data arrays on base of the existing one:
-extract slice, row or column of data (`SubData'), summarize along some
-of direction(s) (`Sum'), find distribution of data elements (`Hist').
-Note, that all these functions are not thread-safe because they use
-static internal variable for output array. In particular, the using of
-several of them in arguments of the same function will lead to
-unpredictable result.
-
-
-File: mgl_ru.info,  Node: Data plotting,  Next: Hints,  Prev: Data handling,  Up: Examples
-
-2.4 Data plotting
-=================
-
-Let me now show how to plot the data. MathGL generally has 2 types of
-plotting functions. Simple variant requires a single data array for
-plotting, other data (coordinates) are considered uniformly distributed
-in interval MIN*MAX. Second variant requires data arrays for all
-coordinates. It allows one to plot rather complex multivalent curves
-and surfaces (in case of parametric dependencies). Argument setting to
-default values allows one to plot data in standard form. Manual
-arguments setting gives possibility for fine tuning of colors,
-positions and view of graphics. Note, that the call of drawing function
-adds something to picture but does not clear the previous plots (as it
-does in Matlab). Another difference from Matlab is that all setup (like
-transparency, lightning, axis borders and so on) must be specified
-*before* plotting functions.
-
-* Menu:
-
-* Plots for 1D data::
-* Plots for 2D data::
-* Plots for 3D data::
-* Surface transparency::
-
-
-File: mgl_ru.info,  Node: Plots for 1D data,  Next: Plots for 2D data,  Up: Data plotting
-
-2.4.1 Plots for 1D data
------------------------
-
-Term "1D data" means that data depend on single index (parameter) like
-curve in parametric form {x(i),y(i),z(i)}, i=1...n. There are 5
-generally different types of data representations: simple line plot,
-line plot with filling under it, stairs plot, bar plot and vertical
-lines (*note 1D plotting::). Each type of plotting has similar
-interface. There are 3D version and two 2D versions. One of last
-requires single array. The parameters of line and marks (*note Line
-styles::) are specified by the string argument. If the string parameter
-is `NULL' then solid line with color from palette is used.
-
-   Below I shall show the features of 1D plotting on base of `plot'
-function (*note 1D plotting::). Let us start from sinus plot:
-new y0 50: modify y0 'sin(pi*(2*x-1))'
-subplot 2 2 0
-plot y0: box
- Style of line is not specified in `plot' function. So MathGL uses the
-solid line with first color of palette (this is blue). Next subplot
-shows array Y1 with 2 rows:
-subplot 2 2 1
-new y1 50 2
-modify y1 'sin(pi*2*x-pi)'
-modify y1 'cos(pi*2*x-pi)/2' 1
-plot y1: box
- As previously I did not specify the style of lines. As a result,
-MathGL again uses solid line with next colors in palette (there are
-green and red). Now let us plot a circle on the same subplot. The
-circle is parametric curve x=cos(\pi t), y=sin(\pi t). I will set the
-color of the circle (dark yellow, `Y') and put marks `+' at point
-position:
-new x 50: modify x 'cos(pi*2*x-pi)'
-plot x y0 'Y+'
- Note that solid line is used because I did not specify the type of
-line. The same picture can be achieved by `Plot2' function. Let us draw
-ellipse by orange dash line:
-plot y1(:,0) y(:,1) 'q|'
-
-   Drawing in 3D space is mostly the same. Let us draw spiral with
-default line style. Now its color is 4-th color from palette (this is
-cyan):
-subplot 2 2 2:rotate 60 40
-new z 50: modify z '2*x-1'
-plot x y0 z 'g':box
- Function `Plot3' does 3D curve plot but for single array. Use it to
-put circle marks on the previous plot:
-new y2 10 3
-modify y2 'cos(pi*(2*x-1-y))'
-modify y2 '2*x-1' 2
-plot y2(:,0) y2(:,1) y2(:,2) 'bo '
- Note that line style is empty ` ' here. Usage of other 1D plotting
-functions looks similar:
-subplot 2 2 3:rotate 60 40
-bars x y0 z 'r':box
-
- [image src="../png/sample8.png" ]
-
-Example of 1D data plot
-
-
-File: mgl_ru.info,  Node: Plots for 2D data,  Next: Plots for 3D data,  Prev: Plots for 1D data,  Up: Data plotting
-
-2.4.2 Plots for 2D data
------------------------
-
-Surfaces `Surf' and other 2D plots (*note 2D plotting::) are drown the
-same simpler as 1D one. The difference is that the string parameter
-specifies not by line style but by the color scheme of the plot (*note
-Color scheme::). Here I draw attention on 4 most interesting color
-schemes. There is gray scheme where color is changed from black to
-white (string `kw') or from white to black (string `wk'). Another
-scheme is useful for accentuation of negative (by blue color) and
-positive (by red color) regions on plot (string `'BbwrR''). Last one is
-the popular "jet" scheme (string `'BbcyrR'').
-
-   Now I shall show the example of a surface drawing. At first let us
-switch lightning on
-light on
- and draw the surface, considering coordinates x,y to be uniformly
-distributed in interval MIN*MAX
-new a0 50 40
-modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
-subplot 2 2 0:rotate 60 40
-surf a0: box
- Color scheme was not specified. So previous color scheme is used. In
-this case it is default color scheme ("jet") for the first plot. Next
-example is a sphere. The sphere is parametrically specified surface:
-new x 50 40: new y 50 40: new z 50 40
-modify x '0.8*sin(2*pi*x)*sin(pi*y)'
-modify y '0.8*cos(2*pi*x)*sin(pi*y)'
-modify z '0.8*cos(pi*y)'
-subplot 2 2 1:rotate 60 40
-surf x y z 'bbwrr': box
- I set color scheme to `'BbwrR'' that corresponds to red top and blue
-bottom of the sphere.
-
-   Surfaces will be plotted for each of slice of the data if NZ>1. Next
-example draws surfaces for data arrays with NZ=3:
-new a1 50 40 3
-modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
-modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
-modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
-subplot 2 2 2:rotate 60 40
-alpha on
-surf a1: box
- Note, that it may entail a confusion. However, if one will use density
-plot then the picture will look better:
-subplot 2 2 3: rotate 60 40
-dens a1: box
- Note, that the previous color scheme is used in last plots because
-there are no direct specification of the one.
-
- [image src="../png/sample9.png" ]
-
-Example of surface plot for 2D data
-
-   Drawing of other 2D plots is analogous. The only peculiarity is the
-usage of flag `#'. By default this flag switches on the drawing of a
-grid on plot (`grid' or `mesh' for plots in plain or in volume).
-However, for isosurfaces (including surfaces of rotation `axial') this
-flag switches the  face drawing off. Figure becomes wired. The
-following code gives example of flag `#' using (compare with normal
-function drawing as in its description):
-alpha on: light on: light 0 0 0 1
-new a 30 20
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
-subplot 2 2 0: rotate 40 60
-surf a 'bbcyrr#': box
-subplot 2 2 1: rotate 40 60
-dens a 'bbcyrr#': box
-subplot 2 2 2: rotate 40 60
-cont a 'bbcyrr#': box
-subplot 2 2 3: rotate 40 60
-axial a 'bbcyrr#': box
-
- [image src="../png/samplea.png" ]
-
-Example of 2D data plot with color scheme contained `#' symbol
-
-
-File: mgl_ru.info,  Node: Plots for 3D data,  Next: Surface transparency,  Prev: Plots for 2D data,  Up: Data plotting
-
-2.4.3 Plots for 3D data
------------------------
-
-Drawing procedures for 3D plot looks similarly to 1D and 2D plots
-described above. There are 3 general types of 3D plots (*note 3D
-plotting::): (i) plots on slices or on projections, (ii) isosurfaces,
-(iii) cloud-like plots. Plots on slice are clear enough - one specifies
-a slice (as its index or as coordinate value) and MathGL draws contour
-lines or density plot on slice plane. Isosurface gives more
-information. Isosurface is 3D analogue of the contour line `cont'. It
-shows the region where data array values exceed specified isosurface
-level. Plot becomes more informative if one adds transparency,
-lightning or sets color scheme depending on coordinates. Generalization
-of isosurface is the cloud-like plot. For this plot the darker color
-and less transparent regions correspond to higher values of data.
-Contrary, the regions with low values are transparent. For plotting of
-the phase of fields (or beams or pulses) one can use isosurface which
-transparency depends on the other data array (see function `surf3a').
-As example of 3D data plots let us draw the Gaussian beam diffraction
-in space. Beam propagates along X axis:
-alpha on: light on
-light 0 0 0 1
-new a 30 30 30: new b 30 30 30
-modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
-modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
-caxis 0 1
-
-subplot 2 2 0: rotate 40 60
-surf3 a 'wgk': box
-subplot 2 2 1: rotate 40 60
-densa a: box: axis
-subplot 2 2 2: rotate 40 60
-cloud a: box
-subplot 2 2 3: rotate 40 60
-surf3a b a 'q': box
-
- [image src="../png/sampleb.png" ]
-
-Example of Gaussian beam diffraction (3D data)
-
-
-File: mgl_ru.info,  Node: Surface transparency,  Prev: Plots for 3D data,  Up: Data plotting
-
-2.4.4 Surface transparency
---------------------------
-
-MathGL library has advanced features for setting and handling the
-surface transparency. The simplest way to add transparency is the using
-of function `Alpha'. As a result, all further surfaces (and
-isosurfaces, density plots and so on) become transparent. However,
-their  look can be additionally improved.
-
-   First, the selected surface will be non-transparent if one sets the
-flag `transparent' before the surface drawing and sets it off after the
-drawing.
-
-   Second, the value of transparency can be different from surface to
-surface. To do it just change the value of `alphadef' before the
-drawing of the selected surface. If its value is close to 0 then the
-surface becomes more and more transparent. Contrary, if its value is
-close to 1 then the surface becomes practically non-transparent. This
-is some analogue of `transparent on'.
-
-   Third feature is the changing of the way how the light goes through
-overlapped surfaces. The variable `transptype' defines it. By default
-the usual transparency is used (`transptype 0') - surfaces below is
-less visible than the upper ones. A "glass-like" transparency
-(`transptype 1') has a different look when the surface just decreases
-the background light (the surfaces are commutable in this case).
-
-   A "neon-like" transparency (`transptype 2') has more interesting
-look. In this case a surface is the light source (like a lamp on the
-dark background) and just adds some intensity to the color. At this,
-the library sets automatically the black color for the background and
-changes the default line color to white.
-
-   As example I shall show the variant of plot from *note Plots for 2D
-data:: (grid drawing is disabled) for different types of transparency.
- [image src="../png/type0.png" ]
-
-Example of `TranspType=0'.
-
- [image src="../png/type1.png" ]
-
-Example of `TranspType=1'.
-
- [image src="../png/type2.png" ]
-
-Example of `TranspType=2'.
-
-
-File: mgl_ru.info,  Node: Hints,  Prev: Data plotting,  Up: Examples
-
-2.5 Hints
-=========
-
-In this section I have included some small hints and advices for the
-improving of the quality of plots and for the demonstration of some
-non-trivial features of MathGL library. In contrast to previous
-examples I showed mostly the idea but not the whole drawing function.
-More examples with the source code can be find at
-`http://mathgl.sf.net/' or in section *note Samples::.
-
-* Menu:
-
-* ``Compound'' graphics::
-* Two axes in one plot::
-* Titles for the plot::
-* Changing of the color range::
-* Management of a point cutting::
-* Vector field visualization::
-* Several light sources::
-* CutMin and CutMax features::
-* Mapping visualization::
-* Log-scaled plot::
-* Nonlinear fitting hints::
-* PDE solving hints::
-* Stereo image::
-
-
-File: mgl_ru.info,  Node: ``Compound'' graphics,  Next: Two axes in one plot,  Up: Hints
-
-2.5.1 "Compound" graphics
--------------------------
-
-As I noted above, MathGL functions (except the special one, like `clf')
-do  not erase the previous plotting but just add the new one. It allows
-one to draw "compound" plots easily. For example, popular Matlab
-command `surfc' can be emulated in MathGL by 2 calls:
-surf a
-cont a 0 7 -1   # draw contours at z = -1
- Here A is 2-dimensional data for the plotting, `-1' is the value of
-z-coordinate at which the contour should be plotted (at the bottom in
-this example). Analogously, one can draw density plot instead of
-contour lines and so on.
-
-   Another nice plot is contour lines plotted directly on the surface:
-light on        # switch on light for the surface
-surf a 'bbcyrr' # select 'jet' colormap for the surface
-cont a 'y'      # and yellow color for contours
- The possible difficulties arise in black&white case, when the color of
-the surface can be close to the color of a contour line. In that case I
-may suggest the following code:
-light on        # switch on light for the surface
-surf a 'kw'     # select 'gray' colormap for the surface
-caxis -1 0      # first draw for darker surface colors
-conta 'w'       # white contours
-caxis 0 1       # now draw for brighter surface colors
-cont a 'k'      # black contours
- The idea is to divide the color range on 2 parts (dark and bright) and
-to select the contrasting color for contour lines for each of part.
-
-   Similarly, one can plot flow thread over density plot of vector
-field amplitude (this is another amusing plot from Matlab) and so on.
-The list of compound graphics can be prolonged but I hope that the
-general idea is clear.
-
-
-File: mgl_ru.info,  Node: Two axes in one plot,  Next: Titles for the plot,  Prev: ``Compound'' graphics,  Up: Hints
-
-2.5.2 Two axes in one plot
---------------------------
-
-Developing the previous hint one can make a plot with 2 or more axes.
-The idea is that the change of settings does not influence on the
-already drawn graphics. So, for 2-axes plot let us set the first axis
-and draw everything concerning it. Then let us setup the second axis
-and draw things for the second axis. The corresponding code is (*note
-2-axes sample::):
-# set up first axis
-axis -1 -1 1 1: origin -1 -1
-axis:fplot 'sin(pi*x)'      # draw something in first axis
-# set up second axis
-axis 0 0 1 1: origin 1 1
-axis: fplot 'cos(4*pi*x^2)' # draw something in second axis
- Note, that the first and the second axes look better if being placed
-in different corners. In the code presented above the first axis is
-placed in the left-bottom corner, and the second one is placed in the
-right-top corner.
-
-
-File: mgl_ru.info,  Node: Titles for the plot,  Next: Changing of the color range,  Prev: Two axes in one plot,  Up: Hints
-
-2.5.3 Titles for the plot
--------------------------
-
-The printing of nice titles for the plot is not so trivial task in
-general case. The problem is that the rotation and aspect change lead
-to different looks for titles of different subplots. So, the resulting
-look is not so good as it could be. The solution is simple - to print
-titles exactly after `subplot' call and before any rotation, aspect
-change and so on! Analogously, the title for the whole picture looks
-better if it is printed first (before any `subplot' calls).
-Alternatively you can use function `title' for plotting title for the
-picture at any time.
-
-
-File: mgl_ru.info,  Node: Changing of the color range,  Next: Management of a point cutting,  Prev: Titles for the plot,  Up: Hints
-
-2.5.4 Changing of the color range
----------------------------------
-
-By default (for the user comfort), the color range is set equal to
-z-range of the plot. However, there are different ranges. So, one can
-obtain amusing plot by the change of color range manually. For example,
-there are plots with one-color bottom (or top) or practically bi-color
-picture and so on.
-
-   For example, compare 2 surfaces:
-subplot 2 1 0
-surf a          # usual coloring range
-subplot 2 1 1
-caxis 0 1
-surf a          # bottom of the surface have one-colour filling
-
-
-File: mgl_ru.info,  Node: Management of a point cutting,  Next: Vector field visualization,  Prev: Changing of the color range,  Up: Hints
-
-2.5.5 Management of a point cutting
------------------------------------
-
-Sometimes an experimental or numerical surface has outstanding points.
-Visualization of such surface will lead to the hole(s) in place of such
-points. The standard method of "fighting" - to change data values - is
-not always good and is not so convenient. MathGL library has another
-method - to set variable `cut off'. As a consequence, all outstanding
-points will be projected on the bounding box.
-
-   Such method is good not only for outstanding points but also for the
-case when one need to plane the bottom or the top of the plot. Exactly
-such case is demonstrated in the code:
-new a 20 30     # create some data
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-# set lower border above the data minimal value
-axis -1 -1 0 1 1 1:rotate 40 60
-cut off         # set off cutting flag
-surf a          # and draw the surface
- It is an interesting result, is not it?
-
-
-File: mgl_ru.info,  Node: Vector field visualization,  Next: Several light sources,  Prev: Management of a point cutting,  Up: Hints
-
-2.5.6 Vector field visualization
---------------------------------
-
-Vector field visualization (especially in 3d case `vect3' or `vectc')
-may look tangly - there are too many overlapping lines. I may suggest 2
-ways to solve this problem. The first one is to change `meshnum' for
-decreasing the number of hachures. The second way is to use the flow
-thread chart `Flow'. Unfortunately, I don't know any other methods to
-visualize 3d vector field. If you know any, e-mail me and I shall add
-it to MatGL.
-
-
-File: mgl_ru.info,  Node: Several light sources,  Next: CutMin and CutMax features,  Prev: Vector field visualization,  Up: Hints
-
-2.5.7 Several light sources
----------------------------
-
-In contrast to the most of other programs, MathGL supports several (up
-to 10) light sources. Moreover, the color each of them can be
-different: white (this is usual), yellow, red, cyan, green and so on.
-The use of several light sources may be interesting for the
-highlighting of some peculiarities of the plot or just to make an
-amusing picture. Note, each light source can be switched on/off
-individually (*note Several light sample::).
-
-
-File: mgl_ru.info,  Node: CutMin and CutMax features,  Next: Mapping visualization,  Prev: Several light sources,  Up: Hints
-
-2.5.8 CutMin and CutMax features
---------------------------------
-
-MathGL library has a feature for cutting of points in some region
-CUTMIN*CUTMAX. Such an excision can be used to improve the look of the
-graphics. Moreover, this cutting may help to show an internal structure
-of an object (like `isocaps' plot in Matlab). For example, let us use
-the standard 3D data array and show its interior (*note CutMinMax
-sample::).
-
-new c 61 51 40      # create the data
-new v 10: fill v -0.5 1
-modify c '(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))'
-cut 0 -1 -1 1 0 1.1
-rotate 40 60:       surf3 c -0.5 'bbcyrr'
-contf3 v c 'x' -1 'bbcyrr': contf3 v c 'y' -1 'bbcyrr'
-contf3 v c 'z' 0 'bbcyrr':  contf3 v c 'z' 39 'bbcyrr'
-
-   One can also exclude points from arbitrary area in space. This area
-defined by textual formula `cut' (*note Cutting::). The algorithm is
-the same as shown for "rectangular cutting".
-
-
-File: mgl_ru.info,  Node: Mapping visualization,  Next: Log-scaled plot,  Prev: CutMin and CutMax features,  Up: Hints
-
-2.5.9 Mapping visualization
----------------------------
-
-Sometime ago I worked with mapping and have a question about its
-visualization. Let me remember you that mapping is some transformation
-rule for one set of number to another one. The 1d mapping is just an
-ordinary function - it takes a number and transforms it to another one.
-The 2d mapping (which I used) is a pair of functions which take 2
-numbers and transform them to another 2 ones. Except general plots
-(like `surfc', `surfa') there is a special plot - Arnold diagram. It
-shows the area which is the result of mapping of some initial area
-(usually square).
-
-   I tried to make such plot in `map'. It shows the set of points or
-set of faces, which final position is the result of mapping. At this,
-the color gives information about their initial position and the height
-describes Jacobian value of the transformation. Unfortunately, it looks
-good only for the simplest mapping but for the real multivalent
-quasi-chaotic mapping it produces a confusion. So, use it if you like
-:).
-
-
-File: mgl_ru.info,  Node: Log-scaled plot,  Next: Nonlinear fitting hints,  Prev: Mapping visualization,  Up: Hints
-
-2.5.10 Log-scaled plot
-----------------------
-
-Log-scaled plot can be drawn by 2 steps. First, one should change the
-scale of axis by call `axis 'lg(x)' 'lg(y)'' (in this example, x- and
-y-axis will be log-scaled). Second, one should set logarithmic scale
-for axis ticks by changing variables: `xtick 0: yticks 0'. Finally, one
-should check (or change) the axis ranges and origin so that their
-values to be positive. For example of log-log plot *note Log-log
-sample::.
-
-
-File: mgl_ru.info,  Node: Nonlinear fitting hints,  Next: PDE solving hints,  Prev: Log-scaled plot,  Up: Hints
-
-2.5.11 Nonlinear fitting hints
-------------------------------
-
-Nonlinear fitting is rather simple. All that you need is the data to
-fit, the approximation formula and the list of coefficients to fit
-(better with its initial guess values). Let me demonstrate it on the
-following simple example (*note Fitting sample::). First, let us use
-sin function with some random noise:
-new rnd 100: new idl 50 # data to be fitted and ideal data
-modify rnd '0.4*rnd+0.1+sin(4*pi*x)'
-modify idl '0.3+sin(4*pi*x)'
- and plot it to see that data we will fit
-axis -1 -2 1 2
-plot rnd '. ':plot idl 'b'
-box:text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
-
-   The next step is the fitting itself. For that let me specify an
-initial values INI for coefficients `abc' and do the fitting for
-approximation formula `a+b*sin(c*x)'
-new res     # The data for found formula
-fit res rnd 'a+b*sin(c*x)' 'abc' [1, 1, 3]
- Now display it
-plot res 'r'
-text -1 -1.3 'fitted:' 'L:r' -1
-putsfit 0 -1.8 'y = ' 'C:r' -1
-
-   NOTE! the fitting results may have strong dependence on initial
-values for coefficients due to algorithm features. The problem is that
-in general case there are several local 'optimums' for coefficients and
-the program returns only first found one! There are no guaranties that
-it will be the best. Try for example to set `ini = [0, 0, 0]' in the
-code above.
-
-
-File: mgl_ru.info,  Node: PDE solving hints,  Next: Stereo image,  Prev: Nonlinear fitting hints,  Up: Hints
-
-2.5.12 PDE solving hints
-------------------------
-
-Solving of Partial Differential Equations (PDE, including beam tracing)
-and ray tracing (or finding particle trajectory) are more or less
-common task. So, MathGL have several functions for that. There are
-`ray' for ray tracing, `pde' for PDE solving, `qo2d' for beam tracing
-in 2D case. Note, that these functions take "Hamiltonian" or equations
-as string values. And I don't plan now to allow one to use user-defined
-functions. There are 2 reasons: the complexity of corresponding
-interface; and the basic nature of used methods which are good for
-samples but may not good for serious scientific calculations.
-
-   The ray tracing can be done by `ray' function. Really ray tracing
-equation is Hamiltonian equation for 3D space. So, the function can be
-also used for finding a particle trajectory (i.e. solve Hamiltonian
-ODE) for 1D, 2D or 3D cases. The function have a set of arguments.
-First of all, it is Hamiltonian which defined the media (or the
-equation) you are planning to use. The Hamiltonian is defined by string
-which may depend on coordinates `x', `y', `z', time `t' (for particle
-dynamics) and momentums `p'=p_x, `q'=p_y, `v'=p_z. Next, you have to
-define the initial conditions for coordinates and momentums at `t'=0
-and set the integrations step (default is 0.1) and its duration
-(default is 10). The Runge-Kutta method of 4-th order is used for
-integration.
-new re 128:new im 128
-ray r 'p^2+q^2-x-1' -0.7 -1 0 0 0.5 0
-plot r(0) r(1)
- This example calculate the reflection from linear layer (media with
-Hamiltonian `p^2+q^2-x-1'=p_x^2+p_y^2-x-1). This is parabolic curve.
-The resulting array have 7 columns which contain data for
-{x,y,z,p,q,v,t}.
-
-   The solution of PDE is a bit more complicated. As previous you have
-to specify the equation as pseudo-differential operator \hat H(x,
-\nabla) which is called sometime as "Hamiltonian" (for example, in beam
-tracing). As previously, it is defined by string which may depend on
-coordinates `x', `y', `z' (but not time!), momentums `p'=(d/dx)/i k_0,
-`q'=(d/dy)/i k_0 and field amplitude `u'=|u|. The evolutionary
-coordinate is `z' in all cases. So that, the equation look like du/dz =
-ik_0 H(x,y,\hat p, \hat q, |u|)[u]. Dependence on field amplitude
-`u'=|u| allows one to solve nonlinear problems too. For example, for
-nonlinear Shrodinger equation you may set `ham='p^2 + q^2 - u^2''. Also
-you may specify imaginary part for wave absorption, like `ham = 'p^2 +
-i*x*(x>0)'', but only if dependence on variable `i' is linear (i.e. H =
-Hre+i*Him).
-
-   Next step is specifing the initial conditions at `z'=`Min.z'. The
-function need 2 arrays for real and for imaginary part. Note, that
-coordinates x,y,z are supposed to be in specified range [Min, Max]. So,
-the data arrays should have corresponding scales. Finally, you may set
-the integration step and paramter k0=k_0. Also keep in mind, that
-internally the 2 times large box is used (for suppressing numerical
-reflection from boundaries) and the equation should well defined even
-in this extended range.
-
-   Final comment is concerning the possible form of pseudo-differential
-operator H. At this moment, simplified form of operator H is supported
-- all "mixed" terms (like `x*p'->x*d/dx) are excluded. For example, in
-2D case this operator is effectively H = f(p,z) + g(x,z,u). However
-commutable combinations (like `x*q'->x*d/dy) are allowed for 3D case.
-
-   So, for example let solve the equation for beam deflected from
-linear layer and absorbed later. The operator will have the form
-`'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)'' that correspond to equation ik_0
-\partial_z u + \Delta u + x \cdot u + i (x+z)/2 \cdot u = 0. This is
-typical equation for Electron Cyclotron (EC) absorption in magnetized
-plasmas. For initial conditions let me select the beam with plane phase
-front exp(-48*(x+0.7)^2). The corresponding code looks like this (*note
-PDE sample::):
-new re 128: new im 128
-fill re 'exp(-48*(x+0.7)^2)'
-pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01, 30
-transpose a 'yxz'
-caxis 0 1
-dens a 'wyrRk'
-
-   The last example is example of beam tracing. Beam tracing equation
-is special kind of PDE equation written in coordinates accompanied to a
-ray. Generally this is the same parameters and limitation as for PDE
-solving but the coordinates are defined by the ray and by parameter of
-grid width W in direction transverse the ray. So, you don't need to
-specify the range of coordinates. *BUT* there is limitation. The
-accompanied coordinates are well defined only for smooth enough rays,
-i.e. then the ray curvature K (which is defined as 1/K^2 = (|\ddot r|^2
-|\dot r|^2 - (\ddot r, \dot r)^2)/|\dot r|^6) is much large then the
-grid width: K>>w. So, you may receive incorrect results if this
-condition will be broken.
-
-   You may use following code for obtaining the same solution as in
-previous example:
-new re 128: new im 128
-define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
-ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
-# now start beam tracing
-fill re 'exp(-48*x^2)'
-new xx: new yy
-qo2d a $1 re im r 1 30 xx yy
-caxis 0 1
-dens xx yy a 'wyrRk'
-
-
-File: mgl_ru.info,  Node: Stereo image,  Prev: PDE solving hints,  Up: Hints
-
-2.5.13 Stereo image
--------------------
-
-One can easily create stereo image in MathGL. Stereo image can be
-produced by making two subplots with slightly different rotation
-angles. The corresponding code looks like this (*note Stereo image
-sample::):
-subplot 2 1 0   # left image
-rotate 40 60+3
-# draw something here
-subplot 2 1 1   # right image
-rotate 40 60-3
-# draw the same here
-
-
-File: mgl_ru.info,  Node: Samples,  Next: Copying This Manual,  Prev: Examples,  Up: Top
-
-3 Примеры использования MathGL
-**************************************************
-
-Эта глава содержит множество примеров
-кода для всех типов графиков, наиболее
-важных возможностей библиотеки и
-советов. Аналогичные примеры (с
-картинками) можно найти на
-`http://mathgl.sf.net/pictures.html'.
-
-* Menu:
-
-* 1D plotting samples::
-* 2D plotting samples::
-* 3D plotting samples::
-* Dual plotting samples::
-* Basic features::
-* Additional features::
-* Advanced features::
-
-
-File: mgl_ru.info,  Node: 1D plotting samples,  Next: 2D plotting samples,  Up: Samples
-
-3.1 Примеры 1D графиков
-======================================
-
-* Menu:
-
-* Plot sample::
-* Radar sample::
-* Tens sample::
-* Area sample::
-* Area gradient sample::
-* Bars sample::
-* Bars 2 colors sample::
-* Bars above sample::
-* Bars fall sample::
-* Barh sample::
-* Step sample::
-* Stem sample::
-* Region sample::
-* Region gradient sample::
-* Error sample::
-* BoxPlot sample::
-* Mark sample::
-* TextMark sample::
-* Tube sample::
-* Text sample::
-* Torus sample::
-* Chart sample::
-* Pie chart sample::
-* Ring chart sample::
-
-
-File: mgl_ru.info,  Node: Plot sample,  Next: Radar sample,  Up: 1D plotting samples
-
-3.1.1 Plot - пример использования
-----------------------------------------------------
-
- [image src="../png/plot.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-box
-plot y
-
-
-File: mgl_ru.info,  Node: Radar sample,  Next: Tens sample,  Prev: Plot sample,  Up: 1D plotting samples
-
-3.1.2 Radar - пример использования
------------------------------------------------------
-
- [image src="../png/radar.png" ]
-
-new y 10 3
-modify y '0.4*sin(pi*(2*x+y/2))+0.1*rnd'
-radar y '#'
-
-
-File: mgl_ru.info,  Node: Tens sample,  Next: Area sample,  Prev: Radar sample,  Up: 1D plotting samples
-
-3.1.3 Tens - пример использования
-----------------------------------------------------
-
- [image src="../png/tens.png" ]
-
-new y 50
-new c 50
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify c 'sin(2*pi*x)'
-box
-tens y c
-
-
-File: mgl_ru.info,  Node: Area sample,  Next: Area gradient sample,  Prev: Tens sample,  Up: 1D plotting samples
-
-3.1.4 Area - пример использования
-----------------------------------------------------
-
- [image src="../png/area.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-origin 0 0
-box
-area y
-
-
-File: mgl_ru.info,  Node: Area gradient sample,  Next: Bars sample,  Prev: Tens sample,  Up: 1D plotting samples
-
-3.1.5 Area с градиентной заливкой - пример использования
------------------------------------------------------------------------------------------------
-
- [image src="../png/area_2.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-origin 0 0
-box
-area y 'cbgGyr'
-
-
-File: mgl_ru.info,  Node: Bars sample,  Next: Bars 2 colors sample,  Prev: Area gradient sample,  Up: 1D plotting samples
-
-3.1.6 Bars - пример использования
-----------------------------------------------------
-
- [image src="../png/bars.png" ]
-
-new y 10 3
-modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
-origin 0 0
-box
-bars y
-
-
-File: mgl_ru.info,  Node: Bars 2 colors sample,  Next: Bars above sample,  Prev: Bars sample,  Up: 1D plotting samples
-
-3.1.7 Bars (2 цвета) - пример использования
--------------------------------------------------------------------
-
- [image src="../png/bars_2.png" ]
-
-new y 10 3
-modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
-origin 0 0
-box
-bars y 'cbgGyr'
-
-
-File: mgl_ru.info,  Node: Bars above sample,  Next: Bars fall sample,  Prev: Bars 2 colors sample,  Up: 1D plotting samples
-
-3.1.8 Bars (один над другим) - пример использования
------------------------------------------------------------------------------------
-
- [image src="../png/bars_a.png" ]
-
-new y 10 3
-modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
-origin 0 0
-box
-bars y 'a'
-
-
-File: mgl_ru.info,  Node: Bars fall sample,  Next: Bars above sample,  Prev: Bars above sample,  Up: 1D plotting samples
-
-3.1.9 Bars "водопад" - пример использования
----------------------------------------------------------------------
-
- [image src="../png/bars_f.png" ]
-
-new y 10 3
-modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
-origin 0 0
-box
-bars y 'f'
-
-
-File: mgl_ru.info,  Node: Barh sample,  Next: Step sample,  Prev: Bars fall sample,  Up: 1D plotting samples
-
-3.1.10 Barh - пример использования
------------------------------------------------------
-
- [image src="../png/barh.png" ]
-
-new y 10 3
-modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
-origin 0 0
-box
-barh y
-
-
-File: mgl_ru.info,  Node: Step sample,  Next: Stem sample,  Prev: Barh sample,  Up: 1D plotting samples
-
-3.1.11 Step - пример использования
------------------------------------------------------
-
- [image src="../png/step.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-box
-step y
-
-
-File: mgl_ru.info,  Node: Stem sample,  Next: Region sample,  Prev: Step sample,  Up: 1D plotting samples
-
-3.1.12 Stem - пример использования
------------------------------------------------------
-
- [image src="../png/stem.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-origin 0 0
-box
-stem y 'o'
-
-
-File: mgl_ru.info,  Node: Region sample,  Next: Region gradient sample,  Prev: Stem sample,  Up: 1D plotting samples
-
-3.1.13 Region - пример использования
--------------------------------------------------------
-
- [image src="../png/region.png" ]
-
-new y1 50
-new y2 50
-modify y1 '0.3*sin(2*pi*x)'
-modify y2 '0.5+0.3*cos(2*pi*x)'
-box
-region y1 y2 'r'
-plot y1 'k2'
-plot y2 'k2'
-
-
-File: mgl_ru.info,  Node: Region gradient sample,  Next: Error sample,  Prev: Region sample,  Up: 1D plotting samples
-
-3.1.14 Region с градиентной заливкой - пример использования
---------------------------------------------------------------------------------------------------
-
- [image src="../png/region_2.png" ]
-
-new y1 50
-new y2 50
-modify y1 '0.3*sin(2*pi*x)'
-modify y2 '0.5+0.3*cos(2*pi*x)'
-box
-region y1 y2 'yr'
-plot y1 'k2'
-plot y2 'k2'
-
-
-File: mgl_ru.info,  Node: Error sample,  Next: BoxPlot sample,  Prev: Region gradient sample,  Up: 1D plotting samples
-
-3.1.15 Error - пример использования
-------------------------------------------------------
-
- [image src="../png/error.png" ]
-
-new y 50
-new x0 10
-new y0 10
-new ex 10
-new ey 10
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify x0 '2*x-1 + 0.1*rnd-0.05'
-modify y0 '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1'
-modify ey '0.2'
-modify ex '0.1'
-box
-plot y
-error x0 y0 ex ey 'ko'
-
-
-File: mgl_ru.info,  Node: BoxPlot sample,  Next: Mark sample,  Prev: Error sample,  Up: 1D plotting samples
-
-3.1.16 BoxPlot - пример использования
---------------------------------------------------------
-
- [image src="../png/boxplot.png" ]
-
-new a 10 7
-modify a '(2*rnd-1)^3/2'
-box
-boxplot a
-plot a ' ko'
-
-
-File: mgl_ru.info,  Node: Mark sample,  Next: TextMark sample,  Prev: BoxPlot sample,  Up: 1D plotting samples
-
-3.1.17 Mark - пример использования
------------------------------------------------------
-
- [image src="../png/mark.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-new y1 50
-modify y1 '0.5+0.3*cos(2*pi*x)'
-box
-mark y y1 'bs'
-
-
-File: mgl_ru.info,  Node: TextMark sample,  Next: Tube sample,  Prev: Mark sample,  Up: 1D plotting samples
-
-3.1.18 TextMark - пример использования
----------------------------------------------------------
-
- [image src="../png/textmark.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-new y1 50
-modify y1 '0.5+0.3*cos(2*pi*x)'
-box
-textmark y y1 '\gamma'
-
-
-File: mgl_ru.info,  Node: Tube sample,  Next: Text sample,  Prev: TextMark sample,  Up: 1D plotting samples
-
-3.1.19 Tube - пример использования
------------------------------------------------------
-
- [image src="../png/tube.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-rotate 40 60
-light on
-box
-tube y 0.05
-
-
-File: mgl_ru.info,  Node: Text sample,  Next: Torus sample,  Prev: Tube sample,  Up: 1D plotting samples
-
-3.1.20 Text - пример использования
------------------------------------------------------
-
- [image src="../png/text.png" ]
-
-new y 50 3
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-box
-plot y(:,0)
-text y 'This is very long string drawn along a curve' ':k'
-text y 'Another string drawn above a curve' 'T:r'
-
-
-File: mgl_ru.info,  Node: Torus sample,  Next: Chart sample,  Prev: Text sample,  Up: 1D plotting samples
-
-3.1.21 Torus - пример использования
-------------------------------------------------------
-
- [image src="../png/torus.png" ]
-
-new y1 50
-new y2 50
-modify y1 '0.5+0.3*cos(2*pi*x)'
-modify y2 '0.3*sin(2*pi*x)'
-rotate 40 60
-light on
-box
-torus y1 y2 'pz'
-
-
-File: mgl_ru.info,  Node: Chart sample,  Next: Pie chart sample,  Prev: Torus sample,  Up: 1D plotting samples
-
-3.1.22 Chart - пример использования
-------------------------------------------------------
-
- [image src="../png/chart.png" ]
-
-new ch 7 2
-modify ch 'rnd+0.1'
-rotate 40 60
-light on
-box
-chart ch
-
-
-File: mgl_ru.info,  Node: Pie chart sample,  Next: Ring chart sample,  Prev: Chart sample,  Up: 1D plotting samples
-
-3.1.23 Pie chart - пример использования
-----------------------------------------------------------
-
- [image src="../png/pie_chart.png" ]
-
-new ch 7 2
-modify ch 'rnd+0.1'
-rotate 40 60
-light on
-axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' ''
-box
-chart ch 'bgr cmy#'
-
-
-File: mgl_ru.info,  Node: Ring chart sample,  Prev: Pie chart sample,  Up: 1D plotting samples
-
-3.1.24 Ring chart - пример использования
------------------------------------------------------------
-
- [image src="../png/ring_chart.png" ]
-
-new ch 7 2
-modify ch 'rnd+0.1'
-rotate 40 60
-light on
-axis '(y+2)/3*cos(pi*x)' '(y+2)/3*sin(pi*x)' ''
-box
-chart ch 'bgr cmy#'
-
-
-File: mgl_ru.info,  Node: 2D plotting samples,  Next: 3D plotting samples,  Prev: 1D plotting samples,  Up: Samples
-
-3.2 Примеры 2D графиков
-======================================
-
-* Menu:
-
-* Surf sample::
-* Transparent surface sample::
-* Surface in fog sample::
-* Sharp colors sample::
-* Mesh sample::
-* Fall sample::
-* Belt sample::
-* Tile sample::
-* Boxs sample::
-* Dens sample::
-* Cont sample::
-* ContF sample::
-* ContD sample::
-* Axial sample::
-* Grad sample::
-
-
-File: mgl_ru.info,  Node: Surf sample,  Next: Transparent surface sample,  Up: 2D plotting samples
-
-3.2.1 Surf - пример использования
-----------------------------------------------------
-
- [image src="../png/surf.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-surf a
-
-
-File: mgl_ru.info,  Node: Transparent surface sample,  Next: Surface in fog sample,  Prev: Surf sample,  Up: 2D plotting samples
-
-3.2.2 Transparent surface - пример использования
--------------------------------------------------------------------
-
- [image src="../png/surf_alpha.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-alpha on
-box
-surf a
-
-
-File: mgl_ru.info,  Node: Surface in fog sample,  Next: Sharp colors sample,  Prev: Transparent surface sample,  Up: 2D plotting samples
-
-3.2.3 Surface in fog - пример использования
---------------------------------------------------------------
-
- [image src="../png/surf_fog.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-fog 1
-box
-surf a
-
-
-File: mgl_ru.info,  Node: Sharp colors sample,  Next: Mesh sample,  Prev: Surface in fog sample,  Up: 2D plotting samples
-
-3.2.4 Sharp colors - пример использования
-------------------------------------------------------------
-
- [image src="../png/surf_sl.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-surf a 'BbcyrR|'
-
-
-File: mgl_ru.info,  Node: Mesh sample,  Next: Fall sample,  Prev: Sharp colors sample,  Up: 2D plotting samples
-
-3.2.5 Mesh - пример использования
-----------------------------------------------------
-
- [image src="../png/mesh.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-box
-mesh a
-
-
-File: mgl_ru.info,  Node: Fall sample,  Next: Belt sample,  Prev: Mesh sample,  Up: 2D plotting samples
-
-3.2.6 Fall - пример использования
-----------------------------------------------------
-
- [image src="../png/fall.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-box
-fall a
-
-
-File: mgl_ru.info,  Node: Belt sample,  Next: Tile sample,  Prev: Fall sample,  Up: 2D plotting samples
-
-3.2.7 Belt - пример использования
-----------------------------------------------------
-
- [image src="../png/belt.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-belt a
-
-
-File: mgl_ru.info,  Node: Tile sample,  Next: Boxs sample,  Prev: Belt sample,  Up: 2D plotting samples
-
-3.2.8 Tile - пример использования
-----------------------------------------------------
-
- [image src="../png/tile.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-tile a
-
-
-File: mgl_ru.info,  Node: Boxs sample,  Next: Dens sample,  Prev: Tile sample,  Up: 2D plotting samples
-
-3.2.9 Boxs - пример использования
-----------------------------------------------------
-
- [image src="../png/boxs.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-origin 0 0 0
-box
-boxs a
-
-
-File: mgl_ru.info,  Node: Dens sample,  Next: Cont sample,  Prev: Boxs sample,  Up: 2D plotting samples
-
-3.2.10 Dens - пример использования
------------------------------------------------------
-
- [image src="../png/dens.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-dens a
-colorbar
-
-
-File: mgl_ru.info,  Node: Cont sample,  Next: ContF sample,  Prev: Dens sample,  Up: 2D plotting samples
-
-3.2.11 Cont - пример использования
------------------------------------------------------
-
- [image src="../png/cont.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-box
-cont a
-
-
-File: mgl_ru.info,  Node: ContF sample,  Next: ContD sample,  Prev: Cont sample,  Up: 2D plotting samples
-
-3.2.12 ContF - пример использования
-------------------------------------------------------
-
- [image src="../png/contf.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-contf a
-
-
-File: mgl_ru.info,  Node: ContD sample,  Next: Axial sample,  Prev: ContF sample,  Up: 2D plotting samples
-
-3.2.13 ContD - пример использования
-------------------------------------------------------
-
- [image src="../png/contd.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-var v 9 -1 1
-box
-contd v a
-colorbar v
-
-
-File: mgl_ru.info,  Node: Axial sample,  Next: Grad sample,  Prev: ContD sample,  Up: 2D plotting samples
-
-3.2.14 Axial - пример использования
-------------------------------------------------------
-
- [image src="../png/axial.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-alpha on
-box
-axial a
-
-
-File: mgl_ru.info,  Node: Grad sample,  Prev: Axial sample,  Up: 2D plotting samples
-
-3.2.15 Grad - пример использования
------------------------------------------------------
-
- [image src="../png/grad.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box:alpha on:dens a
-grad a
-
-
-File: mgl_ru.info,  Node: 3D plotting samples,  Next: Dual plotting samples,  Prev: 2D plotting samples,  Up: Samples
-
-3.3 Примеры 3D графиков
-======================================
-
-* Menu:
-
-* Surf3 sample::
-* Cloud sample::
-* CloudP sample::
-* Dens3 sample::
-* Cont3 sample::
-* ContF3 sample::
-* Cont projection sample::
-* Dens projection sample::
-* CutMinMax sample::
-* Isocaps sample::
-* CutOff sample::
-
-
-File: mgl_ru.info,  Node: Surf3 sample,  Next: Cloud sample,  Up: 3D plotting samples
-
-3.3.1 Surf3 - пример использования
------------------------------------------------------
-
- [image src="../png/surf3.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-light on
-alpha on
-box
-surf3 a
-
-
-File: mgl_ru.info,  Node: Cloud sample,  Next: CloudP sample,  Prev: Surf3 sample,  Up: 3D plotting samples
-
-3.3.2 Cloud - пример использования
------------------------------------------------------
-
- [image src="../png/cloud.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-alpha on
-box
-cloud a 'wyrRk'
-
-
-File: mgl_ru.info,  Node: CloudP sample,  Next: Dens3 sample,  Prev: Cloud sample,  Up: 3D plotting samples
-
-3.3.3 CloudP - пример использования
-------------------------------------------------------
-
- [image src="../png/cloudp.png" ]
-
-Not available.
-
-
-File: mgl_ru.info,  Node: Dens3 sample,  Next: Cont3 sample,  Prev: CloudP sample,  Up: 3D plotting samples
-
-3.3.4 Dens3 - пример использования
------------------------------------------------------
-
- [image src="../png/densa.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-alpha on
-origin 0 0 0
-box
-densa a
-axis
-
-
-File: mgl_ru.info,  Node: Cont3 sample,  Next: ContF3 sample,  Prev: Dens3 sample,  Up: 3D plotting samples
-
-3.3.5 Cont3 - пример использования
------------------------------------------------------
-
- [image src="../png/conta.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-box
-conta a
-
-
-File: mgl_ru.info,  Node: ContF3 sample,  Next: Cont projection sample,  Prev: Cont3 sample,  Up: 3D plotting samples
-
-3.3.6 ContF3 - пример использования
-------------------------------------------------------
-
- [image src="../png/contfa.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-light on
-box
-contfa a
-
-
-File: mgl_ru.info,  Node: Cont projection sample,  Next: Dens projection sample,  Prev: ContF3 sample,  Up: 3D plotting samples
-
-3.3.7 Cont projection - пример использования
----------------------------------------------------------------
-
- [image src="../png/cont_xyz.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-box
-sum s a 'x'
-contx s '' -1
-sum s a 'y'
-conty s '' 1
-sum s a 'z'
-contz s '' -1
-
-
-File: mgl_ru.info,  Node: Dens projection sample,  Next: CutMinMax sample,  Prev: Cont projection sample,  Up: 3D plotting samples
-
-3.3.8 Dens projection - пример использования
----------------------------------------------------------------
-
- [image src="../png/dens_xyz.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-box
-sum s a 'x'
-densx s '' -1
-sum s a 'y'
-densy s '' 1
-sum s a 'z'
-densz s '' -1
-
-
-File: mgl_ru.info,  Node: CutMinMax sample,  Next: Isocaps sample,  Prev: Dens projection sample,  Up: 3D plotting samples
-
-3.3.9 CutMinMax - пример использования
----------------------------------------------------------
-
- [image src="../png/cutminmax.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-light on
-alpha on
-cut 0 -1 -1 1 0 1
-box
-surf3 a
-
-
-File: mgl_ru.info,  Node: Isocaps sample,  Next: CutOff sample,  Prev: CutMinMax sample,  Up: 3D plotting samples
-
-3.3.10 "Isocaps" - пример использования
-----------------------------------------------------------
-
- [image src="../png/cutminmax2.png" ]
-
-new a 61 51 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-light on
-cut 0 -1 -1 1 0 1.1
-box
-surf3 a -1
-contf3 a 'x' -1
-contf3 a 'y' -1
-contf3 a 'z' 0
-contf3 a 'z' 39
-
-
-File: mgl_ru.info,  Node: CutOff sample,  Prev: Isocaps sample,  Up: 3D plotting samples
-
-3.3.11 CutOff - пример использования
--------------------------------------------------------
-
- [image src="../png/surf3_cutoff.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-light on
-alpha on
-cut '(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)'
-box
-surf3 a
-
-
-File: mgl_ru.info,  Node: Dual plotting samples,  Next: Basic features,  Prev: 3D plotting samples,  Up: Samples
-
-3.4 Примеры парных/векторных графиков
-===================================================================
-
-* Menu:
-
-* SurfC sample::
-* SurfA sample::
-* TileS sample::
-* Map sample::
-* Traj sample::
-* Vect sample::
-* VectL sample::
-* VectC sample::
-* Flow sample::
-* Pipe sample::
-* Dew sample::
-* Surf3C sample::
-* Surf3A sample::
-* Vect 3D sample::
-* VectL 3D sample::
-* VectC 3D sample::
-* Flow 3D sample::
-* Pipe 3D sample::
-* Crust sample::
-* Dots sample::
-
-
-File: mgl_ru.info,  Node: SurfC sample,  Next: SurfA sample,  Up: Dual plotting samples
-
-3.4.1 SurfC - пример использования
------------------------------------------------------
-
- [image src="../png/surfc.png" ]
-
-new a 50 40
-new b 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-surfc a b
-
-
-File: mgl_ru.info,  Node: SurfA sample,  Next: TileS sample,  Prev: SurfC sample,  Up: Dual plotting samples
-
-3.4.2 SurfA - пример использования
------------------------------------------------------
-
- [image src="../png/surfa.png" ]
-
-new a 50 40
-new b 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-alpha on
-box
-surfa a b
-
-
-File: mgl_ru.info,  Node: TileS sample,  Next: Map sample,  Prev: SurfA sample,  Up: Dual plotting samples
-
-3.4.3 TileS - пример использования
------------------------------------------------------
-
- [image src="../png/tiles.png" ]
-
-new a 50 40
-new b 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-tile a b
-
-
-File: mgl_ru.info,  Node: Map sample,  Next: Traj sample,  Prev: TileS sample,  Up: Dual plotting samples
-
-3.4.4 Map - пример использования
----------------------------------------------------
-
- [image src="../png/map.png" ]
-
-new a 50 40
-new b 50 40
-text 0 0 '\to'
-zrange -2 2
-subplot 2 1 0
-text 0 1.1 '\{x, y\}' '' -2
-box
-fill a 'x'
-fill b 'y'
-map a b 'brgk' 0 0
-subplot 2 1 1
-text 0 1.1 '\{\frac{x^3+y^3}{2}, \frac{x-y}{2}\}' '' -2
-box
-fill a '(x^3+y^3)/2'
-fill b '(x-y)/2'
-map a b 'brgk' 0 0
-
-
-File: mgl_ru.info,  Node: Traj sample,  Next: Vect sample,  Prev: Map sample,  Up: Dual plotting samples
-
-3.4.5 Traj - пример использования
-----------------------------------------------------
-
- [image src="../png/traj.png" ]
-
-new y 50 3
-new x 50
-new y1 50
-new y2 50
-modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
-modify y 'sin(2*pi*x)' 1
-modify y 'cos(2*pi*x)' 2
-fill x -1 1
-modify y1 '0.5+0.3*cos(2*pi*x)'
-modify y2 '0.3*sin(2*pi*x)'
-box
-plot x y
-traj x y y1 y2
-
-
-File: mgl_ru.info,  Node: Vect sample,  Next: VectL sample,  Prev: Traj sample,  Up: Dual plotting samples
-
-3.4.6 Vect - пример использования
-----------------------------------------------------
-
- [image src="../png/vect.png" ]
-
-new a 20 30
-new b 20 30
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-vect a b
-
-
-File: mgl_ru.info,  Node: VectL sample,  Next: VectC sample,  Prev: Vect sample,  Up: Dual plotting samples
-
-3.4.7 VectL - пример использования
------------------------------------------------------
-
- [image src="../png/vectl.png" ]
-
-new a 20 30
-new b 20 30
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-vectl a b
-
-
-File: mgl_ru.info,  Node: VectC sample,  Next: Flow sample,  Prev: VectL sample,  Up: Dual plotting samples
-
-3.4.8 VectC - пример использования
------------------------------------------------------
-
- [image src="../png/vectc.png" ]
-
-new a 20 30
-new b 20 30
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-vectc a b
-
-
-File: mgl_ru.info,  Node: Flow sample,  Next: Pipe sample,  Prev: VectC sample,  Up: Dual plotting samples
-
-3.4.9 Flow - пример использования
-----------------------------------------------------
-
- [image src="../png/flow.png" ]
-
-new a 20 30
-new b 20 30
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-flow a b
-
-
-File: mgl_ru.info,  Node: Pipe sample,  Next: Dew sample,  Prev: Flow sample,  Up: Dual plotting samples
-
-3.4.10 Pipe - пример использования
------------------------------------------------------
-
- [image src="../png/pipe.png" ]
-
-new a 20 30
-new b 20 30
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-light on
-box
-pipe a b
-
-
-File: mgl_ru.info,  Node: Dew sample,  Next: Surf3C sample,  Prev: Pipe sample,  Up: Dual plotting samples
-
-3.4.11 Dew - пример использования
-----------------------------------------------------
-
- [image src="../png/dew.png" ]
-
-new a 20 30
-new b 20 30
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-light on
-dew a b
-
-
-File: mgl_ru.info,  Node: Surf3C sample,  Next: Surf3A sample,  Prev: Dew sample,  Up: Dual plotting samples
-
-3.4.12 Surf3C - пример использования
--------------------------------------------------------
-
- [image src="../png/surf3c.png" ]
-
-new a 60 50 40
-new b 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-modify b '1-2*tanh(4*(x+y-1)^2)'
-rotate 40 60
-light on
-alpha on
-box
-surf3c a b
-
-
-File: mgl_ru.info,  Node: Surf3A sample,  Next: Vect 3D sample,  Prev: Surf3C sample,  Up: Dual plotting samples
-
-3.4.13 Surf3A - пример использования
--------------------------------------------------------
-
- [image src="../png/surf3a.png" ]
-
-new a 60 50 40
-new b 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-modify b '1-2*tanh(4*(x+y-1)^2)'
-rotate 40 60
-light on
-alpha on
-box
-surf3a a b
-
-
-File: mgl_ru.info,  Node: Vect 3D sample,  Next: VectL 3D sample,  Prev: Surf3A sample,  Up: Dual plotting samples
-
-3.4.14 Vect 3D - пример использования
---------------------------------------------------------
-
- [image src="../png/vect3.png" ]
-
-new ex 10 10 10
-new ey 10 10 10
-new ez 10 10 10
-fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-rotate 40 60
-box
-vect ex ey ez 'bwr'
-
-
-File: mgl_ru.info,  Node: VectL 3D sample,  Next: VectC 3D sample,  Prev: Vect 3D sample,  Up: Dual plotting samples
-
-3.4.15 VectL 3D - пример использования
----------------------------------------------------------
-
- [image src="../png/vectl3.png" ]
-
-new ex 10 10 10
-new ey 10 10 10
-new ez 10 10 10
-fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-rotate 40 60
-box
-vectl ex ey ez 'bwr'
-
-
-File: mgl_ru.info,  Node: VectC 3D sample,  Next: Flow 3D sample,  Prev: VectL 3D sample,  Up: Dual plotting samples
-
-3.4.16 VectC 3D - пример использования
----------------------------------------------------------
-
- [image src="../png/vectc3.png" ]
-
-new ex 10 10 10
-new ey 10 10 10
-new ez 10 10 10
-fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-rotate 40 60
-box
-vectc ex ey ez 'bwr'
-
-
-File: mgl_ru.info,  Node: Flow 3D sample,  Next: Pipe 3D sample,  Prev: VectC 3D sample,  Up: Dual plotting samples
-
-3.4.17 Flow 3D - пример использования
---------------------------------------------------------
-
- [image src="../png/flow3.png" ]
-
-new ex 30 30 30
-new ey 30 30 30
-new ez 30 30 30
-fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-rotate 40 60
-box
-flow ex ey ez 'bwr'
-
-
-File: mgl_ru.info,  Node: Pipe 3D sample,  Next: Crust sample,  Prev: Flow 3D sample,  Up: Dual plotting samples
-
-3.4.18 Pipe 3D - пример использования
---------------------------------------------------------
-
- [image src="../png/pipe3.png" ]
-
-new ex 10 10 10
-new ey 10 10 10
-new ez 10 10 10
-fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
-fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-rotate 40 60
-light on
-box
-pipe ex ey ez 'bwr'
-
-
-File: mgl_ru.info,  Node: Crust sample,  Next: Dots sample,  Prev: Pipe 3D sample,  Up: Dual plotting samples
-
-3.4.19 Crust - пример использования
-------------------------------------------------------
-
- [image src="../png/crust.png" ]
-
-read a 'hotdogs.pts'
-norm a -1 1 on
-rotate 40 60
-light on
-box
-crust a 'p'
-
-
-File: mgl_ru.info,  Node: Dots sample,  Prev: Crust sample,  Up: Dual plotting samples
-
-3.4.20 Dots - пример использования
------------------------------------------------------
-
- [image src="../png/dots.png" ]
-
-read a 'hotdogs.pts'
-norm a -1 1 on
-rotate 40 60
-box
-dots a 'p'
-
-
-File: mgl_ru.info,  Node: Basic features,  Next: Additional features,  Prev: Dual plotting samples,  Up: Samples
-
-3.5 Базовые возможности
-=========================================
-
-* Menu:
-
-* 1D plot sample::
-* 2D plot sample::
-* 3D plot sample::
-* Line styles sample::
-* Arrow styles sample::
-* Text styles sample::
-* TeX parsing sample::
-* Font faces sample::
-* Colors sample::
-* Color schemes sample::
-* Normal transparency::
-* Glass-like transparency::
-* Lamp-like transparency::
-
-
-File: mgl_ru.info,  Node: 1D plot sample,  Next: 2D plot sample,  Up: Basic features
-
-3.5.1 Пример графиков 1D данных
----------------------------------------------------
-
- [image src="../png/sample8.png" ]
-
-new y0 50: modify y0 'sin(pi*(2*x-1))'
-subplot 2 2 0
-plot y0: box
-
-subplot 2 2 1
-new y1 50 2
-modify y1 'sin(pi*2*x-pi)'
-modify y1 'cos(pi*2*x-pi)/2' 1
-plot y1: box
-
-new x 50: modify x 'cos(pi*2*x-pi)'
-plot x y0 'Y+'
-plot y1(:,0) y(:,1) 'q|'
-
-subplot 2 2 2:rotate 60 40
-new z 50:   modify z '2*x-1'
-plot x y0 z 'g':box
-new y2 10 3
-modify y2 'cos(pi*(2*x-1-y))'
-modify y2 '2*x-1' 2
-plot y2(:,0) y2(:,1) y2(:,2) 'bo '
-
-subplot 2 2 3:rotate 60 40
-bars x y0 z 'r':box
-
-
-File: mgl_ru.info,  Node: 2D plot sample,  Next: 3D plot sample,  Prev: 1D plot sample,  Up: Basic features
-
-3.5.2 Пример графиков 2D данных
----------------------------------------------------
-
- [image src="../png/sample9.png" ]
-
-light on
-
-new a0 50 40
-modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
-subplot 2 2 0:rotate 60 40
-surf a0: box
-
-new x 50 40: new y 50 40: new z 50 40
-modify x '0.8*sin(2*pi*x)*sin(pi*y)'
-modify y '0.8*cos(2*pi*x)*sin(pi*y)'
-modify z '0.8*cos(pi*y)'
-subplot 2 2 1:rotate 60 40
-surf x y z 'bbwrr': box
-
-new a1 50 40 3
-modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
-modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
-modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
-subplot 2 2 2:rotate 60 40
-alpha on
-surf a1: box
-
-subplot 2 2 3: rotate 60 40
-dens a1: box
-
-
-File: mgl_ru.info,  Node: 3D plot sample,  Next: Line styles sample,  Prev: 2D plot sample,  Up: Basic features
-
-3.5.3 Пример графиков 3D данных
----------------------------------------------------
-
- [image src="../png/sampleb.png" ]
-
-alpha on: light on
-light 0 0 0 1
-new a 30 30 30: new b 30 30 30
-modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
-modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
-caxis 0 1
-
-subplot 2 2 0: rotate 40 60
-surf3 a 'wgk': box
-subplot 2 2 1: rotate 40 60
-densa a: box: axis
-subplot 2 2 2: rotate 40 60
-cloud a: box
-subplot 2 2 3: rotate 40 60
-surf3a b a 'q': box
-
-
-File: mgl_ru.info,  Node: Line styles sample,  Next: Arrow styles sample,  Prev: 3D plot sample,  Up: Basic features
-
-3.5.4 Пример стилей линий и маркеров
---------------------------------------------------------------
-
- [image src="../png/sample5.png" ]
-
-NOT AVAILABLE
-
-
-File: mgl_ru.info,  Node: Arrow styles sample,  Next: Text styles sample,  Prev: Line styles sample,  Up: Basic features
-
-3.5.5 Пример стилей стрелок
-----------------------------------------------
-
- [image src="../png/sampled.png" ]
-
-NOT AVAILABLE
-
-
-File: mgl_ru.info,  Node: Text styles sample,  Next: TeX parsing sample,  Prev: Arrow styles sample,  Up: Basic features
-
-3.5.6 Пример стилей текста
---------------------------------------------
-
- [image src="../png/sample4.png" ]
-
-text 0 1 'Text can be in ASCII and in Unicode'
-text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
-text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
-text 0 -0.2 'Easy to \a{overline} or \u{underline}'
-text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
-text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
-
-
-File: mgl_ru.info,  Node: TeX parsing sample,  Next: Font faces sample,  Prev: Text styles sample,  Up: Basic features
-
-3.5.7 Пример TeX формулы
--------------------------------------
-
- [image src="../png/samplee.png" ]
-
-text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}' '' -4
-
-
-File: mgl_ru.info,  Node: Font faces sample,  Next: Colors sample,  Prev: TeX parsing sample,  Up: Basic features
-
-3.5.8 Примеры начертаний шрифта
-------------------------------------------------------
-
- [image src="../png/fonts.png" ]
-
-NOT AVAILABLE
-
-
-File: mgl_ru.info,  Node: Colors sample,  Next: Color schemes sample,  Prev: Font faces sample,  Up: Basic features
-
-3.5.9 Примеры цветов
----------------------------------
-
- [image src="../png/colors.png" ]
-
-#LENUQ
-facez -1   -1 0 0.4 0.3 'L#': text -0.8 -0.9 'L' 'C:w'
-facez -0.6 -1 0 0.4 0.3 'E#': text -0.4 -0.9 'E' 'C:w'
-facez -0.2 -1 0 0.4 0.3 'N#': text  0   -0.9 'N' 'C:w'
-facez  0.2 -1 0 0.4 0.3 'U#': text  0.4 -0.9 'U' 'C:w'
-facez  0.6 -1 0 0.4 0.3 'Q#': text  0.8 -0.9 'Q' 'C:w'
-#lenuq
-facez -1   -0.7 0 0.4 0.3 'l#': text -0.8 -0.6 'l' 'C:k'
-facez -0.6 -0.7 0 0.4 0.3 'e#': text -0.4 -0.6 'e' 'C:k'
-facez -0.2 -0.7 0 0.4 0.3 'n#': text  0   -0.6 'n' 'C:k'
-facez  0.2 -0.7 0 0.4 0.3 'u#': text  0.4 -0.6 'u' 'C:k'
-facez  0.6 -0.7 0 0.4 0.3 'q#': text  0.8 -0.6 'q' 'C:k'
-#CMYkP
-facez -1   -0.4 0 0.4 0.3 'C#': text -0.8 -0.3 'C' 'C:w'
-facez -0.6 -0.4 0 0.4 0.3 'M#': text -0.4 -0.3 'M' 'C:w'
-facez -0.2 -0.4 0 0.4 0.3 'Y#': text  0   -0.3 'Y' 'C:w'
-facez  0.2 -0.4 0 0.4 0.3 'k#': text  0.4 -0.3 'k' 'C:w'
-facez  0.6 -0.4 0 0.4 0.3 'P#': text  0.8 -0.3 'P' 'C:w'
-#lenuq
-facez -1   -0.1 0 0.4 0.3 'c#': text -0.8 0 'c' 'C:k'
-facez -0.6 -0.1 0 0.4 0.3 'm#': text -0.4 0 'm' 'C:k'
-facez -0.2 -0.1 0 0.4 0.3 'y#': text  0   0 'y' 'C:k'
-facez  0.2 -0.1 0 0.4 0.3 'w#': text  0.4 0 'w' 'C:k'
-facez  0.6 -0.1 0 0.4 0.3 'p#': text  0.8 0 'p' 'C:k'
-#BGRHW
-facez -1   0.2 0 0.4 0.3 'B#': text -0.8 0.3 'B' 'C:k'
-facez -0.6 0.2 0 0.4 0.3 'G#': text -0.4 0.3 'G' 'C:k'
-facez -0.2 0.2 0 0.4 0.3 'R#': text  0   0.3 'R' 'C:k'
-facez  0.2 0.2 0 0.4 0.3 'H#': text  0.4 0.3 'H' 'C:k'
-facez  0.6 0.2 0 0.4 0.3 'W#': text  0.8 0.3 'W' 'C:k'
-#bgrhw
-facez -1   0.5 0 0.4 0.3 'b#': text -0.8 0.6 'b' 'C:w'
-facez -0.6 0.5 0 0.4 0.3 'g#': text -0.4 0.6 'g' 'C:w'
-facez -0.2 0.5 0 0.4 0.3 'r#': text  0   0.6 'r' 'C:w'
-facez  0.2 0.5 0 0.4 0.3 'h#': text  0.4 0.6 'h' 'C:w'
-facez  0.6 0.5 0 0.4 0.3 'w#': text  0.8 0.6 'w' 'C:w'
-#brighted
-facez -1   0.8 0 0.4 0.3 'r1#': text -0.8 0.9 'r1' 'C:k'
-facez -0.6 0.8 0 0.4 0.3 'r3#': text -0.4 0.9 'r3' 'C:k'
-facez -0.2 0.8 0 0.4 0.3 'r5#': text  0   0.9 'r5' 'C:k'
-facez  0.2 0.8 0 0.4 0.3 'r7#': text  0.4 0.9 'r7' 'C:k'
-facez  0.6 0.8 0 0.4 0.3 'r9#': text  0.8 0.9 'r9' 'C:k'
-
-
-File: mgl_ru.info,  Node: Color schemes sample,  Next: Normal transparency,  Prev: Colors sample,  Up: Basic features
-
-3.5.10 Примеры цветовых схем
------------------------------------------------
-
- [image src="../png/color_schemes.png" ]
-
-new a 256 2: fill a 'x'
-subplot 2 10 0 0.2:dens a 'kw'
-text -1.4 -0.3 'kw' '' -8
-subplot 2 10 1 0.2:dens a 'wk'
-text -1.4 -0.3 'wk' '' -8
-subplot 2 10 2 0.2:dens a 'kHCcw'
-text -1.4 -0.3 'kHCcw' '' -8
-subplot 2 10 3 0.2:dens a 'kBbcw'
-text -1.4 -0.3 'kBbcw' '' -8
-subplot 2 10 4 0.2:dens a 'kRryw'
-text -1.4 -0.3 'kRryw' '' -8
-subplot 2 10 5 0.2:dens a 'kGgew'
-text -1.4 -0.3 'kGgew' '' -8
-subplot 2 10 6 0.2:dens a 'BbwrR'
-text -1.4 -0.3 'BbwrR' '' -8
-subplot 2 10 7 0.2:dens a 'BbwgG'
-text -1.4 -0.3 'BbwgG' '' -8
-subplot 2 10 8 0.2:dens a 'GgwmM'
-text -1.4 -0.3 'GgwmM' '' -8
-subplot 2 10 9 0.2:dens a 'UuwqR'
-text -1.4 -0.3 'UuwqR' '' -8
-subplot 2 10 10 0.2:dens a 'QqwcC'
-text -1.4 -0.3 'QqwcC' '' -8
-subplot 2 10 11 0.2:dens a 'CcwyY'
-text -1.4 -0.3 'CcwyY' '' -8
-subplot 2 10 12 0.2:dens a 'bcwyr'
-text -1.4 -0.3 'bcwyr' '' -8
-subplot 2 10 13 0.2:dens a 'bwr'
-text -1.4 -0.3 'bwr' '' -8
-subplot 2 10 14 0.2:dens a 'BbcyrR'
-text -1.4 -0.3 'BbcyrR' '' -8
-subplot 2 10 15 0.2:dens a 'UbcyqR'
-text -1.4 -0.3 'UbcyqR' '' -8
-subplot 2 10 16 0.2:dens a 'BbcwyrR'
-text -1.4 -0.3 'BbcwyrR' '' -8
-subplot 2 10 17 0.2:dens a 'bcyr'
-text -1.4 -0.3 'bcyr' '' -8
-subplot 2 10 18 0.2:dens a 'BbcyrR|'
-text -1.4 -0.3 'BbcyrR|' '' -8
-subplot 2 10 19 0.2:dens a 'bgr'
-text -1.4 -0.3 'bgr' '' -8
-
-
-File: mgl_ru.info,  Node: Normal transparency,  Next: Glass-like transparency,  Prev: Color schemes sample,  Up: Basic features
-
-3.5.11 Обычная прозрачность
-----------------------------------------------
-
- [image src="../png/type0.png" ]
-
-alpha on: light on
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
-transptype 0: clf
-subplot 2 2 0: rotate 40 60: surf a:  box
-subplot 2 2 1: rotate 40 60: dens a:  box
-subplot 2 2 2: rotate 40 60: cont a:  box
-subplot 2 2 3: rotate 40 60: axial a: box
-
-
-File: mgl_ru.info,  Node: Glass-like transparency,  Next: Lamp-like transparency,  Prev: Normal transparency,  Up: Basic features
-
-3.5.12 "Стеклянная" прозрачность
-------------------------------------------------------
-
- [image src="../png/type1.png" ]
-
-alpha on: light on
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
-transptype 1: clf
-subplot 2 2 0: rotate 40 60: surf a:  box
-subplot 2 2 1: rotate 40 60: dens a:  box
-subplot 2 2 2: rotate 40 60: cont a:  box
-subplot 2 2 3: rotate 40 60: axial a: box
-
-
-File: mgl_ru.info,  Node: Lamp-like transparency,  Prev: Glass-like transparency,  Up: Basic features
-
-3.5.13 "Ламповая" прозрачность
---------------------------------------------------
-
- [image src="../png/type2.png" ]
-
-alpha on: light on
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
-transptype 2: clf
-subplot 2 2 0: rotate 40 60: surf a:  box
-subplot 2 2 1: rotate 40 60: dens a:  box
-subplot 2 2 2: rotate 40 60: cont a:  box
-subplot 2 2 3: rotate 40 60: axial a: box
-
-
-File: mgl_ru.info,  Node: Additional features,  Next: Advanced features,  Prev: Basic features,  Up: Samples
-
-3.6 Дополнительные возможности
-=======================================================
-
-* Menu:
-
-* Legend sample::
-* Adding mesh sample::
-* Surf & Cont sample::
-* Flow & Dens sample::
-* Several light sample::
-* Mirrored surface sample::
-* Cont with labels sample::
-* Ternary plot sample::
-* Coloring by coordinates sample::
-* Drops sample::
-* Molecules drawing sample::
-
-
-File: mgl_ru.info,  Node: Legend sample,  Next: Adding mesh sample,  Up: Additional features
-
-3.6.1 Legend - пример использования
-------------------------------------------------------
-
- [image src="../png/legend.png" ]
-
-new f 50 3
-modify f 'sin(2*pi*x*x)'
-modify f 'sin(2*pi*x)' 1
-modify f 'sin(2*pi*sqrt(x))' 2
-axis 0 -1 1 1
-box
-plot f
-axis
-addlegend 'sin(\pi {x^2})' 'b'
-addlegend 'sin(\pi x)' 'g*'
-addlegend 'sin(\pi \sqrt{\a x})' 'r+'
-legend
-
-
-File: mgl_ru.info,  Node: Adding mesh sample,  Next: Surf & Cont sample,  Prev: Legend sample,  Up: Additional features
-
-3.6.2 Добавляем сетку
------------------------------------
-
- [image src="../png/samplea.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-alpha on
-light on
-subplot 2 2 0
-rotate 40 60
-surf a 'BbcyrR#'
-box
-subplot 2 2 1
-rotate 40 60
-dens a 'BbcyrR#'
-box
-subplot 2 2 2
-rotate 40 60
-cont a 'BbcyrR#'
-box
-subplot 2 2 3
-rotate 40 60
-axial a 'BbcyrR#'
-box
-
-
-File: mgl_ru.info,  Node: Surf & Cont sample,  Next: Flow & Dens sample,  Prev: Adding mesh sample,  Up: Additional features
-
-3.6.3 Surf & Cont - пример использования
------------------------------------------------------------
-
- [image src="../png/surf_cont_y.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-box
-surf a
-cont a 'y'
-
-
-File: mgl_ru.info,  Node: Flow & Dens sample,  Next: Several light sample,  Prev: Surf & Cont sample,  Up: Additional features
-
-3.6.4 Flow & Dens - пример использования
------------------------------------------------------------
-
- [image src="../png/flow_dens.png" ]
-
-new a 50 40
-new b 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-copy d a
-modify d 'sqrt(v^2+w^2)' a b
-box
-flow a b 'br'
-dens d 'BbcyrR'
-
-
-File: mgl_ru.info,  Node: Several light sample,  Next: Mirrored surface sample,  Prev: Flow & Dens sample,  Up: Additional features
-
-3.6.5 Несколько источников света
---------------------------------------------------------
-
- [image src="../png/several_light.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-rotate 40 60
-light on
-light 1 0 1 0 'c'
-light 2 1 0 0 'y'
-light 3 0 -1 0 'm'
-box
-surf a 'h'
-
-
-File: mgl_ru.info,  Node: Mirrored surface sample,  Next: Cont with labels sample,  Prev: Several light sample,  Up: Additional features
-
-3.6.6 Отражение поверхности
------------------------------------------------
-
- [image src="../png/mirror.png" ]
-
-new a 30 40
-modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
-rotate 40 60
-light on
-surf a 'r'; yrange 0 1
-surf a 'b'; yrange 0 -1
-box
- or
-new a 30 40
-var x 30 -1 1
-var y1 40 0 1
-var y2 40 0 -1
-modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
-rotate 40 60
-light on
-surf x y1 a 'r'
-surf x y2 a 'b'
-box
-
-
-File: mgl_ru.info,  Node: Cont with labels sample,  Next: Ternary plot sample,  Prev: Mirrored surface sample,  Up: Additional features
-
-3.6.7 Cont и подписи - пример использования
-----------------------------------------------------------------------
-
- [image src="../png/contt.png" ]
-
-new a 50 40
-modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-box
-cont a 'BbcyrRt'
-
-
-File: mgl_ru.info,  Node: Ternary plot sample,  Next: Coloring by coordinates sample,  Prev: Cont with labels sample,  Up: Additional features
-
-3.6.8 Ternary plot - пример использования
-------------------------------------------------------------
-
- [image src="../png/ternary.png" ]
-
-new rx 10
-new ry 10
-new x 50
-new y 50
-new a 20 30
-modify a '4*x*y'
-modify x '0.25*(1+cos(2*pi*x))'
-modify y '0.25*(1+sin(2*pi*x))'
-modify rx 'rnd'
-modify ry 'rnd*(1-v)' rx
-text -0.8 1.3 'Ternary plot (x+y+t=1)'
-ternary on
-plot x y 'r2'
-plot rx ry 'q^ '
-cont a
-line 0.5 0 0 0.75 'g2'
-axis
-grid 'xyz' 'B;'
-xlabel 'x comp.'
-ylabel 'y comp.'
-tlabel 't comp.'
-
-
-File: mgl_ru.info,  Node: Coloring by coordinates sample,  Next: Drops sample,  Prev: Ternary plot sample,  Up: Additional features
-
-3.6.9 Окрашивание по положению грани
----------------------------------------------------------------
-
- [image src="../png/surf3_rgbd.png" ]
-
-new a 60 50 40
-modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-rotate 40 60
-box
-surf3 a 'bgrd'
-
-
-File: mgl_ru.info,  Node: Drops sample,  Next: Molecules drawing sample,  Prev: Coloring by coordinates sample,  Up: Additional features
-
-3.6.10 Drops - пример использования
-------------------------------------------------------
-
- [image src="../png/drops.png" ]
-
-light on
-text -1 1.2 'sh=0'
-drop -1 0 0 1 0.5 'r' 0
-text -0.33 1.2 'sh=0.33'
-drop -0.33 0 0 1 0.5 'r' 0.33
-text 0.33 1.2 'sh=0.67'
-drop 0.33 0 0 1 0.5 'r' 0.67
-text 1 1.2 'sh=1'
-drop 1 0 0 1 0.5 'r' 1
-ball -1 0 1 'k'
-ball -0.33 0 1 'k'
-ball 0.33 0 1 'k'
-ball 1 0 1 'k'
-line -1 0 1 1 0 1 'b'
-new h 100
-modify h '0.25*(1+x)^2'
-plot h 'k|'
-text -1 0.6 'h\sim(1+sh)^2' 'rL'
-
-
-File: mgl_ru.info,  Node: Molecules drawing sample,  Prev: Drops sample,  Up: Additional features
-
-3.6.11 Рисование молекул
-----------------------------------------
-
- [image src="../png/molecule.png" ]
-
-alpha on
-light on
-subplot 2 2 0
-text 0 1.2 'Methane, CH_4' '' -3
-rotate 60 120
-sphere 0 0 0 0.25 'k'
-drop 0 0 0 0 0 1 0.35 'h' 1 2
-sphere 0 0 0.7 0.25 'g'
-drop 0 0 0 -0.94 0 -0.33 0.35 'h' 1 2
-sphere -0.66 0 -0.23 0.25 'g'
-drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2
-sphere 0.33 0.57 -0.23 0.25 'g'
-drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2
-sphere 0.33 -0.57 -0.23 0.25 'g'
-subplot 2 2 1
-text 0 1.2 'Water, H{_2}O' '' -3
-rotate 60 100
-sphere 0 0 0 0.25 'r'
-drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2
-sphere 0.3 0.5 0 0.25 'g'
-drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2
-sphere 0.3 -0.5 0 0.25 'g'
-subplot 2 2 2
-text 0 1.2 'Oxygen, O_2' '' -3
-rotate 60 120
-drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2
-sphere 0 0.5 0 0.25 'r'
-drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2
-sphere 0 -0.5 0 0.25 'r'
-subplot 2 2 3
-text 0 1.2 0 'Ammonia, NH_3' '' -3
-rotate 60 120
-sphere 0 0 0 0.25 'b'
-drop 0 0 0 0.33 0.57 0 0.32 'n' 1 2
-sphere 0.33 0.57 0 0.25 'g'
-drop 0 0 0 0.33 -0.57 0 0.32 'n' 1 2
-sphere 0.33 -0.57 0 0.25 'g'
-drop 0 0 0 -0.65 0 0 0.32 'n' 1 2
-sphere -0.65 0 0 0.25 'g'
-
-
-File: mgl_ru.info,  Node: Advanced features,  Prev: Additional features,  Up: Samples
-
-3.7 "Продвинутые" возможности
-===================================================
-
-* Menu:
-
-* Curvelinear coorinates sample::
-* 2-axes sample::
-* Semi-log sample::
-* Log-log sample::
-* Fitting sample::
-* Envelop sample::
-* Sew sample::
-* STFA sample::
-* PDE sample::
-* Beam tracing sample::
-* Parser sample::
-* Manual ticks sample::
-* ColumnPlot sample::
-* StickPlot sample::
-* Stereo image sample::
-
-
-File: mgl_ru.info,  Node: Curvelinear coorinates sample,  Next: 2-axes sample,  Up: Advanced features
-
-3.7.1 Криволинейные координаты
------------------------------------------------------
-
- [image src="../png/sample3.png" ]
-
-origin -1 1 -1
-subplot 2 2 0
-rotate 60 40
-line -1 0.5 0 1 0.5 0 'r2'
-axis
-grid
-text 0 1.3 1 'Cartesian'
-subplot 2 2 1
-rotate 60 40
-axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
-line -1 0.5 0 1 0.5 0 'r2'
-axis
-grid
-text 0 1.3 1 'Cylindrical'
-subplot 2 2 2
-rotate 60 40
-axis '2*y*x' 'y*y - x*x' ''
-line -1 0.5 0 1 0.5 0 'r2'
-axis
-grid
-text 0 1.3 1 'Parabolic'
-subplot 2 2 3
-rotate 60 40
-axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
-line -1 0.5 0 1 0.5 0 'r2'
-axis
-grid
-text 0 1.3 1 'Spiral'
-axis '' '' '' # set to default Cartesian
-
-
-File: mgl_ru.info,  Node: 2-axes sample,  Next: Semi-log sample,  Prev: Curvelinear coorinates sample,  Up: Advanced features
-
-3.7.2 Несколько осей на одном графике
-----------------------------------------------------------------
-
- [image src="../png/2_axis.png" ]
-
-new y1 50
-new y2 50
-modify y1 '0.3*sin(2*pi*x)'
-modify y2 '0.5+0.3*cos(2*pi*x)'
-axis -1 -1 -1 1 1 1
-origin -1 -1 -1
-axis
-ylabel 'axis 1' 0
-plot y1 'b'
-axis 0 0 0 1 1 1
-origin 1 1 1
-axis
-ylabel 'axis 2' 0
-stem y2 'r'
-
-
-File: mgl_ru.info,  Node: Semi-log sample,  Next: Log-log sample,  Prev: 2-axes sample,  Up: Advanced features
-
-3.7.3 Semi-log - пример использования
---------------------------------------------------------
-
- [image src="../png/semilog.png" ]
-
-new x 2000
-new y 2000
-modify x '0.01/(x+10^(-5))'
-modify y 'sin(1/v)' x
-xrange 0.01 1000
-origin 0.01 -1 0
-xtick 0
-axis 'lg(x)' '' ''
-plot x y 'b2'
-axis
-grid 'xy' 'g'
-xlabel 'x' 0
-ylabel 'y = sin 1/x' 0
-box
-
-
-File: mgl_ru.info,  Node: Log-log sample,  Next: Fitting sample,  Prev: Semi-log sample,  Up: Advanced features
-
-3.7.4 Log-log - пример использования
--------------------------------------------------------
-
- [image src="../png/loglog.png" ]
-
-new x 100
-new y 100
-modify x 'pow(10,6*x-3)'
-modify y 'sqrt(1+v^2)' x
-axis 0.001 0.1 1000 1000
-xtick 0
-ytick 0
-axis 'lg(x)' 'lg(y)' ''
-plot x y 'b2'
-axis
-grid 'xy' 'g;'
-xlabel 'x' 0
-ylabel 'y=\sqrt{1+x^2}' 0
-box
-
-
-File: mgl_ru.info,  Node: Fitting sample,  Next: Envelop sample,  Prev: Log-log sample,  Up: Advanced features
-
-3.7.5 Fitting - пример использования
--------------------------------------------------------
-
- [image src="../png/fit.png" ]
-
-new rnd 100
-fill rnd '0.4*rnd+0.1+sin(2*pi*x)'
-new in 100
-fill in '0.3+sin(2*pi*x)'
-yrange -2 2
-plot rnd '. '
-box
-list ini 1 1 3
-fit res rnd 'a+b*sin(c*x)' 'abc' ini
-plot res 'r'
-plot in 'b'
-text -1 -1.3 'fitted:' 'L:r' -1
-putsfit 0 -1.8 'y = ' 'C:r'
-text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
-
-
-File: mgl_ru.info,  Node: Envelop sample,  Next: Sew sample,  Prev: Fitting sample,  Up: Advanced features
-
-3.7.6 Envelop - пример использования
--------------------------------------------------------
-
- [image src="../png/envelop.png" ]
-
-new a 1000
-fill a 'exp(-8*x^2)*sin(10*pi*x)'
-plot a 'b'
-envelop a
-plot a 'r'
-axis
-
-
-File: mgl_ru.info,  Node: Sew sample,  Next: STFA sample,  Prev: Envelop sample,  Up: Advanced features
-
-3.7.7 Sew - пример использования
----------------------------------------------------
-
- [image src="../png/sew.png" ]
-
-new a 100 100
-modify a 'mod((y^2-(1-x)^2)/2,0.1)'
-rotate 40 60
-light on
-alpha on
-surf a 'b'
-sew a 'xy' 0.1
-surf a 'r'
-box
-
-
-File: mgl_ru.info,  Node: STFA sample,  Next: PDE sample,  Prev: Sew sample,  Up: Advanced features
-
-3.7.8 STFA - пример использования
-----------------------------------------------------
-
- [image src="../png/stfa.png" ]
-
-new a 2000
-new b 2000
-fill a 'cos(50*pi*x)*(x<-.5)+cos(100*pi*x)*(x<0)*(x>-.5)+
-        cos(200*pi*x)*(x<.5)*(x>0)+cos(400*pi*x)*(x>.5)'
-subplot 1 2 0
-plot a
-axis
-xlabel '\i t'
-subplot 1 2 1
-stfa a b 64 ''
-axis
-ylabel '\omega' 0
-xlabel '\i t'
-
-
-File: mgl_ru.info,  Node: PDE sample,  Next: Beam tracing sample,  Prev: STFA sample,  Up: Advanced features
-
-3.7.9 PDE - пример использования
----------------------------------------------------
-
- [image src="../png/pde.png" ]
-
-axis
-xlabel '\i x'
-ylabel '\i z'
-new re 128
-new im 128
-fill re 'exp(-48*(x+0.7)^2)'
-pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01 30
-transpose a
-crange 0 1
-dens a 'wyrRk'
-fplot '-x' 'k|'
-text 0 0.85 'absorption: (x+z)/2 for x+z>0' '' -1
-title 'Equation: ik_0\partial_zu + \Delta u + x\cdot u + i \frac{x+z}{2}\cdot u = 0' 'iC' -1.5
-
-
-File: mgl_ru.info,  Node: Beam tracing sample,  Next: Parser sample,  Prev: PDE sample,  Up: Advanced features
-
-3.7.10 Beam tracing - пример использования
--------------------------------------------------------------
-
- [image src="../png/qo2d.png" ]
-
-define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
-ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
-plot r(0) r(1) 'k'
-axis
-xlabel '\i x'
-ylabel '\i z'
-new re 128
-new im 128
-new xx
-new yy
-fill re 'exp(-48*x^2)'
-qo2d a $1 re im r 1 30 xx yy
-crange 0 1
-dens xx yy a 'wyrRk'
-fplot '-x' 'k|'
-text -0.8 0.85 'absorption: (x+y)/2 for x+y>0' 'L' -1
-text 0.5 -0.05 'central ray' 'L' -1
-title 'Beam and ray tracing' 'C' -1.5
-
-
-File: mgl_ru.info,  Node: Parser sample,  Next: Manual ticks sample,  Prev: Beam tracing sample,  Up: Advanced features
-
-3.7.11 Parser - пример использования
--------------------------------------------------------
-
-
-File: mgl_ru.info,  Node: Manual ticks sample,  Next: ColumnPlot sample,  Prev: Parser sample,  Up: Advanced features
-
-3.7.12 Особые метки по осям
---------------------------------------------
-
- [image src="../png/tval.png" ]
-
-axis -pi 0 pi 2
-xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' 0.886 'x^*' 1.571 '\pi/2' pi '\pi'
-axis
-grid
-fplot '2*cos(x^2)^2' 'r2' nan 300
-
-
-File: mgl_ru.info,  Node: ColumnPlot sample,  Next: StickPlot sample,  Prev: Manual ticks sample,  Up: Advanced features
-
-3.7.13 ColumnPlot - пример использования
------------------------------------------------------------
-
- [image src="../png/column.png" ]
-
-for $1 0 3
-columnplot 4 $1
-box
-text -0.5 0.5 'Plot $1 of 4'
-fplot 'sin(pi*x+pi*$1/2)'
-next
-
-
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/texinfo/mgl_ru.info-2 b/texinfo/mgl_ru.info-2
deleted file mode 100644
index 31d85f7..0000000
Binary files a/texinfo/mgl_ru.info-2 and /dev/null differ
diff --git a/texinfo/mgl_ru.texi b/texinfo/mgl_ru.texi
index d7db1d8..4bf7574 100644
--- a/texinfo/mgl_ru.texi
+++ b/texinfo/mgl_ru.texi
@@ -27,10 +27,10 @@ supports it in developing GNU and promoting software freedom.''
 @end quotation
 @end copying
 
- at c @dircategory MathGL documentation system
- at c @direntry
- at c * MathGL: (mathgl). The library for scientific graphics.
- at c @end direntry
+ at dircategory MathGL documentation system
+ at direntry
+* MathGL: (mathgl). The library for scientific graphics.
+ at end direntry
 
 @titlepage
 @title Язык MGL

-- 
Packaging for mathgl



More information about the debian-science-commits mailing list