ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

matlabFunction

関数ハンドルまたはファイルへのシンボリック式の変換

説明

g = matlabFunction(f) は、シンボリック式またはシンボリック関数 f を、ハンドル g をもつ MATLAB® 関数に変換します。この関数は Symbolic Math Toolbox™ なしで使用できます。

g = matlabFunction(f1,...,fN) は、f1,...,fN を出力 N をもつ MATLAB 関数へ変換します。この関数のハンドルは g になります。f1,...,fN の各要素は、シンボリック式、シンボリック関数、またはシンボリックな式か関数のベクトルになります。

g = matlabFunction(___,Name,Value) は、1 つ以上の Name,Value の引数のペアで指定した追加オプションを使用して、シンボリック式、シンボリック関数もしくはシンボリック式またはシンボリック関数からなるベクトルを MATLAB 関数に変換します。前の構文で使用した入力引数の後に Name,Value を指定できます。

すべて折りたたむ

シンボリック式 r を、ハンドル ht をもつ MATLAB 関数に変換します。この関数は Symbolic Math Toolbox なしで使用できます。

syms x y
r = sqrt(x^2 + y^2);
ht = matlabFunction(r)
ht =
  function_handle with value:
    @(x,y)sqrt(x.^2+y.^2)

コンマ区切りの入力を使用して、複数のシンボリック式を変換します。

ht = matlabFunction(r, r^2)
ht =
  function_handle with value:
    @(x,y)deal(sqrt(x.^2+y.^2),x.^2+y.^2)

シンボリック関数を作成し、ハンドル ht をもつ MATLAB 関数へ変換します。

syms x y
f(x,y) = x^3 + y^3;
ht = matlabFunction(f)
ht = 
  function_handle with value:
    @(x,y)x.^3+y.^3

File オプションを指定して、生成した MATLAB 関数をファイルに書き込みます。既存のファイルは上書きされます。ファイルへの書き込みの際に、matlabFunctiont0t1 といった名前の中間変数を使用してコードを最適化します。Comments オプションを用いて、ファイル内にコメントを含めます。

f から生成した MATLAB 関数を、ファイル myfile に書き込みます。

syms x
f = x^2 + log(x^2);
matlabFunction(f,'File','myfile');
function f = myfile(x)
%MYFILE
%    F = MYFILE(X)

%    This function was generated by the Symbolic Math Toolbox version 7.3.
%    01-Jan-2017 00:00:00

t2 = x.^2;
f = t2+log(t2);

コメント Version: 1.1 をファイルに含めます。

matlabFunction(f,'File','myfile','Comments','Version: 1.1')
function f = myfile(x)
...
%Version: 1.1
t2 = x.^2;
...

シンボリック式を MATLAB 関数に変換して得られた関数をファイルに書き込むとき、既定では、matlabFunction はコードの最適化を行います。この方法は、以降のこのファイルを使用した計算の簡素化および高速化に役立ちます。ただし、一部のシンボリック式やシンボリック関数では、そこからの最適化コードの生成に非常に時間がかかることがあります。コードの最適化を無効にするには、Optimize を使用します。

シンボリック式を作成します。

syms x
r = x^2*(x^2 + 1);

r を MATLAB 関数に変換し、その関数をファイル myfile に書き込みます。既定では、matlabFunction は最適化されたコードを含むファイルを生成します。

f =  matlabFunction(r,'File','myfile');
function r = myfile(x)
%MYFILE
%    R = MYFILE(X)
t2 = x.^2;
r = t2.*(t2+1.0);

Optimize の値を false に設定することによって、コードの最適化を無効にします。

f =  matlabFunction(r,'File','myfile','Optimize',false);
function r = myfile(x)
%MYFILE
%    R = MYFILE(X)
r = x.^2.*(x.^2+1.0);

シンボリック行列を MATLAB 関数に変換する場合、matlabFunction は既定でこれを密行列で表します。入力シンボリック行列のほとんどの要素が 0 の場合、最も効率的な方法はスパース行列で表すことです。

