Matlab学习01-矩阵

news2024/10/24 7:38:19

目录

一,矩阵的创建

1,直接输入法创建矩阵

2,利用M文件创建矩阵

3,利用其它文本编辑器创建矩阵

二,矩阵的拼接

1,基本拼接

1) 水平方向的拼接

2)垂直方向的拼接 

3)拼接函数 

三,矩阵的寻访

1,下标寻访(全下标方式)

 2,单元素寻址(单下标方式)

3,多元素寻址


矩阵是进行数据处理和运算的基本元素。

一,矩阵的创建

 矩阵的创建主要有四种方法:直接输入法,利用M文件创建矩阵,利用其它文本编辑器建立矩阵,利用matlab内置函数建立矩阵。

1,直接输入法创建矩阵

直接输入法:直接从键盘输入矩阵的元素。
将矩阵的元素用方括号 [] 括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号 , 隔开,不同行的元素之间用分号 ; 或回车符分隔。如下创建三行两列的矩阵👇

Matrix=[1,2;3,4;5,6] 


也可以使用matlab的系统内置特殊函数来创建矩阵,如下👇
1)使用zeros函数,创建元素全部为0的矩阵

2)使用ones函数,创建元素全部为1的矩阵

3)使用eye函数,创建单位矩阵,单位矩阵是方阵,行和列的数量必须相等

4)使用rand函数,创建在(0,1)区间均匀分布的随机矩阵

5)使用randn函数,创建均值为0,方差为1的标准正态分布随机矩阵

6)使用hilb函数,创建Hilbert希尔伯特矩阵(方阵)

7)使用magic函数,创建魔法矩阵(方阵)

2,利用M文件创建矩阵

利用M文件创建矩阵:使用系统自带的文本编辑调试器专门建立一个M文件。
如下,如果当前界面没有文本编辑器的窗口↓

在命令行中输入edit,并回车↓

之后在m文件中编写代码,输入待建矩阵(三行两列)↓

Matrix=[1,2;3,4;5,6]  

保存m文件的时候,不能和里面的变量名一样,不然无法识别。

接着,在matlab命令行窗口中输入包含矩阵的m文件的文件名,就可以自动创建一个名为m_Matrix的矩阵,可供以后使用。因此,如果遇到矩阵比较大,不想重复创建的话,建议使用这种方式创建矩阵。
因为我习惯性在每个语句的结束位置加上分号,所以当我输入m_Matrix后,没有矩阵输出↓

这个时候只需要将分号去掉即可↓

3,利用其它文本编辑器创建矩阵

利用其它文本编辑器创建矩阵:例如编辑一个文本文件。
在记事本中输入:

16.0 3.0 2.0 9.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0

编辑好之后 ctrl+s 保存(这里留了一个小坑)

再回到matlab命令行窗口输入命令: load t_Matrix.txt,会报错↓

之所以报错,是因为在matlab工具箱的搜索路径里面没有txt目录(也就不会有在txt目录下的t_Matrix.txt文件),这个时候有两个方法解决,一个是只添加txt路径,另外一个是添加整个自建matlab工程所在的目录。这里我为了后期方便,直接添加整个目录(包含下面的子目录)↓。

之后就会将自创的matlab目录下的全部子文件加载到matlab软件的搜索路径下↓

再重新输入命令:

 load t_Matrix.txt



这次没有报错,在工作区可以看到t_Matrix的文件中的矩阵大小:4\times4(四行四列)
【当加载的文件过多并且开始杂乱的时候,可以在matlab命令行窗口输入clear清空工作区,清空之后如果还想用,就得需要重新加载】
之后在matlab命令行窗口输入加载进去的文件名t_Matrix,如下👇所示

可以看到在M编辑器窗口参看文件的结构及数据排列。

二,矩阵的拼接

两个或者是两个以上的单个矩阵,按一定的方向进行链接生成新的矩阵,就是矩阵的拼接。

矩阵的拼接是一种创建矩阵的特殊方法,它的基础元素是原始矩阵

1,基本拼接

 矩阵的拼接有水平方向的拼接和垂直方向的拼接。

1) 水平方向的拼接

水平方向的拼接语法:

新矩阵名=[参与拼接的矩阵1,参与拼接的矩阵2] 或新矩阵名=[参与拼接的矩阵1 参与拼接的矩阵2] 

C=[A,B] 或  C=[A\, B]

可以看到,在对矩阵进行水平方向的结构操作时,都是默认使用逗号或者是空格隔开,和之前学习的创建矩阵一样。

设参与拼接的两个矩阵,其中一个矩阵为M_{a} \times N_{a},另外一个矩阵为M_{b} \times N_{b},则新生成的矩阵为M_{a} \times (N_{a}+N_{b}),即新矩阵的列数是两个原矩阵的列数相加,行数不变。
【注意】:要串联的数组的维度必须一致,对于水平方向的拼接来说,只需要将两个原矩阵的行数设置一样就行,列数无要求,可多可少。

如下,将矩阵matrix1和矩阵matrix2进行水平拼接,得到新的矩阵,如下👇

