线性代数光速入门

news/2025/1/22 15:01:10/文章来源:https://www.cnblogs.com/zhangtj/p/18685348

多年前写的笔记,由 gpt-4o-mini 整合及提供代码,欢迎纠错。

1. 向量与线性空间

1.1 向量的定义与基本操作

  • 向量:向量是具有大小和方向的量,可以在一维、二维或更高维空间中表示。在编程中,向量通常表示为一维数组。
  • 向量加法:两个向量的加法是对应元素相加。例如,对于二维向量 \(v_1 = (x_1, y_1)\)\(v_2 = (x_2, y_2)\),它们的和是 \(v_1 + v_2 = (x_1 + x_2, y_1 + y_2)\)
  • 数乘:一个向量与一个标量(实数或常数)相乘,称为数乘。例如,对于向量 \(v = (x, y)\) 和标量 \(k\),它们的数乘是 \(k \cdot v = (k \cdot x, k \cdot y)\)
  • 点积:两个向量的点积(内积)是它们对应元素的乘积的和。例如,二维向量 \(v_1 = (x_1, y_1)\)\(v_2 = (x_2, y_2)\) 的点积是 \(v_1 \cdot v_2 = x_1 \cdot x_2 + y_1 \cdot y_2\)

1.2 线性空间(向量空间)

  • 定义:线性空间是一个向量的集合,其中的元素(向量)可以进行向量加法和数乘操作,并且满足一些基本的代数性质。常见的线性空间有欧几里得空间、矩阵空间等。

  • 线性空间的公理:线性空间需要满足以下性质:

    • 加法封闭性:对于任何两个向量 \(v_1\)\(v_2\),它们的和 \(v_1 + v_2\) 仍然在该空间内。
    • 数乘封闭性:对于任何向量 \(v\) 和标量 \(k\),数乘 \(k \cdot v\) 仍然在该空间内。
    • 存在零向量:存在一个零向量 \(0\),使得对任意向量 \(v\),有 \(v + 0 = v\)
    • 存在负向量:对于每个向量 \(v\),存在一个向量 \(-v\),使得 \(v + (-v) = 0\)
  • 基与维度

    • 线性基:线性空间中一组极大线性无关的向量称为该空间的基。任何一个空间中的向量都可以表示为基向量的线性组合。
    • 维度:线性空间的维度是其基中向量的个数。

2. 矩阵基础知识

2.1 矩阵

矩阵是一个按行和列排列的二维数组。矩阵常用于表示线性方程组、线性变换等。一个 \(m \times n\) 的矩阵由 \(m\)\(n\) 列的元素构成。

示例:

