Matlab Coder : codegen for mvnrnd
Mostrar comentarios más antiguos
Hi, I'm trying to generate standalone C code of the mvnrnd function in Matlab with Matlab Coder. By doing so, I keep getting error:
>> mu = [1 -1]
mu =
1 -1
>> sigma = [.9 .4; .4 .3]
sigma =
0.9000 0.4000
0.4000 0.3000
>> codegen -config:lib -report -c mvnrnd1.m -args {mu,sigma}
??? The input matrix must be variable-size in both dimensions when nargout == 2
How do I insert variable-size matrix in -args? Thank you!
Respuestas (2)
Mike Hosea
el 9 de Abr. de 2012
0 votos
Instead of using sigma in that -args list, use
sigma_type = coder.typeof(0,[2,2],[true,true])
This means the type is double and real (that is the type of the first argument "0"). The second argument says that the array is up to 2-by-2, and the third argument says that both dimensions are variable in size.
Good luck. The conversion looks doable, but there may be other snags, and it's the type of function where I'd probably do a lot of re-writing to make it efficient for code generation (e.g., I'd write a little loop to calculate sum(D<0) instead of creating a logical array and then summing it). -- Mike
8 comentarios
Jane Jean
el 15 de Abr. de 2012
Jane Jean
el 15 de Abr. de 2012
Walter Roberson
el 15 de Abr. de 2012
Earlier you said you were trying to generate standalone C code. Now you say your aim is to generate a Mex function. Mex functions are not for standalone use: they are for use within MATLAB.
How do you want your C code to act when it is given invalid input such as too few parameters?
Jane Jean
el 15 de Abr. de 2012
Walter Roberson
el 15 de Abr. de 2012
The current .m call uses error(). Standalone C does not have any (useful) equivalent to error(). error() does not just display a message: it also causes returns back through the calling routines (destroying local variables if appropriate) until it finds a corresponding try/catch block.
Jane Jean
el 15 de Abr. de 2012
Jane Jean
el 15 de Abr. de 2012
Jane Jean
el 15 de Abr. de 2012
Jane Jean
el 15 de Abr. de 2012
0 votos
1 comentario
Mike Hosea
el 16 de Abr. de 2012
I'm glad, but I'm a little confused. If you are just building a mex function, why not make MVNRND extrinsic?
Categorías
Más información sobre Execution Speed en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!