6

maxima 中是否有一个内置函数可以从多项式函数中获取一个包含其系数的列表?并获得多项式的次数?

我发现最相似的函数是args,但它也将变量与系数一起返回。我本可以接受这一点,当length与 with 一起使用时args会返回学位。问题是它args不适用于零度多项式。

是否有其他功能可以更好地适应这些目的?提前致谢。

4

1 回答 1

10

要计算一个变量中多项式的次数,可以使用该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),因此要生成一个变量中多项式的系数列表,我们可以遍历 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]

并且要生成一个多项式在多个变量中的系数列表,请coeffs1映射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]]
于 2016-03-09T04:03:09.033 回答