Go to the first, previous, next, last section, table of contents.


級数の和

(訳注: この機能は、後述の通り誤入力チェックが甘いので注意が必要である。)

a + (calc-summation) [sum] コマンドは 特定のインデックス範囲にわたる部分数列の総和を求めます。 このコマンドは、数列の項を示す式をスタックの Top から取得し、 プロンプトを出してインデックス変数の名前や その下限と上限(式でも良い)を入力するよう促します。 プロンプトに対して空行を入力したら、 それ以後は必要な要素がスタックから読み込まれます。 従って、' k^2 RET ' k RET 1 RET 5 RET a + RET の結果は 55 となります。

        5    2
        Σ  k  = 55
       k=1

インデックス変数名の選択は任意ですが、 値が格納された変数は使わないのが最善です。 特に、i はよくインデックス変数として好まれますが、 Calc においては i の値として虚数定数 (0, 1) を充てているので、 避けるべきです。 もし i についての積算に対して = を押してしまったら(評価したら)、 「変数」(0, 1) についての無意味な積算に変えられてしまうでしょう! インデックス変数にどうしても i が使いたければ、 まず s u i RET を使って変数の中身を「破棄」してください。 (変数のストア 参照 。)

数値接頭引数を与えると、その値がステップ幅(デフォルトは1)になります。 従って ' a_k RET C-u -2 a + k RET 10 RET 0 RET`a_10 + a_8 + a_6 + a_4 + a_2 + a_0' になります。 数値無しの接頭引数 C-u を付けると、 a + はプロンプトを出してステップ値の入力を促します。 この場合は任意の式が入力できますし、 空行を入力してスタックから取得させることもできます。 C-u 接頭引数の併用で、 a + は 5つの引数をスタックから取得できるのです。 すなわち、式、変数名、下限、上限、 そして(スタックの Top にある)ステップ値です。

Calc はその内部で、特定の式についての積算の公式を知っています。 例えば、 `sum(6 k^2, k, 1, n) = 2 n^3 + 3 n^2 + n' です。 特に、積算される式がインデックス変数について多項式かべき乗である場合は可能です。 対数の和は積の対数に変換されます。 三角関数や双曲線関数の和はエクスポネンシャルの和に変換され、 それから公式処理がなされます。 Calc は公式処理が可能な場合は効率面からいつもそうしますが、 もちろん、上下限が数値で与えられている積算は、 次々に項を作り出して評価することも常に可能です。

積算の代数的表記は `sum(expr, var, low, high, step)' です。 step が省略された場合のデフォルトは 1 です。 high が省略されたら、low が上限として使われて、 下限は 1 となります。 low までもが省略された場合の下限と上限はそれぞれ、 `-inf'`inf' になります。

無限級数の和が計算可能な場合があって、 `sum(.5^k, k, 1, inf)'1 を返します。 これは積算を公式形式(この場合は `1. - 0.5^n')に変換し、 次にこの式の ninf を代入しています。 「無限大」演算に関する Calc の通常規則群によって答えが導かれます。 もし無限大演算の結果が `nan' になったり、 公式形式に解くことができなかった場合は、 Calc は sum をシンボル形式のまま残します。 無限大 参照 。

特殊機能として、 限界が無限大の場合(あるいは上記のように省略された場合)でも、 式が含むベクトルの添字がインデックス変数で表現されていれば、 Calc は添字値が有効な区間だけを含むように積算区間を狭めます。 例えば、 `sum(k [a,b,c,d,e,f,g]_(2k),k)'`b + 2 d + 3 f' となります。

積算の上下限は整数である必要はありません たとえば、 `sum(a_k, k, 0, 2 n, n)'`a_0 + a_n + a_(2 n)' になります。 Calc は式 `1 + (high - low) / step' を使って 反復回数を計算します。 この式は簡単化の後、整数に評価されねばなりません。

