Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
3.9k 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 ?

Veri Bilimi kategorisinde (1.1k puan) tarafından 
tarafından yeniden kategorilendirildi | 3.9k kez görüntülendi

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
 

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

Integral almak yerine Pade yaklasimini kullanabilirsiniz.
20,281 soru
21,818 cevap
73,492 yorum
2,496,533 kullanıcı