数值分析1:三角函数的计算(C语言实现)
之前学习C语言的时候,一直有个疑问,计算机从芯片设计的角度来看,只能计算常规的加减乘及移位之类的操作,那么对于像sin 、cos这些三角函数,人脑尚无可以直接运算的法则,那么计算机是怎么实现的呢?最近上了《数值分析》的课程,终于有点了解。
方法一:泰勒展开式
首先,相信大家都知道那个把我们搞得死去活来的”泰勒公式“,用文字来描述就是如果函数足够光滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。
公式如下图所示:
因此,像正弦函数这一类函数,最终都可以写成多项式的形式(在0点进行展开)。
为了求得精确值,n必须趋于无穷,但是要交给计算机来算的话,就必须进行截断,一般来说n取9既可,另外考虑到分子中带有指数函数,当x较大时,余项带来的误差必定比较大,而我们知道正弦函数是一个周期函数,且所有值都可以由[0,pi/4]间的函数值变换而来,因此在计算之前,我们先对要计算的数值根据诱导公式变换到[0,pi/4]区间上。
方法二:拉格朗日插值法
对于正弦函数,我们已知在[0,pi/4]区间上,当x分别为0、pi/6、pi/4、pi/3、pi/2点处对应的正弦值,那么,根据多项式插值法,已知5个点的函数值,我们可以构造唯一的4次多项式函数L(x)来逼近正弦函数,公式如下:
其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:
根据实验结果,其计算数值距离标准数学库计算出来的数值仍有一定的偏差,误差限为0.0005,我估计标准数学库是使用了更多点的插值法,因此结果比5点插值得来的更加准备一些,猜想正确与否,有待考证。
数值分析1:三角函数的计算(C语言实现)的更多相关文章
- 「学习记录」《数值分析》第二章计算实习题(Python语言)
在假期利用Python完成了<数值分析>第二章的计算实习题,主要实现了牛顿插值法和三次样条插值,给出了自己的实现与调用Python包的实现--现在能搜到的基本上都是MATLAB版,或者是各 ...
- 闰年计算——JavaScript 语言计算
㈠闰年是如何来的? 闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的.补上时间差的年份为闰年. ㈡什么是闰年? 凡阳历中有闰日(二月为二十九日)的年, ...
- n阶行列式计算----c语言实现(完结)
花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...
- 简单复利计算c语言实现
#include<stdio.h>#include<math.h>float i; //利率 float p; //期初金额 float F; //未来值 int n; //期 ...
- 复利计算C语言转java的相关代码
static void principal()// 计算本金 { int N, m; double i, F, P; System.out.printf("复利终值:"); F = ...
- P1028_数的计算(JAVA语言)
题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(0n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能 ...
- Python三角函数公式计算三角形的夹角
题目内容: 对于三角形,三边长分别为a, b, c,给定a和b之间的夹角C,则有:.编写程序,使得输入三角形的边a, b, c,可求得夹角C(角度值). 输入格式: 三条边a.b.c的长度值,每个值占 ...
- 三角函数计算,Cordic 算法入门
[-] 三角函数计算Cordic 算法入门 从二分查找法说起 减少乘法运算 消除乘法运算 三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来 ...
- (转)三角函数计算,Cordic 算法入门
由于最近要使用atan2函数,但是时间上消耗比较多,因而网上搜了一下简化的算法. 原帖地址:http://blog.csdn.net/liyuanbhu/article/details/8458769 ...
随机推荐
- c语言 列出-终止系统进程
#include <stdio.h> #include "stdafx.h" #include <Windows.h> #include <strin ...
- DataSet 中的数据排序 及 DataRow装成DataTable
1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...
- android--graphics
Color类 Constants |____BLACK, BLUE, CYAN Methods |____argb,rgb,alpha, red, green, blue |____parseColo ...
- Eclipse图标含义
学习了这么久,之前也没注意,这次在csdn找个了文章,记录一下: Eclipse的Package Explorer中用图标表示了很多内容,刚刚开始接触Eclipse时对这些图标表示的内容并不清楚,而且 ...
- C#调用API函数EnumWindows枚举窗口的方法
原文 http://blog.csdn.net/dengta_snowwhite/article/details/6067928 与C++不同,C#调用API函数需要引入.dll文件,步骤如下: 1. ...
- intro
懒得自己折腾wordpress又很想写博客. 作为一名把自己当成programmer的data scientist,毅然选择了博客园. 这里我想内容就是平时学到/使用的各种心得,更新频率不定. 兴趣范 ...
- c# 数据导出成excel 方法总结 见标红部分
public void ServiceOrderExport(string data) { StringBuilder sb = new StringBuilder(); Type entityTyp ...
- centos curl web站点监控实践
1,监控给定web站点的状态--站点请求返回代码,下载整个web站点页面文本到-o 指定的文本 curl -o /dev/null -s-silent -w--wirte-out "%{ht ...
- 商人过河问题(二)java实现
本文实现的java版商人过河是参考http://wenku.baidu.com/link?url=dpe2AC8mCjpGnclFv6iZy88_vqYm3bED4QDpSkAI4ssgs7Bhntu ...
- dojo demo, server验证username是否已经被使用
这个demo有助于理解JS与server的协同工作. 文档结构如上图. 主要是三个文件: main.js table.html validateUserName.jsp (代码见文章末尾) 页面打 ...