Maple笔记3--多项式
(2015-03-27 16:23:29)
标签:
maple多项式符号计算 |
分类: Maple笔记 |
来源:论坛转载(VB资料库)
1多项式
多项式是代数学中最基本的对象之一, 它不但与高次方程的讨论有关, 而且是进一步学习代数以及其它数学分支的基础.
1.1 多项式生成及类型测试
在Maple中, 多项式由名称、整数和其他Maple值, 通过+、-、*和^等组合而成. 例如:
> p1:=5*x^5+3*x^3+x+168;
这是一个整系数单变量多项式. 多元多项式和定义在其他数域上的多项式可以类似构造:
> p2:=3*x*y^2*z^3+2*sqrt(-1)*x^2*y*z+2002;
由此可以看出, Maple中多项式的生成与“赋值”命令相似.
另外, 还可以通过函数randpoly生成随机多项式, 生成一个关于vars的随机多项式的格式如下:
randpoly(vars, opts);
其中, vars表示变量或者变量列表或集合, opts为可选项方程或者指定属性的名称. 如:
> randpoly(x);
#随机生成关于x的5次(默认)多项式
> randpoly([x, y], terms=8);
#随机生成关于[x, y]二元8项多项式
> randpoly([x, sin(x), cos(x)]);
而要随机生成关于[x, y, z]的密集的、均匀的、度为2的多项式的命令为:
> randpoly([x,y,z],dense,homogeneous,degree=2);
用type命令可以测试多项式的类型:
> type(p1, polynom(integer, x));
#测试p1是否是一个关于x的整系数多项式
> type(p2, polynom(complex, {x, y, z})); #测试p2是否是一个关于{x, y,
z}的复系数多项式
1.2 提取多项式系数
coeff函数用来提取一元多项式的系数, 而多元多项式所有系数的提取用命令coeffs, 指定系数的提取用命令coftayl.
(1)
提取多项式p中x^n的系数使用命令:coeff(p, x^n);或coeff(p, x, n);
(2)
提取多项式p中变量x的所有系数并将相应的x幂存于变量t中:coeffs(p, x, ’t’);
(3)
返回expr在x=a处的Taylor展式中(x-a)^k的系数: coeftayl(expr, x=a,
k);
> p:=2*x^2+3*y^3*x-5*x+68;
> coeff(p, x);
> coeff(x^4-5*x^2-sin(a)*(x+1)^2, x^2);
> s:=3*x^2*y^2+5*x*y;
> coeffs(s);
> coeffs(s, x, 't');
> t;
> coeftayl(exp(x), x=0, 10);
> p:=3*(x+1)^3+sin(Pi/3)*x^2*y+x*y^3+x-6;
> coeftayl(p, x=-1, 1);
> coeftayl(p, [x, y]=[0, 0], [1, 0]);
返回默认为降序排列的多元多项式的首项和末项系数分别使用命令lcoeff、tcoeff:
> lcoeff(p, x);
> tcoeff(p, x);
1.3 多项式的约数和根
1.3.1多项式的最大公约因式(gcd)/最小公倍因式(lcm)
求多项式的最大公约因式/最小公倍因式的命令与求两个整数最大公约数/最小公倍数命令一样, 都是gcd/lcm. 命令格式分别为:
gcd(p1, p2, 't',
's');
lcm(p1, p2, 't',
's');
其中, 第3个参数t赋值为余因子p1/gcd(p1, p2), 第4个参数s赋值为余因子p2/gcd(p1, p2).
> p1:=x^4+x^3+2*x^2+x+1;
> p2:=x^2+x+1;
> gcd(p1, p2, 't', 's');
> t, s;
> lcm(p1, p2);
1.3.2多项式的平方根(psqrt)和第n次方根(proot)
求多项式p的平方根, 若不是完全平方, 则返回_NOSQRT:psqrt(p);
求多项式p的n次方根, 若不是完全n次方,
则返回_NOROOT:proot(p, n);
> p:=x^4+4*x^3+6*x^2+4*x+1;
> psqrt(p);
> proot(p, 4);
> proot(p, 8);
1.3.3 多项式相除的余式(rem)/商式(quo)
计算p1除以p2的余式, 将商式赋值给q的命令格式为:rem(p1, p2, x,
'q');
计算p1除以p2的商式,
将余式赋值给r的命令格式为:quo(p1, p2, x,
'r');
余式和商式满足:p1=p2*q+r, 其中degree(r, x)
> rem(x^5+x^3+x, x+1, x, 'q');
> q;
> quo(x^3+x^2+x+1, x-1, x, 'r');
> r;
1.4 多项式转换及整理
1.4.1 将多项式转换成Horner形式
将多项式poly转换成关于变量var的Horner形式或者嵌套形式的命令格式如下:
convert(poly, horner, var);
> convert(x^5+x^4+x^3+x^2+x+1, horner, x);
> convert(x^3*y^3+x^2*y^2+x*y+1, horner, [x, y]);
1.4.2 将级数转换成多项式形式
将级数(series)转换成多项式(polynom)事实上就是忽略函数的级数展开式中的余项, 其命令格式为:
convert(series, polynom);
> s:=series(sin(x), x, 10);
> type(s, polynom);
> p:=convert(s, polynom);
> type(p, polynom);
1.4.3 将级数转换成有理多项式(有理函数)
将级数series(laurent级数或Chebyshev类型级数)转换成有理多项式(有理函数)ratpoly的命令格式为:
convert(series, ratpoly);
> series(exp(x^2), x, 15);
> convert(%, ratpoly);
1.4.4合并多项式系数(合并同类项)
将多项式具有相同次幂的项的系数合并在一起(包括正的、负的或者分数次幂), 即合并同类项(称为多项式的典范形式), 用命令collect:
collect(p, x);
collect(p, x, form,
func);
collect(p, x,
func);
其中x是表示单变量x或多变量x1, x2, …, xn的一个列表或集合.
> collect(a*ln(x)-ln(x)*x-x, ln(x));
> collect(x*(x+1)+y*(x+1), x);;
> collect(x*(x+1)+y*(x+1), y);
> p := x*y+a*x*y+y*x^2-a*y*x^2+x+a*x:
collect( p, [x, y], recursive );
> collect( p, [y, x], recursive );
> collect( p, {x, y}, distributed );
其中的参数recureive为递归式的,而distributed为分布式的。
1.4.5 将多项式(或者值的列表)排序
将多项式(或者值的列表)按升(或降)序次方排序时作命令sort. 命令格式:
sort(L);
sort(L, F);
sort(A);
sort(A, V);
其中, L—表示要排序的列表; F(可选项)—带两个参数的布尔函数; A—代数表达式; V(可选项)—变量
sort函数将列表L按升序次方, 将代数表达式A中的多项式按降序次方排列.
如果给定了F, 它将用来定义一个排序的列表. 如果F是符号“<”或者数值, 那么L是一个列表类型, 按数值型降序排列; 如果F是符号“>”, L按数值型升序排列; 如果F是一个词典编纂的符号, 那么字符串和符号列表将按词典编纂的次序排列. 另外, F必须是一个有两个参数的布尔函数.
在Maple中, 多项式并不自动按排序次序存储而是按建立的次序存储. 值得注意的是, sort函数对多项式的排序是破坏性的操作, 因为输入的多项式将会按排序后的次序存储.
用来对列表排序的算法是一种带早期排序序列监测的合并排序的递归算法, 而用于对多项式排序的算法是一个原位替换排序.
> sort([3, 2, 1, 5, 4]);
> sort(x^3+x^2+1+x^5, x);
> sort((y+x)^2/(y-x)^3*(y+2*x), x);
1.4.6 多项式的因式分解
一般情况下, 计算带有整数、有理数、复数或代数数系数的多项式的因式分解使用命令factor, 命令格式为:
factor(expr, K);
其中, expr为多项式, K为因式分解所在的区域
> factor(x^3+y^3);
> factor(t^6-1, (-3)^(1/2));
> factor(x^3+5, {5^(1/3), (-3)^(1/2)});
但是factor不分解整数, 也不分解多项式中的整数系数,
整数或整数系数的分解使用函数ifactor:
> ifactor(2^99+1);
1.5 多项式运算
1.5.1 多项式的判别式
多项式判别式在多项式求根中具有重要作用, 例如二次多项式的判别式. 求多项式p关于变量x的判别式的命令格式为:
discrim(p, x);
> p1:=a*x^2+b*x+c;
> discrim(p1, x);
> p2:=a*x^3+b*x^2+c*x+d;
> discrim(p2, x);
1.5.2 多项式的范数
计算关于变元v的多项式p的第n阶范数用命令norm, 格式如下:
norm(p, n, v);
其中p是展开的多项式, n为实常数或无穷大. 对于n≥1, 范数norm定义为norm(p, n, v)=sum(abs(c)^n), c=[coeffs(p, v)]^(1/n).
> norm(x^3+x^2+x+1, 1);
> norm(x-3*y, 2);
> norm(x-3*y, infinity);
1.5.3 bernoulli数及多项式
bernoulli函数计算第n阶bernoulli数和关于表达式x的第n阶bernoulli多项式bernoulli(n, x), bernoulli(n, x)通过指数生成函数定义为:
第n阶bernoulli数定义为:bernoulli(n)= bernoulli(n, 0)
> bernoulli(6);
> bernoulli(10, x);
> bernoulli(6, 1/2);
1.5.4 用Bernstein多项式近似一个函数
bernstein多项式起因于stone-weierstrass近似分析理论, 该理论认为任何连续函数都可以在一个闭区间用多项式序列来近似, bernstein多项式就是该理论的一个实例. 若给定p:=(n, i, x)->binomial(n, i)*x^i*(1-x)^(n-i)时, Bernstein多项式定义为:
其中, binomial(n, r) = GAMMA(n+1)/GAMMA(r+1)/GAMMA(n-r+1)
在Maple中, 在[0, 1]区间上近似等于函数f(x)的关于x的n次方的Bernstein多项的操作命令是:
bernstein(n, f, x);
其中, f必须是用一个程序或者操作符指定的单变量函数.
> bernstein(3, x->1/(x+1), z);
> f:= proc(t) if t < 1/2 then 4*t^2 else 2 - 4*t^2 end if end proc:
bernstein(8, f, x);
1.5.5 获取多项式的最高/最低次方
获取多项式的最高/最低次方的Maple命令分别为degree和ldegree, 格式如下:
degree(p, x);
ldegree(p, x);
> p:=3/x^3+x^3-(x-1)^4;
> degree(p, x); ldegree(p, x);
> degree(x*sin(x), x);
> degree(x*sin(x), sin(x));
1.5.6 Euler数及多项式
第n阶Euler多项式E(n, x)由指数生成函数定义为:
据此, 第n阶Euler数E(n)由指数生成函数定义为:
由此可见, 第n阶Euler多项式和Euler数的关系为:
在Maple中, 获取第n阶Euler多项式和Euler数的命令分别为:
euler(n, x);
euler(n);
其中, n为非负整数, x为表达式.
> euler(6);
> euler(6, x);
> euler(6, 1/2);
1.5.7 多项式插值
函数interp计算次方小于或等于n的过插值点(x[1], y[1]), (x[2], y[2]), …, (x[n+1],
y[n+1])关于变量v的多项式, 命令格式如下:
interp(x, y, v);
值得注意的是, 如果相同的x值输入了2次, 不论是否输入了相同的y值都会导致错误, 也就是说所有插值必须不一样. 如过点(1, 2), (2, 4), (3, 6), (4, 8), (5, 10), (6, 12), (7, 14), (8, 16), (9, 18), (10,
22)的关于Z的插值多项式的计算如下:
> interp([1,2,3,4,5,6,7,8,9,10], [2,4,6,8,10,12,14,16,18,22], z);
1.5.8 计算自然样条函数
计算一个关于变量z的次数是n(默认为3)的分段多项式来近似X, Y数据值. X值必须唯一且按升序排列, 而对Y值没有特别的约定. 命令格式为:
spline(X, Y, z, n);
> spline([1, 2, 3, 4], [2, 3, 6, 5], x, linear);#生成线性样条插值
> spline([0, 1, 2, 3], [0, 1, 4, 3], x, cubic);#生成三次样条插值
1.6 有理式
所谓有理式, 是指可以表示成f/g形式的式子, 其中f与g均为多项式, 且g 0.
1.6.1获取表达式的分子/分母
对于一个有理式x, 可以用numer(x)和denom(x)来获得它的分子(numerator)和分母(denumirator):
> f:=x^2+3*x+2: g:=x^2+5*x+6: h:=f/g;
> numer(h);denom(h);
1.6.2 有理表达式的标准化
和数字除法不同, Maple并不自动化简分式, 使分子和分母互不可约, 除非分子和分母都表示成乘积的形式并且有公共部分. 如果要将有理式化简成最简形式即标准化,需要调用函数normal( ) (也称正则化). 事实上, normal函数提供了化简的一种基本形式, 它首先识别在有理数主域上等于0的表达式包括求和、乘积、整数幂次和变量构成的任何表达式. Normal的结果是使有理式转化为约化的标准形式, 即:分子分母是带整数系数的素数多项式.
> normal(f/g);
> normal(x^2-(x+1)*(x-1)-1);
> normal((f(x)^2-1)/(f(x)-1));
> normal(1/x+x/(x+1), expanded);
> normal(2/x+y/3);
1.6.3 将有理式转换为多项式与真分式和的形式
convert/parfrac可将有理函数 f 分解为多项式与真分式和的形式,这是有理函数积分的基础. 命令格式如下:
convert(f, parfrac, x, K);
其中, f为x的有理函数, x为主变量名称, K为可选参数(实数—real, 复数—complex, 扩展域—a field extended, 真—true, 假—false, 无平方项—sqrfree)等.
> p:=(x^5+1)/(x^3+1);
> convert(p, parfrac, x);
> convert(x/(x-a)^2, parfrac, x);
1.6.4 将浮点数转换为接近的有理数
convert/rational将一个浮点数转换成一个近似的有理数, 转换的精度取决于环境变量Digits的值. 命令格式为:
convert(float, rational, Digits);
> convert(1.333333333, rational);
> convert(evalf(Pi), rational,6);
> convert(evalf(Pi), rational, 3);
多项式是代数学中最基本的对象之一, 它不但与高次方程的讨论有关, 而且是进一步学习代数以及其它数学分支的基础.
1.1 多项式生成及类型测试
在Maple中, 多项式由名称、整数和其他Maple值, 通过+、-、*和^等组合而成. 例如:
> p1:=5*x^5+3*x^3+x+168;
这是一个整系数单变量多项式. 多元多项式和定义在其他数域上的多项式可以类似构造:
> p2:=3*x*y^2*z^3+2*sqrt(-1)*x^2*y*z+2002;
由此可以看出, Maple中多项式的生成与“赋值”命令相似.
另外, 还可以通过函数randpoly生成随机多项式, 生成一个关于vars的随机多项式的格式如下:
randpoly(vars, opts);
其中, vars表示变量或者变量列表或集合, opts为可选项方程或者指定属性的名称. 如:
> randpoly(x);
> randpoly([x, y], terms=8);
> randpoly([x, sin(x), cos(x)]);
而要随机生成关于[x, y, z]的密集的、均匀的、度为2的多项式的命令为:
> randpoly([x,y,z],dense,homogeneous,degree=2);
用type命令可以测试多项式的类型:
> type(p1, polynom(integer, x));
> type(p2, polynom(complex, {x, y, z}));
1.2 提取多项式系数
coeff函数用来提取一元多项式的系数, 而多元多项式所有系数的提取用命令coeffs, 指定系数的提取用命令coftayl.
> p:=2*x^2+3*y^3*x-5*x+68;
> coeff(p, x);
> coeff(x^4-5*x^2-sin(a)*(x+1)^2, x^2);
> s:=3*x^2*y^2+5*x*y;
> coeffs(s);
> coeffs(s, x, 't');
> t;
> coeftayl(exp(x), x=0, 10);
> p:=3*(x+1)^3+sin(Pi/3)*x^2*y+x*y^3+x-6;
> coeftayl(p, x=-1, 1);
> coeftayl(p, [x, y]=[0, 0], [1, 0]);
返回默认为降序排列的多元多项式的首项和末项系数分别使用命令lcoeff、tcoeff:
> lcoeff(p, x);
> tcoeff(p, x);
1.3 多项式的约数和根
1.3.1多项式的最大公约因式(gcd)/最小公倍因式(lcm)
求多项式的最大公约因式/最小公倍因式的命令与求两个整数最大公约数/最小公倍数命令一样, 都是gcd/lcm. 命令格式分别为:
gcd(p1,
其中, 第3个参数t赋值为余因子p1/gcd(p1, p2), 第4个参数s赋值为余因子p2/gcd(p1,
> p1:=x^4+x^3+2*x^2+x+1;
> p2:=x^2+x+1;
> gcd(p1, p2, 't', 's');
> t, s;
> lcm(p1, p2);
1.3.2多项式的平方根(psqrt)和第n次方根(proot)
求多项式p的平方根, 若不是完全平方, 则返回_NOSQRT:psqrt(p);
> p:=x^4+4*x^3+6*x^2+4*x+1;
> psqrt(p);
> proot(p, 4);
> proot(p, 8);
1.3.3 多项式相除的余式(rem)/商式(quo)
计算p1除以p2的余式, 将商式赋值给q的命令格式为:rem(p1,
余式和商式满足:p1=p2*q+r, 其中degree(r, x)
> rem(x^5+x^3+x, x+1, x, 'q');
> q;
> quo(x^3+x^2+x+1, x-1, x, 'r');
> r;
1.4 多项式转换及整理
1.4.1 将多项式转换成Horner形式
convert(poly, horner, var);
> convert(x^5+x^4+x^3+x^2+x+1, horner, x);
> convert(x^3*y^3+x^2*y^2+x*y+1,
1.4.2 将级数转换成多项式形式
将级数(series)转换成多项式(polynom)事实上就是忽略函数的级数展开式中的余项, 其命令格式为:
convert(series, polynom);
> s:=series(sin(x), x, 10);
> type(s, polynom);
> p:=convert(s, polynom);
> type(p, polynom);
1.4.3 将级数转换成有理多项式(有理函数)
将级数series(laurent级数或Chebyshev类型级数)转换成有理多项式(有理函数)ratpoly的命令格式为:
convert(series, ratpoly);
> series(exp(x^2), x, 15);
> convert(%, ratpoly);
1.4.4合并多项式系数(合并同类项)
将多项式具有相同次幂的项的系数合并在一起(包括正的、负的或者分数次幂), 即合并同类项(称为多项式的典范形式), 用命令collect:
collect(p, x);
其中x是表示单变量x或多变量x1, x2, …, xn的一个列表或集合.
> collect(a*ln(x)-ln(x)*x-x, ln(x));
> collect(x*(x+1)+y*(x+1), x);;
> collect(x*(x+1)+y*(x+1), y);
> p := x*y+a*x*y+y*x^2-a*y*x^2+x+a*x:
collect( p, [x, y], recursive );
> collect( p, [y, x], recursive );
> collect( p, {x, y}, distributed );
其中的参数recureive为递归式的,而distributed为分布式的。
1.4.5 将多项式(或者值的列表)排序
将多项式(或者值的列表)按升(或降)序次方排序时作命令sort. 命令格式:
sort(L);
其中, L—表示要排序的列表; F(可选项)—带两个参数的布尔函数; A—代数表达式; V(可选项)—变量
sort函数将列表L按升序次方, 将代数表达式A中的多项式按降序次方排列.
如果给定了F, 它将用来定义一个排序的列表. 如果F是符号“<”或者数值, 那么L是一个列表类型, 按数值型降序排列; 如果F是符号“>”, L按数值型升序排列; 如果F是一个词典编纂的符号, 那么字符串和符号列表将按词典编纂的次序排列. 另外, F必须是一个有两个参数的布尔函数.
在Maple中, 多项式并不自动按排序次序存储而是按建立的次序存储. 值得注意的是, sort函数对多项式的排序是破坏性的操作, 因为输入的多项式将会按排序后的次序存储.
用来对列表排序的算法是一种带早期排序序列监测的合并排序的递归算法, 而用于对多项式排序的算法是一个原位替换排序.
> sort([3, 2, 1, 5, 4]);
> sort(x^3+x^2+1+x^5, x);
> sort((y+x)^2/(y-x)^3*(y+2*x), x);
1.4.6 多项式的因式分解
一般情况下, 计算带有整数、有理数、复数或代数数系数的多项式的因式分解使用命令factor, 命令格式为:
factor(expr, K);
其中, expr为多项式, K为因式分解所在的区域
> factor(x^3+y^3);
> factor(t^6-1,
> factor(x^3+5, {5^(1/3),
> ifactor(2^99+1);
1.5 多项式运算
1.5.1 多项式的判别式
多项式判别式在多项式求根中具有重要作用, 例如二次多项式的判别式. 求多项式p关于变量x的判别式的命令格式为:
discrim(p, x);
> p1:=a*x^2+b*x+c;
> discrim(p1, x);
> p2:=a*x^3+b*x^2+c*x+d;
> discrim(p2, x);
1.5.2 多项式的范数
计算关于变元v的多项式p的第n阶范数用命令norm, 格式如下:
norm(p, n, v);
其中p是展开的多项式, n为实常数或无穷大. 对于n≥1, 范数norm定义为norm(p, n, v)=sum(abs(c)^n), c=[coeffs(p, v)]^(1/n).
> norm(x^3+x^2+x+1, 1);
> norm(x-3*y, 2);
> norm(x-3*y, infinity);
1.5.3 bernoulli数及多项式
bernoulli函数计算第n阶bernoulli数和关于表达式x的第n阶bernoulli多项式bernoulli(n, x), bernoulli(n, x)通过指数生成函数定义为:
第n阶bernoulli数定义为:bernoulli(n)= bernoulli(n, 0)
> bernoulli(6);
> bernoulli(10, x);
> bernoulli(6, 1/2);
1.5.4 用Bernstein多项式近似一个函数
bernstein多项式起因于stone-weierstrass近似分析理论, 该理论认为任何连续函数都可以在一个闭区间用多项式序列来近似, bernstein多项式就是该理论的一个实例. 若给定p:=(n, i, x)->binomial(n, i)*x^i*(1-x)^(n-i)时, Bernstein多项式定义为:
其中, binomial(n, r) = GAMMA(n+1)/GAMMA(r+1)/GAMMA(n-r+1)
在Maple中, 在[0, 1]区间上近似等于函数f(x)的关于x的n次方的Bernstein多项的操作命令是:
bernstein(n, f, x);
其中, f必须是用一个程序或者操作符指定的单变量函数.
> bernstein(3, x->1/(x+1), z);
> f:= proc(t) if t < 1/2 then 4*t^2 else 2 - 4*t^2 end if end proc:
bernstein(8, f, x);
1.5.5 获取多项式的最高/最低次方
获取多项式的最高/最低次方的Maple命令分别为degree和ldegree, 格式如下:
degree(p, x);
ldegree(p, x);
> p:=3/x^3+x^3-(x-1)^4;
> degree(p, x); ldegree(p, x);
> degree(x*sin(x), x);
> degree(x*sin(x), sin(x));
1.5.6 Euler数及多项式
第n阶Euler多项式E(n, x)由指数生成函数定义为:
据此, 第n阶Euler数E(n)由指数生成函数定义为:
由此可见, 第n阶Euler多项式和Euler数的关系为:
在Maple中, 获取第n阶Euler多项式和Euler数的命令分别为:
euler(n, x);
其中, n为非负整数, x为表达式.
> euler(6);
> euler(6, x);
> euler(6, 1/2);
1.5.7 多项式插值
函数interp计算次方小于或等于n的过插值点(x[1], y[1]), (x[2],
interp(x, y, v);
值得注意的是, 如果相同的x值输入了2次, 不论是否输入了相同的y值都会导致错误, 也就是说所有插值必须不一样. 如过点(1, 2), (2, 4), (3, 6), (4, 8), (5, 10), (6, 12), (7,
> interp([1,2,3,4,5,6,7,8,9,10], [2,4,6,8,10,12,14,16,18,22], z);
1.5.8 计算自然样条函数
计算一个关于变量z的次数是n(默认为3)的分段多项式来近似X, Y数据值. X值必须唯一且按升序排列, 而对Y值没有特别的约定. 命令格式为:
spline(X, Y, z, n);
> spline([1, 2, 3, 4], [2, 3, 6, 5], x, linear);#生成线性样条插值
> spline([0, 1, 2, 3], [0, 1, 4, 3], x, cubic);#生成三次样条插值
1.6 有理式
所谓有理式, 是指可以表示成f/g形式的式子, 其中f与g均为多项式, 且g 0.
1.6.1获取表达式的分子/分母
对于一个有理式x, 可以用numer(x)和denom(x)来获得它的分子(numerator)和分母(denumirator):
> f:=x^2+3*x+2: g:=x^2+5*x+6: h:=f/g;
> numer(h);denom(h);
1.6.2 有理表达式的标准化
和数字除法不同, Maple并不自动化简分式, 使分子和分母互不可约, 除非分子和分母都表示成乘积的形式并且有公共部分. 如果要将有理式化简成最简形式即标准化,需要调用函数normal( ) (也称正则化). 事实上, normal函数提供了化简的一种基本形式, 它首先识别在有理数主域上等于0的表达式包括求和、乘积、整数幂次和变量构成的任何表达式. Normal的结果是使有理式转化为约化的标准形式, 即:分子分母是带整数系数的素数多项式.
> normal(f/g);
> normal(x^2-(x+1)*(x-1)-1);
> normal((f(x)^2-1)/(f(x)-1));
> normal(1/x+x/(x+1), expanded);
> normal(2/x+y/3);
1.6.3 将有理式转换为多项式与真分式和的形式
convert/parfrac可将有理函数 f 分解为多项式与真分式和的形式,这是有理函数积分的基础. 命令格式如下:
convert(f, parfrac, x, K);
其中, f为x的有理函数, x为主变量名称, K为可选参数(实数—real, 复数—complex, 扩展域—a field extended, 真—true, 假—false, 无平方项—sqrfree)等.
> p:=(x^5+1)/(x^3+1);
> convert(p, parfrac, x);
> convert(x/(x-a)^2, parfrac, x);
1.6.4 将浮点数转换为接近的有理数
convert/rational将一个浮点数转换成一个近似的有理数, 转换的精度取决于环境变量Digits的值. 命令格式为:
convert(float, rational, Digits);
> convert(1.333333333, rational);
> convert(evalf(Pi), rational,6);
> convert(evalf(Pi), rational, 3);