多项式的代数运算
在实际的许多运算中,需要对多项式进行的运算仅是结构运算.
然而,当用户进行关于多项式的更高深的代数运算时,就必须使用本节讨论的代数运算.
应当认识到本节讨论的大多数运算仅对具有整数指数和有理数系数的多项式有效.
| PolynomialQuotient[poly1,poly2,x] | 求 x 的多项式 除以 的结果,去掉余项 |
| PolynomialRemainder[poly1,poly2,x] | 求 x 的多项式 除以 的余项 |
| PolynomialQuotientRemainder[poly1,poly2,x] |
| 在一个列表中给出商和余式 |
| PolynomialMod[poly,m] | 按模 m 化简多项式 poly |
| PolynomialGCD[poly1,poly2] | 求两个多项式的最大公因式 |
| PolynomialLCM[poly1,poly2] | 求两个多项式的最小公倍式 |
| PolynomialExtendedGCD[poly1,poly2] | 求两个多项式的扩展最大公因式 |
| Resultant[poly1,poly2,x] | 求两个多项式的结式 |
| Subresultants[poly1,poly2,x] | 求两个多项式的主子结式系数 |
| Discriminant[poly,x] | 求多项式 poly 的判别式 |
| GroebnerBasis[{poly1,poly2,...},{x1,x2,...}] |
| 求多项式 的 Gröbner 基 |
| GroebnerBasis[{poly1,poly2,...},{x1,x2,...},{y1,y2,...}] |
| 求消去 的 Gröbner 基 |
| PolynomialReduce[poly,{poly1,poly2,...},{x1,x2,...}] |
| 求 poly 按照 的最小表示 |
多项式的化简.
给定两个多项式
和
,总能唯一地给出
,其中
的次数小于
的次数. PolynomialQuotient 给出商
,而 PolynomialRemainder 给出余项
.
这里给出

除以

的余项.
| Out[1]= |  |
这里是

和

的商,去掉了余项.
| Out[2]= |  |
| Out[3]= |  |
此处结果依赖于多项式被看作是关于

还是关于

的.
| Out[4]= |  |
PolynomialMod 基本上类似于关于整数的函数 Mod. 当模数 m 为整数时,PolynomialMod[poly, m] 简单地对 poly 模 m 化简每个系数. 如果 m 是多项式,那么 PolynomialMod[poly, m] 通过从 poly 中减去 m 的适当的倍数
,得到次数尽可能低的多项式. 乘子 q 本身可以是多项式,它的次数总是小于 poly 的次数. PolynomialMod 产生一个次数和主项系数都是尽可能小的多项式.
这是模

化简

. 结果是二者相除的余式.
| Out[5]= |  |
| Out[6]= |  |
PolynomialMod 和 PolynomialRemainder 的主要差别是前者通过乘和减多项式来工作,而后者通过除法获得结果. 另外,PolynomialMod 允许在同一次用几个模来化简. 一个典型的情形是以一个多项式和一个整数为模来化简.
| Out[7]= |  |
PolynomialGCD[poly1, poly2] 求整除
的最高次多项式. 它类似于整数函数 GCD.
| Out[8]= |  |
| Out[9]= |  |
返回的多项式

和

可以用来表示原来的多项式的最大公因式.
| Out[10]= |  |
函数 Resultant[poly1, poly2, x] 用于许多古典代数算法中. 两个多项式
和
,其主要系数均为1的结式由二多项式的根之间的所有差
的乘积给出. 对任何多项式对,其结式总是它们的系数的多项式. 通过考察何时结式为零,人们能区分哪些参数值使二多项式有相同的根. 当列表 Subresultants[poly1, poly2, x] 中的前
个元素为零时,主系数为1的两个多项式有
个相同的根.
这里是关于

和

的两个多项式关于

的结式. 仅当

的值使结式为零时,二多项式关于

