Taylor serisi sorunu

iyi günler python öğreniyorum, kullandığım kitapta bulunan taylor serisi işlev yöntemiyle yazılmasını alıştırma olarak verilmiş bunu yapmaya çalıştım.Ama yazdığım program doğru sonuç vermiyor kodlarımı kontrol ettim ama işin içinden çıkamadım. Yardımcı olursanız sevinirim. Matlab da sağlamada sin(3.14)=0.0016 çıkıyor ben pythonda adım=20 derece=3.14 girdiğimde sonuç=-0.9161585237990462 çıkıyor. Kodlamadaki hata nedir.

  while True:
       def faktor(a):
              i=1
              fak=1
              while (i<=a):
                   fak=fak*i
                   i=i+1
              return fak
      def usalma(b):
             i=0
             while (i<=b):
                   i=i+1
             return i
      def sinus(a,x):
              i=1
              e=0
              g=0
              while (i<=(2*x-3)):
                      e=e+((a)**usalma(i))/(faktor(i))
                      g=g+((a)**usalma(2+i))/(faktor(2+i))
                      i=i+5

              return e-g
      x=float(input('kaç birim gidilecek: '))
      a=float(input('bir sayı giriniz: '))![a|417x121](upload://vLjMHbvXZvPgh8mY5JK1fb8CRMs.png) 
      print(sinus(a,x))![a|417x121](upload://vLjMHbvXZvPgh8mY5JK1fb8CRMs.png)

usalma fonksiyonu tam olarak ne yapıyor? Sanki yapması gerekeni yapmıyor gibi.

x değişkeninin olduğu döngüde x^1/1! + x^3/3! gibi üstü olarak belirlemek istedim.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


def faktor(a):
    i = 1
    fak = 1
    while i <= a:
        fak *= i
        i += 1
    return fak


def sinus(a, x):
    i = 1
    e = 0
    g = 0
    while i <= (2 * x - 3):
        e += (a ** i) / faktor(i)
        g += (a ** (2 + i)) / faktor(2 + i)
        i += 5
    return e - g


while True:
    x = float(input('kaç birim gidilecek: '))
    a = float(input('bir sayı giriniz: '))
    snc = sinus(a,x)
    print(snc)

Kodu bu sekle çevirdim us alma gereksizdi galiba alma sonuç hala aynı.

Gönderinizdeki kodları düzenledim, isterseniz tekrardan deneyin.

sonuç yine aynı çıkıyor -0.91

Buradaki hesaplardan çok anlamıyorum ancak hangi fonksiyonun çıktısında sorun olduğunu bulursanız sorunu daha kolay bulursunuz. Hangi satır ya da satırların sorunlu olduğunu bulmak için ise hata ayıklama (debugging) yolunu kullanmanızı öneririm.

Kodun daha okunakli olabilmesi icin degiskenlere daha iyi isimler atanmasi gerekiyor. i, e, g, a, x'in hangisi ne yapiyor belli degil. (Degiskenlerin isimleri dogrudan bir formulden geliyorsa, o formulun de koda not veya link olarak yazilmasi lazim.)

Bu arada

i = 0
while i <= X:
    ...
    i += 1

yerine

for i in range(X+1):
    ...

kullanabilirsiniz. (1’den baslayacaksa range(1, X+1))