私はPythonを初めて勉強していて、私の仕事の一部で少し問題があります。πを7s.fに評価しようとしています。 arctan(x)からのTaylor系列近似の結果を使用します。 whileループで苦労している
まず、テイラー級数展開を使ってarctan(x)を近似する関数を定義しなければなりませんでした。
ここで、関数arctan(1)= pi/4を使ってpiを7sfに評価し、このレベルの精度に必要な反復回数Nを求めなければなりません。ここで
は私のテイラー展開のための私のコードは、(条件文が割り当ての別の部分のためにそこにある)である:
import math as mt
def TaylorExp (x,N):
if abs(x) <=1:
n=0.0
total = 0.0
while (n<N): #performs N iterations.
c = (((-1)**n)/((2*n)+1))*(x**((2*n)+1))
total += c
n += 1
return total
、ここでは7sfにパイを評価し、必要なNを見つけることを試みるために私のコードです:
i=0
z = 0
k=0
while ((format(k,'.6f'))!= (format(mt.pi,'.6f'))):
z = TaylorExp(1,i)
i += 1
k= z*4
print ('The value for pi found from arctan (1) is', format(k,'.6f'),' which is accurate to 7sf.')
print ('The number of iterations N required is: ',i, format(mt.pi, '.6f'))
それには、最大3つの小数点以下の桁数のためにすぐに動作しますが、5および6 DPのための4DPおよび時間/日分かかります。私はこれが非常に非効率的な方法だと理解していますが、かなり長い間、ループなどで試していました。私はTaylorExp関数を使ってより高速なメソッドを見つけることができず、どんな助けにも大いに感謝します。
それは何とかしないと意味がありません長い間あなたのコードを細かい部分に分割して、遅延がどこから来ているかを調べます。 –
小数点以下5桁の場合は、1,000,000回の繰り返しで1秒かかりますが、非常に遅く収束しているようです。 –