MATLAB金融风险管理师FRM(高阶实战)
上QQ阅读APP看书,第一时间看更新

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()可以分别获得它关于xy的系数。

具体代码如下:

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() 还可以获得多元函数变量,比如获得上例中xy的系数。

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() 化简表达式。