- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据输出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策
- MATLAB - If End 语句
- MATLAB - If Else 语句
- MATLAB - If…Elseif Else 语句
- MATLAB - 嵌套 If 语句
- MATLAB - Switch 语句
- MATLAB - 嵌套 Switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - For 循环
- MATLAB - While 循环
- MATLAB - 嵌套循环
- MATLAB - Break 语句
- MATLAB - Continue 语句
- MATLAB - End 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - 返回语句
- MATLAB - 空函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波器函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - Map 函数
- MATLAB - Mean 函数
- MATLAB - End 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - Try...Catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 2D 线性图
- MATLAB - 3D 图
- MATLAB - 格式化图形
- MATLAB - 对数坐标轴图
- MATLAB - 绘制误差条
- MATLAB - 绘制 3D 等值线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 2D 数组插值
- MATLAB - 3D 数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 2D 逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消去法
- MATLAB - 高斯-约旦消去法
- MATLAB - 简化行阶梯形式
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 其他
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 稀疏矩阵
矩阵是由数字、符号或变量按行和列排列成的二维数组。矩阵的维度表示为“m x n”,其中“m”表示行数,“n”表示列数。矩阵的各个元素通常由其行和列索引来表示,记为“aᵢⱼ”,其中“i”表示行号,“j”表示列号。
示例
这里 A 是一个 2x3 矩阵,即它有 2 行 3 列。
A = 1 2 3 4 5 6
这里 A11 = 1,A12 = 2,A13 = 3。A21 = 4,A22 = 5 和 A23 = 6。
什么是稀疏矩阵?
稀疏矩阵是一种矩阵,其中大多数元素为零。因此,与非零元素相比,您会在稀疏矩阵中看到很多零元素。
为什么我们需要稀疏矩阵?
以下是使用稀疏矩阵获得的好处:
稀疏矩阵的优点
- 高效的内存使用 - 稀疏矩阵在内存使用方面很有优势。由于大多数元素都是零,因此仅存储非零值可以节省大量内存,而存储密集矩阵(包括大量不必要的零值)则会占用更多内存。
- 计算效率 - 许多涉及稀疏矩阵的操作可以进行优化,以利用稀疏结构。与密集矩阵相比,这会导致更快的计算,因为在密集矩阵中,涉及大量零值的计算可能是浪费的。
- 降低复杂度 - 对稀疏矩阵进行操作的算法由于非零元素数量减少而往往表现出较低的复杂度。这可以导致更快的算法和更短的处理时间。
- 求解稀疏线性系统 - 稀疏矩阵经常出现在线性方程组中,并且像迭代求解器这样的专门技术比用于密集矩阵的直接方法更有效地求解稀疏线性系统。
稀疏矩阵的缺点
- 复杂的索引 - 涉及稀疏矩阵的操作通常需要更复杂的索引和数据结构来有效地导航和操作非零元素。这种复杂性可能使实现涉及稀疏矩阵的算法更具挑战性。
- 稀疏矩阵-向量乘法 - 虽然某些操作对稀疏矩阵非常有效,但与密集矩阵相比,矩阵-向量乘法效率可能较低,尤其是在稀疏模式不规则时。
稀疏矩阵的创建
在 MATLAB 中,您可以使用 sparse 函数创建稀疏矩阵。此函数允许您指定非零值及其对应的行和列索引。sparse 函数会自动将密集矩阵的非零元素转换为稀疏格式,同时省略零。
语法
S = sparse(A)
这里 A 是您要从中创建稀疏矩阵的密集矩阵。在密集矩阵中,大多数或所有元素都是非零的。
让我们从密集矩阵创建一个稀疏矩阵。
示例 1
A = [0, 0, 0, 0;0, 1, 0, 2; 0, 0, 3, 0;0, 4, 0, 5] sparse_matrix = sparse(A)
在此示例中,A 是输入的密集矩阵,sparse_matrix 是使用 sparse 函数创建的生成的稀疏矩阵。该函数会自动从密集矩阵中提取非零值及其对应的行和列索引,以创建稀疏表示。
当您在 Matlab 中执行相同的操作时,输出如下:
>> A = [0, 0, 0, 0;0, 1, 0, 2; 0, 0, 3, 0;0, 4, 0, 5] >> sparse_matrix = sparse(A) A = 0 0 0 0 0 1 0 2 0 0 3 0 0 4 0 5 sparse_matrix = Compressed Column Sparse (rows = 4, cols = 4, nnz = 5 [31%]) (2, 2) -> 1 (4, 2) -> 4 (3, 3) -> 3 (2, 4) -> 2 (4, 4) -> 5 >>
具有指定大小的非零稀疏矩阵
创建具有指定大小的非零稀疏矩阵涉及提供矩阵的维度以及非零元素的位置和值。
示例
num_rows = 5; num_cols = 5; nonzero_rows = [1, 2, 3, 4] nonzero_cols = [2, 4, 1, 3] nonzero_vals = [10, 20, 30, 40] sparse_matrix = sparse(nonzero_rows, nonzero_cols, nonzero_vals, num_rows, num_cols)
在上面的示例中,创建的稀疏矩阵将具有 5x5 的维度。它将在位置 (1,2)、(2,4)、(3,1) 和 (4,3) 处具有非零元素,相应的数值为 10、20、30 和 40。
当您在 matlab 命令窗口中执行上述示例时,输出为:
>> num_rows = 5; num_cols = 5; nonzero_rows = [1, 2, 3, 4] nonzero_cols = [2, 4, 1, 3] nonzero_vals = [10, 20, 30, 40] sparse_matrix = sparse(nonzero_rows, nonzero_cols, nonzero_vals, num_rows, num_cols) nonzero_rows = 1 2 3 4 nonzero_cols = 2 4 1 3 nonzero_vals = 10 20 30 40 sparse_matrix = Compressed Column Sparse (rows = 5, cols = 5, nnz = 4 [16%]) (3, 1) -> 30 (1, 2) -> 10 (4, 3) -> 40 (2, 4) -> 20 >>
广告