これが答の規則群の一式です。
[ a*(b + c) := a*b + a*c, opt(a) O(x^n) + opt(b) O(x^m) := O(x^n) :: n <= m :: constant(a) :: constant(b), opt(a) O(x^n) + opt(b) x^m := O(x^n) :: n <= m :: constant(a) :: constant(b), a O(x^n) := O(x^n) :: constant(a), x^opt(m) O(x^n) := O(x^(n+m)), O(x^n) O(x^m) := O(x^(n+m)) ]
+ や * キーがべき級数に自然に働くようにしたければ、
この規則群を EvalRules
に入れるべきです。
テスト目的なら、初めは別の変数、例えば O
に入れたほうがいいでしょう。
第1規則は単に和の積を展開して、
他の規則群が作用すべき多項式を認識できるようにします。
ちなみにこの規則は `O' に何ら言及していないので、
遭遇した和の積全てに作用します。
これを EvalRules
に入れたらちょっと困ったことになるでしょう!
第2規則では、2つの O の和を低次の O にまとめます。 optional な定数係数が付いているので、 `O(x^2) - O(x^3)' や `O(x^3) - O(x^2)' なども `O(x^2) + O(x^3)' と同様に扱われます。
第3規則は `x' の高次のべきを O に吸収します。
第4規則は、negligible(無視しうるほど小さい)な量に定数を掛けたものは 依然として negligible であるとしています。 (この規則は `a = 1/4' で `O(x^3) / 4' にもマッチします。)
第5規則は、例えば `x^2 O(x^3)' を `O(x^5)' に書替えます。 (これらの型式の一つが negligible なら、他もそうであることは簡単に理解できます。) `x O(x^3)' のような項にマッチする際の `x^opt(m)' に注目してください。 Optional にしたべき乗は `x' を `x^1' と見なしてマッチしますが、 1 を `x^0' と見なしたりはしません。 これは結局望みどおりの動作です。
第6規則は 2つの O の積に対応する規則です。
この問題を解く別の方法は、略式べき級数を表す新しい「データ型式」を作ることです。
これを関数呼出し `series(coefs, x)' として表すことも
できたでしょう。ここで coefs は、
x^0, x^1, x^2, ... の係数のベクトルです。
このような series
型オブジェクトの和や積の規則が存在し、
ついでに
series
型オブジェクトと通常多項式を結合する方法も知ることができます。
(`O(x^n)' を対応する series
型式に書替える規則を追加すれば、
前とまったく同じ書式でべき級数を入力できます。)
この様なオブジェクトは少し読難くはなるものの、
その演算はおそらく効率的になるでしょう。
他の記号を扱う数学プログラムはこれに似たべき級数のデータ型式を提供しています。
例えば Mathematica は `PowerSeries[x, x0, coefs,
nmin, nmax, den]' というオブジェクトを持っていて、
x0 はそのべき級数が収束する x 座標
(我々はこれを常にゼロとみなしていました)を示し、
nmin, nmax, den はべきが分数や負の擬似べき級数を許容します。
さらに、PowerSeries
オブジェクトは特別な表示書式を持っていて、
印刷時に `2 x^2 + O(x^4)' のようにします。
(これくらい複雑なものはおそらく Lisp で書式処理を行ったほうが良いでしょうが、
Calc でこれを行う方法は、Compositions 参照 。)
Go to the first, previous, next, last section, table of contents.
利用度数