3 行 3 列のシンボリック対角行列を作成します。

syms x
A = diag(x*ones(1,3))
A =
[ x, 0, 0]
[ 0, x, 0]
[ 0, 0, x]

A を数値行列を表す MATLAB 関数に変換し、その結果をファイル myfile1 に書き込みます。既定では、生成された MATLAB 関数は、行列の各要素 (すべてゼロ要素の場合を含む) を指定する数値密行列を作成します。

f1 = matlabFunction(A,'File','myfile1');
function A = myfile1(x)
%MYFILE1
%    A = MYFILE1(X)
A = reshape([x,0.0,0.0,0.0,x,0.0,0.0,0.0,x],[3,3]);

Sparsetrue に設定して、A を MATLAB 関数に変換します。これで、生成された MATLAB 関数は、非ゼロ要素のみを指定し、他のすべての要素をゼロと仮定するスパース数値行列を作成します。

f2 = matlabFunction(A,'File','myfile2','Sparse',true);
function A = myfile2(x)
%MYFILE2
%    A = MYFILE2(X)
A = sparse([1,2,3],[1,2,3],[x,x,x],3,3);

式を MATLAB 関数に変換するとき、得られる式の入力引数の順序を指定することができます。一部の入力引数を個別の変数としてではなく、ベクトルとして指定することもできます。

シンボリック式を作成します。

syms x y z
r = x + y/2 + z/3;

r を MATLAB 関数に変換し、この関数をファイル myfile に書き込みます。既定では、matlabFunction はシンボリック式を変換するときに入力引数をアルファベット順に使用します。

matlabFunction(r,'File','myfile');
function r = myfile(x,y,z)
%MYFILE
%    R = MYFILE(X,Y,Z)
r = x+y.*(1.0./2.0)+z.*(1.0./3.0);

引数 Vars を使用して、生成される MATLAB 関数の入力引数の順番を指定します。

matlabFunction(r,'File','myfile','Vars',[y z x]);
function r = myfile(y,z,x)
%MYFILE
%    R = MYFILE(Y,Z,X)
r = x+y.*(1.0./2.0)+z.*(1.0./3.0);

ここで、式 r を、その 2 番目の入力引数がベクトルである MATLAB 関数に変換します。

syms x y z t
r = (x + y/2 + z/3)*exp(-t);
matlabFunction(r,'File','myfile','Vars',{t,[x y z]});
function r = myfile(t,in2)
%MYFILE
%    R = MYFILE(T,IN2)
x = in2(:,1);
y = in2(:,2);
z = in2(:,3);
r = exp(-t).*(x+y.*(1.0./2.0)+z.*(1.0./3.0));

シンボリック式を MATLAB 関数に変換するときに、出力変数の名前を指定することができます。引数 File を持たない (または空の文字ベクトルによって指定されたファイル パスを持つ) matlabFunction は、関数ハンドルを作成し、Outputs フラグを無視することに注意してください。

シンボリック式 r および q を作成します。

syms x y z
r = x^2 + y^2 + z^2;
q = x^2 - y^2 - z^2;

r および q を MATLAB 関数に変換し、得られた関数を、2 つの要素 name1name2 からなるベクトルを返すファイル myfile に書き込みます。

f = matlabFunction(r,q,'File','myfile',...
                   'Outputs',{'name1','name2'});
function [name1,name2] = myfile(x,y,z)
%MYFILE
%    [NAME1,NAME2] = MYFILE(X,Y,Z)
t2 = x.^2;
t3 = y.^2;
t4 = z.^2;
name1 = t2+t3+t4;
if nargout > 1
    name2 = t2-t3-t4;
end

入力引数

すべて折りたたむ

MATLAB 関数に変換されるシンボリック入力。シンボリック式、シンボリック関数、シンボリック ベクトルまたはシンボリック行列として指定します。スパース シンボリック ベクトルまたは行列を変換するときには、名前と値のペアの引数 'Sparse',true を使用します。

