GSL 系列 6 線性代數 2 LU 分解

2021-10-05 13:49:20 字數 3903 閱讀 9984

關於 lu 分解的背景知識介紹,參見:gsl 系列 6 — 線性代數 1 — 背景知識 1 (lu 分解) 節,本篇只說明相關函式

轉置矩陣物件儲存著一列索引。第 j

jj 個數為 k

kk ,表示轉置矩陣第 j

jj 列是相應單位矩陣的第 k

kk 列,定義如下:

// gsl_permutation.h

struct gsl_permutation_struct

;typedef

struct gsl_permutation_struct gsl_permutation;

將矩陣a進行 lu 分解,然後得到轉置矩陣plu矩陣儲存在a中,signum為 1 或 -1,代表交換的次數,奇數次為 -1,偶數次為 1

因為下三角(梯形)矩陣對角線為 1,不儲存,a剛好可以方向lu

// gsl_linalg.h

intgsl_linalg_lu_decomp

(gsl_matrix * a, gsl_permutation * p,

int*signum)

;int

gsl_linalg_complex_lu_decomp

(gsl_matrix_complex * a,

gsl_permutation * p,

int*signum)

;

solve版本:給lu矩陣,p轉置矩陣,向量b,得到解向量x

svx版本: 給lu矩陣,p轉置矩陣,向量 b(就是x),得到解向量x,解向量存在x中,即solve的置換版本

refine版本:應用迭代改進的辦法求解x,還需要給乙個向量工作空間work,長度為x的長度

// gsl_linalg.h

int gsl_linalg_lu_solve (

const gsl_matrix * lu,

const gsl_permutation * p,

const gsl_vector * b,

gsl_vector * x)

;int gsl_linalg_complex_lu_solve (

const gsl_matrix_complex * lu,

const gsl_permutation * p,

const gsl_vector_complex * b,

gsl_vector_complex * x)

;int gsl_linalg_lu_svx (

const gsl_matrix * lu,

const gsl_permutation * p,

gsl_vector * x)

;int gsl_linalg_complex_lu_svx (

const gsl_matrix_complex * lu,

const gsl_permutation * p,

gsl_vector_complex * x)

;int gsl_linalg_lu_refine (

const gsl_matrix * a,

const gsl_matrix * lu,

const gsl_permutation * p,

const gsl_vector * b,

gsl_vector * x,

gsl_vector * work)

;int gsl_linalg_complex_lu_refine (

const gsl_matrix_complex * a,

const gsl_matrix_complex * lu,

const gsl_permutation * p,

const gsl_vector_complex * b,

gsl_vector_complex * x,

gsl_vector_complex * work)

;

類似地,分為無置換版本 (invert) 和置換版本 (invx),無置換時,存在矩陣inverse中,有置換時,存在lu

// gsl_linalg.h

int gsl_linalg_lu_invert (

const gsl_matrix * lu,

const gsl_permutation * p,

gsl_matrix * inverse)

;int gsl_linalg_complex_lu_invert (

const gsl_matrix_complex * lu,

const gsl_permutation * p,

gsl_matrix_complex * inverse)

;int gsl_linalg_lu_invx (gsl_matrix * lu,

const gsl_permutation * p)

;int gsl_linalg_complex_lu_invx (gsl_matrix_complex * lu,

const gsl_permutation * p)

;

最好避免通過直接求逆的方法來求解線性方程組,因為線性方程組求解函式更有效率和更準確

求解 det⁡(

a)

\det(a)

det(a)

,需要給lu矩陣

// gsl_linalg.h

double gsl_linalg_lu_det (gsl_matrix * lu,

int signum)

;gsl_complex gsl_linalg_complex_lu_det (gsl_matrix_complex * lu,

int signum)

;

求解 ln⁡(

∣det⁡(

a)∣)

\ln(|\det(a)|)

ln(∣det(a

)∣),需要給lu矩陣

// gsl_linalg.h

double gsl_linalg_lu_lndet (gsl_matrix * lu)

;double gsl_linalg_complex_lu_lndet (gsl_matrix_complex * lu)

;

求解 det⁡(

a)/∣

det⁡(a

)∣

\det(a)/|\det(a)|

det(a)

/∣det(a)

∣,需要給lu矩陣

// gsl_linalg.h

int gsl_linalg_lu_sgndet (gsl_matrix * lu,

int signum)

;gsl_complex gsl_linalg_complex_lu_sgndet (gsl_matrix_complex * lu,

int signum)

;

6 矩陣的特徵和線性代數

下面介紹矩陣的一些基本操作,包括矩陣的特徵值,三角陣,對角陣,矩陣的翻轉等,以及矩陣的一些特性,例如矩陣的秩,矩陣的跡.最後介紹了矩陣的超越函式.1 方陣的行列式 2 特徵值.特徵向量和特徵多項式 1 clear all 2 a magic 3 3 e是特徵值 4 e eig a 5 v的每一列都是...

線性代數(6) 線性對映第四講

t l v,f t in l v,f t l v,f 則t tt可以被稱為是乙個線性泛函式 linear functional v l v,f v l v,f v l v f 則v v v 稱為v vv的對偶空間 dual space v vv是有限維度的,則可推出,v v v 是有限維度的且dim...

線性代數導論2 矩陣消元

線性代數導論2 矩陣消元 第二課時 矩陣消元 本課時的目標是用矩陣變換描述消元法。核心概念是矩陣變換。一 消元法 消元法 將主對角線上的主元固定 0不能做主元 把主元下面的元素消為0。過程 先完成左側矩陣的消元 變成上三角矩陣 再回代運算右側向量,最後即可求出解完成整個消元過程 matlab也是先計...