2)垂直方向的拼接 

垂直方向的拼接语法:

新矩阵名=[参与拼接的矩阵1参与拼接的矩阵2]                       % 推荐这种方法进行拼接

或 新矩阵名=[参与拼接的矩阵1

参与拼接的矩阵2] 

C=[A;B] 

  或C=[A

B]

可以看到,在对矩阵进行垂直方向的结构操作时,都是默认使用分号或者是回车键隔开,和之前学习的创建矩阵一样。

设参与拼接的两个矩阵,其中一个矩阵为M_{a} \times N_{a},另外一个矩阵为M_{b} \times N_{b},则新生成的矩阵为(M_{a}+M_{b}) \times N_{a},即新矩阵的行数是两个原矩阵的列数相加,列数不变。
【注意】:要并联的数组的维度必须一致,对于垂直方向的拼接来说,只需要将两个原矩阵的列数设置一样就行,行数无要求,可多可少。

如下,将矩阵matrix1和矩阵matrix2进行垂直方向拼接,得到新的矩阵,如下👇

 

3)拼接函数 

 在matlab中,除了使用矩阵拼接符 [\, ]外,还可以使用矩阵拼接函数来拼接矩阵。

matlab中的矩阵拼接函数
horzcat水平拼接
vertcat垂直拼接
cat指定维数拼接

可以看到,cat函数有两种不同的参数列表,一个是只有两个矩阵进行拼接,另外一个是多个矩阵进行拼接。现以第一个为例(只有两个矩阵进行拼接),当dim输入不同,拼接的方法也会不同:

  • dim=1,沿垂直方向上对两个矩阵进行拼接。
  • dim=2,沿水平方向上对两个矩阵进行拼接。
  • dim=3,三维矩阵
repmat通过对现有矩阵的复制和粘贴操作拼接
blkdiag现有矩阵构造一个块对角矩阵

cat函数的dim=3时,对应的效果如下👇( matrix1=ones(3,2),matrix2=zeros(3,2))

其它函数现在暂时用不到,之后遇到了再来补充。如果有兴趣的可以自行去了解并学习。

三,矩阵的寻访

 在matlab中,矩阵的寻访主要有:下标寻访,单元素寻访,多元素寻访。

1,下标寻访(全下标方式)

matlab中矩阵的下标表示与常用的数学习惯相同:使用分别表示行和列的“双下标”,矩阵中的元素都有对应的第几行,第几列。这种表示方法简单直观,几何概念比较清晰。

例如我有一个矩阵:

 如果我想要输出矩阵的第三行第二个元素:6,那么我就需要写上矩阵的名字matrix加上小括号,小括号里面传入行的序号和列的序号(第一行第一列用(1,1)表示),因此输出元素6的语句如下:

 2,单元素寻址(单下标方式)

单元素寻址就是将矩阵看成一维的向量(扁平化)。依旧是之前的矩阵:

 如果我想要取出元素6,使用单下标的方式,就是矩阵名加上小括号,小括号内输入元素6横着数的序号6:

当矩阵数据较多,不能在较短时间内通过序号数到所要找的元素时,推荐通过行和列的表达式来找到对应元素的序号。假设一个矩阵为M \times N(M行N列),要找到第 m行第n列元素的序号sn则   sn=(n-1)*M+m

例如,我有一个十三行十列的矩阵

13\times10=130个元素,元素从1开始并递增(主要是为了方便查看计算结果是否正确)。

% 创建一个包含从 1 到 130 的向量
data = 1:130
% 将向量重塑为 13 行 10 列的矩阵
matrix = reshape(data, 13, 10)

 如果我要使用单下标的方式找到第十二行,第五列的元素64

那么,通过表达式可知:sn=(n-1)*M+m=(5-1)*13+12=64

所以元素64在扁平化的一维向量中的第64位。编写语句:matrix(64)

就可以通过单下标找到对应的元素。

再举一个矩阵的例子

matrix1=[1,2,3,4,5,6,7,8,9,10,11,12,13;14,15,16,17,18,19,20,21,22,23,24,25,26;27,28,29,30,31,32,33,34,35,36,37,38,39] 

要找到第二行第五列的元素18,对应的序号sn=(n-1)\times M+m=(5-1)\times 3+2=14
 

 通过单下标寻址得到元素 18 ↓

3,多元素寻址

多元素寻址的语法:

