Python:求解方程组(系数是数组)

时间:2014-07-24 19:43:26

标签: python-2.7 numpy matrix linear-algebra determinants

我可以像这样解决系统方程式(使用NumPY):

>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> y = np.linalg.solve(a, b)
>>> y
array([ 2.,  3.])

但是,如果我得到这样的东西:

>>> x = np.linspace(1,10)
>>> a = np.array([[3*x,1-x], [1/x,2]])
>>> b = np.array([x**2,8*x])
>>> y = np.linalg.solve(a, b)

它不起作用,矩阵的系数是数组,我想为数组“x”的每个元素计算数组解“y”。另外,我无法计算

>>> det(a)

问题是:怎么做?

1 个答案:

答案 0 :(得分:1)

查看docs页面。如果要解决多个线性方程组,可以发送多个数组,但它们必须具有形状(N,M,M)。这将被视为N MxM数组的堆栈。来自以下文档页面的引用,

  

如果将多个矩阵堆叠到同一个数组中,则上面列出的几个线性代数例程能够一次计算几个矩阵的结果。这在文档中通过输入参数规范表示,例如:(...,M,M)array_like。这意味着如果例如给定输入数组a.shape ==(N,M,M),则将其解释为N个矩阵的“堆栈”,每个矩阵的大小为M-by-M。类似的规范适用于返回值,例如行列式具有det:(...)并且在这种情况下将返回形状det(a).shape ==(N,)的数组。这推广到高维数组上的线性代数运算:多维数组的最后1或2维被解释为向量或矩阵,适用于每个操作。

当我运行你的代码时,我得到了,

>>> a.shape
(2, 2)

>>> b.shape
(2, 50)

不确定您要解决的确切问题,但您需要重新考虑您的输入。您希望a具有形状(N,M,M)b形状(N,M)。然后,您将返回一个形状(N,M)的数组(即N解决方案向量)。