计算器是如何计算sin、cos等科学函数的值呢?

 

计算器是如何计算sin、cos等科学函数的值呢?

 

  在小型计算器(需带有函数计算功能)上,计算sin45的值为:(本文用sin45为例)

    sin45=0.707106781

    这种小型计算器提供了10位有效数字显示,但其实内部还有几位有效数字,可以再通过下述方法显示出来:在上述结果上,再乘以10000,得7071.067812(这里显示已经多了一位),再减去整数部分7071,得0,067812,再乘以1000,得67.81187(这里又多了3位)。所以这种小型计算器内部可以计算得到函数值为14位有效数字(最后一位是四舍五入)。

  在电脑操作系统自带的计算器上,也可以完成此运算,如下图:

  计算器是如何计算sin、cos等科学函数的值呢?

  对比小型计算器的结果,可见电脑获得的有效位数多达32位,功能十分强大。

  在带有函数计算功能的计算器上除了sin、cos等三角函数,还指数对数函数、幂函数等各类函数计算计算功能,那么机器内是如何得到这些值的呢,是否也有一个表存储大量的值用于查找呢?肯定不是的。

 

 

  下面从数列、级数、泰勒公式等知识,大致推导得到计算机的计算方法:

    先介绍数列和级数的概念:

  计算器是如何计算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)能否真的能够分解为下式,这里先假设能分解为下式:

  计算器是如何计算sin、cos等科学函数的值呢?

  式中尽管把函数f(x)展开成一个级数,但各项的系数a还是未知的,所以无法用①式求任意函数值。为了求各项系数,对公式①进行逐项求导数(或说多次求导),可以得到f(x)的各阶导数式,如下:

  计算器是如何计算sin、cos等科学函数的值呢?

  上面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代入①—⑤式,整理得到:

  计算器是如何计算sin、cos等科学函数的值呢?

  再把各项系数代入①式,就得到了所谓的麦克劳林公式:

  计算器是如何计算sin、cos等科学函数的值呢?

  这个麦克劳林公式,是泰勒公式当x0=0的一个特例,如果用泰勒级数表达,则为

计算器是如何计算sin、cos等科学函数的值呢?

  看来,公式①仅仅是假设的,是否成立还不一定,只要能够找到各项系数的表达及计算方法,就可以认为公式是成立的。通过上述逐级求导的方法,只要f(x)的各阶导数都存在,公式6则这种表达就可以成立。所幸对于许多函数来说,如sin、cos、对数指数等,甚至较复杂的幂函数,大多可以符合条件,找到这种级数的展开表示法。

  对于函数f(x)=sinx,通过计算各项系数,再展开为级数:

  计算器是如何计算sin、cos等科学函数的值呢?

  从上面几个式子可以看出,sinx的各阶导数呈现规律为:顺序循环为0,1,0,-1,所以根据这个规律把求出的各阶导数值代入公式7,可以写出sinx展开后的麦克劳林公式为:

  计算器是如何计算sin、cos等科学函数的值呢?

 

  但是,至此还看不出这种表达式的任何好处,相反,总觉得把一个简单的函数弄得相当复杂,似乎无助于问题的解决,那个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度值如何得到的问题,其他三角函数、指数对数函数等都可以通过上述方法来进行理论推导和近似计算。

posted @ 2011-08-24 10:19  李飞飞_合阳  阅读(6051)  评论(0编辑  收藏  举报