|
“连乘积公式”能不能准确地确定误差下限?
本帖最后由 愚工688 于 2017-6-6 14:36 编辑
我在15#的偶数表为两个素数和表法数的计算式:
Sp(m)=(A-2)P(m)
= (A-2) P(2·3·…·n·…·r)
=(A-2)*P(2)P(3)…P(n)…P(r)
=(A-2)*(1/2)*f(3)*…*f(n)*…*f(r). -----------{式3}
式中:3≤ n≤r;n是素数。f(n)=(n-1)/n, [In=0时];或f(n)=(n-2)/n, [jn>0时] 。jn系A除以n时的余数。
实际上与志明先生的计算式是非常相似的,我的首项用(A-2),A为偶数M的半值,后面的连乘部分与楼主的相同。
例如:
M= 908 S(m)= 15 Sp(m)= 15 δ(m)≈ 0 K(m)= 1 r= 29
* Sp( 908)=[( 908/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 5/ 7)*( 9/ 11)*( 11/ 13)*( 15/ 17)*( 17/ 19)*( 21/ 23)*( 27/ 29)= 15
那么使用此类连乘公式,能否准确地确定误差下限呢?
这要从{式3}的相对误差的实际情况说起。
在15#中我已经对10万以内的全部偶数的计算值的相对误差做了统计计算,从中可以可以看到:
1)相对误差分布最离散的区域即是【6,100】区域,出现了最小、最大的相对误差;
2)随着偶数增大的各区域,最大、最小相对误差逐渐接近,标准偏差 σχ逐渐缩小;
到更大的偶数区域,这个现象会进一步得到体现:
1亿-500亿的取样样本的相对误差的统计计算数据:
(标准偏差的通用符号为σx ,μ-样本平均值)
100000000 - 100000098 : n= 50 μ= .1192 σx= .0013 δ(min)= .1156 δ(max)= .1224
1000000000 - 1000000098 : n= 50 μ= .1368 σx= .0004 δ(min)= .1356 δ(max)= .138
5000000000 - 5000000098 : n= 50 μ= .1462 σx= .0003 δ(min)= .1456 δ(max)= .1468
10000000000-10000000098 : n= 50 μ= .1494 σx= .0002 δ(min)= .1491 δ(max)= .1497
30000000002-30000000100 : n= 50 μ= .15494 σx= .0001 δ(min)= .15474 δ(max)= .15519
50000000002-50000000100 : n= 50 μ= .1571 σx= .0001 δ(min)= .1569 δ(max)= .1573
可以看到,
1)样本区域偶数的素对计算值的相对误差平均值随偶数增大缓慢增大到0.15以上;
2)标准偏差则很小,样本区域偶数的相对误差大小值比较接近;
因此,只要对{式3}的计算式可能产生的相对误差,作预先的修正,我们就可以对一个比较大区域的偶数的表法数的计算值,控制好其下限,使得计算值<实际值,成为下界计算值。
若我们要从实际表法数值的下方接近偶数表为两个素数的表法数值,则需要排除波动系数K(m)值的影响以及连乘式实际存在的计算正误差。
因此若把偶数M表为两个素数之和表法数的下界值记为infS(m),采用误差修正系数μ=0.21,
则有
infS(m)=(A-2)P(m)min/(1+0.21)
=(A-2)*0.5*π[(r-2)/r] /(1+0.21)
=0.413(A-2)π[(r-2)/r] . {式7}
式中:r为<√(M-2)的奇素数。
用infS(M)表示偶数M表为两个素数和的的表法数区域下界计算值,表示从这个偶数(或前几个偶数)起到任意大偶数的表法数值小于该偶数的表法数区域下界计算值infS(m),而区域下界计算值具有在√(M-2)最大素数r不变的区域内线性增大的特征。且两个最大素数r不同的区域内的首位偶数,偶数大的infS(m)值也大(单调增大)。
而用inf(m)表示偶数M表为两个素数和的表法数下限,则表示了偶数M的表法数的固有的波动性,该偶数个性的下界值inf(m)在个别的偶数会略大于实际表法数(因为波动系数作用)。它比较形象的描绘了偶数数据表法数的波动数据。
两者关系:infS(m)=inf(M)/ k(m),
式中 k(m)由偶数M所含的≤√(M-2)的奇素数因子决定,称为素因子系数,也叫波动系数。
实例:
用偶数M表为两个素数和的表法数下界计算式 inf( m )=Sp( m )/(1+μ) ,(μ=0.15,)
注:因为小偶数区域时相对误差的分布比较离散,故采用比较大的修正系数(μ=0.21,);偶数比较大是可以适当减小μ值,以便提高计算值精度。
计算一组20亿以上连续偶数的下界计算值inf( M),每个偶数的表法数计算值的相对误差都很小,且小于真值;
infS(M )反映了偶数M的区域下界值,区域下界值随偶数的增大而缓慢地线性增大;
因此任意大于2017021200的偶数的表为两个素数和的素对数量必然多于3177490.
D ( 2017021200 ) = 9000900 ;
inf( 2017021200 )≈ 8928994.2 , Δ≈-0.0079887,infS( 2017021200 )= 3177489.07 , k(m)= 2.81008
D ( 2017021202 ) = 4296402;
inf( 2017021202 )≈ 4260861.5 , Δ≈-0.0082722,infS( 2017021202 )= 3177489.07 , k(m)= 1.34095
D ( 2017021204 ) = 3561192;
inf( 2017021204 )≈ 3531899.1 , Δ≈-0.0082256,infS( 2017021204 )= 3177489.08 , k(m)= 1.11154
D ( 2017021206 ) = 6500093;
inf( 2017021206 )≈ 6448471.6 , Δ≈-0.0079416,infS( 2017021206 )= 3177489.08 , k(m)= 2.02942
D ( 2017021208 ) = 3208277;
inf( 2017021208 )≈ 3183015.2 , Δ≈-0.0078740,infS( 2017021208 )= 3177489.08 , k(m)= 1.00174
D ( 2017021210 ) = 4375501;
inf( 2017021210 )≈ 4339985.1 , Δ≈-0.0081170,infS( 2017021210 )= 3177489.09 , k(m)= 1.36585
D ( 2017021212 ) = 6563005;
inf( 2017021212 )≈ 6509781.9 , Δ≈-0.0081096,infS( 2017021212 )= 3177489.09 , k(m)= 2.04872
D ( 2017021214 ) = 3497463;
inf( 2017021214 )≈ 3468053.9 , Δ≈-0.0084087,infS( 2017021214 )= 3177489.09 , k(m)= 1.09144
D ( 2017021216 ) = 3873195;
inf( 2017021216 )≈ 3840818.9 , Δ≈-0.0083590,infS( 2017021216 )= 3177489.09 , k(m)= 1.20876
D ( 2017021218 ) = 6405541 ;
inf( 2017021218 )≈ 6354978.2 , Δ≈-0.0078936,infS( 2017021218 )= 3177489.1 , k(m)= 2
D ( 2017021220 ) = 4273406 ;
inf( 2017021220 )≈ 4238023.7 , Δ≈-0.0082796,infS( 2017021220 )= 3177489.1 , k(m)= 1.33376
D ( 2017021222 ) = 3202789 ;
inf( 2017021222 )≈ 3177489.1 , Δ≈-0.0078994,infS( 2017021222 )= 3177489.1 , k(m)= 1
我想,我在这两个楼面中,把连乘式表现偶数的下界的例子清楚的表示了出来。
实际例子的偶数M以及M后面的大偶数,是没有一个的表法数会小于偶数表法数的区域下界值infS( m)的。
要点是必须把连乘式中含有的波动系数分离出去,否则用具有波动性的表法数下界值inf(m)的峰值与处于低位的真值相比,怎么能够正确的确定误差的下限?
必须用同一波动系数的偶数的表法数下界值inf(m)与它的表法数真值比较,那么相对误差均能够控制的比较小。
我想,目前能够达到如此程度的计算精度的偶数表法数计算公式,应该是不多见的!
所以说,不能因为某些专家对连乘式的否定而轻易的否定连乘式,除非你能够拿出精度更高的计算式来!
|
|