C ' de Doğal Logaritmayı Hesaplamak

0 beğenilme 0 beğenilmeme
439 kez görüntülendi
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 :

$$\int_1^c\:\frac{dx}{x}=\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\in\mathbb{Z}^+$ olmak üzere bu alanı $10^n$ parçaya ayırırsak , bu parçaların alanları toplamını :

$$\ln(c)\approx\Bigg[\frac{1}{10^n}\Bigg]\Bigg[f\Bigg(1+\frac{(c-1)}{10^n}\Bigg)+f\Bigg(1+\frac{2(c-1)}{10^n}\Bigg)+f\Bigg(1+\frac{3(c-1)}{10^n}\Bigg)+\cdots+f(c)\Bigg]$$

şeklinde yazabiliriz.Bu toplamı , toplam sembolü ile gösterirsek :

$$\ln(c)\approx\sum\limits_{k=1}^{10^n}\:\frac{1}{10^n+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 ?

21, Aralık, 2015 Uygulamalı Bilgisayar Bilimi kategorisinde bertan88 (1,109 puan) tarafından  soruldu
2, Kasım, 2 Salih Durhan tarafından yeniden kategorilendirildi

Simpson kuralı ile integral burada uygulanabilir mi?

for döngüsü dışında p=10^n  değişkeni kullanılabilir:)

image

Mathematica ile yaklasik deger boyle bulunabilir.., C bilmedigim icin yardimci olamayacagim..

Toplamin icine f yazmayi unutmus sunuz.. sag toplam yerine orta toplam daha iyi sonuc verir, tabi ki en iyisi simspson methodu (basit olan yontemler icinde)


  image
 

...........................

...