MATLAB CoderでMEX ファイル作成

MATLAB Coderを使ってMEXファイルを作成した例です。

Contents

hello_world.mの作成と実行

以下のようなファイルを作りました。

type hello_world.m
hello_world
function R=hello_world()
R='Hello World!';

ans =

Hello World!

hello_world.mのMEX化と実行

mex -setupであらかじめコンパイル用のC言語を指定しておいてください

codegen hello_world.m -o hello_world_mex
hello_world_mex
Warning: Missing %#codegen in 'hello_world.m'. 
Add %#codegen to this file to indicate that it is suitable for code generation. 
(The full path to 'hello_world.m' is 'C:\Users\meg\Documents\MATLAB\hello_world.m'.)

Warning in ==> <a href="matlab: emlcprivate('emcopentoline','C:/Users/meg/Documents/MATLAB/hello_world.m',1,12);">hello_world Line: 1 Column: 12</a>
Code generation successful (with warnings): To view the report, open('C:\Users\meg\Documents\MATLAB\codegen\mex\hello_world\html\index.html').

ans =

Hello World!

多変数の引数がある場合のMEX化

以下のようなファイルを作り、MEX化しました。 引数の型を例として指定する必要があります。 二次元配列を使うには例は二次元配列にしておきます。

type math
X=eye(2,2);Y=ones(2,2);
R=math(X,Y);
[R.a,R.b]
codegen math.m -o math_mex -args {X,Y}
R=math_mex(X,Y);
[R.a,R.b]
function R=math(x,y)
R.a=x+y;
R.b=x.*y;

ans =

     2     1     1     0
     1     2     0     1

Warning: Missing %#codegen in 'math.m'. 
Add %#codegen to this file to indicate that it is suitable for code generation. 
(The full path to 'math.m' is 'C:\Users\meg\Documents\MATLAB\math.m'.)

Warning in ==> <a href="matlab: emlcprivate('emcopentoline','C:/Users/meg/Documents/MATLAB/math.m',1,12);">math Line: 1 Column: 12</a>
Code generation successful (with warnings): To view the report, open('C:\Users\meg\Documents\MATLAB\codegen\mex\math\html\index.html').

ans =

     2     1     1     0
     1     2     0     1