zoukankan      html  css  js  c++  java
  • 数值分析1:三角函数的计算(C语言实现)

    之前学习C语言的时候,一直有个疑问,计算机从芯片设计的角度来看,只能计算常规的加减乘及移位之类的操作,那么对于像sin cos这些三角函数,人脑尚无可以直接运算的法则,那么计算机是怎么实现的呢?最近上了《数值分析》的课程,终于有点了解。

     

    方法一:泰勒展开式

    首先,相信大家都知道那个把我们搞得死去活来的”泰勒公式“,用文字来描述就是如果函数足够光滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。

    公式如下图所示:

     

    因此,像正弦函数这一类函数,最终都可以写成多项式的形式(在0点进行展开)。

     

    为了求得精确值,n必须趋于无穷,但是要交给计算机来算的话,就必须进行截断,一般来说n9既可,另外考虑到分子中带有指数函数,当x较大时,余项带来的误差必定比较大,而我们知道正弦函数是一个周期函数,且所有值都可以由[0,pi/4]间的函数值变换而来,因此在计算之前,我们先对要计算的数值根据诱导公式变换到[0,pi/4]区间上。

     

    方法二:拉格朗日插值法

    对于正弦函数,我们已知在[0,pi/4]区间上,当x分别为0pi/6pi/4pi/3pi/2点处对应的正弦值,那么,根据多项式插值法,已知5个点的函数值,我们可以构造唯一的4次多项式函数L(x)来逼近正弦函数,公式如下:

     

    其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:

     

     

    根据实验结果,其计算数值距离标准数学库计算出来的数值仍有一定的偏差,误差限为0.0005,我估计标准数学库是使用了更多点的插值法,因此结果比5点插值得来的更加准备一些,猜想正确与否,有待考证。

     查看完整代码实现

     

     

  • 相关阅读:
    Junit初级编码(一)第一个Junit测试程序
    关于健身与健美
    spring入门(一)
    HTTP状态301、404、200、304分别表示什么意思
    预处理prepareStatement是怎么防止sql注入漏洞的?
    详解SESSION与COOKIE的区别
    Form表单中method为get和post的区别
    tomcat服务器配置及使用
    ubuntu 14.04 安装mysql server初级教程
    《电路学习第三天》 之 线性稳压电源的设计
  • 原文地址:https://www.cnblogs.com/chaofeng/p/3579340.html
Copyright © 2011-2022 走看看