CodeGeneration[Matlab] - Maple コードのMatlab コードへの変換
使い方
Matlab(x, cgopts)
パラメータ
x - 数式、リスト、配列、rtable、手続き、またはモジュール
cgopts - (オプション) 1つまたはそれ以上の CodeGeneration オプション
|
説明
|
|
•
|
Matlab 関数は、Maple のコードを MATLAB コードに変換します。
|
|
- パラメータ x が代数式の場合、その数式に1つの変数を割り当てる形で1つの Matlab の命令文が生成されます。
|
|
- パラメータ x が代数式のリスト、rtable または Maple の配列の場合、それら要素を Matlab 配列に割り当てる形で、 Matlab の命令文の列が作成されます。rtable または Maple の配列では、初期化された要素だけが変換されます。
|
|
- パラメータ x が nm=expr の形のリスト(ここで nm は名前、expr は代数式を表す)である場合、x は割り当てられた命令文の列を意味するものとして解釈されます。 この場合、等価な意味を持つ Matlab の割り当て命令文の列が生成されます。
|
|
- パラメータ x が Maple の手続きである場合、その手続きと等価な関数を含む Matlab モジュールが生成されます。
|
|
- パラメータ x がモジュールである場合、MatlabDetails に述べるように、等価な MATLAB コードに最も近いコードが生成されます。
|
|
|
例
|
|
以下の例で使用されているオプションの記述方法については、CodeGenerationOptions を参照して下さい。
Warning, the protected name Matlab has been redefined and
unprotected
| |
単純な数式を変換し、目的のコード内の名前``w''に割り当てます。
>
|
Matlab(x+y*z-2*x*z, resultname="w");
|
w = x + y * z - 2 * x * z;
| |
リストを変換し、目的のコード内の名前``w'' の配列に割り当てます。
>
|
Matlab([[x, 2*y], [5, z]], resultname="w");
|
計算の列を変換します。入力をまず最初に最適化します。
>
|
cs := [s=1.0+x, t=ln(s)*exp(-x), r=exp(-x)+x*t]:
Matlab(cs, optimize);
|
s = 0.10e1 + x;
t1 = log(s);
t2 = exp(-x);
t = t1 * t2;
r = t2 + x * t;
| |
x が浮動小数点数、 y が整数であることを宣言します。結果が文字列内に返されます。
>
|
s := Matlab(x+y+1, declare=[x::float, y::integer], output=string);
|
| (2.1) |
手続きを変換します。型宣言されていない変数全てが、整数型 integerであると仮定します。
>
|
f := proc(x, y, z) return x*y-y*z+x*z; end proc:
Matlab(f, defaulttype=integer);
|
function freturn = f(x, y, z)
freturn = x * y - y * z + x * z;
| |
間接的な戻り値を含む手続きを変換します。戻り値を保持するための新しい変数が作成されます。
>
|
f := proc(n)
local x, i;
x := 0.0;
for i to n do
x := x + i;
end do;
end proc:
Matlab(f);
|
function freturn = f(n)
x = 0.0e0;
for i = 1:n
x = x + i;
cgret = x;
end
freturn = cgret;
| |
配列をパラメータとして受け入れている手続きを変換します。 Matlab の配列がインデックス 0 から始まるように、添え字の番号は付け直されます。
>
|
f := proc(x::Array(numeric, 5..7))
return x[5]+x[6]+x[7];
end proc:
Matlab(f);
|
function freturn = f(x)
freturn = x(1) + x(2) + x(3);
| |
エクスポートプロシージャとローカルプロシージャをもつモジュールを変換します。
>
|
m := module() export p; local q;
p := proc(x,y) if y>0 then trunc(x); else ceil(x); end if; end proc:
q := proc(x) sin(x)^2; end proc:
end module:
Matlab(m, resultname=t0);
|
% m/p.m:
function preturn = p(x, y)
if (0 < y)
preturn = fix(x);
else
preturn = ceil(x);
end
% m/private/q.m:
function qreturn = q(x)
qreturn = sin(x) ^ 2;
| |
双曲三角関数の線形結合を変換します。
>
|
Matlab(2*cosh(x)-7*tanh(x));
|
cg0 = 0.2e1 * cosh(x) - 0.7e1 * tanh(x);
| |
戻り値を持たない、出力命令文 printf を含んだ手続きを変換します。
>
|
f := proc(a::integer, p::integer)
printf("The integer remainder of %d divided by %d is: %d\n", a, p, irem(a, p));
end proc:
Matlab(f);
|
function freturn = f(a, p)
disp(sprintf('The integer remainder of %d divided by %d is: %d
',a,p,mod(a, p)));
| |
|
|