add - 値の式列の足し合わせ
mul - 値の式列の掛け合わせ
|
使い方
|
|
add(f, i = m..n)
add(f, i = x)
add(f, i in x)
mul(f, i = m..n)
mul(f, i = x)
mul(f, i in x)
|
|
パラメータ
|
|
f
|
-
|
式
|
i
|
-
|
名前
|
m, n
|
-
|
数値
|
x
|
-
|
式
|
|
|
|
|
式
|
|
•
|
コール add(f(i), i=x) は x のそれぞれの被作用子もしくは入力に対して f を適用したものの和を計算します。ここで x は通常、集合またはリストですが、加算とか乗算といった、op が適用できる他のあらゆるデータ構造でも構いません。同様にして、コール mul(f(i), i=x) は x の被作用子に f を適用したものの積を計算します。x に tables や Arrays、rtables が入力されると x は被作用子として読み込まれません。
|
•
|
add および mul コマンドは for 文によるループ処理と関連する seq コマンドと関連づけられています。2 つのコマンド add および mul をより正確に理解するには、このコマンドが以下に示す for ループ処理と同じであることに注目するとよいでしょう。ここで、式 f は指標 i の関数を表します。
|
add(f, i=m..n) == S := 0;
|
old := i;
|
for i from m to n do S := S+f end do;
|
i := old;
|
S; # 計算結果
|
mul(f, i=x) == P := 1;
|
old := i;
|
for i in x do P := P*f end do;
|
i := old;
|
P; # 計算結果
|
|
|
•
|
どちらの場合でも、add および mul コマンドの方が一般に for ループよりも効率的です。これは for ループ処理においては、多くの中間的な和や積が作られるからです。
|
•
|
端点 m と n は、数値定数、すなわち、整数、分数または浮動小数点数に評価される必要があります。端点について記号的な和や積を与える式を計算したい場合には、sum または product コマンドを使います。特別な場合として、m は (無限大) に、n は (マイナス無限大) に評価されても構いません。m が n よりも大きい場合、add は 0、mul は 1 を返します。
|
•
|
インデックス変数 i に割り当てられた既存の値は、いずれも add または mul の呼び出しの中だけのものであることにも注意して下さい。add または mul が実行されているときに同時に現れる同じ名前の局所変数や大域変数は影響を受けません。
|
•
|
記号的な和や積の計算に関しては、sum や product も参照して下さい。これらのコマンドは、明示的な和や積ではなく、不定和 (または定和) あるいは積に対する式を返すためのものです。
|
•
|
add(f(i), i in x) は、add(f(i), i = x) と同様のものとして扱われます。"in" と "=" の表記は add と mul で同じ結果を生成します。
|
|
|
スレッド安全性
|
|
•
|
add および mul コマンドは、Maple 15 以後スレッドセーフです。ただし、式 f の評価がスレッドセーフである場合に限ります。さらに、インデックス変数 i が、スレッド間で共有されないことが必要です。ローカルのプロシージャの使用を推奨します。
|
|
|
例
|
|
add や mul コマンドは、明示された数値の式列の和や積を計算するために使用します。
| (1) |
| (2) |
| (3) |
add と mul コマンドは、行列に使用できます。
>
|
M:=Matrix([[1,2],[3,4]]);
|
| (4) |
| (5) |
| (6) |
"in" と "=" の表記は add と mul で同じ結果を生成します。
| (7) |
| (8) |
| (9) |
| (10) |
| (11) |
add コマンドは数値で指定された範囲に関してのみ働きます。
| (12) |
>
|
add( i, i=infinity..0 );
|
| (13) |
>
|
mul( i, i=0..-infinity );
|
| (14) |
>
|
product(i, i=1..infinity);
|
| (15) |
|
|