# 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))"
结果是一个按连分式展开的近似值。如果您考虑展开的前两项,则会获得近似值
但如果您考虑 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 项。