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 ?