6

多項式関数からその係数を含むリストを取得するための組み込み関数が maxima にありますか? 多項式の次数を取得するには?

私が見つけた最も類似した関数は ですがargs、係数とともに変数も返します。私はこれを受け入れることができましたが、length一緒に使用するとargsさらに度数が返されます。問題は、argsゼロ次多項式では機能しないことです。

これらの目的により適した別の機能はありますか? 前もって感謝します。

4

1 に答える 1

10

1 つの変数の多項式の次数を計算するには、hipow関数を使用できます。

(%i) p1 : 3*x^5 + x^2 + 1$
(%i) hipow(p1,x);
(%o)                                5

複数の変数を持つ多項式の場合hipow、関数によって返された変数をマップしlistofvars、結果のリストの最大値を取得できます。

(%i) p2 : 4*y^8 - 3*x^5 + x^2 + 1$
(%i) degree(p) := if integerp(p) then 0 else 
            lmax(map (lambda([u], hipow(p,u)),listofvars(p)))$
(%i) degree(p1);
(%o)                                5
(%i) degree(p2);
(%o)                                8
(%i) degree(1);
(%o)                                0

このcoeff関数はx^n、与えられた の係数を返すcoeff(p,x,n)ので、1 つの変数で多項式の係数のリストを生成するために、係数をリストに保存して x の累乗を繰り返すことができます。

(%i) coeffs1(p,x) := block([l], l : [], 
                         for i from 0 thru hipow(p,x)     
                             do (l : cons(coeff(p,x,i),l)), l)$
(%i) coeffs1(p1,x);
(%o)                       [3, 0, 0, 1, 0, 1]

また、複数の変数の多項式の係数のリストを生成するにはcoeffs1listofvars.

(%i) coeffs(p) := map(lambda([u], coeffs1(p, u)), listofvars(p))$
(%i) coeffs(p2);
(%o) [[- 3, 0, 0, 1, 0, 4 y^8  + 1], 
         [4, 0, 0, 0, 0, 0, 0, 0, - 3 x^5  + x^2  + 1]]
于 2016-03-09T04:03:09.033 に答える