对数(Python,数学)

对数(logarithm)

认识对数函数

8=2^3        指数

log_{2}8=3        对数log

8=2^{log_{2}8}

对数函数是指数函数的反函数。

如果对数log的底数是10,这是常用对数,使用log数学公式表达时,常常会省略10。

建立log_{10}x的对数表,其中真数x是1.1~10.0。

import numpy as np

n = np.linspace(1.1, 10, 90)            # 建立1.1-10的数组
count = 0                               # 用于计算每5笔输出换行
for i in n:
    count += 1
    print('{0:2.1f} = {1:4.3f}'.format(i, np.log10(i)), end='    ')
    if count % 5 == 0:                  # 每5笔输出就换行
        print()

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
1.1 = 0.041    1.2 = 0.079    1.3 = 0.114    1.4 = 0.146    1.5 = 0.176    
1.6 = 0.204    1.7 = 0.230    1.8 = 0.255    1.9 = 0.279    2.0 = 0.301    
2.1 = 0.322    2.2 = 0.342    2.3 = 0.362    2.4 = 0.380    2.5 = 0.398    
2.6 = 0.415    2.7 = 0.431    2.8 = 0.447    2.9 = 0.462    3.0 = 0.477    
3.1 = 0.491    3.2 = 0.505    3.3 = 0.519    3.4 = 0.531    3.5 = 0.544    
3.6 = 0.556    3.7 = 0.568    3.8 = 0.580    3.9 = 0.591    4.0 = 0.602    
4.1 = 0.613    4.2 = 0.623    4.3 = 0.633    4.4 = 0.643    4.5 = 0.653    
4.6 = 0.663    4.7 = 0.672    4.8 = 0.681    4.9 = 0.690    5.0 = 0.699    
5.1 = 0.708    5.2 = 0.716    5.3 = 0.724    5.4 = 0.732    5.5 = 0.740    
5.6 = 0.748    5.7 = 0.756    5.8 = 0.763    5.9 = 0.771    6.0 = 0.778    
6.1 = 0.785    6.2 = 0.792    6.3 = 0.799    6.4 = 0.806    6.5 = 0.813    
6.6 = 0.820    6.7 = 0.826    6.8 = 0.833    6.9 = 0.839    7.0 = 0.845    
7.1 = 0.851    7.2 = 0.857    7.3 = 0.863    7.4 = 0.869    7.5 = 0.875    
7.6 = 0.881    7.7 = 0.886    7.8 = 0.892    7.9 = 0.898    8.0 = 0.903    
8.1 = 0.908    8.2 = 0.914    8.3 = 0.919    8.4 = 0.924    8.5 = 0.929    
8.6 = 0.934    8.7 = 0.940    8.8 = 0.944    8.9 = 0.949    9.0 = 0.954    
9.1 = 0.959    9.2 = 0.964    9.3 = 0.968    9.4 = 0.973    9.5 = 0.978    
9.6 = 0.982    9.7 = 0.987    9.8 = 0.991    9.9 = 0.996    10.0 = 1.000    

[Done] exited with code=0 in 4.013 seconds

对数表的功能

有一块3平方米的土地,究竟边长是多少?

3=x^2

x=\sqrt{3}=3^{\frac{1}{2}}

3大概是10的0.477次方

x=\sqrt{3}=3^{\frac{1}{2}}=(10^{0.477})^{\frac{1}{2}}=10^{0.477*0.5}=10^{0.2385}

x\approx 1.7

>>> import math
>>> math.sqrt(3)
1.7320508075688772
>>>

对数运算可以解决指数运算的问题

540天的秒数,可以用10的多少次方表达?

540*24*60*60

=54*10*6*4*6*10*6*10

=216*6^3*10^3

=6^3*6^3*10^3

=6^6*10^3

6=10^{\frac{n}{m}}

6^m=(10^{\frac{n}{m}})^{m}=10^{\frac{n}{m}m}=10^n

6^9\approx 10^7

n=7,m=9

6=10^{\frac{n}{m}}=10^{\frac{7}{9}}=10^{0.778}

540天秒数=6^6*10^3\approx (10^{0.778})^6*10^3=10^{4.668+3}=10^{7.668}

>>> pow(10,7.668)
46558609.35229591
>>> 540*24*60*60
46656000
>>>

y=log_{b}x

x=6,b=10

10^y=6

y=log_{10}6=0.778

540天秒数=6^6*10^3\approx (10^{0.778})^6*10^3=10^{4.668+3}=10^{7.668}

认识对数的特性

处理比较大的数据运算时,使用对数可以有比较好的运算方法,可以节省运算时间,这一点对于机器学习是很有帮助的。

将对数的底数设为2与0.5,将真数的值设为0.1~10,然后绘制图表。

import matplotlib.pyplot as plt
import numpy as np
import math

x1 = np.linspace(0.1, 10, 99)                   # 建立含30个元素的数组
x2 = np.linspace(0.1, 10, 99)                   # 建立含30个元素的数组
y1 = [math.log2(x) for x in x1]
y2 = [math.log(x, 0.5) for x in x2]
plt.plot(x1, y1, label="base = 2")
plt.plot(x2, y2, label="base = 0.5")

plt.legend(loc="best")                          # 建立图例
plt.axis([0, 10, -5, 5])
plt.grid()
plt.show()

执行结果:

对于底数是2的对数函数,如果真数大于1,会呈现正值同时递增,如果真数小于1,会呈现负值,当真数接近0时,则呈现无限小。

对于底数是0.5的对数函数,如果真数大于1,会呈现负值同时递减,如果真数小于1,会呈现正值,当真数接近0时,则呈现无穷大。

另外,当真数是1时,不论底数是多少,对数函数会通过(1,0)。

对数的运算规则与验证

等号两边使用对数处理结果不变

有一个公式:x=y

两边使用对数处理,可以得到相同的结果:

log_bx=log_by

假设f(x)=x,f(y)=y,其实只是将函数转成对数函数。

对数的真数是1

如果对数的真数是1,不论底数b是多少,结果是0:

log_b 1=0

b^0=1

两边用对数处理:

log_bb^0=log_b 1

对数的底数等于真数

对数的底数等于真数时概念如下:

log_b b=1

对数内真数的指数

概念如下:

log_bx^n=nlog_bx

x=b^{log_bx}

x^n=(b^{log_bx})^n=b^{nlog_bx}

等号两边执行对数log_b运算,可以得到下列结果:

log_bx^n=log_bb^{nlog_bx}=nlog_bx

对数内真数是两数据相乘

概念如下:

log_bMN=log_bM+log_bN

假设M=x^m,N=x^n,则上述公式可以推导下列结果。

log_bMN=log_bx^mx^n =log_bx^{m+n} =(m+n)log_bx=mlog_bx+nlog_bx=log_bx^m+log_bx^n=log_bM+log_bN

对数内真数是两数据相除

概念如下:

log_b\frac{M}{N}=log_bM-log_bN

log_b\frac{M}{N}=log_bM+log_b\frac{1}{N}=log_bM-log_bN

底数变换

概念如下:

log_bx=\frac{log_ax}{log_ab}

假设z=log_b x

x=b^2

log_ax=zlog_ab^z

log_ax=zlog_ab

z=\frac{log_ax}{log_ab}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值