用Python找到线性方程组的整数解

时间:2015-09-16 06:24:04

标签: python

我正在尝试编写一个python程序来解决x_1 + 2x_2 + ... + Tx_T = a形式为x_0 + x_1 + ... + x_T = b的多项式的所有正整数解。

例如,通过蛮力,我可以证明x_1 + 2x_2 = 4 x_0 + x_1 + x_2 = 2的{​​{1}}唯一正整数解是(0,0,2)。但是,我希望有一个程序可以自行完成。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您可以使用Numpy Linear Algebra来求解方程组,即线性矩阵方程的最小二乘解。在您的情况下,您可以考虑以下向量:

import numpy as np
# range(T): coefficients of the first equation
# np.ones(T): only 'ones' as the coefficients of the second equation 
A = np.array([range(T), np.ones(T)) # Coefficient matrix
B = np.array([a, b]) # Ordinate or “dependent variable” values

然后找到解决方案如下:

x = np.linalg.lstsq(A, B)[0]

最后,您可以实现传递变量solve的<{1}}方法:

T, a b

整数解决方案 如果您只想要整数解,那么您正在查看system of linear diophantine equations.

  

每个线性丢番图方程组都可以写成:    AX = C ,其中 A m×n 整数矩阵, X n ×1 未知数的列矩阵和 C m×1 整数列矩阵。

线性丢番图方程的每个系统都可以通过计算其矩阵的Smith normal form来求解。