Click here to Skip to main content
11,412,833 members (73,457 online)
Click here to Skip to main content

Solving Engineering Problems Using MATLAB C API

, 23 May 2003
Rate this:
Please Sign up or sign in to vote.
Using MATLAB engine to solve engineering problems.
<!-- Article image -->

Solving engineering problem using MATLAB

<!-- Add the rest of your HTML here -->

Introduction

As all of you know, MATLAB is a powerful engineering language. Because of some limitation, some tasks take very long time to proceed. Also MATLAB is an interpreter not a compiler. For this reason, executing a MATLAB program (m file) is time consuming.  For solving this problem, Mathworks provides us C Math Library or in common language, MATLAB API.  A developer can employ these APIs to solve engineering problems very fast and easy. This article is about how can use these APIs.

MATrix LABoratory

MATLAB is abbreviation of Matrix Laboratory. This means every computation was performed in matrix form. In other hand every data type wrapped in matrix form and every functions take these matrix as input argument.
For example you want to multiply to polynomial as follow:

A = (3x2 + 5x + 7) (4x5 + 3x3 - x2 + 1)

You can use two matrices for coefficients of any polynomials:

[3 5 7] for (3x2 + 5x + 7) and [4 0 3 -1 0 1] for (4x5 + 3x3 - x2 + 1), using conv function, we can obtain coefficients of result: conv([3 5 7], [4 0 3 -1 0 1]):

A = [12 20 37 12 16 -4 5 7]

means: A= 12x7 + 20x6 + 37x5 + 12x4 + 16x3 - 4x2 + 5x + 7

C Math Library

The functions fall into two groups: the mathematical functions and the utility functions. We use mathematical functions for computing and utility functions for constructing an array or matrix or printing content of a matrix. Every matrices represented by mxArray a data type introduced by MATLAB for constructing a matrix. As I said before, every data must be wrapped in a matrix form in other hand: mxArray

One C prototype supports all the possible ways to call a particular MATLAB C Math Library function. You can reconstruct the C prototype by examining the MATLAB syntax for a function. In the following procedure, the MATLAB function svd() and the corresponding library function mlfSvd() are used to illustrate the process.

MATLAB Syntax

s = svd (X)
[U, S, V] = svd (X)
[U, S, V] = svd (X, 0)

The C prototype for mlfSvd() is constructed step-by-step. Until the last step, the prototype is incomplete.

Adding the Output Arguments

1- Find the statement that includes the largest number of output arguments.
Choose:

[U, S, V] = svd (X, 0)

2- Subtract out the first output argument, U, to be the return value from the function. The data type for the return value is mxArray*.

