解决#
- scipy.linalg.solve(a, b, lower=False, overwrite_a=False, overwrite_b=False, check_finite=True, assume_a='gen', transposed=False)[源代码][源代码]#
求解方阵 a 的线性方程组
a @ x == b
中的未知数x
。如果已知数据矩阵是特定类型,那么向
assume_a
键提供相应的字符串可以选择专用求解器。可用的选项有通用矩阵
‘生成’
对称
‘sym’
hermitian
“她”
正定
‘位置’
如果省略,
'gen'
是默认结构。数组的类型定义了调用哪个求解器,无论其值如何。换句话说,即使复数数组的条目具有精确的零虚部,也会根据数组的类型调用复数求解器。
- 参数:
- a(N, N) array_like
平方输入数据
- b(N, NRHS) array_like
右侧的输入数据。
- 下限bool, 默认值: False
如果 ``assume_a == ‘gen’``(默认),则忽略此项。如果为 True,计算仅使用 a 的下三角部分的数据;对角线以上的条目将被忽略。如果为 False(默认),计算仅使用 a 的上三角部分的数据;对角线以下的条目将被忽略。
- overwrite_abool, 默认值: False
允许覆盖 a 中的数据(可能会提高性能)。
- overwrite_bbool, 默认值: False
允许覆盖 b 中的数据(可能会提高性能)。
- check_finitebool, 默认: True
是否检查输入矩阵是否仅包含有限数值。禁用可能会提高性能,但如果输入包含无穷大或NaN,可能会导致问题(崩溃、无法终止)。
- 假设_astr, {‘gen’, ‘sym’, ‘her’, ‘pos’}
有效条目如上所述。
- 转置bool, 默认值: False
如果为真,求解
a.T @ x == b
。对于复数 a,抛出 NotImplementedError。
- 返回:
- x(N, NRHS) ndarray
解决方案数组。
- Raises:
- ValueError
如果检测到大小不匹配或输入 a 不是方阵。
- LinAlgError
如果矩阵是奇异的。
- LinAlgWarning
如果检测到条件不佳的输入 a。
- NotImplementedError
如果 transposed 为 True 且输入 a 是一个复数矩阵。
注释
如果输入的 b 矩阵是一个包含 N 个元素的一维数组,当与一个 NxN 的输入 a 一起提供时,尽管存在明显的尺寸不匹配,它仍被视为有效的列向量。这与 numpy.dot() 的行为兼容,返回的结果仍然是一个一维数组。
通过分别调用 LAPACK 的 ?GESV、?SYSV、?HESV 和 ?POSV 例程,可以获得通用、对称、厄米特和正定解。
示例
给定 a 和 b,求解 x:
>>> import numpy as np >>> 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)