The Zenautics Matrix Project
Zenautics Technologies Inc.
Download Page
1.11
This C++ Matrix/Vector Library provides an extremely powerful software development tool for real and complex data manipulation. It is an easy to use, fast, and efficient one or two dimensional C++ Matrix class designed for engineers and scientists. A great deal of effort in design provides elegant access to the Matrix for real data and for complex data or both. The Matrix is highly optimized for column-wise operations with real-only, complex, and mixed data. Since the double type is the most commonly used floating point type for demanding PC applications, this library is optimized and specific for type 'double'.
- Ease of use!
- Simple to compile and utilize
- Windows and Linux packages available
- Total support for real and complex data
- Exception handling
- Safe mode functionality (most functions return bool, true if successful, false otherwise)
- Comprehensive documentation
- Uses the C++ Standard Template Library
- Basic Edition has free and non-restirctive licensing for commerical and non-commerical purposes
- Competitive pricing for the Advanced Edition
- FFT/IFFT (DFT/IDFT)*
- Advanced Edition's FFT is the fastest known FFT available (Intel FFT)
- Complete statistical function set
- Comprehensive operator set
- Fast Inversion using Cholesky decomposition for positive definite matrices
- Robust Inversion otherwise
- Fantastic data file reading capabilities
- Automatic ASCII file delimiter detection
- Ergonomic ASCII file formatting
- Very fast and efficient saving and loading of matrices to lossless compressed binary files**
- Speed, Speed, Speed (uses advanced SIMD instruction sets resulting in 10-25 time speed improvement)**
- Comprehensive support packages available
FFT/IFFT (DFT/IDFT)* using Intel FFT for the Advanced Edition and Kiss FFT for the Basic Edition (http://sourceforge.net/projects/kissfft/).
Advanced Edition Only**
The Matrix treated as a real-only vector: Matrix A(10);
...
double d = A[0];
A[1] = d*4.0;
A.PrintStdout(4);
The Matrix treated as a real-only matrix:
Matrix A(2,2);
...
double d = A[0][0];
A[0][1] = d*4.0;
The Matrix can be treated as a complex vector:
Matrix A(10);
...
double d = A(0).real();
double v = A(0).imag();
A(1) = d;
std::complex<double> q(1.0,-2.0);
A(2) = q;
or as a complex matrix:
Matrix A(2,2);
...
std::complex<double> c = B(0,0);
double r = A(0,1).real();
double i = A(0,1).imag();
std::complex<double> w(1.0,-2.0);
A(1,1) = w;
The Basic Edition is released with almost all the functionality of the Advanced Edition. It is freely available for download from http://www.zenautics.com website with the license information indicated below. This version is intended for evaluating the Matrix Library or those that need the functionality of the Matrix but cannot afford to pay for the commerical version.
The Advanced Edition is intended for use in commercial software projects by professionals. It is available for purchase with various support agreement levels. Please contact sales@zenautics.com for more information. The Advanced Edition is substanitally faster than the Basic Edition. It uses advanced SIMD instruction sets and is substantially faster (typically 10 and up to 25 times (e.g. FFT) speed improvement).
The Advanced Edition also facilitates lossless data compression for storing matrix files using a proprietary format. Loading and saving matrices is faster and disk space usage is drastically reduced for large matrix files.
The class interface is the same for both the Advanced and Basic Editions.
Contact info@zenautics.com to inquire about customized embedded versions of the Matirx Library (double, float, and integer versions available).
Copyright (c) 2007, Glenn D. MacGougan, Zenautics Technologies Inc.
This license is categorized as a BSD-style license (refer http://en.wikipedia.org/wiki/Bsd_license).
Redistribution pertains only to the following files and their contents.
Redistribution and use in source and binary forms, with or without modification, of the specified files is permitted provided the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- The name(s) of the contributor(s) may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This code was developed using rigourous unit testing for every function and operation. Despite any rigorous development process, bugs are inevitable. Please report bugs and suggested fixes to support@zenautics.com.
- Zero or One-based indexing control
- Matlab-style two dimensional plotting
version 1.00
version 1.01
- Released 2007-01-19
- Add scalar capability processing to matrices that are 1x1. This is enabled by default. It can be disabled using the Treat1x1MatricesAsScalar function. For example:
Matrix A;
Matrix B;
A = 3.0;
B = "[1 2; 4 5]";
Matrix C = A*B;
- Added safe functions (return bool) for more inplace matrix operations.
version 1.02
- Released 2007-02-09
- Added some matlab style inplace functions.
- Fixed a minor bug related to BOOL use with cmatrix.h and cmatrix_basic.a
version 1.03
- Released 2007-02-12
- Added default ncols for Redim and Resize for row vector style dimension changes.
- Added missing operator overloads for vector style operations (real only access style []).
- Added std::string function overloads for functions where 'c' style strings are needed.
- Added more code examples in the documentation.
version 1.04
- Released 2007-03-19
- Added PrintStdout for easy output to the standard output.
- Added append mode capabilities to all print to file member functions.
version 1.10
- Released 2007-12-13
- Added many new Inplace_ functions that resemble Matlab/Octave
- Many example code snippets in the documentation
- Added RemoveRowsAndColumns
- Added SetIndexedValues
version 1.11
- Released 2007-12-21
- Minor internal enhancements
The Advanced Edition utilizes Intel FFT. There are no license restrictions. For performance comparison of the various FFT methods refer to http://www.fftw.org/benchfft/.
The Basic Edition utilizes the KISS FFT software libary (http://sourceforge.net/projects/kissfft/) which has the following license information. Since the KISS FFT library is redistributed in binary form, the copyright notice below is required in this documentation.
Copyright (c) 2003-2004, Mark Borgerding
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Getting Started with Microsoft Visual C++ verison 8 (VC8)
For VC8:

Follow these steps:
- Create a VC8 project



Download these files and put them in your project folder
Matrix.h Matrix.cpp cmatrix.h matrix_example.cpp cmatrix_basic.lib

Add the .h and .cpp files to your project.


Open the project properties.

Add the library file, cmatrix_basic.lib to the project. Specify the "Ignore Specific Library" as "libmct.lib" since your are running in Debug mode.

Build the solution.

It should look something like this.

Try stepping over each line of code as it runs like this.

Generated on Fri Dec 21 08:40:43 2007 for Matrix by
1.5.4