Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

MATLAB からの組み込み関数 MuPAD の呼び出し

メモ

MuPAD® Notebook は削除されました。代わりに MATLAB® ライブ エディターを使用してください。

MuPAD Notebook ファイルを MATLAB ライブ スクリプト ファイルに変換するには、convertMuPADNotebook を参照してください。MATLAB ライブ スクリプトは、多少の違いはありますが、MuPAD 機能の大半をサポートします。詳細は、MuPAD Notebook を MATLAB ライブ スクリプトに変換を参照してください。

MATLAB コマンドラインから、組み込み関数 MuPAD にアクセスするには、evalin(symengine,...) または feval(symengine,...) を使用します。これらの関数は、既存の MATLAB 関数、evalinfeval と同様に動作するように設計されています。

evalin および feval では MuPAD Notebook を開けないため、これらの関数を使用して MuPAD グラフィックス機能にアクセスすることはできません。

evalin

evalin の構文は次のとおりです。

y = evalin(symengine,'MuPAD_Expression');

evalin が役に立つのは、MATLAB ワークスペースで作業しながら MuPAD 言語での計算を実行したいときです。たとえば、k = 1 から 3 に対する関数 sin(kx) の 3 要素からなるシンボリック ベクトルを作成するには、次のように入力します。

y = evalin(symengine,'[sin(k*x) $ k = 1..3]')
y =
[ sin(x), sin(2*x), sin(3*x)]

feval

関数 feval は、MuPAD 関数を評価する目的にも使えます。feval には、evalin とは異なる使いやすい構文があります。構文は、次のようになります。

y = feval(symengine,'MuPAD_Function',x1,...,xn);

MuPAD_Function は MuPAD 関数の名前を表します。引数 x1,...,xn は、シンボリック変数、数値または文字ベクトルでなければなりません。たとえば、フィボナッチ数列の 10 番目の要素を求めるには、次のように入力します。

z = feval(symengine,'numlib::fibonacci',10)
z =
55

次の例では、MuPAD の数値関数 fsolve が返す点 x = 3 の近傍の解を、方程式のシンボリックな求解の使用と比較します。シンボリック ソルバーは次の結果を返します。

syms x
f = sin(x^2);
solve(f)
ans =
0

数値ソルバー fsolve は次の結果を返します。

feval(symengine, 'numeric::fsolve',f,'x=3')
ans =
x == 3.0699801238394654654386548746678

推測のとおり、答えは 3π の数値です。この表示には MATLAB format の設定は影響しません。答えは、関数 MuPAD 'numeric::fsolve' からの完全な戻り値です。

evalin と feval の比較

関数 evalin(symengine,...) では、MuPAD エンジンが文字ベクトルを評価します。MuPAD エンジンのワークスペースは通常空のため、evalin(symengine,...) が返す式は、MATLAB ワークスペース内の定義に従って単純化および評価されることはありません。以下に例を示します。

syms x
y = x^2;
evalin(symengine, 'cos(y)')
ans = 
cos(y)

y は MuPAD エンジンには未知であるため、変数 yx で表現されていません。

これに対して、feval(symengine,...) は MATLAB ワークスペースに存在するシンボリック変数を渡すことができ、これらの変数は MuPAD エンジンで処理される前に評価されます。以下に例を示します。

syms x
y = x^2;
feval(symengine,'cos',y)
ans = 
cos(x^2)

evalin と feval の浮動小数点引数

既定の設定では、MuPAD はすべての計算を厳密な形式で実行します。浮動小数点を引数として関数 evalin または feval を呼び出すと、ツールボックスはこれらの引数を MuPAD に渡す前に有理数に変換します。たとえば、不完全ガンマ関数を計算すると、結果は次のようなシンボリック式となります。

y = feval(symengine,'igamma', 0.1, 2.5)
y =
igamma(1/10, 5/2)

結果を数値的に倍精度で近似するには、関数 double を使用します。

format long
double(y)
ans =
    0.028005841168289

または、浮動小数点の引数が有理数に変換されないように、引用符を使用します (ツールボックスは、引用符で囲まれた引数を文字ベクトルとして取り扱います)。MuPAD は、少なくとも 1 つの浮動小数点数を含む数値に算術演算を実行する際、自動的に数値計算に切り替わり、浮動小数点の結果を返します。

feval(symengine,'igamma', '0.1', 2.5)
ans =
0.028005841168289177028337498391181

計算を続けるため出力を表示する形式を再び short に設定します。

format short