2016-03-07 32 views
5

C'è una funzione integrata in maxima per ottenere da una funzione polinomiale una lista con i suoi coefficienti? E per ottenere il grado del polinomio?Coefficienti di polinomi massimi

La funzione più simile che ho trovato è args, ma restituisce anche la variabile insieme al coefficiente. Avrei potuto accettare questo, ancora di più quando si utilizza length insieme a args restituire il grado. Il problema è che args non funziona con i polinomi a zero gradi.

Esiste un'altra funzione che si adatta meglio a questi scopi? Grazie in anticipo.

risposta

7

Per calcolare il grado di un polinomio in una variabile, è possibile utilizzare la funzione hipow.

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

Per un polinomio con più di una variabile, è possibile mappare hipow sulle variabili restituiti dalla funzione listofvars, e poi prendere il massimo della lista risultante.

(%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 

La funzione coeff restituisce il coefficiente di x^n, data coeff(p,x,n), in modo da generare un elenco dei coefficienti di un polinomio in una variabile, possiamo scorrere le potenze di x, salvando i coefficienti da un elenco.

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

E per generare un elenco dei coefficienti di un polinomio in più di una variabile, mappa coeffs1 sopra la listofvars.

(%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

il tuo corso di studi è solo di massimo livello, ma non di livello massimo monomiale. Il dopo potrebbe per esempio dare grado (x^2 * y-x) = 3. –