《數值分析(原書第2版)》 0 1 多項式求值

2021-10-01 00:09:52 字數 3501 閱讀 2462

比如說,當x=1/2時,怎麼做才是計算下述多項式的最優方式?p(x)=2x4+3x3-3x2+5x-1假設多項式的係數和x的值1/2都已經儲存在記憶體裡,我們試圖最小化求值過程中涉及的加法和乘法的計算次數,進而得到多項式的值p(1/2).為了簡化問題,1我們忽略向記憶體中儲存數字以及從記憶體中讀取數字所花費的時間.

方法1 最先想到的直接方法如下:

需要進行的乘法計算的次數是10,還要有4次加法計算.其中的兩次加法運算實際上是減法,但是減法運算可以看做是加上數字的負數,因而我們並不擔心加法和減法之間的差異.

很顯然還有比式(0.1)更好的方法.我們可以事半功倍——通過消除給定輸入1/2的重複乘法計算節省運算.更好的策略是先計算(1/2)4,儲存部分乘積.這對應下面的方法:

方法2 首先找到輸入數字x=1/2的冪,儲存冪的值用於後續的計算:

現在我們可以把所有項加起來:

現在只有關於1/2的三次乘法,以及其他的4次乘法運算.總體算起來,我們將乘法運算降低至7次,加法運算的次數仍然是4次保持不變.從14次到11次運算次數的減少真的是那麼重要的效能提公升嗎?如果僅僅需要做一次運算,也許這並不是乙個重要的改進.不管使用方法1還是方法2,計算結果在手指離開鍵盤的同時都可以很快得到.但是,如果需要每秒對多個不同輸入的x多次計算多項式對應的值,在我們需要資訊的時候能夠及時獲取結果,不同方法的差異可能就顯得非常關鍵.

方法2是對於四階多項式計算的最好方法嗎?難以想象可以再消除3次乘法計算,但實際上可以.下述方法是這類問題的最優的基本求解方法:

方法3(巢狀乘法) 將多項式重寫後,可以從內到外對多項式求值:

這裡多項式是從前向後寫,關於x的冪被分解為與餘下的多項式的乘積.我們發現這樣寫多項式,並不需要額外的計算來進行多項式的重寫,所有的係數保持不變.現在從內到外進行計2算:

這種方法被稱為巢狀乘法或者霍納方法,利用4次乘法和4次加法計算多項式的值.一般的d階多項式可以通過d次乘法和d次加法求值.巢狀乘法和多項式算術中的綜合除法關係密切.

多項式求值的例子體現了科學計算方法的所有主題的特徵.第一,計算機在做簡單計算的時候速度很快.第二,由於簡單計算可能會被進行多次,盡可能有效地進行簡單計算可能非常重要.第三,最好的計算方式可能不是顯而易見的那種方法.在20世紀後五十年,在數值分析和科學計算領域,結合計算機硬體技術,對於常見問題已經開發了有效的求解方法.

雖然標準形式的多項式c1+c2x+c3x2+c4x3+c5x4可以用巢狀的形式寫為c1+x(c2+x(c3+x(c4+x(c5))))(0.4)但是一些應用需要更加一般的形式.特別是第3章的插值計算需要如下的形式:c1+(x-r1)(c2+(x-r2)(c3+(x-r3)(c4+(x-r4)(c5))))(0.5)其中我們稱r1,r2,r3和r4為基點.需要注意的是,若設定式(0.5)中的引數r1=r2=r3=r4=0,則變成式(0.4)中傳統的巢狀形式.

下面的matlab**實現了一般形式的巢狀乘法計算(參照式(0.3)):

執行上面的matlab程式需要給出輸入資料的值,包括多項式的階數、係數、需要求值的點x,以及基點陣列.例如,式(0.2)中的多項式在x=1/2處利用如下matlab命令進行求值:

結果和我們前面手工計算的結果相同.當執行以上命令時,nest.m檔案以及本書其他部分展示的matlab**,必須是在matlab路徑或者當前目錄可訪問路徑下.

如果巢狀命令用於求解式(0.2)(其中所有基點為0),可以使用如下縮減形式的命令:

