python中的反三角函数_用公式计算反三角函数
这个问题的范围很广,但这里有一些简单的想法(和代码!)这可能是计算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中的反三角函数_用公式计算反三角函数相关推荐
- python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号...
神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号 更多相关问题 下图表示几个植物类群的进化关系.下列叙述不正确的是[ ]A.最先出现的植物类群是甲B.乙和丙都是由甲进化来的 ...
- python基础教程:Python中利用sqrt()方法进行平方根计算的教程
这篇文章主要介绍了Python中利用sqrt()方法进行平方根计算的教程,是Python学习的基础知识,需要的朋友可以参考下 sqrt()方法返回x的平方根(x>0). 语法 以下是sqrt() ...
- 2sin30°在python中如何表示_如何在python中实现以下派生公式?
我尝试在python中实现以下关于X和Y点的公式 我尝试过以下方法def f(c): """This function computes the curvature of ...
- 感知器及其在python中的实现_感知器及其Python实现
感知器是由美国计算机科学家罗森布拉特(F.Roseblatt)于1957年提出的.感知器可谓是最早的人工神经网络.单层感知器是一个具有一层神经元.采用阈值激活函数的前向网络.通过对网络权值的训练,可以 ...
- python中取整求余的计算步骤
预备知识:取整分为向上取整.向下取整.向零取整. 首先必须知道 x%y等价于x-(( x//y ) * y ) ,这就是一个公式!! 这个x//y意思是x对y取整 比如python中(是向下取整, ...
- python中 什么意思_请问python中%代表什么意思?
婷婷同学_ 1.格式符例如:a = 'test'print 'it is a %s' %(a)打印的结果就是 it is a test2.单独看%,是一个运算符号,求余数.例如:求模运算,相当于mod ...
- python中取整函数_如何使用python中的取整floor函数?
如果一工程通过公式计算得出需要7.1辆汽车,直接取整成7辆肯定是完不成任务的,所以只有向上舍入成8才可以,即取整成7,再加1.取整加1,就是向上舍入成整数.相反,如果取整减1,那就是向下舍入成整数,即 ...
- lambda在python中的用法_在python中对lambda使用.assign()方法
我在Python中运行以下代码:#Declaring these now for later use in the plots TOP_CAP_TITLE = 'Top 10 market capit ...
- 正则表达式在python中的应用_学习正则表达式在python中的应用
目的:对文本的处理,正则表达式的功能很强大,可以很巧妙的过滤.匹配.获取想要的字符串,是必须学习的技能,这里只记录常用的写法,详细文档可以参看官方帮助文档. 环境:ubuntu 16.04 pytho ...
- python 中arange函数_浅谈Python中range与Numpy中arange的比较
本文先比较range与arange的异同点,再详细介绍各自的用法,然后列举了几个简单的示例,最后对xrange进行了简单的说明. 1. range与arange的比较 (1)相同点:A.参数的可选性. ...
最新文章
- android 事件传递机制
- Qt5.5.1移植到freescale imx6
- 统计机器学习第二章 感知机
- 电脑服务器不稳定怎么办,网速不稳定怎么办? 网速不稳定的原因与解决办法-电脑教程...
- FreeBSD 9.1安装KMS 这是一个伪命题###### ,9....
- zcmu4959: ly的新闹钟(有个点容易忽略)
- 657. Robot Return to Origin 机器人能否返回原点
- Oracle中类似于isql或osql的命令行工具
- jquery学习之路jquery之一:jquery选择元素的方法,太神了 2012.8.2
- 大讲堂专访丨连接Oracle DBA与开发的桥梁:Oracle的redo与undo
- 写在通用权限管理系统销售200套,从刚开始求人家用到人家主动索取,写一下亲身感受...
- Crackme015
- html5中左浮动怎么写代码,html浮动详解(代码实例)
- 摘自韩寒博客《砰然心动》
- 软件工程毕业设计题目合集【含源码+论文】
- java poi框架导出excel如何插入特殊字符(复选框勾选)
- 互联网日报 | 1月27日 星期三 | 支付宝集五福活动2月1日开启;华为否认“出售手机业务”传闻;中国联通自有手机品牌发布...
- matlab求极限分布,中心极限定理的Matlab演示
- spark的作业提交流程
- 【附源码】计算机毕业设计JAVA自动化办公系统