Taylor serisi ile denemeler

Mikro Step

Kıdemli Üye
Katılım
25 Eylül 2022
Mesajlar
5,895
1708863491334.png
 
Son düzenleme:
Python için (ve başka programlama dilleri için de) "arbitrary precision math" denen kütüphaneler var. Mesela python için mpmath var. Bununla virgülden sonra istediğin sayıda basamağa kadar işlem yapabilirsin.
 
Su siralar benzer hesaplamalari hesap makinesi ile yapmaktan gina geldi. Delphi de yeterli sayida basamakta sonuc vermiyor.

Pythonu bir ara kullanmis ama gicik olmus ve ne var ne yok silmistim. (Sildim diye hatirliyorum)

Simdi tekrar kursam iyi olur ama neyi nerden kuracagimi hatirlamiyorum.

Ui tasarimla isim yok konsoldan bana sonuc vermesi yeterli. Bu mpmathi kosturmak icin minimum ne yuklemem lazim? Nerden yukleyecegim?
 
Amacim 0..pi/2 araligindaki sinus degerlerini olabildigince dogru hesaplayabilmek icin seriyi nerde acmaliyim sorusuna cevap arayacagim.

Mantigim pi/4 de acmaliyim diyor ve dusuncemi test etmek istiyorum.

Deneysel calisma yerine matematiksel ispati yapabilecek varsa da dinlemek isterim.

Ya da gene bir tablo hazirlayip belli acilarin sin cos degerlerini saklayip, istenen aciya en yakin tablo elemani ile o nokta civarinda acilim yapmak da belki en guzel cozum olabilir.

Cordic varken neden buna ihtiyacim var?

Zevk meselesi.
 
Son düzenleme:
Mesela burada π sayısını tamamen keyfi olarak 500 basamağa kadar yazdırıyorum

Python:
[ta@bonsai ~]$ python3
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mpmath
>>> mpmath.mp.dps = 500
>>> print(mpmath.mp.pi)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491
>>>
 
En rahatı PyCharm ile çalışmak. Birçok şeyi otomatize ediyor, hatalarını çözmede yardımcı oluyor ve kod kalitesi konusunda da tavsiyelerde bulunuyor. Ben de öğreniyorum python ve bunu kullanıyorum.
 
Tamam sagolasin. Nihayet ben de calistirdim. Simdi isler daha kolaylasacak.

import mpmath
mpmath.mp.dps = 100
print(mpmath.sin(mpmath.pi/4))

0.7071067811865475244008443621048490392848359376884740365883398689953662392310535194251937671638207864

Process finished with exit code 0
 
Simdi hangisine guvenecegim.

Profesyonel hesap makinesi ve python ile .1 radyanin sin degerlerini hesaplattim.

0.0998334166468281523068141984106220269899153880179822599927668620 Calculator
0.0998334166468281578301968678586166677359655721343701541459880671 Python

Ote yandan Taylor serisi ile 6 terimi hesaplattigimda buldugum sonuc Calculatoru onayliyor.

Python hatali sonuc veriyor gibi duruyor (?)
 
Karekok 2
1.4142135623730950488016887242096980785696718753769480731766797380 calculator
1.4142135623730950488016887242096980785696718753769480731766797379 python

ln 2
0.6931471805599453094172321214581765680755001343602552541206800094 calculator
0.6931471805599453094172321214581765680755001343602552541206800090 python

e
2.7182818284590452353602874713526624977572470936999595749669676280 calculator
2.7182818284590452353602874713526624977572470936999595749669676277 python

pi
3.1415926535897932384626433832795028841971693993751058209749445920 calculator
3.1415926535897932384626433832795028841971693993751058209749445923 python

e^pi
23.1406926327792690057290863679485473802661062426002119934450464100calculator
23.1406926327792690057290863679485473802661062426002119934450464095 python

e/pi
0.8652559794322650872177747896460896174287446239085155394543302890 calculator
0.8652559794322650872177747896460896174287446239085155394543302889 python
 
Kodda bir hata var herhalde. Şimdi ChatGPT efendiye şu kodu yazdırdım birebir senin sonuç çıkıyor.

Python:
#!/usr/bin/python3

import mpmath

# Set the precision to 100 digits
mpmath.mp.dps = 100

# Define the angle in radians
angle_radians = mpmath.mpf('0.1')  # Example angle

# Taylor series calculation of sine
def sine_taylor_series(x, n_terms=20):
    sine = 0
    for n in range(n_terms):
        term = ((-1)**n) * (x**(2*n + 1)) / mpmath.factorial(2*n + 1)
        sine += term
    return sine

# Calculate sine using the Taylor series
sine_taylor = sine_taylor_series(angle_radians)

