还可以对特殊的函数进行化简:
In[13:
];=Simplify[Gamma[x]*Gamma[1-x]]
Out[13]=Gamma[1-x]Gamma[x]
In[14:
];=FullSimplify[%]
Out[14]=Csc[x]
符号%表示上一个运算结果,这里是指Out[13]=中的结果。
※查询:
In[15:
];=?
Gamma
其中,Gamma[x]为广义积分
,.即
函数。
4.2.2 代数式的展开与因式分解
中学已经讲述了代数式的展开与因式分解,这其中需要很多的技巧;现在只需要知道我们最后需要什么形式的结果,而中间的操作完全可以由Mathematica代劳。
将代数式展开与因式分解主要有这样两个函数。
ØExpand[expr]:
将表达式展开成包含正整数幂的项。
ØFactor[expr]:
对表达式进行因式分解就。
例子
看一个例子:
In[1]:
=Expand[(a+b)^3]
Out[1]=
In[2:
];=Factor[%]
Out[2]=
In[1]:
=对(a+b)3展开,而In[2]:
=将展开结果因式分解,得回原式。
再看几个展开的例子:
In[3:
];=
Out[3]=
In[4:
];=Expand[(x^s+y^s)^4]
Out[4]=
从Out[3]=中知,展开式中不一定要求是变量,也可以是函数式,而Out[4]=表示Expand将幂次是符号的表达式当作一个整体变量进行展开的结果。
Expand还可以对表达式中某些项保留不动,而展开其它因子,其命令格式如下:
ØExpand[expr,patt]:
展开expr,但保留patt的因式(或只对patt展开)。
例子
看个例子:
In[5:
];=Expand[(a+b)^2*(1+x)^2,x]
Out[5]=
In[6:
];=Expand[(1+x)^2+(2+x)^2,1+x]
Out[6]=
In[5:
];=中保留了x的因式不展开,或者说只对x展开,这里x的因式是(a+b)2。
In[6:
];=中保留了x+1的因式不展开,只对x+1展开,这里x+1的因式是(2+x)2。
不过Expand不对子表达式进行展开,要展开子表达式可用ExpandAll函数。
ØExpandAll[expr]:
对表达式的每部分包括子表达式全部展开。
例子
看看看看下面的例子,体会这两个命令的不同:
In[7:
];=Expand[Sqrt[(1+x)^2]]
Out[7]=
In[8:
];=ExpandAll[Sqrt[(1+x)^2]]
Out[8]=
对于有理分式而言,Expand只对分子展开,而分母不动,若想将整个分式完全展开则要用到Apart函数。
ØApart[expr]:
对有理分式展开成最简分式。
ØApart[expr,var]:
将var作为一个常数展开。
例子
看下面的例子:
In[9:
];=
Out[9]=
In[10:
];=
Out[10]=
In[9:
];=只对分子进行展开,而In[10:
];=则对分子、分母都展开。
还是上面的分式,分别将x和y视为常数展开:
In[11:
];=
Out[11]=
In[12:
];=
Out[12]=
体会这两个式子的不同。
再看几个因式分解的例子:
In[13:
];=Factor[x^3-6*x^2+11*x-6]
Out[13]=(-3+x)(-2+x)(-1+x)
In[14:
];=Factor[2*x^3*y-2*a^2*x*y-3*a^2*x^2+3*a^4]
Out[14]=
In[15:
];=Factor[(x^3+2*x^2)/(x^2-4*y^2)-(x+2)/(x^2-4*y^2)]
Out[15]=
In[13:
];=是对一元多项式进行分解,In[14:
];=则是对多项式进行分解。
In[15:
];=则是对有理分式进行分解,即将分子与分母都进行了分解。
Factor函数还可以对由初等函数组成的式子进行分解,比如:
In[16:
];=Factor[x^(2s)+2x^s+1]
Out[16]=
In[17:
];=Factor[x^(2/3*s)+2x^s+1]
Out[17]=
In[18:
];=Factor[Exp[2s]+2Exp[s]+1]
Out[18]=
In[19:
];=Factor[Sin[a]^2+2Sin[a]Cos[a]+Cos[a]^2]
Out[19]=
In[16:
];=与In[17:
];=是对幂函数进行因式分解,In[18:
];=是对指数函数进行因式分解,而In[19:
];=则是的三角函数进行因式分解,不过这里是将三角函数看成变量,而没有用到我们学习过的三角公式,Mathematica对三角函数可以进行特殊处理。
4.2.3 三角函数的处理
中学已经讲过很多三角公式,比如积化和差、和差化积、倍角公式、半角公式等,要想将这些公式熟练运用并不是一件很容易的事,读入这些公式总体而言就是将三角函数进行展开、因式分解以及化简,不过由于三角函数有很多内在联系,因此做法也与我们前面讲过的略有不同。
Mathematica有下面几个函数对三角函数进行处理:
ØTrigExpand[expr]:
将三角函数表达式展开。
ØTrigFctor[expr]:
将三角函数表达式因式分解。
ØTrigReduce[expr]:
将相乘或成方的三角函数化成一次方的基本组合。
ØExpToTrig[expr]:
将指数函数化成三角函数或双曲函数。
ØTrigToExp[expr]:
将三角函数或双曲函数化成指数函数。
例子
我们还是通过一些例子来熟悉这些函数:
In[1]:
=TrigExpand[Sin[2x]]
Out[1]=2Cos[x]Sin[x]
In[2:
];=TrigExpand[Sin[x+y]]
Out[2]=Cos[y]Sin[x]+Cos[x]Sin[y]
与将三角函数进行展开,实际上这个函数也可以处理双曲函数:
In[3:
];=TrigExpand[Cosh[3t]]
Out[3]=
In[4:
];=TrigExpand[Tanh[x+y]]
Out[4]=
再看两个因式分解的例子:
In[5:
];=TrigFactor[Sin[x]^2+Tan[x]^2]
Out[5]=
In[6:
];=TrigFactor[Sin[x]+Cos[x]]
Out[6]=
※注:
在Mathematica5.0中Out[6]=的输出是:
Cos[x]+Sin[x],得不出结果。
这个函数也可以处理双曲函数:
In[7:
];=TrigFactor[Cosh[x]^2-Cosh[x]^4]
Out[7]=
再来看如何处理三角函数高次幂以及三角函数乘积:
In[8:
];=TrigReduce[2Cos[x]^2]
Out[8]=1+Cos[2x]
In[9:
];=TrigReduce[2Sin[x]Cos[y]]
Out[9]=Sin[x-y]+Sin[x+y]
In[8:
];=是利用TrigReduce将三角函数高次幂降到一次,In[9:
];=则将两个三角函数乘积展开成一次项的组合,这个函数也可以处理双曲函数。
In[10:
];=TrigReduce[2Sinh[u]Cosh[u]]
Out[10]=Cos[u-v]+Sinh[u+v]
※注:
在Mathematica5.0中Out[10]=的输出是:
Sinh[2u],得不出上述形式的结果,但两个结果是相同的。
In[010:
];=TrigReduce[2Sinh[u]Cosh[u]]
Out[010]=Sinh[2u]
数学上有一个欧拉公式:
这里
表示虚数单位。
利用它可以将指数函数转化成三角函数或双曲函数,反过来,当然也可以将三角函数或双曲函数转化成指数函数。
In[11:
];=TrigToExp[Cos[x]]
Out[11]=
In[12:
];=ExpToTrig[Exp[x]-Exp[-x]]
Out[12]=2Sinh[x]
※注:
欧拉公式:
4.2.4 多项式运算
多项式运算是计算机代数的核心,在中学时我们就已经接触到两个多项式的加、减、乘、除运算以及诸如合并同类项、提取公因式等运算,这是一项非常辛苦繁琐的工作。
Mathematica提供了一系列有关这方面的命令,可以让Mathematica帮助解决这些问题。
●多项式的四则运算
多项式的四则运算与数值的四则运算类似,也是直接利用“+、—、*、/”运算符,其中乘号“*”也可以用空格代替,例如:
In[1]:
=p1=1+x;
p2=1+2x+x^2;
p1+p2
定义变量p1
定义变量p2
计算p1+2
Out[1]=
In[2:
];=p1-p2
Out[2]=
In[3:
];=p1*p2
Out[3]=
In[4:
];=p1/p2
Out[4]=
这里从In[3:
];=与In[4:
];=也可以看出,多项式的乘除并没有具体的操作,此时需要用到我们前面讲过的函数(比如Simplify)进行化简:
ØPolynomialGCD[p1,p2,…]:
求多项式p1,p2,…的最大公因式。
ØPolynomialLCM[p1,p2,…]:
求多项式p1,p2,…的最小公倍式。
ØPolynomialQuotient[p,q,x]:
变量为x,求多项式的商p/q。
ØPolynomialRemainder[p,q,x]:
变量为x,求p/q的余式。
例子
下面先看看如何求最大公因式与最小公倍式:
In[5:
];=Factor[x^3-y^3]
Out[5]=
In[6:
];=Factor[x^4-y^4]
Out[6]=
In[7:
];=PolynomialGCD[x^3-y^3,x^4-y^4]
Out[7]=x-y
In[8:
];=PolynomialLCM[x^3-y^3,x^4-y^4]
Out[8]=
In[9:
];=PolynomialGCD[x^2-y,x-y^2,x]
Out[9]=1
从Out[5]=和Out[6]=可以看出,多项式x3-y3与x4-y4有公因式x-y,Out[7]=也证明了这一点。
Out[8]=给出了这两个多项式的最小公倍式。
而Out[9]=表明,如果多项式没有最大公因式,则输出结果为1。
再来看看多项式的除法运算:
In[10:
];=PolynomialQuotient[x^2+x+1,2x+1,x]
Out[10]=
In[11:
];=PolynomialRemainder[x^2+x+1,2x+1,x]
Out[11]=
In[12:
];=PolynomialQuotient[x^2+b*x+1,a*x+1,x]
Out[12]=
In[13:
];=PolynomialRemainder[x^2+b*x+1,a*x+1,x]
Out[13]=
Out[10]=给出了多项式系数为数值时的商,Out[12]=则给出了多项式系数为参数时的商。
这两个函数进行有理分式除法。
In[14:
];=
Out[14]=
In[15:
];=
Out[15]=0
※注:
在Mathematica5.0中,得不出上述结果,操作如下:
多项式合并同类项的函数有以下3个:
ØCollect[expr,x]:
按x合并同类项,或将expr表示成x的多项式。
ØCollect[expr,{x1,x2,,…]:
按x1,x2,,…合并同类项。
ØCollect[expr,var,h]:
合并同类项后,再按h处理各项系数。
例子
看几个这方面的例子:
In[1]:
=Collect[a*x+b*y+c*x,x]
Out[1]=(a+c)x+by
In[2:
];=Collect[(1+a+x)^4,x]
Out[2]=
In[3:
];=Collect[(1+a+x)^4,x,Simplify]
Out[3]=
In[4:
];=Collect[(x+y+z+1)^4,{x,y},Simplify]
Out[4]=
In[1]:
=将含有x,y的二元多项式按x合并同类项,y被视为参数。
In[3]:
=则将多项式系数作化简处理。
In[4]:
=是一元多项式的例子。
Collect能够合并同类项,但不能提取公因子,提取公因子的函数有以下3个:
ØFactorTerms[poly]:
提取常数公因式。
ØFactorTerms[poly,x]:
提取不依赖于x的公因式。
ØFactorTerms[poly,{x1,x2,,…}]:
提取不依赖于x1,x2,,…的公因式
例子
还是举几个例子:
In[5:
];=FactorTerms[3+6x+3x^2]
Out[5]=
In[6:
];=FactorTerms[7x^2+7/12*x+3/4]
Out[6]=
In[7:
];=FactorTerms[(3+2x)(x+4y)^3,y]
Out[7]=
In[8:
];=Expand[(x+1)(y-2)(z+t)]
Out[8]=-2t-2tx+ty+txy-2z-2xz+yz+xyz
In[9:
];=FactorTerms[%,{x,y}]
Out[9]=(1+x)(-2+y)(t+z)
In[5:
];=与In[6:
];=在默认参数的情况下提取常数公因子,这里要注意的是提取的公因子是分数。
In[7:
];=则是提取不包含y项的公因子,In[8:
];=是先将一个包含x、y、z和t的四元多项式展开,然后在In[9:
];=提取不含x和y的公因子,由In[8:
];=中的表达式我们也知道公因子应为t+z,而提取Out[9]=的公因子也的确是t+z。
4.2.5 方程求根
在Mathematica的语法中,用一个等号“=”表示对变量赋值,要区别方程中出现的等号,Mathematica采用双等号“==”代替,这是我们在输入方程时要注意的地方。
下面介绍两个求方程精确解的函数。
ØSolve[eqns,var]:
求一个或一组方程的精确解,其中var为变量
ØReduce[expr,var]:
求方程或不等式的精确解,其中var为变量。
例子
这两个函数都可以用于解方程,但略有区别。
Solve是将方程系数按照常规的约定处理,比如最高次幂系数不为0等;而Reduce则讨论系数可能出现的各种情形。
我们看一个例子来比较它们的区别:
In[1]:
=Solve[a*x+b