matlab 矩阵定义就是在 matlab 工作区创建二维数组,matlab 底层所有数值运算本质都是基于矩阵完成,标量可以看成一行一列的特殊矩阵,向量可以看成单行或者单列矩阵,定义矩阵核心规则是同一行元素用逗号或者空格分隔,不同行之间使用分号隔开,所有元素放在方括号内部,定义之后变量会保存在 matlab 基础工作区,可以直接参与加减乘除矩阵运算索引取值和函数调用。很多新手容易混淆普通数组和矩阵,matlab 里面不需要单独声明矩阵类型,输入元素之后系统自动识别维度,同时 matlab 还提供内置函数快速生成特殊矩阵,比如全零矩阵全一矩阵单位矩阵对角矩阵随机矩阵,这类方式比手动逐个填写元素效率高很多,也是工程建模仿真里面最常用的矩阵定义方式,理解矩阵定义之后,才能继续学习矩阵索引矩阵运算维度匹配这些后续内容。
基础手动定义语法
基础格式
变量名 = [第一行元素 第二行元素 第三行元素]
书写规则
同一行内部元素,两种写法都可以,第一种元素之间加逗号,第二种元素之间直接空格
不同行切换必须写分号,分号代表换行
方括号是矩阵定义必须符号,不能省略
示例
A = [1 2 3;4 5 6]
这个就是二行三列矩阵
B = [1,2,3;4,5,6;7,8,9]
这个就是三行三列方阵
内置函数快速矩阵定义
| 函数名称 | 功能说明 | 典型用途 |
|---|---|---|
| zeros | 生成全部元素为 0 的矩阵 | 预分配内存,循环计算之前初始化矩阵 |
| ones | 生成全部元素为 1 的矩阵 | 归一化运算权重矩阵 |
| eye | 生成单位矩阵,对角线为 1 其余为 0 | 线性代数求逆特征值计算 |
| rand | 生成零到一之间均匀随机矩阵 | 蒙特卡洛仿真随机测试 |
| randn | 生成标准正态分布随机矩阵 | 信号处理噪声矩阵 |
| diag | 根据向量生成对角矩阵,或者提取矩阵对角线元素 | 对角化运算 |
| repmat | 把原有矩阵复制拼接,生成更大矩阵 | 批量扩展矩阵维度 |
| linspace | 生成等差行向量,属于单行矩阵 | 采样点生成 |
函数调用格式说明
zeros 行数 列数
ones 行数 列数
eye 阶数
rand 行数 列数
示例
C = zeros (3,4)
定义三行四列全零矩阵
D = eye (3)
定义三阶单位矩阵
矩阵定义进阶要点
维度规则
矩阵定义完成之后,每一行元素数量必须保持一致,如果某一行元素个数和其他行不一样,matlab 会直接报维度错误,这是新手最常见报错点,手动输入元素的时候很容易漏写或者多写数字,导致行列长度不匹配。
数据类型
矩阵定义默认数据类型是 double 双精度浮点数,如果需要定义整数矩阵,可以在定义之后转换类型,也可以使用 int8 int16 这类类型构造,也可以定义复数矩阵,元素里面直接写入实部加虚部形式。
空矩阵定义
E = []
空矩阵是特殊矩阵,维度是零行零列,常用于循环里面动态拼接矩阵,很多算法初始化会先定义空矩阵,再逐步追加行或者列,但是动态追加矩阵会反复重新分配内存,矩阵规模很大的时候运算速度变慢,工程推荐优先预分配矩阵。
拼接方式定义新矩阵
已经存在矩阵之后,可以通过横向拼接纵向拼接,组合出新矩阵
横向拼接,两个矩阵行数相同,用中括号放在一起,左右合并
纵向拼接,两个矩阵列数相同,使用分号分隔,上下合并
这个方式属于矩阵定义的扩展用法,适合把多个小矩阵合成大矩阵。
常见错误场景
1 行列元素数量不一致,分号使用错误,本该换行的位置没有加分号,或者同一行错误添加分号
2 变量名命名违规,矩阵变量名以数字开头,或者使用 matlab 保留关键字
3 预分配遗漏,大矩阵循环动态增长,运行卡顿
4 维度理解错误,把行向量和列向量当成同一种矩阵,后续矩阵乘法维度不匹配
综合总结,matlab 矩阵定义分为手动输入元素和内置函数快速生成两大类,手动定义核心记住同行空格或者逗号分行加分号,特殊矩阵优先使用内置函数预分配,定义的时候保证每行元素数量一致,理解矩阵是 matlab 所有数值计算的基础对象,掌握之后才能进行矩阵索引矩阵乘法逆矩阵特征值等后续运算。
【常见问题】
问题 1,matlab 矩阵定义的时候同一行元素可以用逗号吗
回答 1,matlab 矩阵定义同一行元素可以使用逗号分隔,也可以直接空格分隔,两种写法效果一致,不同行之间必须使用分号换行,推荐统一一种写法提升代码可读性。
问题 2,matlab 矩阵定义可以提前预分配吗
回答 2,matlab 矩阵定义支持预分配,使用 zeros 或者 ones 函数提前确定行列大小,大矩阵循环运算推荐预分配,避免动态追加矩阵造成内存反复扩容降低运行速度。
问题 3,matlab 矩阵定义每行元素数量不一样会怎么样
回答 3,matlab 矩阵定义要求每一行元素个数必须相等,如果每行元素数量不一致,执行代码的时候会直接抛出维度错误,无法成功创建矩阵。
问题 4,matlab 矩阵定义空矩阵有什么作用
回答 4,matlab 矩阵定义空矩阵就是 [],属于零行零列特殊矩阵,常用于算法初始化,后续通过拼接方式逐步扩充矩阵,但是大规模矩阵不推荐长期动态拼接。
【免责申明】
本文内容基于 matlab 通用语法整理,仅用于 matlab 矩阵定义相关知识科普,不同 matlab 版本语法细节存在少量差异,不替代 matlab 官方帮助文档,实际编程请以对应版本官方说明为准。


