2017-11-04 4 views
1

私は引数としてxとnをとり、arctanを近似するためにTaylor級数和を使って次の関数を定義しました。また、関数がすべてのxに対して機能するように、内部に条件文を埋め込んでいます。私の反復をPythonの配列に格納する方法は?

0.7878981009052581

1.1071487177940906

1.2490457723982544

1.3258176636680326

1.373400766945015: インポート数学

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)) 

このコードは、反復を印刷します7

1.4056476493802696

1.4288992721907325

1.446441332248135

1.460139105621001

しかし、私は配列にxの値を格納できるようにしたい、と他に、これらの反復私は生成することができ配列からグラフを外します。 x = [1,2,3,4,5,6,7,8,9] y = [リストされた繰り返し]

これを行うにはどうすればよいですか?

ありがとうございました!

答えて

0

すべての反復で関数を再定義しないでください。この方法で、リストの理解を使用して "反復"リストを作成することができます。あなたはまた、xの値を格納するための理解を変更することができます

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)] 

、その後、iterationsリストの各要素はタプルになります:

iterations = [(x, arctan(x, 100)) for x in range(1, 10, 1)] 

ところで、numpyはすでにarctan機能があります。 numpy.arctan

1

だけXMAPymapの空の配列を初期化し、その中でappendにしてみてください。同様Yため

xmap = [] 
xmap.append(str(x)) 

:サンプルコードは次のようになります。

ymap = [] 
ymap.append(str(arctan(x,100))) 

は、ループのxmapymap外を初期化することを忘れないでください。コード全体を変更したい場合は、私に知らせてください。

更新 1D配列の完全なコード。

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 
+0

ご返信ありがとうございます! :)私は次のコードを試みた:XMAP = [] xmap.append(STR(X)) ymap = [] ymap.append(STR(逆正接(X、100))) 印刷(XMAP 、ymap)、1-d配列しか返しません....もし問題がなければ私のコードを修正してください。 –

+0

確かめてください!私はコードを変更することができます。しかし、あなたはあなたの期待される結果が何であるか教えてください。あなたの質問から私が理解できるのは、それが1D配列であるからです。 –

+0

ありがとうprashant私はそれがトリックをしたと思う! xとyの1次元配列を出力したいので、データ型をfloatに変更しました。 –

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) 
関連する問題