Maple 11 における効率性の改善点
|
数値
|
|
•
|
Maple は制限された evalhf 環境に場合であっても機械精度の浮動小数を扱えるようになりました。新しい option hfloat オプションをプロシージャで指定することで、Maple は可能な範囲で機械精度の浮動小数演算を用います。数値計算を多用するプロシージャにおいては、このオプションの使用で計算効率は 2 倍から 10 倍程度は改善されます。
機械精度の浮動小数値も同様に HFloat コンストラクタから直接利用されるようになります。ある表現式における機械精度の浮動小数を含む式は一般に、 Digits および UseHardwareFloats の設定が機械精度以外となっていない限り、機械精度の浮動小数により評価されます。( UseHardwareFloats を参照)
|
•
|
Maple のデフォルトの数値 ODE ソルバが、デフォルトの数値用 stiff/nonstiff DAE ソルバ同様にサイズの大きい問題にも適用できるよう改善されました。
|
•
|
Maple の fsolve コマンドが単変数多項式の実根に対してさらに効率的になりました。以下の例の最初の問題では Maple 10 のアルゴリズムが用いられており、2 番目の例では新しい RootFinding[Isolate] コマンドを採用しています。(その計算結果は Chebyshev 多項式が実根しか持たないことから双方共に等価です)
|
>
|
f := expand(ChebyshevT(100, x)):
time(fsolve(f, x, complex));
|
| (1.1) |
| (1.2) |
|
|
多項式代数および多項式系の解法
|
|
•
|
Groebner[Basis] のエンジンは、Jean-Charles Faugere が開発した F4 アルゴリズムの C 言語版実装ライブラリの協力により、劇的に高速化されました。このエンジンは有理係数および適当な多項式次数が指定された系の計算でデフォルトで用いられます。
|
•
|
同様に、 Groebner パッケージのその他のコマンドも高速化されています。
|
•
|
modp1 の多項式に対する Multiply コマンドは、十分高い次数の多項式に対する Karatsuba のアルゴリズムを利用します。
|
•
|
evala コマンドは代数的数を係数に持つ多項式系を含む計算により効率的なデータ構造およびそのためのアルゴリズムを用います。結果として、そのような多項式に対する GCD 演算などは多くの場合において高速化されます。
|
例題
以下の例題を実行するには、このヘルプページをワークシートとして開いてください。ヘルプシステム上では、ヘルプブラウザのツールバー上の ワークシートに現在のヘルプページを開く ボタンを押してください。
Groebner 基底を求める F4 アルゴリズムによる計算例:
>
|
with(Groebner):
cyclic6 := [u+v+w+x+y+z,
u*v+v*w+w*x+x*y+y*z+z*u,
u*v*w+v*w*x+w*x*y+x*y*z+y*z*u+z*u*v,
u*v*w*x+v*w*x*y+w*x*y*z+x*y*z*u+y*z*u*v+z*u*v*w,
u*v*w*x*y+v*w*x*y*z+w*x*y*z*u+x*y*z*u*v+z*y*w*v*u+z*u*v*w*x,
u*v*w*x*y*z-1]:
cyclic7 := [t+u+v+w+x+y+z,
t*u+u*v+v*w+w*x+x*y+y*z+z*t,
t*u*v+u*v*w+v*w*x+w*x*y+x*y*z+y*z*t+z*t*u,
t*u*v*w+u*v*w*x+v*w*x*y+w*x*y*z+x*y*z*t+y*z*t*u+z*t*u*v,
t*u*v*w*x+u*v*w*x*y+v*w*x*y*z+w*x*y*z*t+x*y*z*t*u+y*z*t*u*v+t*u*v*w*z,
t*u*v*w*x*y+u*v*w*x*y*z+v*w*x*y*z*t+w*x*y*z*t*u+x*y*z*t*u*v+y*z*t*u*v*w+z*t*u*v*w*x,
t*u*v*w*x*y*z-1]:
time(Basis(cyclic6,'tdeg'(u,v,w,x,y,z)));
|
| (2.1) |
>
|
time(Basis(cyclic7,'tdeg'(t,u,v,w,x,y,z)));
|
| (2.2) |
比較のために、 cyclic6 の例題について Buchberger のアルゴリズムを用いて計算時間を計測してみます。( RememberBasis を2番目の引数 forget と共に用いている理由は、キャッシュ機構をオフにし強制的に Groebner 基底を異なる算法で再計算させるためです)
>
|
RememberBasis(cyclic6,'forget','tdeg'(u,v,w,x,y,z)):
time(Basis(cyclic6,'tdeg'(u,v,w,x,y,z),'method'='buchberger'));
|
| (2.3) |
以下の代数的数を係数に持つ 2 つの多項式に対する GCD 計算は、Maple 10 と比較して 10 倍程度高速化されています。
>
|
a := (x+2^(1/2)+3^(1/2))^20:
b := (2^(1/2)*x+3^(1/2))^20:
c := (x^2+x+1+2^(1/3)*3^(1/3))^10:
f := expand(a*b):
g := expand(a*c):
time(gcd(f,g));
|
| (2.4) |
|
|
線形代数
|
|
•
|
Matrix および Vector の構文とショートカットである <,> および <|> 構文が効率化されました。これらの構文表現は、密な矩形行列またはベクトルを表現するためのもっとも簡潔で効率的な方法です。
|
|
|
最大公約多項式
|
|
•
|
gcd コマンドは整数上の多変数多項式 GCD のための新しいアルゴリズムを用います。このアルゴリズムにより効率は 3 変数またはそれ以上の変数に関して注目に値します。
|
|
|
プログラミング
|
|
•
|
Maple の引数処理およびその引数処理の際のメモリ確保方法の変更により、パフォーマンスの向上および事実上すべての Maple の関数呼出しで必要となるメモリ量が削減されました。これらの利点はユーザ定義関数やライブラリ関数にも高速化などをもたらします。
|
|
|
マルチスレッド・プログラミング
|
|
•
|
Maple 11 では、マルチスレッド(multi-threaded)のコードの記述およびその実行が可能です。これにより、複数 CPU 上でパラレルにコードを実行することが可能になると同時に、各種の計算の高速化を実現します。Maple におけるマルチスレッドの概要および詳細は、 multi-threaded Maple のヘルプページを参照してください。 Threads パッケージはマルチスレッド化コードを記述するためのユーザインターフェイスなども提供しています。
|
|
|
動的ガーベジコレクション
|
|
•
|
メモリのガーベジコレクションの頻度は、常に使用済のメモリ総量に基づいた間隔になります。現在、kernelopts コマンドの gcfreq の設定では、より多目のメモリが動的に確保され、コレクションの頻度に余裕を持たせられるように秒単位のパラメータを指定できます。
|
|
|