7-2%20%A6h%B6%B5%A6%A1%AA%BA%A8D%AD%C8%A1B%A8D%AE%DA%A1B%B7L%A4%C0%BBP%BFn%A4%C0

要計算多項式的值,可用 polyval 指令,例如:

Example 1: 07-多項式的處理與分析/polyval01.mp = [1 2 1]; x = 0:0.1:3; y = polyval(p, x); plot(x, y, '-o');

在上述範例中,x 和 y 都是長度為 31 的向量,y(i) 的值即為 $p(x)= x^2+2x+1$ 在 x = x(i) 的函數值。

若要計算 p(A),A 為一方陣,可用 polyvalm 指令如下:

Example 2: 07-多項式的處理與分析/polyvalm01.mp = [1 2 1]; A = [1 2; 3 4]; B = polyvalm(p, A)B = 10 14 21 31

此結果和 B = A^2 + 2*A + 1 是一樣的。

若上式改為 B = polyval(p, A),則其結果和 B = A.^2 + 2*A + 1 是一樣的。(請注意:A^2 和 A.^ 2 的意義完全不同,前者是矩陣 A*A,後者是對矩陣 A 的每一個元素平方。)

欲求多項式的根,可用 MATLAB 的 roots 指令,例如,若要計算多項式 $p(x)= x^4 +3 x^3 + x^2 + 5x - 1$ 的根,可見下列範例:

Example 3: 07-多項式的處理與分析/roots01.mp = [1, 3, 1, 5, -1]; % 多項式 r = roots(p) % 求多項式的根r = -3.2051 0.0082 + 1.2862i 0.0082 - 1.2862i 0.1886

欲驗證此四根為多項式 $p(x)$ 的解,可輸入如下:

Example 4: 07-多項式的處理與分析/roots02.mp = [1, 3, 1, 5, -1]; % 多項式 r = roots(p); % 求多項式的根 polyval(p, r) % 將根帶入多項式求值ans = 1.0e-014 * 0.3109 0.3553 - 0.3887i 0.3553 + 0.3887i 0

上述結果顯示將四個根帶入多項式求值的結果,都非常接近於零。

Hint
fzero 指令可用於一般函數的求根,但它一次只能找到一個根,所用的方法是牛頓法。roots 指令只能用於多項式的求根,它能一次找到全部的根,所用的方法是先將多項式表示成「伴隨矩陣」(Companion Matrix),再用解特徵值的方法來求根。

MATLAB 的 polyder 指令可用於多項式的微分,例如:

Example 5: 07-多項式的處理與分析/polyder01.mp = [1 3 3 1]; q = polyder(p)q = 3 6 3

此即表示 $p(x)= x^3 +3x^2 + 3x + 1$ 微分後的結果為 $q(x) = 3x^2 + 6x + 3$。

MATLAB 6.x 以後的版本已經提供 polyint 指令,以便對多項式進行積分,例如

Example 6: 07-多項式的處理與分析/polyint02.mp = [4 3 2 1]; k = 8; % 積分後的不定常數 q = polyint(p, k) % 積分後的多項式q = 1 1 1 1 8

此即表示 $p(x)= 4x^3 +3x^2 + 2x + 1$ 積分後的結果為 $q(x) = x^4 + x^3 + x^2 + x + 8$。(請注意,在此我們假設積分後的不定常數為 k。)

MATLAB 5.x 並無對多項式積分的指令,但我們可以很快的用其它方法達成積分的目的,例如:

Example 7: 07-多項式的處理與分析/polyint01.mp = [4 3 2 1]; t = length(p):-1:1; k = 8; % 積分後的不定常數 q = [p./t, k] % 積分後的多項式q = 1 1 1 1 8

以下列出如何使用 MATLAB 來進行多項式的求值、求根、微分、積分:

函數 說明
q = polyval(p, x) 計算 p(x) 的值
q = polyvalm(a, A) 計算 p(A),A 為一方陣
r = roots(p) 計算 p(x) 的根
q = polyder(p) q(x) 為 p(x) 的微分
q = polyint(p, k) q(x) 為 p(x) 的積分,其中 k 為任意常數
q = [p./length(p):-1:1, k] 同上一列(polyint 指令不存在時的替代方案)


MATLAB程式設計:進階篇