2016-03-07 19 views
5

係数を持つリストを多項式関数から得るために、maximaに組み込み関数がありますか?そして、多項式の次数を得るには?多項式の係数maxima

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

これらの目的に合わせて調整する機能はありますか?前もって感謝します。

答えて

7

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

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

、あなたはlistofvars関数によって返された変数の上にhipowをマッピングして、結果のリストの最大値を取ることができます。

(%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機能はとても一つの変数多項式の係数のリストを生成するために、coeff(p,x,n)所与、x^nの係数を返し、我々はリストに係数を保存し、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] 

そして、複数の変数、listofvarsオーバーマップcoeffs1に多項式の係数のリストを生成します。

(%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]] 
+0

あなたの学位はmax-hipowですが、max-monomial degreeはありません。後者は、例えば次数(x^2 * y-x)= 3を与えることができる。 –

関連する問題