计算器是如何计算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等科学函数的值呢?相关推荐
- 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 ...
- 物竞用计算机,科学函数计算器成为秘密武器?物竞导师是这么说的
我是一名物理竞赛培训老师,教授物理已经有很多年了.早在自己初中开始便于物理结缘,到参加物理竞赛,工作后又开始教授学生们物理知识,我与物理之间好像就是有着神奇的缘分. 因为自己经历过,所以我对物理教学产 ...
- Android 计算器 sin cos tan 值问题
接到一个需求 :要求计算器sin90=1,拿到知道很疑问 难道不等以一么?测试了四五个手机 ,有的满足,有的sin90=0.8939-.查了api文档后发现 jdk中Math.sin/cos/tan ...
- android动画sin cos,Android开发中计算器的sin、cos及tan值计算问题分析
本文实例讲述了Android开发中计算器的sin.cos及tan值计算问题.分享给大家供大家参考,具体如下: 接到一个需求 :要求计算器sin90=1,拿到知道很疑问 难道不等于一么?测试了四五个手机 ...
- 带exp在线计算机计算器使用,电脑系统自带科学计算器使用方法
<电脑系统自带科学计算器使用方法>由会员分享,可在线阅读,更多相关<电脑系统自带科学计算器使用方法(2页珍藏版)>请在人人文库网上搜索. 1.电脑的科学计算器函数名:ln在数学 ...
- xilinx vivado 2019 cordic ip 计算sin cos
目录 一.Cordic IP简介 二.Sin 和 Cos 三.Example重点解释 一.Cordic IP简介 VIVADO中,cordic是一个实现通用坐标旋转计算的IP核,在进行数字信号处理时常 ...
- python怎么算反三角函数_python弧度制转换 三角函数 反三角函数 双曲 反双曲 sin cos tan asin acos atan asinh acosh atanh atanh2...
前提:import math 函数介绍: degrees(x)将x从弧度转换为度数. radians(x)将x从度数转换为弧度. 例如: >>> import math >&g ...
- python弧度制转换 三角函数 反三角函数 双曲 反双曲 sin cos tan asin acos atan asinh acosh atanh atanh2
前提:import math 函数介绍: degrees(x) 将x从弧度转换为度数. radians(x) 将x从度数转换为弧度. 例如: >>> import math ...
- 【vivado IP核学习】DDS complier v6.0使用“SIN/COS LUT only”
DDS complier v6.0使用 根据使用需求,设置dds格式为 "sin cos lut only",赛灵思官方dds IP的说明文档对该模式的描述如下: When con ...
最新文章
- 【试验】三个用于日常监控开发库与对应测试库的存储过程
- unity三维地图的经纬度如何在二维地图上表示_接入C++版本recastnavigation寻路库到Unity/服务端中...
- (零)ubuntu下制作最小deb包
- 测试面试题集-Python三局两胜小游戏
- 我有机器人合体成一个大力神_变形金刚动漫人物:狂派霸天虎挖地虎合体金刚-大力神...
- SharePoint 2010开发实例精选——通过客户端对象模型删除页面上的Web部件
- ExtJS简介--车辆调度
- 出现( linker command failed with exit code 1)错误总结
- 数据连接池的工作原理
- Java8 Lambda表达式教程
- Sicily 2014 Dairy Queen
- 激活码和注册码有什么不同?
- android三星s8底部菜单,三星Galaxy S8/S8+国行获更新:导航栏可隐藏/视野更宽阔
- ISP—图像调试实习生(第10天)
- 前端websocket和后端传输数据
- 什么是阿尔法(Alpha)收益、贝塔(Beta)收益
- ps基础入门2-图层样式
- Solr从数据库导入数据(DIH)
- 【黑马程序员】23种设计模式——UML图
- 初学素描需要准备的工具有哪些?新手必看!