解决线性方程组a * x = b对于未知x用于广场a矩阵。
如果已知数据矩阵是特定类型,则将相应的字符串提供给assume_a键选择专用求解器。可用的选项是
generic matrix
‘gen’
symmetric
‘sym’
hermitian
‘her’
positive definite
‘pos’
如果省略,'gen'是默认结构。
数组的数据类型定义与值无关的调用哪个求解器。换句话说,即使当复数数组项的虚部恰好为零时,也会根据数组的数据类型调用复数求解器。
参数:
a:(N, N) array_like平方输入数据
b:(N, NRHS) array_like右侧输入数据。
sym_pos:bool, 可选参数假设a是对称且正定的。不建议使用此 key ,建议使用假定为
lower:bool, 可选参数如果为True,则仅包含在a的下三角中的数据。默认为使用上三角。 (被忽略'gen')
overwrite_a:bool, 可选参数允许覆盖中的数据(可能会提高性能)。默认值为False。
overwrite_b:bool, 可选参数允许覆盖b中的数据(可能会提高性能)。默认值为False。
check_finite:bool, 可选参数是否检查输入矩阵仅包含有限数。禁用可能会提高性能,但是如果输入中确实包含无穷大或NaN,则会导致问题(崩溃,终止)。
assume_a:str, 可选参数有效条目已在上面说明。
transposed:bool, optional:如果真实,a^T x = b对于实数矩阵,对复杂矩阵引发NotImplementedError(仅对于True)。
返回值:
x:(N,NRHS)ndarray解决方案数组。
异常:
ValueError如果检测到大小不匹配或输入a,则不是正方形。
LinAlgError如果矩阵是奇异的。
林阿尔格警告如果检测到ill-conditioned输入a。
NotImplementedError如果转置为True,并且输入a为复数矩阵。
注意:
如果输入b矩阵是具有N个元素的一维数组,当与NxN个输入a一起提供时,尽管表观大小不匹配,它仍被视为有效列向量。这与numpy.dot()行为兼容,并且返回的结果仍然是1D数组。
通过分别调用LAPACK的?GESV,?SYSV,?HESV和?POSV例程,可以获得泛型,对称,埃尔米特和正定解。
例子:
给定a和b,求解x:
>>> a = np.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]])
>>> b = np.array([2, 4, -1])
>>> from scipy import linalg
>>> x = linalg.solve(a, b)
>>> x
array([ 2., -2., 9.])
>>> np.dot(a, x) == b
array([ True, True, True], dtype=bool)