这个问题的范围很广,但这里有一些简单的想法(和代码!)这可能是计算arctan的起点。首先,好的老泰勒级数。为了简单起见,我们使用固定数量的术语;实际上,您可能需要根据x的大小来决定要动态使用的术语数量,或者引入某种收敛准则。在固定数量的条件下,我们可以使用类似于霍纳方案的方法有效地进行评估。在def arctan_taylor(x, terms=9):

"""

Compute arctan for small x via Taylor polynomials.

Uses a fixed number of terms. The default of 9 should give good results for

abs(x) < 0.1. Results will become poorer as abs(x) increases, becoming

unusable as abs(x) approaches 1.0 (the radius of convergence of the

series).

"""

# Uses Horner's method for evaluation.

t = 0.0

for n in range(2*terms-1, 0, -2):

t = 1.0/n - x*x*t

return x * t

上面的代码对于较小的x(比如说在绝对值中小于0.1),但是随着x变大,精度下降;对于abs(x) > 1.0,无论我们向它扔多少项(或多高的精度),序列永远不会收敛。所以我们需要一种更好的方法来计算更大的x。一种解决方案是通过标识arctan(x) = 2 * arctan(x / (1 + sqrt(1 + x^2)))使用参数缩减。这给出了以下代码,该代码构建在arctan_taylor上,为范围广泛的x提供合理的结果(但是在计算x*x时要注意可能的溢出和下溢)。在

^{pr2}$

或者,给定tan的现有实现,您可以简单地使用传统的根查找方法找到方程tan(y) = x的解{}。由于arctan已经自然地被限定在区间(-pi/2, pi/2),所以对分搜索效果很好:

^{3}$

最后,为了好玩,这里有一个类似CORDIC的实现,它确实比Python更适合于低级实现。这里的想法是,您可以一次性地预计算1,1/2,1/4,等的arctan值表,然后使用这些值来计算一般的arctan值,基本上是通过计算真实角度的连续近似值。值得注意的是,在预计算步骤之后,arctan计算只涉及2的幂次加法、减法和乘法。(当然,这些乘法并没有比Python级别上的任何其他乘法更有效,但是更接近于硬件,这可能会产生很大的差异。)cordic_table_size = 60

cordic_table = [(2**-i, math.atan(2**-i))

for i in range(cordic_table_size)]

def arctan_cordic(y, x=1.0):

"""

Compute arctan(y/x), assuming x positive, via CORDIC-like method.

"""

r = 0.0

for t, a in cordic_table:

if y < 0:

r, x, y = r - a, x - t*y, y + t*x

else:

r, x, y = r + a, x + t*y, y - t*x

return r

上面的每一种方法都有它的优点和缺点,上面所有的代码都可以通过多种方式进行改进。我鼓励你去尝试和探索。在

总而言之,与标准库math.atan函数的输出相比,以下是对少量未经仔细选择的测试值调用上述函数的结果:test_values = [2.314, 0.0123, -0.56, 168.9]

for value in test_values:

print("{:20.15g} {:20.15g} {:20.15g} {:20.15g}".format(

math.atan(value),

arctan_taylor_with_reduction(value),

arctan_from_tan(value),

arctan_cordic(value),

))

我的机器上的输出:1.16288340166519 1.16288340166519 1.16288340166519 1.16288340166519

0.0122993797673 0.0122993797673 0.0122993797673002 0.0122993797672999

-0.510488321916776 -0.510488321916776 -0.510488321916776 -0.510488321916776

1.56487573286064 1.56487573286064 1.56487573286064 1.56487573286064