# Calculate sine using mpmath's sine function for comparison
sine_mpmath = mpmath.sin(angle_radians)

print(sine_taylor)
print(sine_mpmath)
 
Çıkan sonuç

Bash:
[ta@bonsai ~]$ ./a.py
0.09983341664682815230681419841062202698991538801798225999276686156165174428329242760966244350513360876
0.09983341664682815230681419841062202698991538801798225999276686156165174428329242760966244380406303627
[ta@bonsai ~]$
[
 
Sorun anlasildi. 0.1 yerine mpmath.mpf('0.1') yazmak gerekiyormus.

0.1 sayisi tek basina bu isler icin yeterli hassasiyeti vermiyormus.
 
Son düzenleme:
Bazı değerlerde çok yakın sonuç verse de bazı değerlerde çok farklı değerler verir, bunu yavaş yavaş saydırarak bulabilirsin.
Bir dizi oluştur n! yanına bir sayı topla n!+1255 gibi her derece için mesela 180 tane değer olsun, tabi bi öneri, hata payını düşürmek için.

Aslında bu da çok küçük bir kod ilk başta X^2 hesaplanır değişkene konulur X sayısı ile sürekli çarpılı, faktoriyeller ise hafızaya yüklenir tekrar heseplamaya gerek yok , çordikten az kalır yanı yok.
 
Cordic kadar hizli olamaz. Cunku Taylor serisinde acaip bit uzunluklariyla islem yapman lazim.

Mesela 1/11! sayisini ikili sistemde bir yazmayi dene. Bunu x^11 degeri ile carpmaya kalktiginda MCU nun ne kadar yorulacagini dusun.

Taylorun guzelligi cik dagin basina yanina sadece kagit ve kalem al. Istedigin acinin sin cos, tan, ln, exp ne istiyorsan hesapla. Yeter ki 4 islem yapmayi bil.

Cordicte sana bir tablo lazim. O tabloyu doldurmak icin de hesap makinesi lazim.
 
Float toplama çarpma yavaş değil ki . Mesela yazdığım başka konularda floattan inte döndüğümde çok hız farkı görmedim.

interntte bulamadım kaç cycle ama çok değildi , tabi dijital fpga olarak düşünsek long işlemleri için optimizasyonlar yapılabilir floatta olmaz.

Yanlız hatırladığım kadarıyla sin cos baya yavaştı hele ki atan , sqrt hızlıydı.
 
Floating point donanimi ile yapacagin hesaplama sonucunda elde edecegin degerdeki dogruluk ne kadar olacak?

Kendi algoritmamda 30 bit dogruluk elde edebilmek icin 64 bit islem yapmak zorunda kaldim. FPU da da benzer sorun yasayacaksin.

Mesela 0.123456789^7+0.123456789 sonucunu bir hesapla. FPU sana ne kadar yardimci olacak?

=0.123457226124189620885610010004822109262358637075660656881926429...
 
Bu taylor serisinin üçer üçer farklı float değişkeninde toplayıp en son bu değerleri toplarsın o zaman olur. fpu 80bitti diye hatırlıyorum kendi içinde işlemler double.
 
Dene bakalim sin(0.1) sonucunu noktadan sonra kac basamaga kadar bulabileceksin?
Bu yuzden yukarida onerilen kutuphaneye gecmek zorunda kaldim.

FP unitesine sin hesaplat. Bir de taylor serisi ile gene FP unitesi ile carp topla yaptirarak olabildiginde en kucuk hata ile sen hesaplat. Gerekiyorsa terim sayisini 50 yap 100 yap.

Terim sayisini artirdigin halde arada fark gorursen bu hata Taylordan degil FPU unitesinin bit yetersizliginden den gelecek.

Hata yapmiyorsam,

integer 1 biti saymiyorum;

80 bit FPU 64 Bit mantis var. En iyimser durumda 2^-64 yani 5*10^-20 ile sinirlisin.

Bu da carpma topla islemlerinde 2*10^-10 ile sinirlisin demek.
 
Son düzenleme:
Kitaplarda Taylor serisinde hata terimi icin genellikle bir formul verilir alin bunu kullanin denir.

Fuat Serkan Orhan yalnis bilmiyorsam kendisi tekstil muhendisi. Bir muhendis matematige bu kadar mi hakim olur? Bu arkadasimiz videolarindan birisinde hata teriminin nasil formulize edildigini anlatti.

Videodan olusturacagim notu forumun latex ozelliginden yararlanarak not haline getirip daha sonra da baskisini alarak not defterimde saklayacagim. Dolayisi ile notun digital kopyasi da burda kalmis olacak.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,950
Mesajlar
118,721
Üyeler
2,822
Son üye
lalemasall

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top