關於 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 分解,然後得到轉置矩陣p
,lu
矩陣儲存在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也是先計...