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


多項式

多項式(polynomial) とは、 「基礎」変数のいろいろなべき乗に係数を掛けた各項の合計です。 例えば、2 x^2 + 3 x - 4x の多項式です。 複数の異なる変数の多項式と言える式もあって、 1 + 2 x + 3 y + 4 x y^2xy の多項式です。 多項式の係数はふつう数値ですが、一般に、 基礎変数を含まない任意の式は係数になり得ます。

a f (calc-factor) [factor] コマンドは、 多項式を因数分解して積の形にします。 例えば、多項式 x^3 + 2 x^2 + x`x*(x+1)^2' に因数分解されます。 別の例では、a c + b d + b c + a d は積 (a + b) (c + d) に 因数分解されます。

Calc は現在 3つの因数分解アルゴリズムを持っています。 上の2番目の例のような、いくつかの変数の線形式は、 分配法則に従いくくり出されます。 整数または分数の定数係数を持つ単独変数の多項式は、 それ以上分解できない線形式や2次式に因数分解されます。 上の最初の例では、 3つの線形項(x, x+1, x+1)に因数分解しました。 これらの基準に合わない式は、代数の書替え機構で処理されます。

Calc の(単独変数の)多項式因数分解アルゴリズムは、 一般根探索コマンド(a P)を使って多項式の根を解くことにより動作します。 そして有理数や複素共役の根を探し、それぞれ 1次式や 2次式に変換します。 このアルゴリズムは浮動小数点演算を使うので、 大きな整数(その桁数は計算精度にほぼ等しい)を含む項は発見できないかも知れません。 また、3次以上の因数項は見つかりませんし、複数変数の多項式も扱えません。 (Calc の将来バージョンには、 もっと強力な因数分解アルゴリズムが含まれるかも知れません)

書替えによる因数分解法は、変数 FactorRules に格納された規則群を使います。 書替え規則操作の議論は、書替え規則(Rewrite Rules) 参照 。 デフォルトの FactorRules は、 2次式を 2つの線形項 (a x + b) (c x + d) に因数分解することができます。 ユーザーはこれらの規則群を編集して、望むなら他のケースを含めることができます。 この規則群を使うために、 Calc は式 `thecoefs(x, [a, b, c, ...])' を生成します。 ただし x は基礎変数で、a, b, ... は多項式の係数 (数値でも式でも可)です。 定数項を先に、つまり a の位置に書きます。 書替えが完了すると、 `thefactors(x, [f1, f2, f3, ...])' 形式の式になっているはずです。 ただし各 fi は因数項、例えば `x - ai' です。 そして Calc はこれらの因数項を掛け合わせて完全な因数分解形式を作ります。 もし書替え規則群が thecoefs 関数を thefactors 関数に変換しなかったら、「因数分解不可能」の過程のもとに、 a f は元の多項式をそのまま放置します。 (thecoefsthefactors という関数名は目印としてのみ使用され、 そのような名前の実際の Calc 関数は存在しません。)

H a f [factors] コマンドも多項式を因数分解しますが、 代数表現の答ではなく、因数項のリストを返します。 各因数項は、因数とそのべき乗からなるサブベクトルで表現されます。 例えば、x^5 + x^4 - 33 x^3 + 63 x^2 は、 a f では (x + 7) x^2 (x - 3)^2 に因数分解されますが、 H a f では [ [x, 2], [x+7, 1], [x-3, 2] ] になります。 もし全体に数値因数が掛かっていれば、リストの先頭に来ます (訳注: 変数因数なら最後尾らしい)。 関数 factorfactors は、 代数形式で書かれた場合は第2引数を受入れ、 `factor(x,v)'x を特定の変数 v について因数分解します。 第2因数がなければ(デフォルト)、 x の中に現われる全ての変数に注目して因数分解します。

a c (calc-collect) [collect] コマンドは、 多項式を指定された変数について降べきの順に整理します。 例えば、スタック上の与式 1 + 2 x + 3 y + 4 x y^2 を、 a c x(2 + 4 y^2) x + (1 + 3 y) のように整理し、 a c y では (4 x) y^2 + 3 y + (1 + 2 x) になります。 多項式は必要に応じて展開され、 (x - 1)^3x について整理すると x^3 - 3 x^2 + 3 x - 1 になります。 x を含まない項は展開されません。

