计算器是如何计算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等科学函数的值呢?相关推荐

  1. Python使用matplotlib完成绘制y1=sin(x),y=sin(cos(x^2)+x^3)的函数曲线

    使用matplotlib完成绘制y1=sin(x),y=sin(cos(x^2) + x^3)的函数曲线 任务描述 (一)编写一个程序,绘制如下函数的曲线: y1=sin(x) y=sin(cos(x ...

  2. 物竞用计算机,科学函数计算器成为秘密武器?物竞导师是这么说的

    我是一名物理竞赛培训老师,教授物理已经有很多年了.早在自己初中开始便于物理结缘,到参加物理竞赛,工作后又开始教授学生们物理知识,我与物理之间好像就是有着神奇的缘分. 因为自己经历过,所以我对物理教学产 ...

  3. Android 计算器 sin cos tan 值问题

    接到一个需求 :要求计算器sin90=1,拿到知道很疑问 难道不等以一么?测试了四五个手机 ,有的满足,有的sin90=0.8939-.查了api文档后发现 jdk中Math.sin/cos/tan ...

  4. android动画sin cos,Android开发中计算器的sin、cos及tan值计算问题分析

    本文实例讲述了Android开发中计算器的sin.cos及tan值计算问题.分享给大家供大家参考,具体如下: 接到一个需求 :要求计算器sin90=1,拿到知道很疑问 难道不等于一么?测试了四五个手机 ...

  5. 带exp在线计算机计算器使用,电脑系统自带科学计算器使用方法

    <电脑系统自带科学计算器使用方法>由会员分享,可在线阅读,更多相关<电脑系统自带科学计算器使用方法(2页珍藏版)>请在人人文库网上搜索. 1.电脑的科学计算器函数名:ln在数学 ...

  6. xilinx vivado 2019 cordic ip 计算sin cos

    目录 一.Cordic IP简介 二.Sin 和 Cos 三.Example重点解释 一.Cordic IP简介 VIVADO中,cordic是一个实现通用坐标旋转计算的IP核,在进行数字信号处理时常 ...

  7. python怎么算反三角函数_python弧度制转换 三角函数 反三角函数 双曲 反双曲 sin cos tan asin acos atan asinh acosh atanh atanh2...

    前提:import math 函数介绍: degrees(x)将x从弧度转换为度数. radians(x)将x从度数转换为弧度. 例如: >>> import math >&g ...

  8. python弧度制转换 三角函数 反三角函数 双曲 反双曲 sin cos tan asin acos atan asinh acosh atanh atanh2

    前提:import math 函数介绍: degrees(x)   将x从弧度转换为度数. radians(x)   将x从度数转换为弧度. 例如: >>> import math ...

  9. 【vivado IP核学习】DDS complier v6.0使用“SIN/COS LUT only”

    DDS complier v6.0使用 根据使用需求,设置dds格式为 "sin cos lut only",赛灵思官方dds IP的说明文档对该模式的描述如下: When con ...

最新文章

  1. 【试验】三个用于日常监控开发库与对应测试库的存储过程
  2. unity三维地图的经纬度如何在二维地图上表示_接入C++版本recastnavigation寻路库到Unity/服务端中...
  3. (零)ubuntu下制作最小deb包
  4. 测试面试题集-Python三局两胜小游戏
  5. 我有机器人合体成一个大力神_变形金刚动漫人物:狂派霸天虎挖地虎合体金刚-大力神...
  6. SharePoint 2010开发实例精选——通过客户端对象模型删除页面上的Web部件
  7. ExtJS简介--车辆调度
  8. 出现( linker command failed with exit code 1)错误总结
  9. 数据连接池的工作原理
  10. Java8 Lambda表达式教程
  11. Sicily 2014 Dairy Queen
  12. 激活码和注册码有什么不同?
  13. android三星s8底部菜单,三星Galaxy S8/S8+国行获更新:导航栏可隐藏/视野更宽阔
  14. ISP—图像调试实习生(第10天)
  15. 前端websocket和后端传输数据
  16. 什么是阿尔法(Alpha)收益、贝塔(Beta)收益
  17. ps基础入门2-图层样式
  18. Solr从数据库导入数据(DIH)
  19. 【黑马程序员】23种设计模式——UML图
  20. 初学素描需要准备的工具有哪些?新手必看!

热门文章

  1. 51nod 2497 数三角形
  2. [剑指offer] 34. 第一个只出现一次的字符
  3. spring boot 开发 提交form表单出错
  4. [BZOJ1072][SCOI2007]排列perm
  5. Palindrome Partitioning
  6. JAVA笔记18-容器之二增强的for循环(不重要)
  7. DNS原理及其解析过程(转)
  8. window.open使用
  9. SQL Server性能调优入门(图文版)
  10. UA PHYS515A 电磁理论V 电磁波与辐射9 简单辐射系统