N 出力の MATLAB 関数に変換されるシンボリック入力。コンマで区切られたいくつかのシンボリック式、シンボリック関数、シンボリック ベクトルまたはシンボリック行列として指定します。

matlabFunction は、シンボリック ベクトルまたはシンボリック行列の各要素に対する個別の出力引数を作成しません。たとえば、g = matlabFunction([x + 1, y + 1]) は 1 つの出力引数をもつ MATLAB 関数を作成しますが、g = matlabFunction(x + 1, y + 1) は 2 つの出力引数をもつ MATLAB 関数を作成します。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: matlabFunction(f,'File','myfile','Optimize',false)

ファイル ヘッダーに含めるコメント。文字ベクトル、文字ベクトルの cell 配列、または string ベクトルとして指定します。

生成された MATLAB 関数を含むファイルへのパス。文字ベクトルとして指定します。この生成された関数は double 型の引数を受け入れます。また、Symbolic Math Toolbox なしで使用できます。File が空の場合、matlabFunction は無名関数を作成します。File.m で終わっていない場合は、関数は .m を追加します。

ファイルへの書き込みの際に、matlabFunctiont0t1 といった名前の中間変数を使用してコードを最適化します。コードの最適化を無効にするには、引数 Optimize を使用します。

MATLAB 関数とコメントのファイルへの書き込みを参照してください。

関数ファイルに書き込まれたコードの最適化を回避するフラグ。false または true で指定します。

ファイルへの書き込みの際に、ccodet0t1 といった名前の中間変数を使用してコードを最適化します。

引数 File を持たない (または空の文字ベクトルによって指定されたファイル パスを持つ) matlabFunction は、関数ハンドルを作成します。この場合、コードは最適化されません。Optimizetrue に設定して強制的にコードの最適化を行おうとすると、matlabFunction はエラーをスローします。

コードの最適化の無効化を参照してください。

スパース行列と密行列の生成を切り替えるフラグ。true または false で指定します。'Sparse',true を指定すると、生成された MATLAB 関数では、スパース数値行列でシンボリック行列を表します。ゼロの要素を多く含むシンボリック行列を変換する場合、'Sparse',true を指定します。多くの場合、スパース行列での演算は、密行列での同じ演算よりも効率的です。

スパース行列の生成を参照してください。

生成された MATLAB 関数の入力変数または入力ベクトルの次数。文字ベクトル、シンボリック変数から成るベクトル、または文字ベクトル、シンボリック変数またはシンボリック変数から成るベクトルの 1 次元 cell 配列として指定します。

指定された入力変数の数は、f 内の自由変数の数以上でなければなりません。Vars で指定される入力変数および Outputs で指定される出力変数には、同じ名前を使用しないでください。

既定では、シンボリック式を変換するときの順序は、アルファベット順です。シンボリック関数を変換するときは、入力引数は他の変数の前に表示され、その他の変数はアルファベット順に並べ替えられます。

生成された関数の入力引数の指定を参照してください。

出力変数名。文字ベクトルの 1 次元 cell 配列として指定します。

出力変数名を指定しない場合、matlabFunction を呼び出し時に使用する名前と同じになります。個々の変数でなく式を使用して matlabFunction を呼び出す場合、出力変数の既定の名前は、out に番号を付けたものになります。たとえば、out3 のようになります。

Vars で指定される入力変数および Outputs で指定される出力変数には、同じ名前を使用しないでください。

引数 File を持たない (または空の文字ベクトルによって指定されたファイル パスを持つ) matlabFunction は、関数ハンドルを作成します。この場合、matlabFunction は、Outputs フラグを無視します。

出力変数の指定を参照してください。

出力引数

すべて折りたたむ

数値関数への入力引数として機能する関数ハンドル。MATLAB 関数ハンドルとして返されます。

ヒント

  • 引数 File を使用する際、rehash によって生成された関数がすぐに利用可能になります。rehash は、検索パス上にあるディレクトリにおいて既知のファイルの MATLAB リストを更新します。

  • File オプションが空の場合、無名関数が返されます。

R2008b で導入