久流
本章主要介绍矩阵理论的基本概念、基本运算,为理解这一数学工具打下坚实的 基础。通过本章的学习,读者将掌握矩阵的基本构造,了解它们如何通过简单的规则 进行变换,以及这些变换如何影响我们对世界的理解和解释。
当前为 MD 笔记,自:
1. 向量与矩阵
当我们在研究各种问题的时候,很多都可以数学建模转换成一个线性方程组:
⎩⎨⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯am1x1+am2x2+⋯+amnxn=bm (1-1)在线性方程组 (1-1) 中,使用 m 个方程描述 n 个未知量之间的线性关系。这种表示方式在研究问题时不够简练,为了简化问题,可以采用向量和矩阵。下面介绍向量与矩阵的概念。
2. 向量与矩阵的概念
线性方程组 (1-1) 中所有变量的系数可按相对位置排成 m 行 n 列的数集,写作:
A=a11a21⋮am1a12a22⋮am2⋯⋯⋯a1na2n⋮amn称 A 为 m×n 矩阵,简记为 A=(aij)m×n,其中 aij 表示矩阵 A 的第 i 行、第 j 列元素,简称第 (i,j) 个元素。
当 aij 取实数时,称 A 为实矩阵;当 aij 取复数时,称 A 为复矩阵。
- 当 m=n 时,称 A 为 n 阶方阵;
- 当 m<n 时,称 A 为 宽矩阵;
- 当 m>n 时,称 A 为 高矩阵。
2.1 向量及其 C 语言表示
(1)列向量
当 n=1 时,矩阵退化为:
a1a2⋮am称其为 m 维列向量,简称 m 维向量,一般用小写字母表示,如 a,b,x,y,…。
若 ai∈R,则称其为 m 维实向量,记作 a∈Rm×1,或简记为 a∈Rm。
若 ai∈C,则称其为 m 维复向量,记作 a∈Cm×1。
列向量
#include <stdio.h>
int main() { double a[3] = {1.0, 2.0, 3.0}; // 3 维实列向量
for (int i = 0; i < 3; i++) { printf("a[%d] = %.2f\n", i, a[i]); } return 0;}(2)行向量
称 [a1,a2,…,an] 为一个 n 维行向量,通常记作 aT∈R1×n 或 aT∈C1×n。
C 语言示例:行向量
#include <stdio.h>
#define ROWS 2#define COLS 3
int main(void) { double A[ROWS][COLS] = { {1.0, 2.0, 3.0}, {4.0, 5.0, 6.0} };
for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { printf("A[%d][%d] = %.2f\t", i, j, A[i][j]); } printf("\n"); }
return 0;}在 C 语言中,行向量与列向量在内存中是一样的,区别主要体现在数学意义和使用方式上。
2.2 矩阵的 C 语言表示
有了向量与矩阵的概念,方程组 (1-1) 可简洁地写为:
Ax=b(1)一般矩阵
二维数组表示矩阵
#include <stdio.h>
int main() { double A[2][3] = { {1.0, 2.0, 3.0}, {4.0, 5.0, 6.0} }; // 2×3 实矩阵
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("A[%d][%d] = %.2f\t", i, j, A[i][j]); } printf("\n"); } return 0;}(2)方阵、特殊矩阵与零矩阵
一个 n 阶方阵 A 的主对角线是从左上角到右下角、满足 i=j 的元素连线。
主对角线以外的元素全为零的方阵称为对角矩阵:
若对角矩阵的主对角线元素全部为 1,则称为单位矩阵,记为 In。
所有元素为零的矩阵称为零矩阵,记为 Om×n;所有元素为零的向量称为零向量,记为 0。
单位矩阵
#include <stdio.h>
int main() { int n = 3; double I[3][3] = {{0}};
for (int i = 0; i < n; i++) { I[i][i] = 1.0; // 单位矩阵 }
for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%.0f ", I[i][j]); } printf("\n"); } return 0;}零矩阵
double O[3][4] = {{0}}; // 3×4 零矩阵3. 矩阵的基本运算
矩阵的基本运算是处理线性变换的核心工具。本节将介绍矩阵的转置、共轭、共轭转置、求逆,以及相关的重要矩阵类型。
3.1 矩阵的转置
若 A=(aij)m×n,将其行与列互换得到 n×m 矩阵,称为 转置矩阵,记作 AT:
AT=a11a12⋮a1na21a22⋮a2n⋯⋯⋯am1am2⋮amn矩阵转置
#include <stdio.h>
int main() { double A[2][3] = {{1, 2, 3}, {4, 5, 6}}; double AT[3][2];
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { AT[j][i] = A[i][j]; } }
printf("Transpose of A:\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { printf("%.0f ", AT[i][j]); } printf("\n"); } return 0;}3.2 共轭与共轭转置
若 A 为复矩阵,对每个元素取复共轭得到 共轭矩阵 A∗:
A∗=a11∗a21∗⋮am1∗a12∗a22∗⋮am2∗⋯⋯⋯a1n∗a2n∗⋮amn∗先转置再取共轭,得到 共轭转置矩阵 AH:
AH=(AT)∗复共轭
#include <stdio.h>
// 自定义复数结构体typedef struct { double real; double imag;} Complex;
// 计算共轭Complex conjugate(Complex c) { Complex result; result.real = c.real; result.imag = -c.imag; return result;}
int main() { Complex A[2][2] = { {{1.0, 2.0}, {3.0, -1.0}}, {{4.0, -2.0}, {5.0, 0.0}} };
printf("Conjugate of A:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { Complex c = conjugate(A[i][j]); printf("(%.1f,%.1f) ", c.real, c.imag); } printf("\n"); } return 0;}3.3 矩阵的求逆
对于方阵 A,若存在方阵 B 使得
AB=BA=I则称 B 为 A 的 逆矩阵,记作 A−1。
若逆矩阵存在,A 称为 非奇异矩阵。
2×2 矩阵求逆(解析法)
#include <stdio.h>
int main() { double A[2][2] = {{4, 7}, {2, 6}}; double det = A[0][0]*A[1][1] - A[0][1]*A[1][0]; double invA[2][2];
if (det != 0) { invA[0][0] = A[1][1] / det; invA[0][1] = -A[0][1] / det; invA[1][0] = -A[1][0] / det; invA[1][1] = A[0][0] / det; }
printf("Inverse of A:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { printf("%.3f ", invA[i][j]); } printf("\n"); } return 0;}3.4 正交矩阵与酉矩阵
正交矩阵(实数)
若 A 为实方阵,且
ATA=AAT=I则称 A 为 正交矩阵。
酉矩阵(复数)
若 A 为复方阵,且
AHA=AAH=I则称 A 为 酉矩阵。
验证正交矩阵
#include <stdio.h>
int main() { double Q[2][2] = { {0.7071, -0.7071}, {0.7071, 0.7071} }; double QTQ[2][2] = {{0}};
// 计算 Q^T * Q for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { QTQ[i][j] += Q[k][i] * Q[k][j]; } } }
printf("Q^T * Q:\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { printf("%.3f ", QTQ[i][j]); } printf("\n"); } return 0;}更新中……
暂无评论