使用該命令可以得到同樣的結果,這是由於在nest.m中對於輸入引數的設定.如果輸入引數的個數小於4,基點被自動設定為0.

由於matlab對於向量表達的無縫處理,巢狀命令可以同時估計一組x對應的多項式的值.下面是乙個示例:

最後,第3章中將出現的三階插值多項式

在x=1的值可以通過下面命令計算得到

例0.1 找出有效方法計算多項式p(x)=4x5+7x8-3x11+2x14的值.

對於多項式的一些重寫可以降低求值運算中的計算代價.主要思想是將多項式分解為x5和乙個由x3的整數冪構成的多項式的乘積:p(x)=x5(4+7x3-3x6+2x9)=x5(4+x3(7+x3(-3+x3(2))))對於每個輸入的x,我們需要首先計算xx=x2,xx2=x3,以及x2*x3=x5.這三個乘積以及關於x5的乘積,與三階多項式對應的三次乘法和三次加法,構成了原始多項式中每次求值的7次乘法4和3次加法.

0.1節習題

1.將如下多項式重寫為巢狀形式,並利用巢狀和非巢狀形式計算該多項式在x=1/3時的值.

(a) p(x)=6x4+x3+5x2+x+1

(b) p(x)=-3x4+4x3+5x2-5x+1

(c) p(x)=2x4+x3-x2+1

2.將如下多項式重寫為巢狀形式,並計算該多項式在x=-1/2時的值:

(a) p(x)=6x3-2x2-3x+7

(b) p(x)=8x5-x4-3x3+x2-3x+1

(c) p(x)=4x6-2x4-2x+4

3.計算p(x)=x6-4x4+2x2+1在x=1/2時的值,其中將p(x)轉化為由x2構成的多項式,並利用巢狀乘法計算.

4.計算包含基點的巢狀多項式p(x)=1+x(1/2+(x-2)(1/2+(x-3)(-1/2)))當(a) x=5與(b) x=-1時的值.

5.計算包含基點的巢狀多項式p(x)=4+x(4+(x-1)(1+(x-2)(3+(x-3)(2))))當(a) x=1/2與(b) x=-1/2時的值.

6.如何根據給定x計算如下多項式的值,要求使用盡可能少的計算.各自需要多少次的乘法和加法?

(a) p(x)=a0+a5x5+a10x10+a15x15

(b) p(x)=a7x7+a12x12+a17x17+a22x22+a27x27

7.使用一般的巢狀乘法,需要多少次的乘法和加法來計算包含基點的n階多項式的值?

0.1節程式設計問題

1.使用函式nest估計p(x)=1+x+…+x50當x=1.00001時的值.(使用matlab命令ones以節省鍵盤錄入.)通過和等價表示式q(x)=(x51-1)/(x-1)進行比較,找出誤差.

2.使用nest.m計算多項式p(x)=1-x+x2-x3+…+x98-x99當x=1.00001時的值.尋找更簡單等價的表示式,並利用該表示式估計巢狀乘法的誤差.

《數值分析(原書第2版)》 第2章 方 程 組

物理定律控制著所有的工程結構,從摩天大樓與橋梁,到跳水板以及醫療裝置.靜態或者動態的受力使得物體變形或者扭曲.扭曲的數學模型是結構工程師工作桌上的基本工具.結構在受力時可以扭曲的度數依賴於物質的強度,該強度使用楊氏 young 模量來度量.壓力和強度之間的競爭關係可以使用微分方法進行建模,在離散化後...

隨機過程 原書第2版

隨機過程 原書第2版 基本資訊 原書名 stochastic processes wiley series in probability and statistics 原出版社 wiley 譯者 龔光魯 叢書名 統計學精品譯叢 出版社 機械工業出版社 isbn 9787111430292 出版日期 ...

Eclipse外掛程式開發(原書第3版)

eclipse外掛程式開發 原書第3版 基本資訊 更有精彩樣張搶先試讀 目錄 第1章 使用eclipse工具 1 1.1 起步 1 1.2 eclipse工作台 2 1.3 設定eclipse 9 1.4 建立專案 11 1.5 導航 15 1.6 搜尋 17 參考文獻 41 第2章 簡單外掛程式示...