矩阵名[预查找行的起始位预查找行的结束位 预查找列的起始位预查找列的结束位 

例如我有一个三行十列的矩阵:
 接下来通过矩阵多元素寻址,包括寻址该矩阵的

  • 某一行或某一列的若干元素;
    ① 第二行的第三,四,五列的元素。行只需要一个数,列的位置放置两个数并用冒号分隔。

    ② 第二列的第一,二,三行的元素
  • 访问整行,整列元素;
    ①整个第二行

    ②整个第二列
  • 访问若干列和若干行的元素;
    ① 例如访问第二,四,六列的元素

    ※起始位和结束位中间的数是步长⭐,表示每两步取一组数。※

    ① 例如访问第一,二,三行的元素
  • 访问矩阵所有元素

有问题请在评论区留言或者是私信我,回复时间不超过一天。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨…

LeetCode--删除并获得点数--动态规划

一、题目解析 二、算法原理 根据题意,在选择了元素 x 后,该元素以及所有等于 x−1 或 x1 的元素会从数组中删去。若还有多个值为 x 的元素,由于所有等于 x−1 或 x1 的元素已经被删除,我们可以直接删除 x 并获得其点数。因此若选…

Win10+MinGW13.1.0编译Qt5.15.15

安装windows SDK、python、ruby、cmake、Perl[可选]安装MySQL解压qt-everywhere-opensource-src-5.15.15.zip(注:不要使用qt-everywhere-opensource-src-5.15.15.tar.xz)修改源代码 E:\qt-everywhere-src-5.15.15\qtbase\src\3rdparty\angle\…

hive数据库,表操作

1.创建; create database if not exists myhive; use myhive; 2.查看: 查看数据库详细信息:desc database myhive; 默认数据库的存放路径是 HDFS 的: /user/hive/warehouse 内 补充:创建数据库并指定 hdfs 存储位置:create database myhive2 location /myhive2 3.…

<项目代码>YOLOv8路面垃圾识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

Codeforces Round 881 (Div. 3)(A~F1题解)

这场比赛可能是因为比较老吧,我感觉很轻松,就是第五个卡了一下,看错题了,原本应该是严格大于的,从而导致代码一直出现bug,在1小时20分钟才解决 A. Sasha and Array Coloring 题意:就是说给你n个…

提权 | Windows系统

文章目录 cmd提权meterpreter提权getsystemsteal_tokenmigrate 令牌窃取(MS16-075)烂土豆提权步骤烂土豆提权原理 sc命令提权抓本地密码提权其他工具pr工具 内核提权WindowsVulScan cmd提权 前言:我们getshell一个用windows部署的网站后,通过蚁剑或者其…

ESP32 S3 语音识别 语音唤醒程序流程

ESP32 S3 语音识别 语音唤醒程序流程 参考例程首先进行esp_periph_set_init 初始化之后执行setup_player,之后执行start_recorder,识别的主处理voice_read_task 参考例程 D:\Espressif\esp-adf\examples\speech_recognition\wwe\ 首先进行esp_periph_se…

零知识学习WLAN漫游二、无线漫游介绍(2)

接前一篇文章:零知识学习WLAN漫游一、无线漫游介绍(1) 本文内容参考: WLAN漫游简介_漫游主动性-CSDN博客 无线漫游_百度百科 无线漫游简述-CSDN博客 特此致谢! 一、WLAN漫游简介 3. 漫游协议和快速漫游协议 802.…

算法的学习笔记—数字在排序数组中出现的次数(牛客JZ53)

😀前言 在编程中,查找有序数组中特定元素的出现次数是一个常见的问题。本文将详细讲解这个问题的解决方案,并通过二分查找法优化效率。 🏠个人主页:尘觉主页 文章目录 🥰数字在排序数组中出现的次数&#x…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

深入浅出:深度学习模型部署全流程详解

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾: 【论文精读】PSAD:小样本部件分割揭示工业异常检测的合成逻辑每日一言🌼: 生活要有所期待, 否则就如同罩在…

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线

在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…

想让前后端交互更轻松?alovajs了解一下?

作为一个前端开发者,我最近发现了一个超赞的请求库 alovajs,它真的让我眼前一亮!说实话,我感觉自己找到了前端开发的新大陆。大家知道,在前端开发中,处理 Client-Server 交互一直是个老大难的问题&#xff…

查缺补漏----用户工作区,系统缓冲区,外设工作最短时间计算

对于下面这一题,分析起来很简单: 答案:C 以上是单缓冲区,补充双缓冲区是什么情况: 1.假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为15us,由缓冲区送至用户区的时间是5us&#xff0c…

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间(切换到dba用户…

Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口

frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java createTileInternal(tileSpec)方法注释想隐藏的模块即可。

Qt开发-----线程调度

目录 前言 一、Linux下查看进程的情况 二、线程的创建 三、多线程的创建和使用 前言 以下引用内容源自正点原子Qt开发指南文档。 我们写的一个应用程序,应用程序跑起来后一般情况下只有一个线程,但是可能也有特殊情况。比如我们前面章节写的例程都跑…

《YOLO目标检测》—— YOLOv1 详细介绍

文章目录 一、算法特点二、网络结构三、检测过程四、损失函数五、性能表现六、优缺点 YOLO v1(You Only Look Once version 1)是一种快速的目标检测算法,以下是对YOLO v1的详细介绍: 一、算法特点 端到端的网络结构:Y…

项目:Boost 搜索引擎

项目:Boost 搜索引擎 1、项目背景 公司:百度、360、搜狗、谷歌 …站内搜索:搜索的数据更垂直(相关),数据量小 2、整体框架 3、技术栈和项目环境 技术栈:C/C C11,STL,jso…