多项式的代数运算

在实际的许多运算中,需要对多项式进行的运算仅是结构运算.

然而,当用户进行关于多项式的更高深的代数运算时,就必须使用本节讨论的代数运算.

应当认识到本节讨论的大多数运算仅对具有整数指数和有理数系数的多项式有效.

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 给出余项 .

这里给出 除以 的余项.
In[1]:=
Click for copyable input
Out[1]=
这里是 的商,去掉了余项.
In[2]:=
Click for copyable input
Out[2]=
这里又回到最初的表达式.
In[3]:=
Click for copyable input
Out[3]=
此处结果依赖于多项式被看作是关于 还是关于 的.
In[4]:=
Click for copyable input
Out[4]=

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

这是模 化简 . 结果是二者相除的余式.
In[5]:=
Click for copyable input
Out[5]=
在此情形下,PolynomialModPolynomialRemainder 给出不同的结果.
In[6]:=
Click for copyable input
Out[6]=

PolynomialModPolynomialRemainder 的主要差别是前者通过乘和减多项式来工作,而后者通过除法获得结果. 另外,PolynomialMod 允许在同一次用几个模来化简. 一个典型的情形是以一个多项式和一个整数为模来化简.

这里按模 化简多项式 .
In[7]:=
Click for copyable input
Out[7]=

PolynomialGCD[poly1,poly2] 求整除 的最高次多项式. 它类似于整数函数 GCD.

PolynomialGCD 给出两个多项式的最大公因式.
In[8]:=
Click for copyable input
Out[8]=
PolynomialExtendedGCD 给出两个多项式的扩展最大公因式.
In[9]:=
Click for copyable input
Out[9]=
返回的多项式 可以用来表示原来的多项式的最大公因式.
In[10]:=
Click for copyable input
Out[10]=

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

这里是关于 的两个多项式关于 的结式. 仅当 的值使结式为零时,二多项式关于 有相同的根.
In[11]:=
Click for copyable input
Out[11]=

函数 Discriminant[poly,x] 是它的根的所有差的平方积. 它可用于确定多项式是否有任何重复的根. 判别式等于多项式和它的导数的结式,最多差一个独立于该变量的因子.

这个多项式有重复的根,因此其判别式消失为0.
In[12]:=
Click for copyable input
Out[12]=
这个多项式的根是不同的,因此其判别式非零.
In[13]:=
Click for copyable input
Out[13]=

Gröbner 基出现在许多现代代数算法和应用中. 函数 GroebnerBasis[{poly1,poly2,},{x1,x2,}] 取一根多项式集合,并把该集合化成标准形,使得从中能方便地推导出许多性质. 一个重要特征是从 GroebnerBasis 获得的多项式集合总是恰好有与原多项式集合完全一样的相同的根的集合.

是多余的,所以不出现在Gröbner基中.
In[14]:=
Click for copyable input
Out[14]=
多项式 没有根,表明原多项式没有相同的根.
In[15]:=
Click for copyable input
Out[15]=
该多项式在这里有效地展开,现在可以看到有五个相同的根.     
In[16]:=
Click for copyable input
Out[16]=

PolynomialReduce[poly,{p1,p2,},{x1,x2,}] 生成一个多项式列表 ,使得 是最小的,且 恰好是 poly.

这里根据 来表示 ,留下一个仅依赖于 的余数.
In[17]:=
Click for copyable input
Out[17]=
Factor[poly]分解多项式的因式
FactorSquareFree[poly]把多项式写成没有平方因子的幂的乘积
FactorTerms[poly,x]分解出不依赖于 x 的因式
FactorList[poly], FactorSquareFreeList[poly], FactorTermsList[poly]
给出各个因式的列表

分解多项式因式的函数.

FactorFactorTermsFactorSquareFree 进行不同程度的多项式分解. Factor 在整数上进行完全分解. FactorTerms 提取多项式的容度. FactorSquareFree 提出任何多重因式.

这里是展开形式的一个多项式.
In[18]:=
Click for copyable input
Out[18]=
FactorTerms 仅提取不依赖于 的因式2.
In[19]:=
Click for copyable input
Out[19]=
FactorSquareFree 分解出2和项 ,但留下其余的不分解.
In[20]:=
Click for copyable input
Out[20]=
Factor 进行完全分解,恢复最初的形式.
In[21]:=
Click for copyable input
Out[21]=

