多项式的系数最大值

7
有没有maxima内置函数可以从多项式函数中获取其系数列表?并且获取多项式的次数?
我找到的最相似的函数是args,但它也返回变量和系数。我本可以接受这个问题,尤其是当使用lengthargs一起返回次数时。问题在于args无法处理零阶多项式。
是否有另一个函数更适合这些目的?提前致谢。
1个回答

11

要计算一个一元多项式的次数,可以使用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时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]]

你的程度只有最高次项,而不是最高单项式程度。后者例如可以给出degree(x^2*y-x)=3。 - user502187
1
肯定没有获取所有系数列表的内置命令?必须编程吗? - Szczepan Hołyszewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接