Maple 15におけるその他の改良
|
はじめに
|
|
Maple 15 では、数学と Maple プログラミングという主要領域の強化だけでなく、物理学から制御系設計にわたるアプリケーション分野に対するサポートも強化されています。
•
|
magmas を利用した計算のための新パッケージ
|
•
|
DynamicSystems パッケージの改良
|
•
|
配列やその他のデータ構造を扱うための新コマンド
|
|
|
ベル多項式
|
|
•
|
Maple 15 では、新たに BellB、IncompleteBellB、CompleteBellB がそれぞれベル多項式、不完全ベル多項式(第 2 種 Bell 多項式)、完全ベル多項式を表します。BellB 多項式は、第 2 種スターリング(Stirling)数 を用いて次のように定義されます。
|
•
|
IncompleteBellB 多項式の定義については、IncompleteBellB をご覧ください。CompleteBellB 多項式は、IncompleteBellB 多項式を用いて次のように定義されます。
|
•
|
ベル多項式は様々なアプリケーションに現れます。その一例は、次の Faà di Bruno の公式です。
|
>
|
BellB(n, z) = sum(Stirling2(n, k)*z^k, k=0..n);
|
| (2.1) |
| (2.2) |
•
|
例として、5 つの変数 による一般数列を考えます。
|
>
|
Z := z[1], z[2], z[3], z[4], z[5];
|
| (2.3) |
>
|
IncompleteBellB(4, 2, Z);
|
| (2.4) |
>
|
IncompleteBellB(5, 3, Z);
|
| (2.5) |
>
|
IncompleteBellB:-DiamondConvolution(5, 3, [Z]);
|
| (2.6) |
•
|
全ての について、 において次の等式が成り立ちます。
|
>
|
IncompleteBellB(n, k, 1, 1, 1, 1, 1, 1, 1) = Stirling2(n, k);
|
| (2.7) |
>
|
eval((2.7), {n=7, k=4});
|
| (2.8) |
•
|
全ての について、 において、不活性形式 %IncompleteBellB と不活性数列 %seq を用いて表した次式が成り立ちます。
|
>
|
%IncompleteBellB(n, k, %seq(j!, j=1..(n-k+1))) = binomial(n,k)*binomial(n-1,k-1)*(n-k)!;
|
| (2.9) |
>
|
eval((2.9), {n=8, k=3, %seq = seq});
|
| (2.10) |
| (2.11) |
| (2.12) |
|
|
Magma
|
|
•
|
Cayley 表で表した小マグマを扱うための、新しい Magma パッケージが加わりました。このパッケージは小マグマの数え上げや同型性テストをサポートする他、小マグマの性質を調べるコマンドも一式用意しています。
|
>
|
Enumerate( 4, 'quandle' ); # count quandles of order 4
|
| (3.1) |
>
|
L := Enumerate( 2, 'output' = 'list' ); # list all isomorphism class of 2-element magmas
|
| (3.2) |
>
|
select( IsCommutative, L ); # find the commutative ones
|
| (3.3) |
>
|
CS := Enumerate( 5, 'associative', 'commutative', 'output' = 'list' ): # find all 5-element commutative semigroups
|
>
|
andmap( IsSemigroup and IsCommutative, CS ); # check
|
| (3.4) |
>
|
m1 := Array( 1 .. 3, 1 .. 3, [[1,2,3],[2,3,1],[3,1,2]], 'datatype' = 'integer'[4], 'order' = 'C_order' );
|
| (3.5) |
>
|
m2 := Array( 1 .. 3, 1 .. 3, [[2,3,1],[3,1,2],[1,2,3]], 'datatype' = 'integer'[4], 'order' = 'C_order' );
|
| (3.6) |
>
|
AreIsomorphic( m1, m2 );
|
| (3.7) |
|
|
PDEtools パッケージ
|
|
•
|
Maple 15 では、PDEtools の対称性コマンド 全てについて、次の点が変更されました。
|
•
|
入力と出力に対し、教科書 mathematical jet notation を自動的に適用。
|
•
|
無限小または対応する symmetry generator 演算子のリストを対等に処理。
|
•
|
数学表記で無限小ラベル付きの無限小のリストを返す。(入力に、ラベル無しの無限小を含まない場合)
|
•
|
渡した入力の jet notation で結果を返す。
|
•
|
オプションとして、要求した jet notation で返す。
|
–
|
SymmetryGauge は、偏微分方程式(PDE)の対称性を測る新しいコマンドです。常微分方程式(ODE)の対称性は様々な方法で書き換えられることはよく知られていることです(Xgauge 参照)。良く知られていないことですが、PDE の対称性についても同様なことが起こります。対称性を書き換えられるということは、いくつかの点で有意義なことです。ひとつに、それは二つの一見違うように見える対象性を進化形式(ゲージ )に書き換えることで実は同じものであることを特定できます。次に、動的に見える対称性は多くの場合、点状のものとして書き換えられ、対称性の利用しやすさを(例えば非常に利用しにくいものから簡単に利用できるものへと)変換します。最後に、対称性の形式によっては、書き換えることで大幅にその形式を簡単にできることが多く、正準座標の不変量が計算可能となり、結果として対称性が PDE 系の独立変数の数を減らすことに利用できることがあります。
|
|
|
ベクトル解析(VectorCalculus)
|
|
>
|
W, det := Wronskian( [sin(t), cos(t)], t, determinant );
|
| (7.1) |
|
|
要素数(numelems)
|
|
| (8.1) |
| (8.2) |
>
|
numelems(table({1=1,2=2,3=3}));
|
| (8.3) |
| (8.4) |
|
|
上界、下界
|
|
>
|
(m,n) := upperbound(M);
|
| (9.1) |
| (9.2) |
| (9.3) |
| (9.4) |
| (9.5) |
|
|
member コマンドの配列・表サポート
|
|
| (10.1) |
•
|
member コマンドで、table に含まれるメンバーのテストにも利用できます。
|
>
|
member(y, table([x,y,z]));
|
| (10.2) |
|
|
indicesとentriesコマンド
|
|
>
|
indices(<1,2;3,4>,'pairs');
|
| (11.1) |
|
|
配列タイプチェック
|
|
>
|
type(<1,2;3,4>,'Matrix(1..,1..)');
|
| (12.1) |
|
|
EqualEntriesコマンド
|
|
•
|
EqualEntries コマンドは、二つの別個のコンテイナー構造体の中の要素を比較します。EqualEntries コマンドでのコンテイナー構造体の比較は、例外はありますが、二つの構造体が種類が同じで、要素数が同じで、同順序で同じ要素が入っているとき true を返します。
|
|
|
圧縮レコード構造
|
|
•
|
Record コンストラクター関数を Record[packed] というインデックス付きの名前で呼び、圧縮レコードを生成することができるようになりました。
|
•
|
通常のレコードと違い、圧縮レコードは、各レコードのインスタンスの各フィールド名に対し独自のインスタンスを作りません。フィールド数が多い類似したレコードを何千も使う場合、この機能を使えばメモリを大幅に節約することができます。
|
•
|
圧縮レコードのフィールドは最終名前評価に従いません。つまり、 r:-a という表記は常に値(プロシージャ、表、行列、ベクトル、その他のレコードを含む)を生成します。
|
•
|
同様に、圧縮レコードフィールドは、値を持たないことがあり得ません。assigned 関数は常に true を返し、圧縮レコードフィールドを unassign した場合、値が NULL となるだけです。
|
|
|
コードのテスト
|
|
>
|
CodeTools[Test](int(x^2,x), x^3/3, label="Test Pass");
|
>
|
CodeTools[Test](int(x,x^2), x^3/3, label="Test Fail");
|
Test Fail failed
Received error: [int, "integration range or variable must be specified in the second argument, got %1", x^2]
| |
Error, (in CodeTools:-Test) TEST FAILED: Test Fail
| |
|
|
デバッガコマンドの反復支援
|
|
•
|
debugger コマンドの cont、next、step、into、outfrom、return の後に正整(オプション)を付け反復実行する回数を指定できます。例えば into 10 とすると、現プロシージャ内の次の 10 個の命令文にわたり実行を続けるようデバッガに指示する事になります。
|
|
|
Maple プログラミングガイドの更新
|
|
•
|
Maple Introductory Programming Guide と Maple Advanced Programming Guide は、統合して新機能や例題を含む Maple Programming Guide になりました。
|
|
|
StringTools
|
|
>
|
s := Random( 10^6, 'lower' ):
|
>
|
time( StringSplit( s, "abc" ) );
|
| (18.1) |
>
|
time( RegSplit( "abc", s ) );
|
| (18.2) |
|
|