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