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


積分(Integration)

a i (calc-integral) [integ] コマンドは、 スタック top の式のある変数についての不定積分を計算します。 この積分エンジンはあらゆる積分可能な関数を積分できるとは限りませんが、 メジャーないくつかの種類の式は積分できます。 特に、任意の多項式関数や分数関数(多項式と多項式の商)が扱えます。 (分数関数は明確な商形式である必要はありません。 x/(1+x^-2) は厳密には多項式の商ではありませんが、 厳密な多項式の商である x^3/(x^2+1) と同等です。) また、積分する分数式に xx^2 を含む項の平方根が入っていてもかまいません。 そして、三角関数やハイパボリック関数を含む分数式も積分できます。

代数式中で integ 関数を直接使う場合は、 `integ(f,x,v)' と書く事もできて、 x ではなく v についての 不定積分を表すことができます。 4引数では、`integ(f(x),x,a,b)'a から b までの 定積分を意味します。

Calc の現行版積分エンジンは、必要以上にひどく複雑な結果を出すことがあるので 注意してください。 例えば、Calc が 1/(x+sqrt(x^2+1)) の積分として見つける答は、Mathematica の答と等価とは言え、何倍も複雑です。 また、不定積分には任意の積分定数を付けるようにするべきですが、 Calc はその答にあからさまな積分定数を書いたりしません。 例えば、 1/(1+tan(x)) の Calc 解と CRC Math Tables の解とでは、 積分定数の πi / 2 だけが異なります。 これは異なる積分定数を選択するからです。

Calc は一度求めた積分を全て覚えています。 過去の積分結果を無効にするような状況変化、 たとえば角度モードのラジアンへの変更があったら、 過去の積分結果は捨てられます。 もし捨てられるべきが捨てられてない疑いがあるなら、 calc-flush-caches コマンドを使ってください。 キャッシュ 参照 。

Calc は普通、置換積分法や部分積分法による積分をいろいろと試行錯誤し、 あるアプローチのネストレベルが 3 を越えるとそのアプローチを断念します。 もし積分に時間がかかりすぎるなら、 変数 IntegLimit に(2 のような)数値をストアすることによって、 この限度を下げることができます。 (s I コマンドは、IntegLimit を編集する手軽な方法です。) この変数が空か、正しい値(負でない整数)が入っていなかったら、 限界値 3 が使用されます。 この限度を下げるほど、 関数が積分できなくなる(下げなければ積分できていたかもしれない) 可能性が高まります。 この限度を上げればより多くの積分を解くことができますが、 それに要する時間は幾何級数的に増大します。 *Trace* という Emacs バッファを作ると、 積分エンジンの動作がモニターできるようになります。 そのバッファが存在すれば、a i コマンドは自身の動作記録をそこに書込みます。

もし完全にシンボリックに積分を行いたければ、 積分ネスト限度をゼロにセットして、 あらゆる(しかし速い)テーブル検索による解を禁止することができます。 こうなったら、部分積分法や様々な種類の置換積分法などのために、 書替え規則群を定義したくなるかもしれません。 書替え規則(Rewrite Rules) 参照 。


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