Uzun süredir sitede aktif değildim , içimden bir ses artık bir şeyler yazmam gerektiğini söylüyor.
Mikrodenetleyicim için C dilini kullanarak doğal logaritmayı hızlı bir şekilde hesaplayan algoritma yazmaya çalışıyorum.İntegral kullanarak bu işi şu şekilde yapabiliyorum :
1.Doğal logaritmayı integral ile yazabiliriz :
∫c1dxx=ln(c)
2.Bu integrali C dilinde de hesaplayabilmek için
x−1 fonksiyonunun ,
[1,c] aralığındaki
x ekseni ile arasında kalan alanı bulmamız gerekir.Bu alanı parçalara ayırarak (sınırlı sayıda parça) yaklaşık alanı hesaplayabiliriz.
f(x)=x−1 ve
n∈Z+ olmak üzere bu alanı
10n parçaya ayırırsak , bu parçaların alanları toplamını :
ln(c)≈[110n][f(1+(c−1)10n)+f(1+2(c−1)10n)+f(1+3(c−1)10n)+⋯+f(c)]
şeklinde yazabiliriz.Bu toplamı , toplam sembolü ile gösterirsek :
ln(c)≈10n∑k=1110n+k(c−1)
3. Bu ifadeyi C ' de aşağıdaki gibi yazabiliriz ;
double dogal_logaritma(double deger , int n_sayisi)
{
double sonuc = 0 ;
for(k=1;k<(10^n_sayisi)+1;k++)
{
sonuc += (double)1/((10^n_sayisi)+k*(deger-1))
}
return(sonuc) ;
}
4. n değeri arttırıldığında daha doğru sonuçlar alınabiliyor.Tabi bu durumda işlem süreside uzuyor.
n=4 ve
deger=50 için toplam işlem süresi
3−4 saniye civarında.
Benim yapmak istediğim bu süreyi kısaltmak ve gerçek değere daha yakın değerler bulmak.Bunun içinde yeni bir hesaplama yolu geliştirmek gerekiyor.Sizce bunu nasıl yapabilirim ?