如何获得对称以给出具有较小系数的解决方案

How to get sympy to give solutions with smaller coefficients

提问人:Simd 提问时间:10/25/2021 最后编辑:Simd 更新时间:10/31/2021 访问量:270

问:

考虑以下示例 丢番图方程

-118w + 989x + 918y  -512z == 0

您可以通过以下方式解决此问题:

import sympy
from sympy.solvers.diophantine import diophantine 
w, x, y, z = sympy.symbols('w x y z')
a, b, c, d = -118, 989, 918, -512
diof = list(diophantine(a*w + b*x +c*y +d*z ))[0]
print(diof)

这给了:

(t_0, 118*t_0 + 2*t_1, 1690468*t_0 + 28937*t_1 + 256*t_2, 3031184*t_0 + 51887*t_1 + 459*t_2)

说明:此解决方案允许您自由选择三个整数 t_0、t_1、t_2,然后您可以从那里计算 w、x、y、z 的值。

这很好,只是系数总是比它们需要的要大得多。如果你在 Mathematica 中求解相同的系统,你会得到:

x = 2 c_2, y = 9 c_2 + 256 c_3 + 81 w, z = 20 c_2 + 459 c_3 + 145 w, c_2 element Z and c_3 element Z

艺术

enter image description here

以与sympy解决方案相同的样式重写,这将是:

(t_0, 2*t_1, 9*t_1 + 256*t_2 + 81*t_0, 20*t_1 + 459*t_2 + 145*t_0)

是否有可能得到对称性来给出具有类似小系数的线性丢番图方程的解?


修复了 sympy 代码中的错别字。

Python 数学 对称

评论

0赞 smichr 10/29/2021
参见这个问题
0赞 ferdy 10/30/2021
sympy 解决方案显示 3 个变量,t0、t1 和 t2,而 Mathematica 只显示 c2 和 c3。所以系数相似性没有可比性。
0赞 Simd 10/30/2021
@ferdy是一样的。我已经更新了问题以显示这一点。
0赞 ferdy 10/31/2021
@Anush,但是请注意丢番图解的输出格式,X 基于 t_0,T1,而在 Mathematica 中,X 仅基于 t_1。查看对称的 diopantine 文档,diophantine 没有选项给出解决方案,其中 x(第二项)将仅基于 t_1。因此,当前的丢番图无法解决 mathematica 解决方案格式的作用。你可以去 sympy github repo 并要求一个功能来模拟 mathematica 解决方案格式。

答: 暂无答案