计算器是如何计算sin、cos等科学函数的值呢?
计算器是如何计算sin、cos等科学函数的值呢?
在小型计算器(需带有函数计算功能)上,计算sin45的值为:(本文用sin45为例)
sin45=0.707106781
在电脑操作系统自带的计算器上,也可以完成此运算,如下图:
对比小型计算器的结果,可见电脑获得的有效位数多达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.
2.
3.
4.