簡単な関数を定義しました:
c(n) = 2 * floor((n mod 24) / 12)
Mapleを使用して合計c(0)+ c(1)+ ... + c(n)を計算したいのですが、Mapleが計算する合計が間違っています。これは明らかに間違った合計を示す例のスクリーンショットです:http://i.stack.imgur.com/BpmB2.png
ここで何が欠けているのかわかりません...
お時間をいただきありがとうございます
簡単な関数を定義しました:
c(n) = 2 * floor((n mod 24) / 12)
Mapleを使用して合計c(0)+ c(1)+ ... + c(n)を計算したいのですが、Mapleが計算する合計が間違っています。これは明らかに間違った合計を示す例のスクリーンショットです:http://i.stack.imgur.com/BpmB2.png
ここで何が欠けているのかわかりません...
お時間をいただきありがとうございます
この種の問題は、早期評価として知られています。何が起こるかというとsum
、手続き本体で実際に計算を行う前に手続き呼び出しの引数を評価することを含む、Maple の通常の評価モデルを使用することです。
単純に を呼び出した場合の以下の結果を特に見てくださいcreneau(i)
。その結果はsum
、あなたの例でその引数として見ているものです。つまり、mod
への呼び出しが時期尚早にcreneau(i)
評価されたため、操作が時期尚早に発生しました。
creneau := n -> (2*floor((n mod 24)/12)):
creneau(38);
2
oops := creneau(i);
/1 \
2 floor|-- i|
\12 /
eval(oops, i=38);
6
add(oops, i=38..38);
6
sum(oops, i=38..38);
6
sum(creneau(i), i=38..38);
6
sum('creneau(i)', i=38..38);
2
add(creneau(i), i=38..38);
2
これを修正する通常の方法は、add
代わりに を使用するかsum
(add
いわゆる「特別な評価ルール」があるため)、最初の引数をsum
いわゆる unevaluation- または delay-quotes でラップすることです。
残念なことに、2D Math 入力モードでは、きれいに印刷された (シグマ) 合計記号が と の両方sum
で同じように見えadd
ます。これにより、この間違いを検出するのがさらに難しくなります。
Maple の標準 GUI の「式」パレットから 2D 数学の総和を挿入したのではないかと思いますが、残念ながら、この種の新しいユーザー ミスは発生してsum
いません。add
特別な評価ルールに関するヘルプページも参照してください。
エイサー