Is there's away to convert the built-in functions that doesn't have a .m file to C++
I'm read in some paper that neither the Matlab compiler nor the Matlab coder could convert it
so I'm wondering those seem to be the most basic functions is there's another way to convert it or perhaps a C++ library with its equivalent
Check the Boost C++ Library (which also contains ode solvers and many other things) or LAPACK (for linear algebra operations).
For deployment solutions, MathWorks publishes lists of supported toolboxes and functions by each product: MATLAB Coder and MATLAB Compiler
Related
Is it possible to load the matrix in PETSc binary format from external file at runtime with use of Octave C++ API? I've found the Doxygen documentation, but I can't find anything useful among so many items.
Usually I use "PetscBinaryRead.m" when I want to load a PETSc matrix to Octave, but now in C++ I'm really completely lost.
the PetscBinaryRead.m is not part of Octave, we don't know where you got it or even what it does. You can:
reimplement it on C++, C, or Fortran (only you know what it does)
start the Octave interpreter in your C++ and call PetscBinaryRead from there (see the Octave manual on how to create standalone programs or calling Octave Functions from Oct-files
I am currently working on a project in C++, and I am actually interested in using Matlab data structures, instead of having to create my own data types (such as matrices, arrays, etc.)
Is there a way to seamlessly use Matlab objects in C++? I don't mind having to run Matlab in the background while my program runs.
EDIT: A starting point is this: http://www.mathworks.co.uk/help/matlab/calling-matlab-engine-from-c-c-and-fortran-programs.html. I will continue reading this.
You can use instead Armadillo C++ maths library; used by NASA, Boeing, Siemens, Deutsche Bank, MIT, CMU, Stanford, etc.
They have good documentation and examples if you are more familiar with MATLAB/OCTAVE
http://arma.sourceforge.net/docs.html#syntax
I would prefer using native C++ library of some sort and not Matlab. This is likely to be faster for both development and execution.
From writing C++ extensions for Matlab I learned one thing: Using Matlab objects in C++ is likely to give you considerable headache.
Matlab data structures are not exposed as C++ classes. Instead, you get pointers that you can manipulate with C-like API functions.
I recommend to use a native C++ library such as Eigen3.
The functionality you are looking at is not really intended to be used as seamless objects. In the past when I have used it I found it much simpler to do the C parts using either native arrays or a third party matrix library and then convert it into a Matlab matrix to return.
Mixing Matlab and C++ is typically done in one of two ways:
Having a C++ program call Matlab to do some specialist processing. This is chiefly useful for rapid development of complex matrix algorithms. You can do this either by calling the full Matlab engine, or by packaging you snippet of Matlab code into a shared library for distribution. (The distributed version packages a distributable copy of the Matlab runtime which is called with your scripts).
Having a Matlab script call a C++ function to do some specialist processing. This is often used to embed C++ implementations of algorithms (such as machine learning models) or to handle specific optimizations.
Both of these use cases have some overhead transferring the data to/from Matlab.
If you are simply looking for some matrix code to use in C++ you would be better off looking into the various C++ matrix libraries, such as the one implemented in Boost.
You can do mixed programming with C++ and Matlab. There are two possible ways:
Call MATLAB Engine directly: Refer to this post for more info. Matlab will run in the background.
Distribute MATLAB into independent shared library: check out here on how to do this (with detail steps and example).
I have developed a MATLAB program with Visual C++. I am using IntelĀ® Integrated Performance Primitives because speed of program is important issue and I have done a lot of efforts for implementing some MATLAB functions. For example, for Min and Max functions over a vector i use ippsMaxIndx_32f; but, there is function in MATLAB like Find.
Here is a description of the Find method in MATLAB:
Description
I need a function which implements this find function of MATLAB with high speed.
Are there any functions inside Intel Ipp, that works like the Find function in MATLAB?
I've never heard of a comprehensive port of matlab functionality to C++. That being said, almost everything matlab does exists within a C/C++ library somewhere, some off the top of my head:
LAPACK, BLAS, and there are a few good implementations, the most notable (free) one being ATLAS.
FFT is implemented in matlab via the fftw library
There are loads of fast open-source image libraries out there, ie. interpolation, filtering.
There are really good OOP matrix libraries out there, boost has a nice one.\
After that, well figure out what you need and there is a good chance someone has implemented it in C/C++.
You can check to these to see if you can find the function you are looking for! As i am not sure for that.
I've used ippsFind_* and they have worked just fine.
Are there free C/C++ libraries taht do the types of functions that matlab does - something complicated i mean, like discrete laplacian, etc? Is the best option to create some kind of interface in matlab and build my own library?
Thanks
Have you looked at Boost.Math?
http://www.boost.org/doc/libs/1_46_1/libs/math/doc/html/index.html
If you are on windows, there is a very easy to use installer by BoostPro:
http://www.boostpro.com/download/
If you want something that was a matlab clone but free, you could use Octave http://www.gnu.org/software/octave/
I haven't used it in a C++ program, but it apparently has a C++ API:
http://octave.sourceforge.net/doxygen/html/index.html
Depending on what you want to do there are various packages available.
Arbitrary Precision
mostly integers: GMP, MPIR (similar codebases, MPIR has VC builds)
floats: MPFR
complex: MPC
Specialist:
Number Theory: Flint
Linear Algebra: Boost Numeric uBLAS
PDEs: libMesh
Computational Fluid Dynamics: OpenFoam
Graph Theory: Boost Graph
General:
TNT (was LAPACK++ (TNT=do everything, LAPACK++=Linear Alg.)
SciMath (Commercial)
GNU Scientific Library
and that's just a few. I haven't repeated ones others have listed like libpari.
Just in case you're wondering, Maple, Mathematica, Matlab etc all use the GNU MP for their arbitrary precision calculations.
PARI could be a good choice, although I am not familiar with using it:
Official Site for PARI
PARI is a C library, and if you want an independent software, they have PARI-GP there.
Below is the description of PARI on the website above:
PARI/GP is a widely used computer
algebra system designed for fast
computations in number theory
(factorizations, algebraic number
theory, elliptic curves...), but also
contains a large number of other
useful functions to compute with
mathematical entities such as
matrices, polynomials, power series,
algebraic numbers etc., and a lot of
transcendental functions. PARI is also
available as a C library to allow for
faster computations.
Hope this could be useful!
P.S. It is said that Octave functions could be called from C++, and that could be an excellent substitution for MATLAB.
Have a look at armadillo for simplifying your handling of matrices. Then for solving PDEs you'll have to do the job yourself, ie. construct explicitly your Laplacian matrix, and solve it the way you want.
There is Intel MKL too (not free though) which adds some value: iterative solvers (GMRES, BCG) and some black-boxes for solving the Laplacian / Poisson equation on simple domains (cubes and spheres).
I use OpenCV for a lot of image processing and matrix manipulation, which is generally what I use matlab for.
http://opencv.willowgarage.com/wiki/
May be overkill depending on what kind of math your trying to do, but it's great for computer vision.
The GNU Scientific Library is a free numerical library for C and C++ programmers.
With the Coder toolbox (requires MATLAB R2011a), you can also turn your MATLAB code into C or C++.
you can use octave runtime:
http://en.wikipedia.org/wiki/GNU_Octave#C.2B.2B_Integration
To call MATLAB code in C or C++, how do you choose between using the MATLAB engine and using the MATLAB Compiler mcc to create C or C++ shared libraries from your MATLAB code? What are their pros and cons? For the second method, see http://www.mathworks.com/access/helpdesk/help/toolbox/compiler/f2-9676.html
Are there other ways to call MATLAB from C or C++?
If the computation is linear and long, I would use mcc to compile the code. It is as if MATLAB was simply another library with numerical routines in it to be linked into your program.
If I wanted to provide interaction with MATLAB in my program, where the user could specify any of a large number of statements that would be impossible or merely tedious to code individually, then I would use the MATLAB engine. It is as if I wanted to run MATLAB without the Mathworks' UI.
I have never bothered with opening the MATLAB engine outside of a test.