- MATLAB金融風險管理師FRM(高階實戰)
- 姜偉生 涂升 李蓉
- 937字
- 2021-03-26 23:39:49
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() 化簡表達式。