\[ A = \begin{pmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{pmatrix} \]

2.2 矩阵的秩

矩阵 \(A\) 的秩(记作 \(rank(A)\))是矩阵中线性无关的行或列的最大数目。换句话说,矩阵的秩反映了矩阵在其行空间或列空间中的维度。

对于一个 \(m×n\) 的矩阵 \(A\),它的秩有以下几种等价的定义:

  • 最大线性无关行数:矩阵的秩等于矩阵中最大数量的线性无关行。
  • 最大线性无关列数:矩阵的秩等于矩阵中最大数量的线性无关列。
  • 行空间的维度:矩阵的秩等于其行空间的维度。
  • 列空间的维度:矩阵的秩等于其列空间的维度。

2.3 矩阵的加法(减法)

两个同型矩阵(即行数和列数相同)可以进行加法,方法是对应元素相加。

\[ A + B = \begin{pmatrix} a_{11} + b_{11} & a_{12} + b_{12} & \dots \\ a_{21} + b_{21} & a_{22} + b_{22} & \dots \\ \vdots & \vdots & \ddots \end{pmatrix} \]

2.4 矩阵的数乘

一个矩阵可以与一个标量进行数乘,方法是将矩阵中的每个元素都乘以该标量。

\[ k \cdot A = \begin{pmatrix} k \cdot a_{11} & k \cdot a_{12} & \dots \\ k \cdot a_{21} & k \cdot a_{22} & \dots \\ \vdots & \vdots & \ddots \end{pmatrix} \]

2.5 矩阵的乘法

两个矩阵相乘的条件是第一个矩阵的列数等于第二个矩阵的行数。矩阵乘法的元素是通过按行列进行乘法和求和得到的。

\[C = A \times B \quad \text{其中} \quad c_{ij} = \sum_{k=1}^n a_{ik} b_{kj} \]

2.6 矩阵的转置

矩阵的转置是将矩阵的行与列交换。

\[ A^T = \begin{pmatrix} a_{11} & a_{21} & \dots \\ a_{12} & a_{22} & \dots \\ \vdots & \vdots & \ddots \end{pmatrix} \]

2.7 矩阵的初等行变换

在初等行变换后新矩阵等价于原矩阵。

初等行变换包括三种基本操作,分别是:

  1. 行交换(Row Swap)

    • 将矩阵的两行交换。即,将矩阵的第 \(i\) 行和第 \(j\) 行互换。
    • 例如,对于矩阵 \(A\),行交换操作可以表示为:

      \[R_{i \leftrightarrow j}(A) \]

  2. 行倍加(Row Scaling)

    • 将矩阵的某一行乘以一个非零常数。
    • 例如,将矩阵的第 \(i\) 行乘以标量 \(c\)

      \[R_{i \to c \cdot R_i}(A) \]

  3. 行加倍(Row Replacement)

    • 将矩阵的某一行加上另一行的倍数。例如,将第 \(i\) 行加上第 \(j\) 行的 \(c\) 倍,结果更新为第 \(i\) 行:

      \[R_{i \to R_i + c \cdot R_j}(A) \]

这三种操作可以单独使用,也可以结合使用,目的是简化矩阵或将其转化为某种标准形式。

2.8 其它

增广矩阵、阶梯型矩阵、上三角矩阵……

3. 高斯消元法与高斯约旦消元法

OI-wiki 中所写的大多数人知道的高斯消元其实是高斯约旦消元。原始的高斯消元仅仅用于行列式求值。

3.1 高斯消元法

高斯消元法(Gaussian Elimination)是一种求解线性方程组的经典算法,它通过行变换将系数矩阵化为上三角形或阶梯形,从而便于回代求解。

步骤:
主元选择:对每一列,选择绝对值最大的元素作为主元,进行行交换。
消元:通过行变换消去当前列的下方元素,使得矩阵变为上三角形。
回代:从最后一行开始,逐行回代求解未知数。

部分代码(高斯消元法)


3.2 高斯约旦消元法

高斯约旦消元法(Gauss-Jordan Elimination)是高斯消元法的一个扩展,它不仅将矩阵转化为上三角形,还将其转换为 对角矩阵(主对角线上的元素为 1)。此方法常用于求解矩阵的逆和对行列式求值。

步骤:

  1. 主元选择:选择绝对值最大的元素作为主元,进行行交换。
  2. 消元:消去当前列的所有元素,使得对角线上的元素为 1,其他元素为 0。

部分代码(高斯约旦消元法)

double a[N][N]; // a[i][j] 表示第 i 个方程中第 j 个元的系数,a[i][n+1] 为等号右侧的常数项
void Gauss() {for (int i = 1; i <= n; i++) {int mxo = i;for (int j = 1; j <= n; j++) {if (fabs(a[j][i]) > fabs(a[mxo][i])) mxo = j;}// 行交换for (int j = 1; j <= n + 1; j++) swap(a[i][j], a[mxo][j]);if (fabs(a[i][i]) < eps) continue; // 无解或有无数解// 消元for (int j = 1; j <= n; j++) {if (i == j) continue;double tmp = a[j][i] / a[i][i];for (int k = i; k <= n + 1; k++) {a[j][k] -= a[i][k] * tmp;}}}
}

4. 求解逆矩阵

逆矩阵(Inverse Matrix)是指对于一个 \(n \times n\) 的矩阵 \(A\),若存在一个矩阵 \(B\),使得 \(A \times B = B \times A = I_n\),则称 \(B\)\(A\) 的逆矩阵,记作 \(A^{-1}\)

通过高斯约旦消元法可以计算矩阵的逆:

步骤:

  1. 将矩阵 \(A\) 扩展为 \([A | I_n]\)
  2. 通过高斯约旦消元,将左边的 \(A\) 变为单位矩阵,右边就变为 \(A^{-1}\)

部分代码(求逆矩阵)

bool Inverse() {for (int i = 1; i <= n; i++) {if (fabs(a[i][i]) < eps) return false; // 不可逆for (int j = 1; j <= n; j++) {if (i != j) {double tmp = a[j][i] / a[i][i];for (int k = 1; k <= 2 * n; k++) {a[j][k] -= a[i][k] * tmp;}}}}return true;
}

5. 行列式求值

行列式是一个与矩阵紧密相关的量,常用于描述矩阵对应的线性变换的几何特性。行列式的值表示矩阵所对应的变换在几何上的伸缩因子(如面积或体积的变化)。

5.1 行列式的定义与计算

行列式是一个标量,可以通过递归方法(按行或按列展开)计算。对于 \(2 \times 2\)\(3 \times 3\) 矩阵,行列式有简便的计算公式。

\(2 \times 2\) 矩阵行列式:

\[\det(A) = \begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc \]

\(3 \times 3\) 矩阵行列式:

\[\det(A) = \begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} = a(ei - fh) - b(di - fg) + c(dh - eg) \]

对于更高维度的矩阵,行列式的计算可以通过递归展开来进行。

部分代码(行列式计算)

double det(int n, double a[N][N]) {double res = 1;for (int i = 1; i <= n; i++) {if (fabs(a[i][i]) < eps) return 0; // 行列式为 0res *= a[i][i];}return res;
}

5.2 行列式的几何意义

行列式可以解释为由矩阵的行或列向量所构成的超平行多面体的有向面积或体积。它是描述线性变换对几何图形的影响的重要量。例如,在二维空间中,行列式的绝对值表示由矩阵的列向量所形成的平行四边形的面积。

6. 模意义下的线性代数

6.1 模矩阵的加法与乘法

模意义下的矩阵加法和乘法与普通矩阵加法和乘法相同,只是每次计算时都要对模 \(p\) 取余。

6.2 模意义下的高斯消元法

在模意义下,消元法也可以在有限域上进行,但需要特别注意矩阵中元素的运算是模 \(p\) 的运算。

步骤:

  1. 选择主元:与普通高斯消元法相同,首先需要选择主元并进行行交换。
  2. 消元:消去当前列的下方元素,所有的运算都在模 \(p\) 的有限域中进行。

部分代码(模意义下的高斯消元法)

void GaussMod(int n, int a[N][N], int p) {for (int i = 1; i <= n; i++) {int mxo = i;for (int j = i + 1; j <= n; j++) {if (abs(a[j][i]) > abs(a[mxo][i])) mxo = j;}for (int j = 1; j <= n; j++) swap(a[i][j], a[mxo][j]);if (a[i][i] == 0) continue; // 无解int inv = modInverse(a[i][i], p); // 求模逆for (int j = i + 1; j <= n; j++) {int tmp = a[j][i] * inv % p;for (int k = i; k <= n; k++) {a[j][k] = (a[j][k] - a[i][k] * tmp % p + p) % p;}}}
}

6.3 异或线性空间

它是一个有限的向量空间,其中向量的加法是通过异或操作来进行的。一个向量空间可以通过一组基向量来表示,任何一个向量都可以表示为基向量的异或组合。

异或线性空间相当于模 \(2\) 意义下的线性空间。

在异或线性空间中,运算是通过二进制位的异或运算进行的,主要用于处理与二进制相关的算法问题,如 异或基 的构建。

部分代码(异或线性基)

ll base[55], ans;
bool insert(ll x) {for (int i = 50; i >= 0; i--) {if (x >> i & 1) {if (base[i]) x ^= base[i];else {base[i] = x;return 1;}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873257.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

米尔瑞芯微第二代8nm高性能AIOT平台-RK3576开发板怎么样?

文章来源公众号:电子开发学习 瑞芯微近期推出了第二代8nm高性能AIOT平台——RK3576。 RK3576应用方向指向工业控制及网关,云终端,人脸识别设备,车载中控,商显等等。参数方面,内置了四核Cortex-A72+四核Cortex-A53,频率最高2.2GHz,内置ARM G52 MC3 GPU,NPU算力高达6TO…

openssl头文件出现DEPRECATEDIN_1_1_0导致引入头文件时程序无法编译

openssl头文件出现DEPRECATEDIN_1_1_0导致引入头文件时程序无法编译我使用的是unbuntu20.04版本中,通过apt安装的openssl,发现openssl中的多个库文件中会出现类似DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)),导致引入头文件时无法编译成功. 例如bio.…

人工智能创新型教师培育计划(第一期)

Skip to contentOpenHydraSearchKMain Navigation首页 课程新一代人工智能经典实验【中学】 XEdu系列【中学】 中小学AI开源课程倡议使用指南活动获取支持On this page人工智能创新型教师培育计划(第一期) 一、组织单位 二、活动背景 三、活动内容 四、活动安排 五、师资介绍…

前置数学

一些必要 trick推式子,先提 \(\sum\) 和 \(\Pi\) 到最前面,然后从后往前合并,必要时考虑更改 \(\sum\) 的取值 看到次方变为斯特林数,\(x^n=\sum\limits_{i=0}^{n} {n \brace i}{x \choose i}i!=\sum\limits_{i=0}^{n}\sum\limits_{i=1}^m{(-1)^{m-i}\frac{i^n}{(m-i)!}}{x…

MUX-VLAN

MUX VLAN(Multiplex VLAN)是一种高级的VLAN技术,它通过在交换机上实现二层流量隔离和灵活的网络资源控制,提供了一种更为细致的网络管理方式。 一、基本概念 MUX VLAN分为主VLAN(Principal VLAN)和多个子VLAN(Subordinate VLAN)。 主VLAN是MUX VLAN配置中的核心VLAN,它…

OpenWrt 挂载 SMB

通过OpenWrt挂载smb存储,并再通过smb分享(实现分布分享统一入口?)添加用户 依赖 opkg install shadow-common opkg install shadow-useradd添加 smb 专用用户 useradd YOUR_SMB_USER_NAME将用户与 smb 服务关联 smbpasswd -a YOUR_SMB_USER_NAMEOpenWrt 设置 挂载 SMB 网络共…

高效批量工作流导入及脚本上线,利用DolphinScheduler接口轻松实现

实现了批量生成DolphinScheduler的任务,当导入时发现只能逐个导入,因此通过接口实现会更方便。 DolphinScheduler接口文档 DolphinScheduler是有接口文档的,地址是 http://IP:12345/dolphinscheduler/swagger-ui/index.html?language=zh_CN&lang=cn不过这文档写的比较简…

IDEA如何打开每日提示?

前言 大家好,我是小徐啊。我们在使用IDEA开发Java应用的时候,经常需要使用IDEA的各种各样的技巧,提示。这个在每次IDEA打开的时候,会自动弹出来。但有时候,我们可能不小心把这个提示设置成关闭了,导致后面打开IDEA的时候,再也不弹出这个提示了。这样我们可能就不能很全面…

如何用vscode打开obj、glb文件,查看3D文件

方案1:安装插件 3D Viewer for VSCode,安装完可以查看obj 但是不懂为啥是白色的 glTF Tools,安装完可以查看gltf 启动位置在右上角:白色小山的图标 这个效果不错,看起来比较舒服。 但是gltf从哪里来呢? 首先我们有一个glb文件,右键它,点击倒数第二行的“glTF: import …

时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究

在进行时间序列分析之前,确定序列的平稳性是一个关键步骤。平稳性指的是时间序列的统计特性(如均值和方差)在时间维度上保持不变。本文将详细介绍如何运用 KPSS 检验和 Dickey-Fuller 检验来验证序列的平稳性。这两种检验方法基于不同的统计假设:KPSS 检验的原假设是数据非…

Svelte 最新中文文档翻译(4)—— 符文(Runes)下

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

固定测斜探头 土体位移变化数据支持 助力工程监测 无线传输

固定测斜探头 土体位移变化数据支持 助力工程监测 无线传输FI系列固定测斜探头是一款专为土体内部位移变化监测而设计的高精度测量仪器。无论是深基坑开挖、地铁地基、公路地基、挡土墙、坝体、尾矿库还是山体滑坡等工程项目,我们的测斜探头都能提供准确可靠的数据支持。该测斜…