GSL 系列 6 — 线性代数 1 — 背景知识 1

0 写在前面

本篇旨在对线性代数相关的背景知识做一些简要结论性说明,这样做的目的是为了更清楚的了解 GSL 线性代数部分的函数是在做什么,因此并不会进行推导性说明。

同时,本篇还对每个线性代数知识点提供一个说明对应 GSL 相关函数的链接页面,所以本篇还有对 GSL 线性代数部分的相关函数进行导航的功能。

由于本人知识水平有限,不免出错,敬请指出,万分感谢。

1 LU 分解

1.1 相关符号

置换矩阵: P P P
上三角 (梯形) 矩阵: U U U
下三角 (梯形) 矩阵: L L L

1.2 LU 分解

对于一般矩阵 A ( M × N ) A(M\times N) A(M×N),有如下分解:
P A = L U PA=LU PA=LU
其中: P : M × M ;        L : M × min ⁡ ( M , N )        U : min ⁡ ( M , N ) × M P:M\times M;\;\;\;L:M\times \min(M,N)\;\;\;U: \min(M,N)\times M P:M×M;L:M×min(M,N)U:min(M,N)×M;
M ≥ N M\ge N MN 时, L L L 是下单位三角(梯形)矩阵

1.3 应用

  1. 求解线性方程组 A x = b Ax=b Ax=b
  2. 求逆 A − 1 A^{-1} A1
  3. 求行列式 det ⁡ ( A ) \det(A) det(A)

1.4 相关函数说明

参见:GSL 系列 6 — 线性代数 2 — LU 分解

2 QR 分解

2.1 相关符号

Q Q Q:正交矩阵
R R R:上三角(梯形)矩阵
H H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于GSL线性代数实例,演示如何使用GSL库来解决线性方程组和求逆矩阵问题。 ```c #include <stdio.h> #include <gsl/gsl_linalg.h> int main() { // 定义矩阵和向量 double mdata[] = {1.0, 2.0, 3.0, 2.0, 4.0, 5.0, 3.0, 5.0, 6.0}; double vdata[] = {1.0, 2.0, 3.0}; gsl_matrix_view m = gsl_matrix_view_array(mdata, 3, 3); gsl_vector_view v = gsl_vector_view_array(vdata, 3); // 解决线性方程组 Ax = b gsl_vector *x = gsl_vector_alloc(3); gsl_permutation *p = gsl_permutation_alloc(3); int signum; gsl_linalg_LU_decomp(&m.matrix, p, &signum); gsl_linalg_LU_solve(&m.matrix, p, &v.vector, x); printf("Solution to Ax = b:\n"); gsl_vector_fprintf(stdout, x, "%g"); // 求矩阵的逆 gsl_matrix *inv = gsl_matrix_alloc(3, 3); gsl_matrix *mcopy = gsl_matrix_alloc(3, 3); gsl_matrix_memcpy(mcopy, &m.matrix); gsl_linalg_LU_decomp(mcopy, p, &signum); gsl_linalg_LU_invert(mcopy, p, inv); printf("Inverse of A:\n"); gsl_matrix_fprintf(stdout, inv, "%g"); // 释放内存 gsl_vector_free(x); gsl_permutation_free(p); gsl_matrix_free(inv); gsl_matrix_free(mcopy); return 0; } ``` 该程序首先定义了一个3x3的矩阵和一个长度为3的向量,并将它们存储在GSL的矩阵和向量视图中。然后,程序使用GSL库中的LU分解和求解线性方程组函数来解决线性方程组Ax=b,并打印解向量x的值。接下来,程序使用GSL库中的LU分解和求逆矩阵函数来求解矩阵A的逆,并打印逆矩阵的值。最后,程序释放了动态分配的内存。 需要注意的是,在编译该程序时,需要链接GSL库,例如: ``` gcc -o example example.c -lgsl -lgslcblas -lm ``` 此处,-lgsl和-lgslcblas选项用于链接GSL库和BLAS库,-lm选项用于链接数学库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值