对数只回答一个问题:底数要乘方到几次,才能得到这个数? 如果你知道 2 的 3 次方是 8,你就已经知道以 2 为底 8 的对数是 3。后面的全部内容都由这句话推出。

logba=x    bx=a\log_b a = x \iff b^x = a
定义:对数就是指数。

记住各部分的名称有助于读题:b 是底数,a 是真数,x 是对数。存在条件有三条:底数大于 0,底数不等于 1,真数大于 0。它们不是形式要求,每一条都排除了“指数是多少”没有唯一答案的情况。

为什么要有存在条件

如果底数是 1,任何次方都等于 1,那么“1 的几次方等于 5”无解,“1 的几次方等于 1”有无穷多个解。如果底数是负数,像 (−2) 的 1/2 次方这样的幂在实数范围内根本不存在。而底数为正时,所有的幂都是正数,没有任何实数指数能得到 0 或负数,所以真数必须大于 0。

入门例子

  • log28=3\log_2 8 = 3,因为 23=82^3 = 8
  • lg1000=3\lg 1000 = 3,因为 103=100010^3 = 1000
  • log51=0\log_5 1 = 0,因为 50=15^0 = 1。对任何底数都成立:1 的对数总是 0。
  • log77=1\log_7 7 = 1,因为 71=77^1 = 7。底数自身的对数总是 1。
  • log319=2\log_3 \tfrac{1}{9} = -2,因为 32=193^{-2} = \tfrac{1}{9}。对数可以是负数,不能为负的是真数。

当数字不是明显的幂时,把它们化成同一个底。求以 9 为底 27 的对数:把 9 写成 3²,27 写成 3³,问题变成“(3²) 的 x 次方等于 3³”,即 2x = 3,x = 3/2。验算:9 的 1.5 次方就是 9 的平方根再立方,3³ = 27。

对数函数的图像

对数函数是指数函数的反函数。在图像上,log₂ x 的曲线与 2^x 的曲线关于直线 y = x 对称:指数函数上的点 (1, 2)、(2, 4)、(3, 8) 在对数函数上变成 (2, 1)、(4, 2)、(8, 3)。注意对数增长得多么缓慢:函数值从 2 升到 3,自变量要从 4 增加到 8。

−202468−202468xyy = 2^xy = log₂ x
指数函数 2^x 与对数函数 log₂ x 关于直线 y = x 对称。

运算性质

在底数和真数都有意义时,下面四条公式成立。它们都来自幂的运算法则:同底数幂相乘指数相加,相除指数相减,乘方指数相乘。对数就是指数,所以加、减、乘就体现在对数上。

logb(xy)=logbx+logbylogbxy=logbxlogbylogbxn=nlogbxlogba=logcalogcb\begin{aligned} \log_b (x \cdot y) &= \log_b x + \log_b y \\ \log_b \frac{x}{y} &= \log_b x - \log_b y \\ \log_b x^n &= n \cdot \log_b x \\ \log_b a &= \frac{\log_c a}{\log_c b} \end{aligned}
积、商、幂的对数与换底公式。

已知 lg 2 ≈ 0.301、lg 3 ≈ 0.477,不用计算器也能算出很多对数。因为 12 = 2² · 3,所以 lg 12 = 2 · lg 2 + lg 3 ≈ 0.602 + 0.477 = 1.079。因为 5 = 10/2,所以 lg 5 = lg 10 − lg 2 ≈ 1 − 0.301 = 0.699。又因为 2 的 10 次方是 1024,略大于 1000,所以 lg 1024 = 10 · 0.301 ≈ 3.01,正好对应 1024 略大于 10³。

换底公式

计算器通常只有 lg(常用对数,底数 10)和 ln(自然对数,底数 e ≈ 2.718)。求其他底数的对数时,用真数的对数除以底数的对数,二者用计算器上的同一种对数即可。例如 log₂ 3 = lg 3 / lg 2 ≈ 0.477 / 0.301 ≈ 1.585。粗略验证:2¹ = 2 < 3 < 4 = 2²,所以结果应在 1 和 2 之间,确实如此。

例题:本金多久翻一番

某理财产品月利率 1%,按月复利。存入的本金多少个月后翻一番?未知数在指数上,这正是对数的用武之地。

1.01n=21.01^n = 2
本金每月乘以 1.01,乘 n 次后要达到两倍。
  1. 两边同时取对数(任何底数都行,用计算器上有的):lg(1.01ⁿ) = lg 2。
  2. 由幂的对数性质,指数移到前面:n · lg 1.01 = lg 2。
  3. 解出 n:n = lg 2 / lg 1.01。
  4. 用计算器:lg 2 ≈ 0.30103,lg 1.01 ≈ 0.0043214,所以 n ≈ 69.66。
  5. 利息按月计入,所以到第 70 个月余额才第一次超过两倍。

验算: 1.01 的 69 次方约为 1.987,仍小于 2;1.01 的 70 次方约为 2.007,已经超过 2。所以答案 70 个月是正确的。改用 ln 计算,n 也一样,因为两个对数的比值与底数无关。

其他指数方程

并不总是需要计算器。解 3^(x+1) = 81 时,注意 81 = 3⁴,令指数相等:x + 1 = 4,所以 x = 3。而 2^x = 10 无法化成同底,就两边取对数:x · lg 2 = lg 10 = 1,x = 1 / lg 2 ≈ 3.32。这个结果合理,因为 2³ = 8 和 2⁴ = 16 正好夹住 10。

课堂之外的对数

跨越许多数量级的量常用对数刻度表示:溶液的 pH 值、声音的分贝、地震的震级。在这些刻度上,读数加 1 意味着实际的量乘以一个固定倍数。在计算机科学中,log₂ n 表示 n 能对半分多少次,所以在一百万个元素中做二分查找只需要大约 20 步。

常见错误

  1. 写成 lg(a + b) = lg a + lg b。 这条性质只对乘积成立,对和不成立。检验:lg(1 + 1) = lg 2 ≈ 0.301,而 lg 1 + lg 1 = 0。
  2. 忽略存在条件。 解对数方程后,要检查解是否使所有真数为正;不满足的解要舍去。
  3. 把 lg(xⁿ) 和 (lg x)ⁿ 混为一谈。 真数上的指数可以移到前面作系数;整个对数的指数不能。
  4. 把对数相除当成真数相除。 lg 8 / lg 2 = 3,而 lg(8/2) = lg 4 ≈ 0.602,这是两种不同的运算。
  5. 过早取近似值。 在利息问题中,把 lg 1.01 取成 0.004 而不是 0.0043,答案会从 70 个月变成约 76 个月。

常见问题

为什么对数的底数不能是 1?

因为 1 的任何次方都是 1。方程 1^x = 5 无解,1^x = 1 有无穷多个解,所以对数无法唯一确定。

负数有对数吗?

在实数范围内没有。底数为正时 b^x 总是正数,没有任何实数指数能得到负数或 0。

lg、ln 和 log 有什么区别?

国内教材中 lg x 表示以 10 为底的常用对数,ln x 表示以 e ≈ 2.718 为底的自然对数,log_a x 表示以 a 为底。计算机领域的 log 常指以 2 为底,要看具体约定。

什么时候用 ln,什么时候用 lg?

解指数方程时都可以:两个对数的比值与底数无关。ln 常见于连续增长和微积分,lg 常见于 pH、分贝等刻度。