我们知道任何收敛的函数都可以通过泰勒公式展开,通过这个思路我们便可以方便的对一些没有解析表达式的函数求解反函数,泰勒展开的相关知识可以翻阅信号与系统相关书籍。在这里举例计算反正弦函数。

我们知道反正弦函数的傅里叶展开为:

依据这个式子就可以编写求解反正弦函数的代码,第一段代码如下:

float arm_asin(float in)
{float result = in, result_a = 1.0f, result_b = 1.0f, result_c = 1.0f;unsigned int i = 0, ii = 0;for(i = 0; i < 10; i++){for(ii = 0; ii < (2 * i + 1); ii ++){result_a *= (float)(2 * ii + 1) / (float)(2 * ii + 2); result_b *= (in * in);}result_b *= in;result_c = result_a / (float)(ii + 2);result += (float)(result_c) * (float)result_b;result_a = 1.0f; result_b = 1.0f;}return result;
}

这段代码是完全按照计算式所得,但这样便遇到一个问题,那就是由于不同系统对浮点数运算的精度不同,会导致最终计算得到的精度出现较大的偏差。

从表达式里可以看出来,在多项式的第十项的时候其系数为0.00976160952919408000,此时计算反正弦值为0.5以内的时候,其精度为:0.00976160952919408000x0.5e21=4.6546981473894500732421875e-9,可见其精度还是很高的,但当反正弦值为1的时候,或非常接近1的时候,再看这个表达式,其精度就好打很大的折扣,再加上系统的精度损失则会很大程度上影响计算结果。

我在stm32f407vgt6单片机运行以上代码的结果如下:

================================================================

电脑计算器计算结果:arcsin(0.5) = 30

----------------------------------------------------------------------------------------------------------------

单片机计算结果a:arcsin(0.5)=29.870554(去泰勒展开前10项)

----------------------------------------------------------------------------------------------------------------

单片机计算结果b:arcsin(0.5)=29.870554(取泰勒展开前1024项)

================================================================

当然并不是没有办法提高其精度,一种简单的方法便是通过将系数预先计算出来做成数表,共系统查表,来降低由于系统计算所带来的精度损失,另一方面还可加快运行速度。

在实际应用用我们并不是这样在计算机中来计算一个表达式的结果的,对于对精度要求较高的场合更多的还是使用查表法来进行这种计算,在此不对这种方法进一步解释。

   
   
   

通过泰勒展开式计算反正弦函数相关推荐

  1. 用泰勒展开式(麦克劳林展开式)计算ln2(C++版本)

    公式一: (该图片来自网络) 本人在VS2017中,对于以1.0e-5为单位的误差下只能将误差精确到2.0e-5. 代码如下: #include<iostream> #include< ...

  2. 自动驾驶(十一)---------泰勒展开式、雅克比矩阵、主成分分析

    1.泰勒展开式 你可能会奇怪,讲自动驾驶怎么说起了数学,泰勒公式是我很喜欢的一个公式,自动驾驶中很多地方用到的是数学,只有把这些都弄明白,才能更好的理解自动驾驶,这也是我的探究过程. 泰勒公式一句话描 ...

  3. 正弦函数泰勒展开c语言,C++ 学习笔记_0012_函数(泰勒展开式、三角函数表)

    泰勒展开式 先听故事,再编程序.故事是这样的:话说sin和cos是一对夫妇.一天,sin去听相声了,cos在家.过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数.cos问:你是谁啊?他说: ...

  4. 如何理解泰勒展开式,他有何用途?

    一.泰勒展开思想的由来(也就是学习的时候老师讲的背景) 例如 sinx,conx,e^x函数,当x=2.3时,这个值等于多少,这些数据通常需要借助计算器才可以计算出来,而且只是得到一个近似值.因此数学 ...

  5. 数学之美—泰勒展开式

    1:背景 首先给大家介绍两位数学界泰斗:    麦克劳林,18世纪英国最具有影响的数学家之一.   他以熟练的几何方法和穷竭法论证了流数学说,还把级数作为求积分的方法,以几何形式给出了无穷级数收敛的积 ...

  6. 伯努利数、欧拉数与泰勒展开式

    伯努利数和正切函数泰勒展开式 1.伯努利数 2.欧拉数 3.自然幂指数和 4.tan⁡x\tan{x}tanx泰勒展开式 5. 程序应用与计算 参考 1.伯努利数 伯努利数是十八世纪瑞士数学家雅各布· ...

  7. python泰勒公式法求正弦函数_正弦函数两种泰勒展开式的比较

    正弦函数两种泰勒展开式的比较 张文华,汲守峰 [摘 要]摘要:讨论了正弦函数在两种不同情况下的泰勒公式展开式,并利用余项比较两种展开式 在近似计算中误差的大小区别,解释了正弦函数展开式中经常展开偶数项 ...

  8. 关于泰勒展开式的深刻理解

    看到了知乎上的深入浅出的解释: 链接稍后补上 我们先假设Taylor发明Taylor公式的原因是因为taylor想要很方便的计算 f(x) = cos x 的值,于是乎出现了下面的问题 我们不妨想一想 ...

  9. 指数函数泰勒展开式与泰勒展开公式

    如果我们用多项式去无限逼近一个函数,就是将某个函数在一个点上泰勒展开.  泰勒级数是把一个函数展开,化成次方项相加的形式,目的是用相对简单的函数去拟合复杂函数,此时相对简单是看你需要的,一阶指展开的次 ...

最新文章

  1. Function in loop and closure
  2. Zabbix 自定义Item经常Not Supported解决
  3. Python正则表达式之修改,分割,搜索和替换字符串(6)
  4. 移动端vue ui框架总结
  5. Java数组参考_Java数组
  6. js detect the type of device
  7. CentOS7下使用yum快速安装配置oracle数据库
  8. PS教您与粗壮的胳膊拜拜
  9. 机器博弈 (二) 遗憾最小化算法
  10. linux添加引导菜单,为CentOS 7添加win7的引导菜单(king测)
  11. google控制台使用
  12. web前端 html+css+javascript网页设计实例 企业网站制作
  13. 面向AMD64的文件xxx与项目的目标平台x86不兼容
  14. 怎么进行finebi下载
  15. RC电路的充放过程C语言实现,RC电路的瞬态和稳态过程
  16. 联合国发布2019年《世界人口展望》:人口老化加剧, 到本世纪末地球人口将达109亿...
  17. iOS之KVC原理自定义KVC
  18. python实现 把列表中数字0移动到末尾
  19. c语言检测邮箱地址,C语言实现电子邮件地址验证程序
  20. 毕马威计算机测试题,KPMG毕马威2019招聘最新在线测试cute数字文字逻辑推理答案及解析...

热门文章

  1. android 蓝牙 接收不完整,安卓蓝牙串口中InputStream数据接收不完整,已解决
  2. python 模型交叉验证法_使用交叉验证法(Cross Validation)进行模型评估
  3. 【C语言入门】--初识C语言
  4. ClickHouse类型转换函数
  5. ()逻辑与、()按位与运算、(||)逻辑或、(|)按位或运算
  6. 写一个python代码,实现在中国国家统计局的官网上收集近3年的GDP数据,然后将这些数据绘制到一个折线图上展示出来...
  7. sqlserver中rtrim函数跟ltrim函数的用法
  8. 怎么禁用计算机usb驱动程序,win7如何设置禁止自动识别和安装USB驱动程序
  9. suffix word ality ally an ancy ance an aneity out ~1
  10. 解决FLink:Missing required options are: slot.name