有相同的根.
| Out[11]= |  |
函数 Discriminant[poly, x] 是它的根的所有差的平方积. 它可用于确定多项式是否有任何重复的根. 判别式等于多项式和它的导数的结式,最多差一个独立于该变量的因子.
| Out[12]= |  |
| Out[13]= |  |
Gröbner 基出现在许多现代代数算法和应用中. 函数 GroebnerBasis[{poly1, poly2, ...}, {x1, x2, ...}] 取一根多项式集合,并把该集合化成标准形,使得从中能方便地推导出许多性质. 一个重要特征是从 GroebnerBasis 获得的多项式集合总是恰好有与原多项式集合完全一样的相同的根的集合.

是多余的,所以不出现在Gröbner基中.
| Out[14]= |  |
多项式

没有根,表明原多项式没有相同的根.
| Out[15]= |  |
该多项式在这里有效地展开,现在可以看到有五个相同的根.
| Out[16]= |  |
PolynomialReduce[poly, {p1, p2, ...}, {x1, x2, ...}] 生成一个多项式列表
,使得
是最小的,且
恰好是 poly.
这里根据

和

来表示

,留下一个仅依赖于

的余数.
| Out[17]= |  |
分解多项式因式的函数.
Factor,FactorTerms 和 FactorSquareFree 进行不同程度的多项式分解. Factor 在整数上进行完全分解. FactorTerms 提取多项式的"容度". FactorSquareFree 提出任何多重因式.
| Out[18]= |  |
| Out[19]= |  |
| Out[20]= |  |
| Out[21]= |  |
尤其当编写含有多项式的程序时,用户会发现取出标准形式的多项式部分是方便的. 函数 FactorList 给出多项式的所有因子和相应指数的列表. 该列表的第一个单元素总是多项式的数字因式.
FactorList 返回的形式类似于由 FactorInteger 生成的形式.
这是前一例子中多项式的因式列表. 其中每个元素给出因式及相应的指数.
| Out[22]= |  |
分解具有复系数的多项式的因式.
Factor 和相关函数通常只处理具有普通整数或有理数系数的多项式. 然而,当设置选项GaussianIntegers->True,那么 Factor 将允许多项式具有实部和虚部均为有理数的复数系数. 这使得范围更广泛的因式分解能够进行.
| Out[23]= |  |
| Out[24]= |  |
不可约性的检测.
如果一个多项式不能表示为系数在域
内的两个非常量多项式的积,则该多项式在域
上不可约.
| Out[25]= |  |
| Out[26]= |  |
| Out[27]= |  |
在由
Sqrt[2] 扩展的有理数范围内,该多项式是可约的.
| Out[28]= |  |
割圆多项式.
割圆多项式在各种代数算法中作为"基本多项式"出现. 割圆多项式的定义为:
,其中
取所有的小于
且与
互素的正整数.
这是割圆多项式

.
| Out[29]= |  |

出现在

的因式中.
| Out[30]= |  |
分解多项式.
因式分解是把多项式分成简单形式的一种重要方法. 另外一种完全不同的方法是分解(decomposition). 当对多项式
进行因式分解时,把它写为多项式
的乘积
. 而分解多项式
是把它写为形如
的多项式的复合(composition).
这是一个
Decompose 分解的简单例子. 原多项式

可以被写为多项式

,其中

是多项式

.
| Out[31]= |  |
| Out[33]= |  |
| Out[34]= |  |
Decompose[poly, x] 给出一列
的多项式,它们的复合为最初的多项式. 最初的多项式可能包含
以外的变量,但Decompose 生成的多项式序列都被看作是
的函数.
不同于因式分解. 多项式的分解不是完全唯一的. 例如,由
和
联系的两组多项式
和
给出相同的复合结果,即
. Mathematica 遵守这个惯例:将常数项并入到由 Decompose 生成的一列多项式的第一个中.
生成插值多项式.
| Out[35]= |  |
| Out[36]= |  |