Python 如何用参数化方法求解线性方程组?

Python 如何用参数化方法求解线性方程组?,python,numpy,linear-equation,Python,Numpy,Linear Equation,我试图通过以下方式解决我的等式: a = np.array([[1,2,4,1,0,2],[0,1,2,0,0,1],[0,0,0,2,2,0],[0,0,0,0,14,4],[0,0,0,0,0,-2]]) b = np.array([3,0,1,0,14]) x = np.linalg.solve(a,b) 然而,由于他们不是排名靠前的,所以没有单一的解决方案,而是无止境的解决方案。通常我会简单地插入一个参数,比如解决这个问题时的x3=t。然后我有一个解,其中x2和x1也可以包含t。但是我

我试图通过以下方式解决我的等式:

a = np.array([[1,2,4,1,0,2],[0,1,2,0,0,1],[0,0,0,2,2,0],[0,0,0,0,14,4],[0,0,0,0,0,-2]])
b = np.array([3,0,1,0,14])
x = np.linalg.solve(a,b)
然而,由于他们不是排名靠前的,所以没有单一的解决方案,而是无止境的解决方案。通常我会简单地插入一个参数,比如解决这个问题时的x3=t。然后我有一个解,其中x2和x1也可以包含t。但是我如何告诉python以这种方式解决它呢?或者至少告诉它x3是t并且继续使用它

我知道有租赁方的方式,但那不是我要找的


编辑:这个解决方案看起来是这样的:
x6==-7&&x5==2&&x4=-(3/2)&&x2==7-2x3&&x1==9/2
-由Mathematica制作。我只是想知道如何在python中实现相同的结果。

这其中有数学方面,也有编程方面。在数学方面,需要注意的是,如果ax=b有多个解,那么这些解就是{y+b1*t1+b_2*t_2+…+bN*tN | t1,…,tN在实数中},其中y是ax=b的任何解(如最小二乘解),b1,…,bN是a的零空间的基向量。在编程方面,
np.linalg.lstsq
获得最小二乘解,
scipy.linalg.null_空间
获得null空间。一种方法是将这些元素组合在一起,以获得与所需类似的输出,如下所示

import numpy as np
import scipy.linalg
import sys


def print_parameterized_form(a, b):
    one_solution = np.linalg.lstsq(a, b, rcond=None)[0]
    null_space_basis = scipy.linalg.null_space(a)
    for i in range(a.shape[1]):
        sys.stdout.write('x{} = {}'.format(i, one_solution[i]))
        for j in range(null_space_basis.shape[1]):
            sys.stdout.write(' + ({}) * t{}'.format(null_space_basis[i, j], j))
        sys.stdout.write('\n')

a = np.array([[1,2,4,1,0,2],[0,1,2,0,0,1],[0,0,0,2,2,0],[0,0,0,0,14,4],[0,0,0,0,0,-2]])
b = np.array([3,0,1,0,14])

print_parameterized_form(a, b)
这应该会给你这样的东西:

x0 = 4.500000000000011 + (-3.5160449919006082e-15) * t0
x1 = 1.4000000000000128 + (0.8944271909999162) * t0
x2 = 2.7999999999999887 + (-0.4472135954999573) * t0
x3 = -1.499999999999997 + (9.065580383436411e-17) * t0
x4 = 2.0000000000000004 + (4.62652890306841e-18) * t0
x5 = -6.999999999999999 + (1.86607760441072e-16) * t0
使用

屈服

{x_5: -7, x_4: 2, x_3: -3/2, x_1: -2*x_2 + 7, x_0: 9/2}

我明白了,但这对于非整数矩阵来说并不理想。这对我来说是可行的,但我不得不想,为什么像python/numpy/scipy这样大的东西还没有办法做到这一点,而不像mathematica。在使用python的情况下,是否不经常遇到此类问题?或者使用其他工具来代替?
{x_5: -7, x_4: 2, x_3: -3/2, x_1: -2*x_2 + 7, x_0: 9/2}