python中的反三角函数_用公式计算反三角函数相关推荐

  1. python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号...

    神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号 更多相关问题 下图表示几个植物类群的进化关系.下列叙述不正确的是[ ]A.最先出现的植物类群是甲B.乙和丙都是由甲进化来的 ...

  2. python基础教程:Python中利用sqrt()方法进行平方根计算的教程

    这篇文章主要介绍了Python中利用sqrt()方法进行平方根计算的教程,是Python学习的基础知识,需要的朋友可以参考下 sqrt()方法返回x的平方根(x>0). 语法 以下是sqrt() ...

  3. 2sin30°在python中如何表示_如何在python中实现以下派生公式?

    我尝试在python中实现以下关于X和Y点的公式 我尝试过以下方法def f(c): """This function computes the curvature of ...

  4. 感知器及其在python中的实现_感知器及其Python实现

    感知器是由美国计算机科学家罗森布拉特(F.Roseblatt)于1957年提出的.感知器可谓是最早的人工神经网络.单层感知器是一个具有一层神经元.采用阈值激活函数的前向网络.通过对网络权值的训练,可以 ...

  5. python中取整求余的计算步骤

    预备知识:取整分为向上取整.向下取整.向零取整. 首先必须知道 x%y等价于x-(( x//y ) * y )  ,这就是一个公式!!  这个x//y意思是x对y取整 比如python中(是向下取整, ...

  6. python中 什么意思_请问python中%代表什么意思?

    婷婷同学_ 1.格式符例如:a = 'test'print 'it is a %s' %(a)打印的结果就是 it is a test2.单独看%,是一个运算符号,求余数.例如:求模运算,相当于mod ...

  7. python中取整函数_如何使用python中的取整floor函数?

    如果一工程通过公式计算得出需要7.1辆汽车,直接取整成7辆肯定是完不成任务的,所以只有向上舍入成8才可以,即取整成7,再加1.取整加1,就是向上舍入成整数.相反,如果取整减1,那就是向下舍入成整数,即 ...

  8. lambda在python中的用法_在python中对lambda使用.assign()方法

    我在Python中运行以下代码:#Declaring these now for later use in the plots TOP_CAP_TITLE = 'Top 10 market capit ...

  9. 正则表达式在python中的应用_学习正则表达式在python中的应用

    目的:对文本的处理,正则表达式的功能很强大,可以很巧妙的过滤.匹配.获取想要的字符串,是必须学习的技能,这里只记录常用的写法,详细文档可以参看官方帮助文档. 环境:ubuntu 16.04 pytho ...

  10. python 中arange函数_浅谈Python中range与Numpy中arange的比较

    本文先比较range与arange的异同点,再详细介绍各自的用法,然后列举了几个简单的示例,最后对xrange进行了简单的说明. 1. range与arange的比较 (1)相同点:A.参数的可选性. ...

最新文章

  1. android 事件传递机制
  2. Qt5.5.1移植到freescale imx6
  3. 统计机器学习第二章 感知机
  4. 电脑服务器不稳定怎么办,网速不稳定怎么办? 网速不稳定的原因与解决办法-电脑教程...
  5. FreeBSD 9.1安装KMS 这是一个伪命题###### ,9....
  6. zcmu4959: ly的新闹钟(有个点容易忽略)
  7. 657. Robot Return to Origin 机器人能否返回原点
  8. Oracle中类似于isql或osql的命令行工具
  9. jquery学习之路jquery之一:jquery选择元素的方法,太神了 2012.8.2
  10. 大讲堂专访丨连接Oracle DBA与开发的桥梁:Oracle的redo与undo
  11. 写在通用权限管理系统销售200套,从刚开始求人家用到人家主动索取,写一下亲身感受...
  12. Crackme015
  13. html5中左浮动怎么写代码,html浮动详解(代码实例)
  14. 摘自韩寒博客《砰然心动》
  15. 软件工程毕业设计题目合集【含源码+论文】
  16. java poi框架导出excel如何插入特殊字符(复选框勾选)
  17. 互联网日报 | 1月27日 星期三 | 支付宝集五福活动2月1日开启;华为否认“出售手机业务”传闻;中国联通自有手机品牌发布...
  18. matlab求极限分布,中心极限定理的Matlab演示
  19. spark的作业提交流程
  20. 【附源码】计算机毕业设计JAVA自动化办公系统

热门文章

  1. java青蛙跳井_数学运算归纳
  2. 做好目标管理和任务管理,提高办公协同效率
  3. en结尾的单词_以en结尾的形容词
  4. 计算机辅助药物设计的心得,计算机辅助药物设计实验的探索与心得.doc
  5. Blender简单建模
  6. 软件测试需求分析方法
  7. 欧美大脑计划存在的问题和忽视的一个重要元素,互联网大脑计划系列三
  8. 爬取34万专栏文章:304篇10K+高赞文章汇总
  9. 南阳oj The Triangle
  10. 雪の华 雪之华——不可不玩的好游戏(繁体中文版,附攻略、下载、歌词)...