计算器是如何计算sin、cos等科学函数的值呢?
計算器是如何計算sin、cos等科學函數(shù)的值呢?
?
在小型計算器(需帶有函數(shù)計算功能)上,計算sin45的值為:(本文用sin45為例)
sin45=0.707106781
??? 這種小型計算器提供了10位有效數(shù)字顯示,但其實內部還有幾位有效數(shù)字,可以再通過下述方法顯示出來:在上述結果上,再乘以10000,得7071.067812(這里顯示已經多了一位),再減去整數(shù)部分7071,得0,067812,再乘以1000,得67.81187(這里又多了3位)。所以這種小型計算器內部可以計算得到函數(shù)值為14位有效數(shù)字(最后一位是四舍五入)。
在電腦操作系統(tǒng)自帶的計算器上,也可以完成此運算,如下圖:
對比小型計算器的結果,可見電腦獲得的有效位數(shù)多達32位,功能十分強大。
在帶有函數(shù)計算功能的計算器上除了sin、cos等三角函數(shù),還指數(shù)對數(shù)函數(shù)、冪函數(shù)等各類函數(shù)計算計算功能,那么機器內是如何得到這些值的呢,是否也有一個表存儲大量的值用于查找呢?肯定不是的。
?
?
下面從數(shù)列、級數(shù)、泰勒公式等知識,大致推導得到計算機的計算方法:
??? 先介紹數(shù)列和級數(shù)的概念:
了解了數(shù)列和級數(shù),跟計算sin45值還差得遠了。先介紹一位數(shù)學家:布魯克·泰勒( Brook Taylor ),1685年8月18日出生于英格蘭密德薩斯埃德蒙頓,1731年11月30日逝世于倫敦,是一名英國數(shù)學家,他主要以泰勒公式和泰勒級數(shù)出名。
那么泰勒公式是如何用來計算sin45的值呢,當然這里用sin45為例,泰勒公式能計算的函數(shù)多了。
首先,設sin是一個函數(shù),表達成:f(x)=sinx,也有寫有y=sinx,實質是一樣的。這個函數(shù)除了幾個特殊值,我們可從三角學來求得,如sin90=1,sin0=0等,其他值根本無法求得。如果能把這個f(x)=sinx分解成一個冪級數(shù),先不管這個f(x)能否真的能夠分解為下式,這里先假設能分解為下式:
式中盡管把函數(shù)f(x)展開成一個級數(shù),但各項的系數(shù)a還是未知的,所以無法用①式求任意函數(shù)值。為了求各項系數(shù),對公式①進行逐項求導數(shù)(或說多次求導),可以得到f(x)的各階導數(shù)式,如下:
上面4個式子,是分別對f(x)求一階、二階、三階、n階導數(shù)得到。這里用到了微積分的知識。對于任意的一個x,上面1到5式都應該成立,這里設x=0(對應于f(x)=sinx就相當于sin0)就能通過①—⑤來求得各個系數(shù)的值:
把x=0代入①式,得a0=f(0);
把x=0代入②式,含x的第二項及后面各項,都變?yōu)?,所以有:f’(0)=a1,即系數(shù)a1的值為函數(shù)f(x)取x=0時的一階導數(shù)的值。對于sinx的一階導數(shù)為cosx,所以f’(0)=cos0=1。
依次把x=0代入①—⑤式,整理得到:
再把各項系數(shù)代入①式,就得到了所謂的麥克勞林公式:
這個麥克勞林公式,是泰勒公式當x0=0的一個特例,如果用泰勒級數(shù)表達,則為
看來,公式①僅僅是假設的,是否成立還不一定,只要能夠找到各項系數(shù)的表達及計算方法,就可以認為公式是成立的。通過上述逐級求導的方法,只要f(x)的各階導數(shù)都存在,公式6則這種表達就可以成立。所幸對于許多函數(shù)來說,如sin、cos、對數(shù)指數(shù)等,甚至較復雜的冪函數(shù),大多可以符合條件,找到這種級數(shù)的展開表示法。
對于函數(shù)f(x)=sinx,通過計算各項系數(shù),再展開為級數(shù):
從上面幾個式子可以看出,sinx的各階導數(shù)呈現(xiàn)規(guī)律為:順序循環(huán)為0,1,0,-1,所以根據(jù)這個規(guī)律把求出的各階導數(shù)值代入公式7,可以寫出sinx展開后的麥克勞林公式為:
?
但是,至此還看不出這種表達式的任何好處,相反,總覺得把一個簡單的函數(shù)弄得相當復雜,似乎無助于問題的解決,那個sin45還是可望而不可及。但觀察(8)式,對于一個具體確定的x值,每一項都是可以計算的,一些分式上x的次方也是整數(shù),也是可以求出的,盡管計算相當繁復,但編制程序由計算機處理,將變得極為容易,不像sin45一樣讓人束手無策。
但是,這里還存在二個問題,一是對于三角函數(shù),需把角度轉換成弧度,才能代入公式計算;二是這個級數(shù)有無數(shù)多項,又如何進行計算呢?
對于f(x)=sin45,得先表達成弧度形式,45是角度值,轉換成弧度就是∏/4。
對于級數(shù)有無數(shù)項,其實這又是泰勒級數(shù)的精妙所在:隨著n的增大,后面各項的值將越來越小,直到趨向于0,用數(shù)學術語來表達的話,就叫級數(shù)是收斂的,也即當n趨向于無窮大時通項的極限=0,所以只需計算前面若干項就可以得到函數(shù)的近似值,當然,項數(shù)取得越多,最終計算得到的精度也越高。如果級數(shù)是通項不趨向0,則級數(shù)是發(fā)散的。這就無法用于上述計算了。
下面通過取前4項的來進行計算:
1.??????? x=∏/4 =? 0.78539816339744830961566084581988
2.??????? -x^3/3! = -0.08074551218828078170696957048724
3.??????? x^5/5! =? 0.00249039457019272016001579842157
4.??????? -x^7/7! =- 0.00003657620418217725078660518698
?? Sin45=sin(∏/4)=? 0.707106469575178070817920468567
???(這里的運算還是使用了計算器,主要是為了能說明問題。手工計算也行,只是量相當大,特別是取有效位數(shù)多的時候,估計如果手工計算,沒幾人能算得下來。而且上述過程沒有考慮太多近似計算的理論。)
??? 與計算器或計算機的運算結果對比,前6位有效數(shù)字是正確的。從上述計算級數(shù)的前4項的值來看,可以明顯看出,當n增大時,對應項的絕對值是急劇減小。
??? 理論上函數(shù)展開后的泰勒級數(shù)為無窮級數(shù),但工程實際上需要的僅是合適精度的近似值。即使是電腦中的科學計算器得到的結果也是一個32位的近似值,如果需要更高的精度,只需編寫電腦程序來實現(xiàn)。至此,已基本解決sin45度值如何得到的問題,其他三角函數(shù)、指數(shù)對數(shù)函數(shù)等都可以通過上述方法來進行理論推導和近似計算。
轉載于:https://www.cnblogs.com/lifeifei_heyang/archive/2011/08/24/4291319.html
總結
以上是生活随笔為你收集整理的计算器是如何计算sin、cos等科学函数的值呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票出货和洗盘的区别
- 下一篇: TreeView和DataGridVie