Python math庫(kù) ln(x)運(yùn)算的實(shí)現(xiàn)及原理
這個(gè)是很有用的一個(gè)運(yùn)算,除了本身可以求自然對(duì)數(shù),還是求指數(shù)函數(shù)需要用到的基礎(chǔ)函數(shù)。
實(shí)現(xiàn)原理就是泰勒展開,最簡(jiǎn)單是在x=1處進(jìn)行泰勒展開:

但該函數(shù)離1越遠(yuǎn)越難收斂,同時(shí)大于2時(shí)無(wú)法收斂,所以需要進(jìn)行換元,然后重新展開:


但是該換元在接近0時(shí)或者接近無(wú)窮大時(shí)收斂困難,處在1到10范圍內(nèi)收斂快且精度高,所以對(duì)大于10或小于1的值進(jìn)行分解如下:
ln(55000)=ln(5.5)+4ln10
ln(0.0015)=ln(1.5)-4ln10
ln10為算好的值,可直接由ln_h1(10)得到
Epsilon 為精度控制
輸出的i可以檢測(cè)收斂次數(shù)。
Epsilon = 10e-16
ln10 = 2.30258509299404568401
def ln_h(x):
'''
ln函數(shù)泰勒換元展開
:param x: 0<x
:return:ln(x)
'''
def ln_h1(x):
s2 = 0.0
delta = x = (x - 1.0) / (x + 1.0)
i = 0
while fab_h(delta * 2) / (i * 2 + 1) > Epsilon:
s2 += delta / (i * 2 + 1)
delta *= x * x
i += 1
print(i)
return 2 * s2
coef = 0
if x > 10:
while x / 10 > 1:
coef += 1
x /= 10
return ln_h1(x) + coef*ln10
elif x < 1:
while x * 10 < 10:
coef += 1
x *= 10
return ln_h1(x) - coef*ln10
else:
return ln_h1(x)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python深度學(xué)習(xí)albumentations數(shù)據(jù)增強(qiáng)庫(kù)
下面開始albumenations的正式介紹,在這里我強(qiáng)烈建議英語(yǔ)基礎(chǔ)還好的讀者去官方網(wǎng)站跟著教程一步步學(xué)習(xí),而這里的內(nèi)容主要是我自己的一個(gè)總結(jié)以及方便英語(yǔ)能力較弱的讀者學(xué)習(xí)2021-09-09
Python自動(dòng)修改電腦靜態(tài)IP地址的實(shí)現(xiàn)示例
通過(guò)Python自動(dòng)修改電腦的靜態(tài)IP地址可以極大地提高我們的工作效率,減少手動(dòng)修改IP地址帶來(lái)的錯(cuò)誤,本文就來(lái)介紹一下Python自動(dòng)修改電腦靜態(tài)IP地址的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-11-11
Django admin管理工具TabularInline類用法詳解
這篇文章主要介紹了Django admin管理工具TabularInline類用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
pytorch?tensor按廣播賦值scatter_函數(shù)的用法
這篇文章主要介紹了pytorch?tensor按廣播賦值scatter_函數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
基于MATLAB和Python實(shí)現(xiàn)MFCC特征參數(shù)提取
這篇文章主要介紹了基于MATLAB和Python實(shí)現(xiàn)MFCC特征參數(shù)提取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