プロンプトに対して指定する「変数」は、実はどんな表現でも構いません。 a c ln(x+1) とすれば、 `ln(x+1)' およびその整数べき乗が掛けられた全ての項を整理します。 式の中に、`ln(x+1)' 以外にも `x' があった場合、 a c はそれらを `ln(x+1)' と無関係な、言わば定数のように扱います。

a x (calc-expand) [expand] コマンドは、 式のあらゆる所に分配法則を適用して式を展開します。 積や商、和のべき乗などに適用されます。 デフォルトでは、式の全ての部分が展開されます。 数値接頭引数を付けると、分配法則は指定した回数だけ適用されて、 スタックには部分的に展開された式が残ります。

a x コマンドと j D コマンドは、機能がいくらか重複しています。 式中の和の積を全部展開したい時は a x を使ってください。 式中の指定した特定の項を展開したい場合は j D を使ってください。 これはまさに a fj M の関係に似ています。 (j D コマンドと j M コマンドは、 `exp(a + b) = exp(a) exp(b)' のような他の展開規則も知っていますが、 a xa f はそれを知りません。)

Calc の自動簡単化はしばしば部分展開を戻してしまいます。 例えば、(x+1)^3 を展開する最初のステップは、 (x+1) (x+1)^2 と書きなおすことです。 もし(接頭引数などの理由で) a x がここで止まって、 この結果をスタックに置こうとしても、 Calc はそれを自動的に簡単化して (x+1)^3 形式に戻してしまいます。 この解決策は、あらかじめ簡単化を止めておく (簡単化モード 参照 ) か、 数値接頭引数なしの a x で一気に最後まで展開してしまうか、です。

a a (calc-apart) [apart] コマンドは、 部分分数を用いて分数関数を展開します。 分数関数とは、2つの多項式の商です。 apart はこれを簡単な分母の分数関数の和に分けます。 代数表記では、apart 関数は第2引数を取ることができて、 それにより「基礎」変数を指定します。 デフォルトでは、Calc が基礎変数を自分で選びます。

a n (calc-normalize-rat) [nrat] コマンドは、 式を変形して 2つの多項式の商にしようとします。 例えば、与式 1 + (a + b/c) / d で結果は (b + a c + c d) / c d になります。 a n(x^2 + 2x + 1) / (x^2 - 1) を共通因子 x + 1 で割って 簡単化し (x + 1) / (x - 1) を得るように、商は簡単化されます。

a \ (calc-poly-div) [pdiv] コマンドは 2つの多項式 uv を割り算し、新しい多項式 q を得ます。 入力に何種類かの変数があったら、複数変数の多項式と見なされます。 (Calc はまず、u 中の指数が最大の変数で割り算します。 指数が同じ場合はアルファベット順に変数を選びます。) 例えば、x^2 + 3 x + 2x + 2 で割って x + 1 を得ます。 割り算の余りは、もし有れば、スクリーン下部のミニバッファに表示され、 同時にトレイル中に商と共に記録されます。

代数表記で pdiv を使うと、特定の変数を基礎変数として指定できます。 `pdiv(a,b,x)'. もし pdiv に2つの引数しか与えなかったら (a \ コマンドではいつもの事ですが) 上で触れたように複数変数の割り算を実行します。

a % (calc-poly-rem) [prem] コマンドは、 2つの多項式を割算して、その余り r を保持します。 商 q は破棄されます。 任意の式 a, b について、 a \ の結果 qa % の結果 r は、 a = q b + r の関係を満足します。 (これは2数を割算して整数商と余りを計算する普通のコマンド \% に類似しています。)

a / (calc-poly-div-rem) [pdivrem] コマンドは、 2つの多項式を割算して、 その商と余りの両方をベクトル [q, r] として返します。 H a / [pdivide] コマンドは、 2つの多項式を割算して、 スタックに式 q + r/b を構築します。 (当然の事ながら、余りがゼロであれば、 この式はすぐ簡単化されて q になります。)

a g (calc-poly-gcd) [pgcd] コマンドは、 2つの多項式の最大公約数を計算します。 (この最大公約数は、定数係数は別として実質的にユニークです。 Calc はあたりさわりのない最大公約数を選ぼうとします) 例えば、a n コマンドは a g を使って分母・分子の最大公約数を得、 次に a \ を使って分母・分子を得られた最大公約数で割算します。 (最大公約数の定義により、この割算に余りが発生しないことが保証されます。)

a /a g のような演算に使われる多項式は、 整数係数であることが多いですが、これは必須条件ではありません。 Calc は分数や実数(浮動小数)と一緒に多項式を扱うことができます。 剰余型式(modulo form) の係数を持つ多項式も、多くの分野で有用です。 `(x^2 + 3 x - 1) mod 5' を入力すると、 Calc はこれを自動変換して 5 の剰余系空間の多項式にします。 `(1 mod 5) x^2 + (3 mod 5) x + (4 mod 5)'

Ove Ewerlid (ewerlid@mizar.DoCS.UU.SE) に祝辞と謝辞をささげます。 この人物は、上記コマンド群の多項式処理ルーチンにおいて多大な貢献をしました。

多項式の個々の係数を抽出する便利な関数群は、 多項式を分解する(Decomposing Polynomials) 参照 。


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