数值分析1:三角函数的计算(C语言实现)

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

 

方法一:泰勒展开式学习

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

公式以下图所示:设计

 

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

 

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

 

方法二:拉格朗日插值法blog

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

 

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

 

 

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

 查看完整代码实现

相关文章
相关标签/搜索