mxArray* mlfSvd(

3- Add the remaining number of MATLAB output arguments, S and V, as the first, second, etc., arguments to the C function. The data type for a C output argument is mxArray**.

mxArray* mlfSvd(mxArray **S, mxArray **V

Adding the Input Arguments

1- Find the syntax that includes the largest number of input arguments.
Choose:

[U, S, V] = svd (X, 0)

2- Add that number of input arguments, X and Zero, to the prototype, one after another following the output arguments. The data type for an input argument is mxArray*.

mxArray* mlfSvd (mxArray** S, mxArray** V, mxArray* X, mxArray* Zero);

The prototype is complete.

How to Translate a MATLAB Call into a C Call

This procedure demonstrates how to translate the MATLAB svd() calls into MATLAB C Math Library calls to mlfSvd(). The procedure applies to library functions in general.
Note that within a call to a MATLAB C Math Library function, an output argument is preceded by &, an input argument is not.
MATLAB Syntax:


s = svd (X)
[U, S, V] = svd (X)
[U, S, V] = svd (X, 0)
 

The MATLAB arguments to svd() fall into these categories:
U (or s) is a required output argument.
S and V are optional output arguments.
X is a required input argument.
Zero is an optional input argument.
 

1- Declare input, output, and return variables as mxArray* variables, and assign values to the input variables.
2- Make the first output argument the return value from the function.
s =
U =
U =
3- Pass any additional required or optional output arguments as the first arguments to the function. Pass a NULL argument wherever an optional output argument does not apply to the particular call.
 

s = mlfSvd (NULL, NULL,
U = mlfSvd(&S, &V,
U = mlfSvd(&S, &V,

4- Pass any required or optional input arguments that apply to the C function, following the output arguments. Pass a NULL argument wherever an optional input argument does not apply to the particular call.
 

s = mlfSvd (NULL, NULL, X, NULL);
U = mlfSvd (&S, &V, X, NULL);
U = mlfSvd (&S, &V, X, Zero);

Mathematical Functions

Every mathematical functions are begin with mlf prefix. mlf is an abbreviation for MATLAB Function. Below is a list of useful mathematical functions:

mlfPlus, mlfMinus mlfMtimes, mlfMpower mlfAcos, mlfAsin mlfConv
mlfConj mlfDec2bin, mlfDec2hex mlfDisp mlfFft, mlfFft2
mlfLinspace mlfMax, mlfMin mlfRoots mlfRot90

For example, Conv statement in MATLAB will become mlfConv in C.

Utility Functions

We use utility functions for some tasks like printing content of a matrix or saving/loading data to/from a file. Every utility functions are begin with mx prefix. Below is a list of some utility functions:

mxCalloc, mxFree mxCreateDoubleMatrix mxCreateNumericArray mxCreateString
mxGetPi, mxGetPr mxMalloc, mxRealloc mxGetData, mxSetData mxDestroyArray

Using C Math Library

To add support of MATLAB C Math Library follow these instructions:
1- Add following line at the end of stdafx.h

<P>#include <span class="code-keyword"><matlab.h></P></span>

matlab.h is interface of MATLAB APIs. Add directory of MATLAB interface files (*.h) to Visual Studio (Tools -> Options -> Directories). For example: x:\matlab\extern\include where x is drive letter of matlab path.

2- Add desired libraries to your project (In this example, libmat.lib, libmx.lib, libmatlbmx.lib and libmatlb.lib)

3- Compile your project!

Sample Program

<P>#include <span class="code-string">"stdafx.h"</P>
</span>
<P>
int main(int argc, char* argv[])
{
	double dblArray[]={1, 2, 3, 4, 5, 6, 7, 8, 9}; mxArray *A, *B;

	A=mxCreateDoubleMatrix(3, 3, mxREAL);</P><P></P><P>	//copy array to matrix A</P><P>	memcpy(mxGetPr(A), dblArray, 9 * sizeof(double));</P><P> </P><P>	A=mlfMTimes(A, A);   //A=A.^2;</P><P>	mlfPrintMatrix(A);

	//Creating Magic Matrix</P><P>	B=mlfMagic(mlfScalar(3)); //Magic matrix of order 3 mlfPrintMatrix(B); mxDestroyArray(A); mxDestroyArray(B);

	return 0;
} </P>

Requirements

1- MATLAB v5.0 or higher

2- MATLAB C Math Library Toolbox

3- Knowledge of MATLAB programming!

References

1- MATLAB C Math Library (Mathworks)

2- C Math Library Reference (Mathworks)

Enjoy!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

A. Riazi
CEO Misbah3Com
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
I was born in Shiraz, a very beautiful famous city in Iran. I started programming when I was 12 years old with GWBASIC. Since now, I worked with various programming languages from Basic, Foxpro, C/C++, Visual Basic, Pascal to MATLAB and now Visual C++.
I graduated from Iran University of Science & Technology in Communication Eng., and now work as a system programmer for a telecommunication industry.
I wrote several programs and drivers for Synthesizers, Power Amplifiers, GPIB, GPS devices, Radio cards, Data Acqusition cards and so many related devices.
I'm author of several books like Learning C (primary and advanced), Learning Visual Basic, API application for VB, Teach Yourself Object Oriented Programming (OOP) and etc.
I'm winner of January, May, August 2003 and April 2005 best article of month competetion, my articles are:

You can see list of my articles, by clicking here


Comments and Discussions

 
GeneralCygwin Pin
molakey at 22-Jun-07 1:51
membermolakey22-Jun-07 1:51 
GeneralTesting the demo Pin
molakey at 19-Jun-07 2:43
membermolakey19-Jun-07 2:43 
GeneralCannot find Matlab.h Pin
molakey at 19-Jun-07 2:05
membermolakey19-Jun-07 2:05 
GeneralUsing Matlab C functions from cygwin and Linux Pin
molakey at 19-Jun-07 1:42
membermolakey19-Jun-07 1:42 
QuestionMATLAB Compiler include the Matlab C Math Library, but how to use it? Pin
patiobarbecue at 13-Jun-07 10:06
memberpatiobarbecue13-Jun-07 10:06 
GeneralC to Matlab convertor Pin
famot at 30-May-07 2:19
memberfamot30-May-07 2:19 
GeneralRe: C to Matlab convertor Pin
karunakaran g n at 23-Apr-08 1:00
memberkarunakaran g n23-Apr-08 1:00 
QuestionCalling a Matlab function from VB Pin
sumaap at 22-Feb-07 1:22
membersumaap22-Feb-07 1:22 
AnswerRe: Calling a Matlab function from VB Pin
A. Riazi at 23-Feb-07 9:42
memberA. Riazi23-Feb-07 9:42 
Questionplease help me for god sake Pin
melika_1360 at 1-Feb-07 5:36
membermelika_13601-Feb-07 5:36 
Questionmatlab help??? Pin
ersincakir at 4-Jan-07 16:26
memberersincakir4-Jan-07 16:26 
Generalusing MATLAB graphics from vc++ Pin
Sajjad Haider at 14-Nov-06 3:28
memberSajjad Haider14-Nov-06 3:28 
GeneralRe: using MATLAB graphics from vc++ Pin
A. Riazi at 14-Nov-06 4:48
memberA. Riazi14-Nov-06 4:48 
Questionmx GetPr Pin
barbu81 at 27-Oct-06 5:49
memberbarbu8127-Oct-06 5:49 
GeneralRe: mx GetPr Pin
satish2deee at 14-Apr-08 21:04
membersatish2deee14-Apr-08 21:04 
GeneralCalling C function file by Matlab ODE solver Pin
javaid_phd at 30-Sep-06 19:53
memberjavaid_phd30-Sep-06 19:53 
QuestionHow can I get matlah.h file? Pin
S. M. Kamrul Hasan at 16-Jul-06 5:28
memberS. M. Kamrul Hasan16-Jul-06 5:28 
AnswerRe: How can I get matlah.h file? Pin
A. Riazi at 16-Jul-06 8:34
memberA. Riazi16-Jul-06 8:34 
QuestionRe: How can I get matlah.h file? Pin
Sindhu Krishnana E P at 10-May-07 3:49
memberSindhu Krishnana E P10-May-07 3:49 
AnswerRe: How can I get matlah.h file? Pin
molakey at 19-Jun-07 2:40
membermolakey19-Jun-07 2:40 
QuestionUrgent! How can I upload my model file? Pin
longwang at 3-Jul-06 18:58
memberlongwang3-Jul-06 18:58 
QuestionUrgent! Help : Running real time target model cause computer reboot! Pin
longwang at 2-Jul-06 17:41
memberlongwang2-Jul-06 17:41 
GeneralThanks(I am able to read mat file now but new problem... ) Pin
Agrawalg at 2-Jun-06 4:18
memberAgrawalg2-Jun-06 4:18 
Generallinker error Pin
euskalboy at 26-May-06 0:25
membereuskalboy26-May-06 0:25 
Generalproblem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
Agrawalg at 9-May-06 20:47
memberAgrawalg9-May-06 20:47 
AnswerRe: problem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
A. Riazi at 10-May-06 7:38
memberA. Riazi10-May-06 7:38 
GeneralRe: problem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
Agrawalg at 15-May-06 3:22
memberAgrawalg15-May-06 3:22 
AnswerRe: problem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
A. Riazi at 17-May-06 4:55
memberA. Riazi17-May-06 4:55 
GeneralRe: problem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
sprmat84 at 7-Jul-06 8:39
membersprmat847-Jul-06 8:39 
GeneralRe: problem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
Arif W.P. at 5-Oct-07 2:56
memberArif W.P.5-Oct-07 2:56 
GeneralRe: problem(i don't have libmatlbmx.lib and libmatlb.lib file ) Pin
molakey at 19-Jun-07 2:37
membermolakey19-Jun-07 2:37 
GeneralUsing mxArrays in C# Pin
ncysnero at 5-May-06 13:11
memberncysnero5-May-06 13:11 
QuestionHow to access cellarrays Pin
Waetzold at 28-Mar-06 4:28
memberWaetzold28-Mar-06 4:28 
AnswerRe: How to access cellarrays Pin
momow at 7-Nov-06 21:05
membermomow7-Nov-06 21:05 
GeneralTranslate Matlab to C/C++ Pin
C6J720 at 3-Jan-06 22:46
memberC6J7203-Jan-06 22:46 
Questionhow to use matlab in c++ Pin
nmaleki at 6-Nov-05 18:49
membernmaleki6-Nov-05 18:49 
AnswerRe: how to use matlab in c++ Pin
A. Riazi at 6-Nov-05 18:56
memberA. Riazi6-Nov-05 18:56 
QuestionRe: how to use matlab in c++ Pin
Sindhu Krishnana E P at 10-May-07 3:53
memberSindhu Krishnana E P10-May-07 3:53 
QuestionI have a Compiling error C2065: 'memcpy' : undeclared identifier Pin
ccwu_tuta at 9-Sep-05 0:08
memberccwu_tuta9-Sep-05 0:08 
AnswerRe: I have a Compiling error C2065: 'memcpy' : undeclared identifier Pin
A. Riazi at 9-Sep-05 20:52
memberA. Riazi9-Sep-05 20:52 
GeneralRe: I have a Compiling error C2065: 'memcpy' : undeclared identifier Pin
nguyenanhson at 15-Aug-06 22:57
membernguyenanhson15-Aug-06 22:57 
QuestionHow to include c files in matlab Pin
Ravindra.P at 23-Aug-05 2:34
sussRavindra.P23-Aug-05 2:34 
AnswerRe: How to include c files in matlab Pin
Sindhu Krishnana E P at 10-May-07 3:58
memberSindhu Krishnana E P10-May-07 3:58 
GeneralMy Big Problem-MAHDI FAHMIDEH Pin
Mahdi Fahmideh at 14-Aug-05 11:08
sussMahdi Fahmideh14-Aug-05 11:08 
GeneralRe: My Big Problem-MAHDI FAHMIDEH Pin
A. Riazi at 15-Aug-05 0:07
memberA. Riazi15-Aug-05 0:07 
GeneralRe: My Big Problem-MAHDI FAHMIDEH Pin
Anonymous at 15-Aug-05 4:50
sussAnonymous15-Aug-05 4:50 
GeneralRe: My Big Problem-MAHDI FAHMIDEH Pin
Anonymous at 15-Aug-05 7:59
sussAnonymous15-Aug-05 7:59 
GeneralRe: My Big Problem-MAHDI FAHMIDEH Pin
Anonymous at 28-Sep-05 9:15
sussAnonymous28-Sep-05 9:15 
GeneralMahdi Fahmideh Pin
Anonymous at 14-Aug-05 10:56
sussAnonymous14-Aug-05 10:56 
GeneralA little change would be better Pin
mahongj at 10-Aug-05 23:43
membermahongj10-Aug-05 23:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150427.1 | Last Updated 24 May 2003
Article Copyright 2003 by A. Riazi
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid