evalc

On a vu dans l’article précédent qu’evalc est utile pour enlever le verbose : disp, fprintf …
Maintenant si on veut compiler son code qui utilise evalc avec le MATLAB Compiler , il est nécéssaire de rajouter le pragma %#function

Comme expliqué dans la doc %#function

The %#function pragma informs MATLAB Compiler that the specified function(s) will be called through an feval, eval, or Handle Graphics callback.

Ok evalc n’est pas cité mais pourtant il faut le faire!

Si on veut compiler ma fonction bidon matlab4geek (du billet précédent) par exemple , on pourrait ecrire une fonction parent :

function [blablabla,y]  =test

[blablabla,y] = evalc('matlab4geek(2)');

puis la compiler

mcc -mv test

en essayant de l’executer:

!test

on va avoir le message d’erreur :

Error using evalc
Undefined function ‘matlab4geek’ for input arguments of type ‘double’.

Error in test (line 3)

Donc en effet le MATLAB Compiler n’a pas compris lors de la compilation que la chaine de caractère matlab4geek était une fonction à embarquer.

La solution est donc :

de rajouter sous le nom de la fonction %#function matlab4geek

function [blablabla,y]  =test
%#function matlab4geek
[blablabla,y] = evalc('matlab4geek(2)');

Sur ce bon week-end à tous les Matlab geek!

Laisser un commentaire