1 基本用法
scipy.linalg.solve_triangular(
a,
b,
trans=0,
lower=False,
unit_diagonal=False,
overwrite_b=False,
debug=None,
check_finite=True)
解决ax=b方程中的x,(假定a是一个上/下三角矩阵)
2 参数介绍
a | (M, M) array_like 三角矩阵a |
b | (M,) or (M, N) array_like |
lower | bool, optional 如果是True的话,那么a是一个下三角矩阵;否则是一个上三角矩阵(默认也是一个上三角矩阵) |
trans | {0, 1, 2, ‘N’, ‘T’, ‘C’}, optional T是转置,H是共轭转置 |
unit_diagonal | bool, optional 如果为True,则a的对角元素被假定为1并且不被引用。 |
overwrite_b | bool, optional 如果为True,结果写入原来的b |
check_finite | bool, optional 是否检查输入矩阵只包含有限的数。禁用可能会提高性能,但如果输入确实包含无限或nan,则可能导致问题(崩溃、未终止)。 |
3 使用举例
from scipy.linalg import solve_triangular
a = np.array([[3, 0, 0, 0],
[2, 1, 0, 0],
[1, 0, 1, 0],
[1, 1, 1, 1]])
b = np.array([4, 2, 4, 2])
x=solve_triangular(a,b,lower=True)
print(x)
#[ 1.33333333 -0.66666667 2.66666667 -1.33333333]
print(a @ x)
#[4. 2. 4. 2.]
如果我们设置unit_diagonal=True的话,即使原来对角线有值,也会变成1来进行计算
from scipy.linalg import solve_triangular a = np.array([[3, 0, 0, 0], [2, 1, 0, 0], [1, 0, 1, 0], [1, 1, 1, 1]]) b = np.array([4, 2, 4, 2]) x=solve_triangular(a,b,lower=True,unit_diagonal=True) print(x) #[ 4. -6. 0. 4.] print(a @ x) #[12. 2. 4. 2.] a1 = np.array([[1, 0, 0, 0], [2, 1, 0, 0], [1, 0, 1, 0], [1, 1, 1, 1]]) print(a1 @ x) #[4. 2. 4. 2.]