Numpydaki Logaritma Metodu

Bu metodun nasıl yazıldığını bilen var mı?
Oluşturmaya çalışırken aklım gitti. Logaritma da biliyorum. Ama yeterince teorik olarak bilmediğimi keşfettim.

Algoritmayı bilen varsa, yardımcı olursa, memnun olurum.

import math

# https://stackoverflow.com/a/10737149/12291742
def ln(x):
    """Approximation of natural log of x."""
    assert x > 0
    mantissa, exponent = math.frexp(x)
    return ln_between_zero_and_one(mantissa) + exponent * 0.6931471805599453

# https://en.wikipedia.org/wiki/Natural_logarithm#Continued_fractions
def ln_between_zero_and_one(x, loop=100):
    """Natural log of x when 0 < x < 1"""
    total = 0
    x = x - 1
    for i in range(1, loop):
        if i % 2 == 1:
            total += x**i / i
        else:
            total -= x**i / i
    return total

isclose = lambda i, j: math.isclose(i, j, abs_tol=1e-15)
assert isclose(ln(0.1), math.log(0.1))
assert isclose(ln(0.5), math.log(0.5))
assert isclose(ln(1), math.log(1))
assert isclose(ln(math.e), math.log(math.e))
assert isclose(ln(2.3), math.log(2.3))
assert isclose(ln(123), math.log(123))
assert isclose(ln(2143245345), math.log(2143245345))
1 Beğeni

Şöyle bir şey yaptım ama, ne kadar yaklaşık emin değilim :

def log(n,b):
    x=0
    y=[]
    for i in range(n):
        x+=1
        sonuc = n**(1/×)
        if sonuc == n:
            y.append(sonuc)
        else:
              y.append(sonuc)
     return y[-1]

Baktım heryere, bulamadım düzgün bisey, ben direk algoritmayi oluşturmak istiyorum, math ya da başka bi kütüphane ile değil.
Teşekkürler yüce Ekrem. Ama sanırım benimki bunlardan daha yaklaşık değer veriyor.

Yaklaşık değerde yakınsıyor ama tam değerde hatalı. Anlamadım gitti.

math’ı kullanmanın tek sebebi frexp fonksiyonu. Bize float’ların mantissa ve exponent değerlerinin veriyor.

Bana pek öyle gelmedi:

import math

def log(n,b):
    x=0
    y=[]
    for i in range(n):
        x+=1
        sonuc = n**(1/x)
        if sonuc == n:
            y.append(sonuc)
        else:
              y.append(sonuc)
    return y[-1]

ln = lambda x: log(x, math.e)
print(math.log(0.1), ln(0.1))
print(math.log(1), ln(1))
print(math.log(0.1), ln(0.1))
print(math.log(math.e), ln(math.e))
print(math.log(123), ln(123))
1 Beğeni

Doğru didin, 2 gündür kafa yoruyom. Yapacağim, inad ettim.