尤其当编写含有多项式的程序时,用户会发现取出标准形式的多项式部分是方便的. 函数 FactorList 给出多项式的所有因子和相应指数的列表. 该列表的第一个单元素总是多项式的数字因式.

FactorList 返回的形式类似于由 FactorInteger 生成的形式.

这是前一例子中多项式的因式列表. 其中每个元素给出因式及相应的指数.
In[22]:=
Click for copyable input
Out[22]=
Factor[poly,GaussianIntegers->True]
分解多项式的因式,允许系数是高斯整数

分解具有复系数的多项式的因式.

Factor 和相关函数通常只处理具有普通整数或有理数系数的多项式. 然而,当设置选项GaussianIntegers->True,那么 Factor 将允许多项式具有实部和虚部均为有理数的复数系数. 这使得范围更广泛的因式分解能够进行.

这个多项式在普通整数下是不可化简的.
In[23]:=
Click for copyable input
Out[23]=
当高斯整数系数被允许时,该多项式能分解因式.
In[24]:=
Click for copyable input
Out[24]=
IrreduciblePolynomialQ[poly]检测 poly 在有理数范围内是否是不可约的多项式
IrreduciblePolynomialQ[poly,GaussianIntegers->True]检测 poly 在高斯有理数范围内是否是不可约的
IrreduciblePolynomialQ[poly,Extension->Automatic]检测 poly 在由代数数值系数扩展的有理数范围内的不可约性

不可约性的检测.

如果一个多项式不能表示为系数在域 内的两个非常量多项式的积,则该多项式在域 上不可约.

该多项式在有理数范围内是不可约的.
In[25]:=
Click for copyable input
Out[25]=
该多项式在高斯有理数范围内,是可约的.
In[26]:=
Click for copyable input
Out[26]=
默认情况下,代数数作为独立的变量处理.
In[27]:=
Click for copyable input
Out[27]=
在由 Sqrt[2] 扩展的有理数范围内,该多项式是可约的.
In[28]:=
Click for copyable input
Out[28]=
Cyclotomic[n,x]给出 x 的阶为 n 的割圆多项式

割圆多项式.

割圆多项式在各种代数算法中作为基本多项式出现. 割圆多项式的定义为:,其中 取所有的小于 且与 互素的正整数.

这是割圆多项式 .
In[29]:=
Click for copyable input
Out[29]=
出现在 的因式中.
In[30]:=
Click for copyable input
Out[30]=
Decompose[poly,x]如果可能,将 poly 分解成一列简单多项式的复合

分解多项式.

因式分解是把多项式分成简单形式的一种重要方法. 另外一种完全不同的方法是分解(decomposition). 当对多项式 进行因式分解时,把它写为多项式 的乘积 . 而分解多项式 是把它写为形如 的多项式的复合(composition).

这是一个 Decompose 分解的简单例子. 原多项式 可以被写为多项式 ,其中 是多项式 .
In[31]:=
Click for copyable input
Out[31]=
这是两个多项式的函数.
In[32]:=
Click for copyable input
这里给出两个函数的复合.
In[33]:=
Click for copyable input
Out[33]=
Decompose 恢复原函数.
In[34]:=
Click for copyable input
Out[34]=

Decompose[poly,x] 给出一列 的多项式,它们的复合为最初的多项式. 最初的多项式可能包含 以外的变量,但Decompose 生成的多项式序列都被看作是 的函数.

不同于因式分解. 多项式的分解不是完全唯一的. 例如,由 联系的两组多项式 给出相同的复合结果,即 . Mathematica 遵守这个惯例:将常数项并入到由 Decompose 生成的一列多项式的第一个中.

InterpolatingPolynomial[{f1,f2,},x]
给出一个 x 的多项式,其在 x 等于整数 i 处的值为
InterpolatingPolynomial[{{x1,f1},{x2,f2},},x]
给出一个 x 的多项式,当 x 等于 时,其值为

生成插值多项式.

这里生成通过指定的三个点的二次多项式.
In[35]:=
Click for copyable input
Out[35]=
等于 时,多项式的值为 .
In[36]:=
Click for copyable input
Out[36]=