跳转到内容

离散数学/数字表示

来自维基教科书,开放世界开放书籍

您已经熟悉写下一个数字,并让它表示十、百等等的特定组合。这是一种数字表示形式,但还有其他形式。我们将探讨进制和连分数。

您已经熟悉十进制数表示法。例如,数字 2818 等于

2×103+8×102+1×101+8×100

我们可以用任何数字替换这里的 10,从而得到不同的数字。一般来说,我们可以用以下公式用 b 进制表示整数 n

akbk+ak-1bk-1+...+a0b0

其中 ai 均小于 b

我们将 b 进制数字写成 (akak-1...a0)b

例如,如果我们有 6 进制数字 243,我们将它写成 (243)6。当我们在十进制中时,我们只需写下数字:例如,十进制数字 155 只是写成 155。

然而,给定一个 b 进制数字,我们如何将其转换为我们自然的十进制系统?同样,我们如何将十进制数字转换为 b 进制?

前者相对容易,后者更难。

b进制转换为10进制

[编辑 | 编辑源代码]

我们只需使用 b 进制数字的定义将 b 进制数字转换为十进制 - 也就是说,我们只需将它乘开。

例如

(919)12=9×122+121+9=1317。

将10进制转换为b进制

[编辑 | 编辑源代码]

然而,这项任务稍微困难一些,并且有几种方法可以执行此任务。

一种方法是使用 数论 部分中的除法算法来写下每一步。例如,如果我们想将 1317 转换为 12 进制

1317 = 12 × 109 + 9
109 = 12 × 9 + 1
9 = 12 × 0 + 9


因此,在 12 进制中,(919)12=1317。

我们刚刚看到了如何将整数从一个进制转换为另一个进制,但我们如何处理实数的转换呢?

回想一下,在十进制中,我们将数字 11.341 写成

1×101+1×100+3×10-1+4×10-2+1×10-3

因此,我们可以扩展上面 b 进制数字的定义,使其为

akbk+ak-1bk-1+...+a0b0+a-1b-1+...

其中 ai 均小于 b,并且总和可以终止或无限进行。

同样,我们如何将这些数字从一个进制转换为另一个进制?我们可以转换整数部分,但小数部分(小于 1 的部分)怎么办?

将小数部分n转换为b进制

[编辑 | 编辑源代码]

假设我们想将十进制的 .341 转换为 6 进制。

我们使用以下规则写一个表

i      ci                   γii
0      0                   .341                2.046
1      2                   .046                0.276
2      0                   .276                1.656
3      1                   .656                3.936
4      3                   .936                5.616
5      5                   .616                3.696
6      3                   .696                4.176
7      4                   .176                1.056
8      1                   .056                0.336
9      0                   .336                2.016

看起来这个展开将永远进行下去!我们需要计算更多 i 的值,看看我们是否会遇到 γi 的重复值,从而确定我们是否得到重复。

因此,我们有近似值,即 .341 接近于 (.20135341)6。(使用定义计算此值。我们的近似值有多接近?


如果我们得到一个 b 进制表示形式,例如看起来像 (.18191819181918191819...)b,我们将这种表示形式称为周期性。我们通常将其写成

我们使用相同的程序将小数转换为 b 进制,方法是将上面的 6 替换为 b

将小数部分n转换为10进制

[编辑 | 编辑源代码]

我们有一个巧妙的技巧可以用来将 b 进制的小数 n 转换为十进制,前提是表示形式是重复的。让我们看一个例子

考虑。然后

现在

然后

最后

将 (3145)7 转换为 10 进制,我们得到以下结果

连分数

[edit | edit source]

从某种意义上说,b 进制表示很好,但它在精度方面有一些缺点。我们无法使用 b 进制表示来可靠地表示数字。这就是 连分数 表示派上用场的地方,它在二次无理数方面有一些很好的性质。

连分数 是以下形式的数字

由于这种表示法显然相当繁琐,我们将其简化为

我们再次问自己,如何进行这种数字表示之间的转换?同样,从连分数表示转换更容易,而从其他表示转换到连分数则更复杂。

从连分数表示转换

[edit | edit source]

我们只需使用连分数的定义来进行转换。这看起来可能很困难,但实际上相当简单,具体取决于从哪一端开始。让我们看一个例子

考虑

现在,我们从右到左进行计算。首先,我们有分数

下一个数字 2 告诉我们执行

然后取倒数得到

现在下一个数字1告诉我们要执行

然后取倒数得到

现在我们必须加上q0,它始终大于1,然后得到结果

转换为连分数表示

[编辑 | 编辑源代码]

再次,我们建立一个表格。

考虑分数12/22,并在表格中使用以下规则

i   θi      θi-1     qi
0   12/22   .       0
1   12/22   22/12   1
2   5/6     6/5     1
3   1/5     5/1     5

(由于下一行将全是0,所以停止)

因此,现在12/22的连分数为[0; 1, 1, 5]。

将周期连分数转换为二次无理数

[编辑 | 编辑源代码]

首先,我们要注意周期连分数(其中qi序列重复)的一个很好的性质,即

每个周期连分数都是形如下的数

例如,考虑连分数

现在

我们可以将其改写为

现在我们可以简化得到

这是一个二次方程,可以解出

.

注意,我们可以将连分数始终写成 (aα+b)/(cα+d)=α 的形式,这说明每个二次无理数都有一个重复的连分数表示

收敛值

[编辑 | 编辑来源]

假设我们有一个表示数字 n 的连分数 [q0; q1, ... ]。让我们检查一下分数序列 [q0],[q0; q1],[q0; q1, q2] 等等。序列中的每个元素被称为 收敛值。事实证明,收敛值序列提供了对 n 的最佳有理数逼近。

这些可以从连分数表示中计算出来,也可以从计算表中计算出来。让我们取 .

像以前一样继续,但是添加一个额外的 -1 行,并设置 u-1=1,v-1=0。根据规则进行迭代

该序列重复,连分数为 [2; 2, 4, 2, 4, ... ]。我们可以继续这个过程生成更多的收敛分数,收敛分数为 2, 5/2, 22/9, 49/20, ...

华夏公益教科书