跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

单击“注册GitHub”,表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

Q(sqrt(5))上椭圆曲线上点的高度计算错误 #12509

关闭
威廉姆斯坦已打开此问题2012年2月15日·32条评论
关闭

Q(sqrt(5))上椭圆曲线上点的高度计算错误 #12509

威廉姆斯坦已打开此问题2012年2月15日·32条评论

评论

@威廉姆斯坦
复制链接
贡献者

显然,有许多计算示例P.高度(),用于P(P)Q(sqrt(5))上椭圆曲线上的一个点给出了一个完全错误的答案。这很严重,因为这是一个明显错误的数学答案——提出NotImplementedError会更好!这是Ashwath Rabindranath(普林斯顿大学)发现的一个例子,Sage和Magma不同意。根据BSD的说法,Sha使用Magma答案得到了1级命令,而Sage的答案得到了疯狂的命令。

sage:K.<a>=数字字段(x^2-x-1)圣人:v=[0,a+1,1,28665*a-46382,2797026*a-4525688]sage:E=椭圆曲线(v)鼠尾草:E==E.global_minimal_model()真的sage:F.a_invariants()(0,a+1,1,28665*a-46382,2797026*a-4525688)鼠尾草:P=E([72*a-509/5,-682/25*a-434/25])鼠尾草:P.高度()1.35648516097058鼠尾草:Q=岩浆(E)(岩浆([P[0],P[1]))鼠尾草:Q(1/5*(360*a-509):1/25*(-682*a-434):1)圣人:Q.Height()1.38877711688727252538242306

应用:附件:trac12509-hights.patch,附件:trac12509-高度2.patch,附件:trac12509高度3.patch

组件:椭圆曲线

关键词:高度

止动间隙:#12692

作者:约翰·克雷莫纳

审核人:彼得·布鲁恩(Peter Bruin)、克里斯·伍特里奇(Chris Wuthrich)

合并:圣母-5.10.beta3

从迁移创建的问题https://trac.sagemath.org/ticket/12509

@约翰克雷莫纳
复制链接
成员

注释:1

我不记得是谁实现的,但最近看过代码,它使用的是标准的Silverman算法。

我认为很可能已经有了这样的门票。

@nbruin公司
复制链接
贡献者

注释:2

一点hg指责sage/schemes/elliptic_curves/ell_point.pyhg历史sage/schemes/elliptic_curves/ell_point.py显示此代码来自#8496,并入sage-4.4.alpha1。此文件的下一个更改是#8827在以后的版本中。我已经验证了票据中的示例在sage-4.4上给出了相同的结果,因此错误一直存在。
请注意:

sage:[P.height(precision=P)for P in[53..70]][1.35648516097058, 1.37988660372465, 1.392904136135677,1.388358180620918, 1.390651822960756, 1.3901262440498197,1.3886249896939375, 1.3887137996432686, 1.38889123047486600,1.38868605331097548, 1.38879145662338488, 1.38876788728230994,1.388772046900726933, 1.388778979290526601, 1.388773433409450769,1.3887772462291215145, 1.3887758164353761832, 1.3887774411997285045]

所以计算可能并不是真的错。这可能只是一个精确估计的问题。

@约翰克雷莫纳
复制链接
成员

注释:3

这也是相当致命的:

鼠尾草:(3*P)。高度()/P.高度()9.19316602595430鼠尾草:(2*P)高度()/P.高度()4.09522243754782

我的猜测是,有限素数的局部贡献是好的(每个都是有理时间log(p)),它只是(两个)真实的地方。可以将其与Magma计算的实际局部高度进行比较,以验证这一点。

@jbalakrishnan公司

止动间隙:#12692

@约翰克雷莫纳
复制链接
成员

注释:5

这完全是一件琐事,我无法理解为什么我之前没有发现这一点。在该示例中,高度计算为阿基米德和非拱形构件的总和。后者是log(25)/2,按原样返回使用python内置日志函数! 这就是精度丢失的地方,比较

鼠尾草:P.高度()1.35648516097058鼠尾草:P.archimedian_local_height()+P.nonarchimedian_local_height()1/2*日志(25)-0.22066079554627852201348194382鼠尾草:RR(P.archimedian_local_height()+P.nonarchimedian_ local_hight())1.38877711688727

你想知道怎么会出错:

鼠尾草:P.archimedian_local_height(prec=53)+P.nonarchimedian_ local_high(prec=53)1.35648516097

我现在要做一个补丁。

@约翰克雷莫纳
复制链接
成员

注释:6

我有点匆忙。非拱形局部高度是一个精确的对数,这是没有问题的:

鼠尾草:P.nonarchimedian_local_height()1/2*对数(25)鼠尾草:P.nonarchimedian_local_height(prec=53)1.60943791243410鼠尾草:RR(P.nonarchimedian_local_height())1.60943791243410

都是正确的。问题在于:

鼠尾草:P.archimedian_local_height()-0.2206607955468278522013468194382sage:P.archimedian_local_height(prec=53)-0.252952751464

其中第一个是正确的,如下所示:

sage:P.archimedian_local_height()+P.非archimedian_ local_high(prec=53)1.38877711688727

但第二个不是。

@约翰克雷莫纳
复制链接
成员

注释:7

这似乎是一个数值稳定性问题。在相同的示例中,使用K的第一次嵌入,我们首先得到默认的53位精度:

鼠尾草:b2、b4、b6、b8(1.527864045, -128195.888575, -25017379.5417, -4118102250.56)鼠尾草:x-146.29844719鼠尾草:t-0.00683534254264鼠尾草:1-(b4*t**2)-(2*b6*t**3)-(b8*t**4)3.5527136788e-15号

在100位精度下:

鼠尾草:bb2,bb4,bb6,bb8(1.5278640450004206071816526625,-128195.88857503147164756896321,-2.501737954166865355077130780e7,-4.11810225056093230995708531566e9)鼠尾草:xx-146.29844718999242907073025207鼠尾草:tt-0.0068353425426405016233236537484圣人:1-(bb4*tt**2)-(2*bb6*tt**3)-(bb8*tt**4)3.51423158955889997690642550530e-15

这意味着,无论何时我们计算四个多项式中的一个(这些系数本质上是b-不变量),我们都可能会在某个点上严重失去精度。

一种解决方法是使用高于要求精度的“工作精度”。另一种方法是在算法中使用代数值而不是t、z、w的近似值,这可能会很慢,但我会尝试一下。

从长远来看,更好的解决方案是实现Mestre的AGM算法,但这只存在于目前的实际嵌入中(我已经努力扩展到复杂的情况,但仍在进行中)。

@约翰克雷莫纳
复制链接
成员

注释:8

修补程序已准备好进行审查。基本上,我们在计算高度的每个archidean分量时将工作精度提高了一倍,这就足够了。我必须添加prec作为CDF精度的别名(就像RDF的别名一样),几个doctest输出将最后一个数字更改为1。有文档测试表明问题已修复。

@约翰克雷莫纳

此评论已最小化。

@约翰克雷莫纳
复制链接
成员

已将关键字从无更改为高度

@约翰克雷莫纳
复制链接
成员

作者:约翰·克雷莫纳

@pjbruin公司
复制链接
贡献者

审核人:彼得·布鲁恩

@pjbruin公司
复制链接
贡献者

评论:11

最初的精度问题似乎可以通过补丁解决,但如果给定位置v(v)精度低于前c(答案以一串零结尾):

sage:K.<a>=数字字段(x^2-x-1)圣人:v=[0,a+1,1,28665*a-46382,2797026*a-4525688]sage:E=椭圆曲线(v)鼠尾草:P=E([72*a-509/5,-682/25*a-434/25])sage:P.archimedian_local_height(v=K.places()[1],prec=1000)2.81105581458853745263599796447519791747641640992814370122945754557165333149900887291328934930695388487942633879651281942220091469088330120430293759305481969374444866348067978423230783846520353108644485473632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

的精确度v(v)当然,不应该影响结果。

此外,默认值为前c当应用Silverman定理4.2时,当前使用的是精确位置vv(可变电压),但采用返回结果的相同默认精度就足够了,即v(v).

我写了一个补丁,修复了这两个问题;我现在要测试它。

@约翰克雷莫纳
复制链接
成员

评论:12

谢谢:你的第二点是,虽然我们仍然以双倍的精度工作,但所需的项数可以从原始精度计算出来?这很有道理。

关于第二点,用户当然有可能通过使用低精度嵌入来要求两种不同的东西,但随后要求更高的精度,而不需要优化嵌入。我首先将v(如果需要)替换为精确到“prec”的求精来解决这个问题。这可能是你的补丁所做的,所以我应该看看……事实上,这就是你所做的。

第二个补丁看起来不错,希望测试通过!

@pjbruin公司
复制链接
贡献者

注释:13

sage/schemes/elliptic_curves/中的测试都通过了,现在测试整个sage库。

如果这也成功了,我的附加更改是否仍然允许我进行积极的审核,或者我们需要一个新的审核人?

@约翰克雷莫纳
复制链接
成员

评论:14

正在答复@pjbruin公司:

sage/schemes/elliptic_curves/中的测试都通过了,现在测试整个sage库。

如果这也成功了,我的附加更改是否仍然允许我进行积极的审核,或者我们需要一个新的审核人?

也许,也许不是。威廉?

@pjbruin公司
复制链接
贡献者

评论:15

好的,所有测试都通过了。

@pjbruin公司
复制链接
贡献者

附件:trac12509高度2.patch.gz

@pjbruin公司
复制链接
贡献者

注释:16

trac12509-hights2.patch现在还使文档稍微更准确

@约翰克雷莫纳
复制链接
成员

附件:trac12509高度.patch.gz

重设为5.9贝塔5

@约翰克雷莫纳

此评论已最小化。

@约翰克雷莫纳
复制链接
成员

评论:18

我对5.9.beta5的第一个补丁做了一个小的重设基;这两个补丁仍然需要应用。我们需要一个评论员。

@pjbruin公司
复制链接
贡献者

评论:19

我暂时把自己列在评论员名单上,但这只是为了约翰的补丁。对于我所做的其他更改,其他人可能应该审阅整个问题。

我也应该重新设置补丁吗?

@约翰克雷莫纳
复制链接
成员

评论:20

正在答复@pjbruin公司:

我暂时把自己列在评论员名单上,但这只是为了约翰的补丁。对于我所做的其他更改,其他人可能应该审阅整个问题。

我也应该重新设置补丁吗?

没有必要,你的补丁仍然适用。(我唯一不适用的是sage.rings.complex_double.pyx中prec=precision的别名)

@克里斯伍特里奇
复制链接
贡献者

评论:21

我检查了两个补丁。它们干净地应用于5.9,并且测试通过。
据我所知,他们做得对。

@jdemeyer公司
复制链接

更改的审阅者来自彼得·布鲁恩彼得·布鲁恩(Peter Bruin)、克里斯·伍特里奇(Chris Wuthrich)

@jdemeyer公司

此评论已最小化。

@jdemeyer公司
复制链接

评论:24

存在文档问题:

dochtml.log:[plane_cur]/mazur/release/merger/sage-5.10.beta2/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/ell_point.py:sage.schemes.elliptic_curves.ell_point的文档字符串。EllipticCurvePoint_number_field.archimedian_local_height:49:警告:需要文本块;未找到。

@pjbruin公司
复制链接
贡献者

修复文档语法

@pjbruin公司
复制链接
贡献者

评论:25

附件:trac12509高度s3.patch.gz

@pjbruin公司

此评论已最小化。

@jdemeyer公司
复制链接

合并:圣母-5.10.beta3

免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
项目
还没有
开发

没有分支或拉请求

7名参与者