もし上記の式による計算式が整数にならなければ、 その積算は不正であって、シンボル形式のまま残されます。 しかしながら、公式処理はそれでも実行されてしまうので、 あなたの名誉にかけて、 誤った境界にもとづく結果を誤用するようなことはしないでください。 例えば、`sum(k, k, 1, 10, 2)' は不正ですが、 Calc は公式の解に上下限として 1 と 10 を代入してしまい、 29.25 などという、ちょっと変な結果を出してしまいます。

もし下限が上限より大きかったら、 (ステップ幅が正として)結果は一般にゼロです。 しかしながら Calc の場合、上限が下限よりちょうど 1 ステップ小さいとき、 すなわち、反復数が -1 のときに限りゼロが保証されているだけです。 従って、`sum(f(k), k, n, n-1)' はゼロですが、 `f(k)'が公式処理の可能な積算式の場合に、 `n' から `n-2' までの積算をやらせると ゼロでない(誤った)答えを返すかも知れません。

a < b のような Calc の論理式は、 「真」のとき 1 を、「偽」のとき 0 を返します。 これをうまく利用して、条件付きの積算をやらせることができます。 例えば `sum(prime(k)*k^2, k, 1, 20)' は、 1 から 20 までの全ての素数の 2乗和です。 prime は引数が素数なら 1 を返し、そうでなければ 0 を返します。 この表現は「k^2 の総和、ただし k は素数」と読むことができます。 デフォルトの上下限は±∞なので、 `sum(prime(k)*k^2, k)' は実際に全ての素数の 2乗和を表しますが、 Calc の組込規則はこれを公式処理できません。

もう一つの例ですが、 `sum((k != k_0) * f(k), k, 1, n)' は 唯一 k_0 を除いた 1 から n までの全ての k についての f(k) の合計です。 少し難解なのが `(k != k_0) / (k - k_0)' で、 これは ゼロ除算になる k = k_0 を除いた全ての 1/(k-k_0) の合計を記述しようと意図しています。 ところが k = k_0 において、 この式は不定形式 0 / 0 になってしまい、 Calc はこれをゼロとは見なしません。 ベターな方法は `(k != k_0) ? 1/(k-k_0) : 0' を使うことです。 `? :' 演算子は"if-then-else"テストを行うので、 この表現は "if k != k_0, then 1/(k-k_0), else zero" という意味になります。 こうしておけば、 もはや k = k_0 の時に 1/(k-k_0) は評価されません。

a - (calc-alt-summation) [asum] コマンドは、 交項級数を計算します。 数列の連続する項に、最初の項(インデックス値の低い方)を正として、 交替する符号が与えられます。 交項級数は、 `(-1)^(k-low)' 形式の項を付け加えて通常の級数に変換されます。 ステップ値が 1 でない場合も、この式は適切に調整されます。 例えば、sin 関数の Taylor 級数は `asum(x^k / k!, k, 1, inf, 2)' です。 (Calc はこの無限級数の値を計算できませんが、 inf を適当な奇数に置き換えれば近似できます。) Calc はこの級数を普通のステップが 1 の級数、 すなわち `sum((-1)^k x^(2k+1) / (2k+1)!, k, 0, inf)' に変換します。

a * (calc-product) [prod] コマンドは、 同様に多数の項の積を計算します。 Calc は `prod(k, k, 1, n) = n!' のような、 積を取る公式もいくつか知っています。 条件付き積は、 `prod(k^prime(k), k, 1, n)' とか `prod(prime(k) ? k : 1, k, 1, n)' のように書くことができます。

a T (calc-tabulate) [table] コマンドは、 インデックス値の数列に対する式を評価します。 sumprod とそっくりですが、 結果はベクトルで返されます。 例えば、`table(a_i, i, 1, 7, 2)'`[a_1, a_3, a_5, a_7]' になります。


Go to the first, previous, next, last section, table of contents.     利用度数