1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| /*=================================================================
*
* MATRIXDRIVER.C Sample driver code that calls the shared
* library created using MATLAB Compiler. Refer to the
* documentation of MATLAB Compiler for more information on
* this
*
* This is the wrapper C code to call a shared library created
* using MATLAB Compiler.
*
* Copyright 1984-2005 The MathWorks, Inc.
*
*=================================================================*/
#include <stdio.h>
/* Include the MCR header file and the library specific header file
* as generated by MATLAB Compiler */
#include "libmatrix.h"
/* This function is used to display a double matrix stored in an mxArray */
void display(const mxArray* in);
int run_main(int argc, char **argv)
{
mxArray *in1, *in2; /* Define input parameters */
mxArray *out = NULL;/* and output parameters to be passed to the library functions */
float x;
double data[] = {1,2,3,4,5,6,7,8,9};
/* Call the mclInitializeApplication routine. Make sure that the application
* was initialized properly by checking the return status. This initialization
* has to be done before calling any MATLAB API's or MATLAB Compiler generated
* shared library functions. */
if( !mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n");
return -1;
}
/* Create the input data */
in1 = mxCreateDoubleMatrix(3,3,mxREAL);
in2 = mxCreateDoubleMatrix(3,3,mxREAL);
memcpy(mxGetPr(in1), data, 9*sizeof(double));
memcpy(mxGetPr(in2), data, 9*sizeof(double));
/* Call the library intialization routine and make sure that the
* library was initialized properly. */
if (!libmatrixInitialize()){
fprintf(stderr,"Could not initialize the library.\n");
return -2;
}
else
{
/* Call the library function */
mlfAddmatrix(1, &out, in1, in2);
/* Display the return value of the library function */
printf("The value of added matrix is:\n");
display(out);
/* Destroy the return value since this varaible will be resued in
* the next function call. Since we are going to reuse the variable,
* we have to set it to NULL. Refer to MATLAB Compiler documentation
* for more information on this. */
mxDestroyArray(out); out=0;
mlfMultiplymatrix(1, &out, in1, in2);
printf("The value of the multiplied matrix is:\n");
display(out);
mxDestroyArray(out); out=0;
mlfEigmatrix(1, &out, in1);
printf("The eigenvalues of the first matrix are:\n");
display(out);
mxDestroyArray(out); out=0;
printf("Donnez un nombre : ");
scanf("%f", &x);
/* Call the library termination routine */
libmatrixTerminate();
/* Free the memory created */
mxDestroyArray(in1); in1=0;
mxDestroyArray(in2); in2 = 0;
}
/* Note that you should call mclTerminate application at the end of
* your application.
*/
mclTerminateApplication();
return 0;
}
/*DISPLAY This function will display the double matrix stored in an mxArray.
* This function assumes that the mxArray passed as input contains double
* array.
*/
void display(const mxArray* in)
{
int i=0, j=0; /* loop index variables */
int r=0, c=0; /* variables to store the row and column length of the matrix */
double *data; /* variable to point to the double data stored within the mxArray */
/* Get the size of the matrix */
r = mxGetM(in);
c = mxGetN(in);
/* Get a pointer to the double data in mxArray */
data = mxGetPr(in);
/* Loop through the data and display the same in matrix format */
for( i = 0; i < c; i++ ){
for( j = 0; j < r; j++){
printf("%4.2f\t",data[j*c+i]);
}
printf("\n");
}
printf("\n");
}
int main()
{
mclmcrInitialize();
return mclRunMain((mclMainFcnType)run_main,0,NULL);
} |