scipy 笔记:solve_triangular

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scipy 笔记:solve_triangular相关的知识,希望对你有一定的参考价值。

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.]

以上是关于scipy 笔记:solve_triangular的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记(十六)拓展库Scipy

scipy.signal信号处理的库(笔记06)

scipy笔记:wishart (威沙特分布)

Python数据分析入门--SciPy库学习笔记

Scipy信号分析处理(基线漂移滤波)(笔记01)

scipy笔记:FFT