我已经定义了以下函数,该函数将x和n作为参数,使用泰勒级数求和来近似arctan。我还在里面嵌入了一个条件语句,因此该函数适用于所有x。 导入数学
import math
for x in range(1,10,1):
def arctan(x, n):
arctang=0
inv_x=1/x
for i in range(n):
sign=(-1)**i
arctang = arctang + ((inv_x**(2.0*i+1))/(2.0*i+1))*sign
if x>0:
arc_tan=(math.pi/2)-arctang
else:
arc_tan=-(math.pi/2)-arctang
return arc_tan
print(arctan(x,100))
此代码打印迭代:
0.7878981009052581
1.1071487177940906
1.2490457723982544
1.3258176636680326
1.3734007669450157
1.4056476493802696
1.4288992721907325
1.446441332248135
1.460139105621001
但是我希望能够将x值存储到数组中,并将这些迭代存储到另一个数组中,这样我就可以从数组中生成一个图形,即: 沿着x = [1,2,3,4,5,6,7,8,9] y = [列出的迭代]
的行我应该怎么做呢?
谢谢!
答案 0 :(得分:1)
只需初始化 xmap 和 ymap 的空数组,然后尝试append
。示例代码如下所示:
xmap = []
xmap.append(str(x))
同样适用于 y 。
ymap = []
ymap.append(str(arctan(x,100)))
不要忘记在循环外部初始化xmap
和ymap
。如果您希望我修改整个代码,请告诉我。
<强>更新强> 一维数组中的完整代码。
import math
xmap = []
ymap = []
for x in range(1,10,1):
def arctan(x, n):
arctang=0
inv_x=1/x
for i in range(n):
sign=(-1)**i
arctang = arctang + ((inv_x**(2.0*i+1))/(2.0*i+1))*sign
if x>0:
arc_tan=(math.pi/2)-arctang
else:
arc_tan=-(math.pi/2)-arctang
return arc_tan
xmap.append(str(x))
ymap.append(str(arctan(x,100)))
x = xmap
y = ymap
print "x= ",x
print "y= ",y
答案 1 :(得分:0)
不要在每次迭代中重新定义函数。这样您就可以使用列表推导来创建&#34;迭代&#34;列表。
M_Gn_Desk
您可以将理解更改为还存储import math
def arctan(x, n):
arctang = 0
inv_x = 1/x
for i in range(n):
sign=(-1) ** i
arctang = arctang + ((inv_x ** (2.0 * i + 1)) / (2.0 * i+1)) * sign
if x>0:
arc_tan = (math.pi / 2) - arctang
else:
arc_tan = -(math.pi / 2) - arctang
return arc_tan
iterations = [arctan(x, 100) for x in range(1, 10, 1)]
的值,然后x
列表的每个元素都将成为元组:
iterations
顺便说一下,iterations = [(x, arctan(x, 100)) for x in range(1, 10, 1)]
已经有numpy
函数:numpy.arctan
。
答案 2 :(得分:0)
为什么不对arctan()
本身进行矢量化?
def varctan(x, n):
inv_x = 1/x
signs = numpy.empty((len(x), n))
signs[:, ::2] = 1
signs[:, 1::2] = -1
exprange = 2.0 * numpy.arange(n)[None, :] + 1
signs *= (inv_x[:, None] ** exprange) / (exprange)
arctang = numpy.sum(signs, axis=1)
arctang *= -1
arctang[x > 0] += numpy.pi / 2
arctang[~x > 0] -= numpy.pi / 2
return arctang
varctan(numpy.arange(1, 10), 100)