Python math库 ln(x)运算的实现及原理

yipeiwu_com5年前Python基础

这个是很有用的一个运算,除了本身可以求自然对数,还是求指数函数需要用到的基础函数。

实现原理就是泰勒展开,最简单是在x=1处进行泰勒展开:

但该函数离1越远越难收敛,同时大于2时无法收敛,所以需要进行换元,然后重新展开:


但是该换元在接近0时或者接近无穷大时收敛困难,处在1到10范围内收敛快且精度高,所以对大于10或小于1的值进行分解如下:

 ln(55000)=ln(5.5)+4ln10

 ln(0.0015)=ln(1.5)-4ln10

ln10为算好的值,可直接由ln_h1(10)得到

Epsilon 为精度控制

输出的i可以检测收敛次数。

Epsilon = 10e-16
ln10 = 2.30258509299404568401
def ln_h(x):
  '''
  ln函数泰勒换元展开
  :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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python3 tkinter 实现文件读取及保存功能

Python3 tkinter 实现文件读取及保存功能

tkinter介绍 tkinter是python自带的GUI库,是对图形库TK的封装 tkinter是一个跨平台的GUI库,开发的程序可以在win,linux或者mac下运行 #...

使用Python串口实时显示数据并绘图的例子

使用Python串口实时显示数据并绘图的例子

使用pyserial进行串口传输 一、安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "‘E:\Anaconda3\...

python好玩的项目—色情图片识别代码分享

python好玩的项目—色情图片识别代码分享

一、实验简介 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图像处理库,会编写算法来划分图像的皮肤区域 1.1. 知识点 Python 3 的模块的安...

py2exe 编译ico图标的代码

复制代码 代码如下: #setup.py from distutils.core import setup import py2exe setup( # targets to build...

Python使用函数默认值实现函数静态变量的方法

本文实例展示了Python使用函数默认值实现函数静态变量的方法,具体方法如下: 一、Python函数默认值 Python函数默认值的使用可以在函数调用时写代码提供方便,很多时候我们只要使...