用高精度算术求几乎整数
寻找整数关系[1]的算法,例如PSLQ算法,需要高精度的算法来产生精确的结果。算法输入的精度越高,算法就越有信心找到一个整数关系,而不仅仅是一个数值人工制品。PSLQ算法可能会遇到假阳性,比如由几乎整数引起的假阳性。
这个例子展示了如何使用符号数学工具箱™中的变精度算法找到几乎整数,或者非常接近整数的数字。此示例搜索具有该形式的几乎整数(或接近整数) 或 对于整数 .
首先,考虑一个众所周知的几乎为整数的实数[2]的例子 .将这个实数创建为一个精确的符号数。
R = exp(π *√(sym(163)))
r =
用可变精度算法计算此数字vpa
.默认情况下,vpa
将值计算为32位有效数字。
vpa(右)
ans =
可以使用命令将有效位数更改为更高的精度数字
.将相同的数字计算为40位有效数字。
数字(40)vpa(右)
ans =
这个数字非常接近一个整数。求出这个实数和它最近的整数之间的差。使用vpa
将结果计算为40位有效数字。
Dr = vpa(round(r)-r)
博士=
接下来,搜索具有该形式的几乎整数 对于整数 .将这些数字创建为精确的符号数字。
A = exp(pi*√(sym(1:200)));
将有效位数设置为整数部分的位数 再加20个小数点。
d = log10(A(end));数字(cell (d) + 20)
求出这一系列数字与其最近整数之间的差值。找出舍入误差小于0.0001的几乎整数。以精确的符号形式显示结果。
B = vpa(round(A)-A);A_nearint = A(abs(B)<0.0001)'
A_nearint =
以至少20小数点的精度计算几乎整数。
A_nearint = vpa(A_nearint)
A_nearint =
绘制差异的直方图以显示其分布。分布中出现了许多接近于零的差异,其中形式 几乎是整数。
柱状图(双(B), 40)
接下来,搜索具有该形式的几乎整数 对于整数 .将这些数字创建为精确的符号数字。
A = exp(sym(pi)*1:200);
将有效位数设置为整数部分的位数 再加20个小数点。
d = log10(A(end));数字(cell (d) + 20)
求出这一系列数字与其最近整数之间的差值。找出舍入误差小于0.0001的几乎整数。结果是一个空信谊
数组,这意味着几乎没有整数满足这个条件。
B = vpa(round(A)-A);A_nearint = A(abs(B)<0.0001)
A_nearint =空sym: 1 × 0
绘制差异的直方图。直方图分布相对均匀,并显示形式 几乎整数的出现次数不多。对于这个特定的例子,没有舍入误差小于0.0001的几乎整数。
柱状图(双(B), 40)
最后,恢复默认的32位有效数字的精度,以进行进一步的计算。
数字(32)
参考文献
[1]“整数关系算法。”维基百科,2022年4月9日。https://en.wikipedia.org/w/index.php?title=Integer_relation_algorithm&oldid=1081697113.
[2]“几乎是整数。”维基百科,2021年12月4日。https://en.wikipedia.org/w/index.php?title=Almost_integer&oldid=1058543590.