數值分析1:三角函數的計算(C語言實現)

以前學習C語言的時候,一直有個疑問,計算機從芯片設計的角度來看,只能計算常規的加減乘及移位之類的操做,那麼對於像sin cos這些三角函數,人腦尚無能夠直接運算的法則,那麼計算機是怎麼實現的呢?最近上了《數值分析》的課程,終於有點了解。函數

 

方法一:泰勒展開式學習

首先,相信你們都知道那個把咱們搞得死去活來的」泰勒公式「,用文字來描述就是若是函數足夠光滑的話,在已知函數在某一點的各階導數值的狀況之下,泰勒公式能夠用這些導數值作係數構建一個多項式來近似函數在這一點的鄰域中的值。spa

公式以下圖所示:設計

 

所以,像正弦函數這一類函數,最終均可以寫成多項式的形式(在0點進行展開)。3d

 

爲了求得精確值,n必須趨於無窮,可是要交給計算機來算的話,就必須進行截斷,通常來講n9既可,另外考慮到分子中帶有指數函數,當x較大時,餘項帶來的偏差一定比較大,而咱們知道正弦函數是一個周期函數,且全部值均可以由[0,pi/4]間的函數值變換而來,所以在計算以前,咱們先對要計算的數值根據誘導公式變換到[0,pi/4]區間上。code

 

方法二:拉格朗日插值法blog

對於正弦函數,咱們已知在[0,pi/4]區間上,當x分別爲0pi/6pi/4pi/3pi/2點處對應的正弦值,那麼,根據多項式插值法,已知5個點的函數值,咱們能夠構造惟一的4次多項式函數L(x)來逼近正弦函數,公式以下:get

 

其中每一個爲拉格朗日基本多項式(或稱插值基函數),其表達式爲:數學

 

 

根據實驗結果,其計算數值距離標準數學庫計算出來的數值仍有必定的誤差,偏差限爲0.0005,我估計標準數學庫是使用了更多點的插值法,所以結果比5點插值得來的更加準備一些,猜測正確與否,有待考證。class

 查看完整代碼實現

相關文章
相關標籤/搜索