1.3 多项式运算
丛书第一册和第三册讲过多项式(polynomial)函数;特别地泰勒展开经常使用线性函数(linear function)和二次函数(parabola)。
一元多项式函数基本形式为:
poly2sym() 函数可以构造符号多项式,比如:
syms a b c d x y t y1 = poly2sym([1, 2, 3, 4]) % y1 % = x^3 + 2*x^2 + 3*x + 4 y2 = poly2sym([a, b, c, d]) % y2 = % a*x^3 + b*x^2 + c*x + d y3 = poly2sym([a, b, c, d], t) % y3 = % a*t^3 + b*t^2 + c*t + d y4 = subs(y3, t, y^2 + 1) % y 4 = % d + a*(y^2 + 1)^3 + b*(y^2 + 1)^2 + c*(y^2 + 1)
函数sym2poly()可以提取符号多项式各项系数,比如下例:
syms x coeff_1 = sym2poly(x^3 + 2*x^2 + 3*x + 4) % coeff_1 = % 1 2 3 4
coeffs() 函数也可以提取符号多项式成分,但值得注意的是,这个函数输出各项系数的顺序和sym2poly()的结果相反,比如下例。fliplr()函数左右颠倒行向量。
syms x coeff_1 = coeffs(x^3 + 2*x^2 + 3*x + 4) % coeff_1 = % [ 4, 3, 2, 1] % Reverse the ordering of coefficients by using fliplr. c = fliplr(coeff_1) % c = % [ 1, 2, 3, 4]
coeffs() 不但可以获得系数,也能获得对应项,比如下例。请读者注意系数的先后顺序。
syms x [coeff_1,terms_x] = coeffs(x^3 + 2*x^2 + 3*x + 4) % coeff_1 = % [ 1, 2, 3, 4] % % terms_x = % [ x^3, x^2, x, 1]
如果在输入加入指令符'All',coeffs()会输出所有项系数,哪怕该项系数为零。
syms x c = coeffs(3*x^2) % c = % 3 c_all = coeffs(3*x^2, 'All') % c_all = % [ 3, 0, 0]
coeffs()还可以针对某一个变量,输出它的系数。比如对下式,用coeffs()可以分别获得它关于x或y的系数。
具体代码如下:
cx = coeffs(x^3 + 2*x^2*y + 3*x*y^2 + 4*y^3, x) % cx = % [ 4*y^3, 3*y^2, 2*y, 1] cy = coeffs(x^3 + 2*x^2*y + 3*x*y^2 + 4*y^3, y) % cy = % [ x^3, 2*x^2, 3*x, 4]
coeffs() 还可以获得多元函数变量,比如获得上例中x和y的系数。
syms x y cxy = coeffs(x^3 + 2*x^2*y + 3*x*y^2 + 4*y^3, [x y]) % cxy = % [ 4, 3, 2, 1] cyx = coeffs(x^3 + 2*x^2*y + 3*x*y^2 + 4*y^3, [y x]) % cyx = % [ 1, 2, 3, 4]
类似地,coeffs()可以输出多元函数变量和对应项,如下:
syms x y [cxy,terms_xy] = coeffs(x^3 + 2*x^2*y + 3*x*y^2 + 4*y^3, [x y]) % cxy = % [ 1, 2, 3, 4] % % terms_xy = % [ x^3, x^2*y, x*y^2, y^3] [cyx,terms_yx] = coeffs(x^3 + 2*x^2*y + 3*x*y^2 + 4*y^3, [y x]) % cyx = % [ 4, 3, 2, 1] % % terms_yx = % [ y^3, x*y^2, x^2*y, x^3]
另外,coeffs()还能获取符号系数,而sym2poly()函数暂时没有这个功能。
syms a b c x [c_x, terms_x] = coeffs(a*x^2 + b*x + c, [x], 'All') % c_x = % [ a, b, c] % % terms_x = % [ x^2, x, 1]
对于多项式,MATLAB还提供了一系列函数来处理多项式符号表达式。感兴趣的读者可阅读帮助文件学习如下函数:
collect() 对符号项合并同类项,多个符号变量构成表达式,按指定某个符号合并同类项。
expand() 将符号表达展开为多项式表达。
factor() 对数字做质因数分解,对符号表达式做因式分解。
polyder() 计算多项式微分。
polyfit() 以最小二乘方式与一组数据拟合多项式系数。
polyint() 计算多项式积分。
polyval() 计算多项式每个点处的值。
polyvalm() 按照矩阵预算规则计算多项式值。
roots() 求解多项式根。
simplify() 化简表达式。