2026a

# rat/ratstr


有理输出

函数库: TyMath

# 语法

R = ratstr(X)
R = ratstr(X,tol)
N,D = rat(X)
N,D = rat(X,tol)

# 说明

R = ratstr(X) 返回 X 在默认容差 1e-6*norm(vec(X),1) 内的有理分式近似值。近似值是一个包含截断的连分式展开项的字符向量。示例


R = ratstr(X,tol) 在容差 tol 内求 X 的近似值。示例


N,D = rat(X),N,D = rat(X,tol) 使用以上任何语法返回两个数组 N 和 D,以使 N./D 求 X 的近似值。示例

# 示例

值 π 的近似解

使用数量 pi 的有理表示形式计算值 π 的近似解。

使用 ratstr 可查看 pi 的连分式展开。

using TyMath
R = ratstr(pi)
R = "3+1/(7+1/(16))"

结果是一个按连分式展开的近似值。如果您考虑展开的前两项,则会获得近似值 它仅与保留 2 位小数的 pi 一致。

但如果您考虑 ratstr 输出的所有三项,则可以恢复值 355/113,它与保留 6 位小数的 pi 一致。

指定容差以增加近似值的精度。

R = ratstr(pi,1e-7)
R = "3 + 1/(7 + 1/(16 + 1/(-294)))"

得到的近似值 104348/33215 与保留 9 位小数的 pi 一致。

将数组元素表示为比率

创建一个 4×4 矩阵。

using TyMath
X = hilb(4)
X = 4×4 Matrix{Float64}:
 1.0       0.5       0.333333  0.25
 0.5       0.333333  0.25      0.2
 0.333333  0.25      0.2       0.166667
 0.25      0.2       0.166667  0.142857

使用 rat 将 X 的元素表示为小整数的比率。

N,D = rat(X)
N = 4×4 Matrix{Int64}:
 1  1  1  1
 1  1  1  1
 1  1  1  1
 1  1  1  1
D = 4×4 Matrix{Int64}:
 1  2  3  4
 2  3  4  5
 3  4  5  6
 4  5  6  7

两个矩阵 N 和 D 用 N./D 求 X 的近似值。

# 输入参数

X - 输入数组
数值数组

输入数组

数据类型: Number

复数支持:

tol-容差
标量

容差,指定为标量。N 和 D 求 X 的近似值,以使 abs(N./D - X) <= tol。默认容差是 1e-6*norm(X[:],1)。

# 输出参数

R - 连分式
字符数组

连分式,以包含 m 个行的字符数组形式返回,其中 m 是 X 中的元素数。通过连分式获得的有理近似值的精度随项数增加。

N - 分子
数值数组

分子,以数值数组形式返回。N./D 求 X 的近似值。

D - 分母
数值数组

分母,以数值数组形式返回。N./D 求 X 的近似值。

# 算法

即使所有的浮点数都是有理数,有时也需要通过简单有理数求它们的近似值,这些有理数是其分子和分母都为小整数的分数。有理近似值是通过截取连分式展开式生成的。

rat/ratstr 函数按以下形式的连分式为 X 的每个元素求近似值

重复去掉整数部分,然后获取分数部分的倒数来获取 D。近似值的精度随项数呈指数增加,在 X = sqrt(2) 时精度最低。对于 X = sqrt(2),k 项的误差大概是 2.68*(0.173)^k,这样每增加一项便会使增加一定的精度,增量不到一位小数。要获得全浮点精度,项数需达到 21 项。

# 另请参阅

rats |rationalize