3

私はPythonが初めてで、このシリーズを使用して正弦関数を近似しようとしています.

私のコードは次のようになります。

import math
def sin(x,n):
sine = 0
for i in range(n):
    sign = (-1)**i
    sine = sine + ((x**(2.0*i-1))/factorial(2**i-1))*sign
return sine

これは私が望んでいた答えを返しませんが、私は非常に混乱していて、間違いを見つけることができません...または、これについて完全に間違った方法で行っているだけかもしれません(私が言ったように、私は非常に新しいですPython およびプログラミング全般)。

このシリーズを考えると、pi を概算するために少し前に書かなければならなかったプログラムに似ているようです。

def piApprox(n):
pi = 0
for i in range(n):
    sign = (-1)**i
    pi = pi + 1.0/(2*i+1)*sign
return 4*pi

それが何らかの形で役立つかどうかはわかりませんが、正弦法を理解するためにそれを使用しようとしていたものです。これを修正したり、私を正しい方向に向けたりする助けがあれば、大歓迎です!

4

2 に答える 2

5

sin( x )のテイラー級数は次のとおりです。

sin(x) のテイラー級数

コードをその定義と比較すると、これら 2 つの部分にいくつかのエラーがあります。

x**(2.0*i-1)
factorial(2**i-1)

マイナスはプラスでなければならず、階乗の指数は乗算でなければなりません。

x**(2.0*i+1)
factorial(2*i+1)
于 2013-03-06T19:27:14.027 に答える
2

シンボリック ライブラリ SymPy を使用して、テイラー級数を使用して近似関数を作成できます。

from sympy import sin
from sympy.abc import x

# creates a generator
taylor_series = sin(x).series(n=None)

# takes the number of terms desired for your generator
taylor_series = sum([next(taylor_series) for i in range(num_of_terms)])

# creates a function that calculates the approximated sine function
mysin = sympy.lambdify((x,), taylor_series)
于 2013-09-25T11:58:27.410 に答える