当前位置: 首页 > news >正文

MATLAB 使用教程 —— 矩阵和数组

    • 矩阵和数组
      • MATLAB 中矩阵和数组长什么样?
      • MATLAB 怎么用矩阵计算?
        • 创建和操作矩阵
        • 矩阵运算示例
        • 串联
      • 访问矩阵的元素

矩阵和数组

MATLAB 是“matrix laboratory”的缩写形式。MATLAB 主要用于处理 整个的矩阵和数组,而其他编程语言大多逐个处理数值

  • 所有 MATLAB 变量都是多维数组,与数据类型无关
  • 矩阵是指通常用来进行线性代数运算的二维数组

MATLAB 专门用于处理矩阵和数组操作。与其他编程语言相比,它能够更高效地处理这些数据结构,适用于线性代数、数据分析、图像处理等。

MATLAB 中矩阵和数组长什么样?

a = [1 2 3 4]   % 单行的叫数组,数组 a 包含四个元素,使用逗号 (,) 或空格分隔各元素a = [1 3 5; 2 4 6; 7 8 10]     % 多行的叫矩阵,使用分号分隔各行

再直观地来看,

这是数组 a:

在这里插入图片描述

这是矩阵 a:

在这里插入图片描述

MATLAB 怎么用矩阵计算?

MATLAB 常用的运算符和特殊字符如下表所示:

符号描述
+加;加法运算符
-减;减法运算符
*标量和矩阵乘法运算符
.*数组乘法运算符
^标量和矩阵求幂运算符
.^数组求幂运算符
\矩阵左除
/矩阵右除
.\阵列左除
./阵列右除
:向量生成;子阵提取
( )下标运算;参数定义
[ ]矩阵生成
.点乘运算,常与其他运算符联合使用
续行标志;行连续运算符
,分行符(该行结果不显示)
;语句结束;分行符(该行结果显示)
%注释标志
'引用符号和转置运算符
.'非共轭转置运算符
=赋值运算符

为了说明 MATLAB 如何使用矩阵进行计算,这里提供一些具体例子:

创建和操作矩阵
% 创建一个 3x3 的矩阵
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];% 创建一个列向量
B = [10; 20; 30];% 矩阵乘法
C = A * B;

在这个例子中,A 是一个 3x3 的矩阵,B 是一个 3x1 的列向量。MATLAB 直接支持矩阵乘法 A * B,这在其他编程语言中可能需要手动编写嵌套循环实现

创建矩阵的另一种方法是使用 ones、zeros 或 rand 等函数。例如,创建一个由零组成的 5×1 列向量。

z = zeros(5,1)

在这里插入图片描述

矩阵运算示例
% 创建矩阵
M = [1, 2; 3, 4];% 计算矩阵的转置
M_T = M';% 计算矩阵的逆
M_inv = inv(M);% 矩阵元素逐个平方
M_squared = M .^ 2;% 矩阵加法
N = [5, 6; 7, 8];
M_sum = M + N;
  • M_TM 的转置矩阵。
  • M_invM 的逆矩阵,前提是 M 是可逆的。
  • M_squared 逐个对 M 中的每个元素平方,而不是矩阵乘法。
  • M_sum 是矩阵 MN 的逐元素相加。

MATLAB 允许使用单一的算术运算符或函数处理矩阵中的所有值。例如,a + 10 是对矩阵 a 的所有值都 +10, sin(a) 是对矩阵 a 的所有值取 sin 值。

使用 * 运算符执行标准矩阵乘法,这将计算行与列之间的内积。例如,确认矩阵乘以其逆矩阵可返回单位矩阵: p = a*inv(a)
请注意,p 不是整数值矩阵MATLAB 将数字存储为浮点值,算术运算可以区分实际值与其浮点表示之间的细微差别。

使用 format 命令可以显示多/少小数位数: format longformat short。注意 format 仅影响数字显示,而不影响 MATLAB 对数字的计算或保存方式。

要执行元素级乘法(而非矩阵乘法),请使用 .* 运算符p = a.*a

乘法、除法和幂的矩阵运算符分别具有执行元素级运算的对应数组运算符。例如,计算 a 的各个元素的三次方: a.^3

定义一个 3×3 的矩阵 a,
在这里插入图片描述

这是 a + 10

在这里插入图片描述

这是 矩阵与其逆相乘得到单位矩阵, p = a*inv(a)

在这里插入图片描述

使用 format long 显示更多小数位,

在这里插入图片描述

p = a.*a 执行元素级乘法(而非矩阵乘法)

在这里插入图片描述

使用 a.^3 计算元素级的矩阵的幂,

在这里插入图片描述

例如,在图像处理领域,图像可以表示为二维矩阵,其中每个元素代表 像素值。MATLAB 使得处理和分析这些矩阵变得简单。以下是一个灰度图像的示例操作:

% 读取图像并将其转换为灰度矩阵
I = imread('example.jpg');
grayImage = rgb2gray(I);% 对灰度图像应用卷积操作
kernel = [1, 1, 1; 0, 0, 0; -1, -1, -1];
filteredImage = conv2(double(grayImage), kernel, 'same');

MATLAB 的核心特性就是它内置的矩阵和数组处理功能,这允许用户以自然的数学语法编写程序,而无需手动实现低级矩阵运算。这对于需要处理大量数据的工程和科学计算非常有用。

串联

串联是将数组或矩阵连接起来形成更大数组的过程。在 MATLAB 中,方括号 [] 是串联运算符,它用于水平或垂直拼接数组

当两个数组在方向上进行拼接时,称为水平串联。例如:

A = [1, 2, 3];
B = [4, 5, 6];% 水平串联
C = [A, B];  % 结果是 C = [1, 2, 3, 4, 5, 6]

在这个示例中,AB 是两个行向量,通过 [] 拼接后形成了新的行向量 C

当两个数组在方向上进行拼接时,称为垂直串联。例如:

D = [7; 8; 9];
E = [10; 11; 12];% 垂直串联
F = [D; E];  % 结果是 F = [7; 8; 9; 10; 11; 12]'

在此例中,DE 是列向量,通过 [] 垂直串联后形成了新的列向量 F

可以将矩阵水平或垂直串联,但需要满足维度匹配的条件。例如:

M1 = [1, 2; 3, 4];
M2 = [5, 6; 7, 8];% 水平串联矩阵
H = [M1, M2];
% 结果是 H = [1, 2, 5, 6;
%             3, 4, 7, 8]% 垂直串联矩阵
V = [M1; M2];
% 结果是 V = [1, 2;
%             3, 4;
%             5, 6;
%             7, 8]

在水平串联 H 的情况下,矩阵的行数必须一致;而在垂直串联 V 中,矩阵的列数必须一致。

访问矩阵的元素

在 MATLAB 中,数组的索引从 1 开始。这与某些编程语言(如 Python、C 等)不同,这些语言的数组索引从 0 开始。

% 创建一个 3x3 的矩阵
M = [1, 2, 3; 4, 5, 6; 7, 8, 9];% 访问矩阵的元素
element = M(2, 3);  % 结果是 6,表示第二行第三列的元素% 访问第一行的所有元素
firstRow = M(1, :);  % 结果是 [1, 2, 3]% 访问第三列的所有元素
thirdColumn = M(:, 3);  % 结果是 [3; 6; 9]

重要注意事项

  • MATLAB 的索引从 1 开始,这意味着第一个元素的索引是 1
  • 可以使用冒号运算符 : 来访问数组的范围,例如 A(2:4) 会访问 A 中从索引 2 到 4 的元素。
  • 冒号还可以用于指定所有元素。例如,M(:, 2) 代表矩阵 M 的第二列的所有元素。

这种从 1 开始的索引对于 MATLAB 用户来说是标准,特别是在数学和工程应用中,因为它与线性代数中矩阵的常见表示方法一致。

相关文章:

MATLAB 使用教程 —— 矩阵和数组

矩阵和数组MATLAB 中矩阵和数组长什么样?MATLAB 怎么用矩阵计算?创建和操作矩阵矩阵运算示例串联 访问矩阵的元素 矩阵和数组 MATLAB 是“matrix laboratory”的缩写形式。MATLAB 主要用于处理 整个的矩阵和数组,而其他编程语言大多逐个处理…...

React教程第二节之虚拟DOM与Diffing算法理解

1、什么是虚拟DOM 虚拟DOM 是javascript的一个对象,是内存中的一种数据结构,以树的形式存储UI的状态,树中的每个节点都代表着真实的DOM,用来描述我们希望在页面看到的 HTML结构; 现在的MVVM 框架,大多使用…...

C++——类和对象(part2)

前言 本篇博客继续为大家介绍类与对象的知识,承接part1的内容,本篇内容是类与对象的核心内容,稍微有些复杂,如果你对其感兴趣,请继续阅读,下面进入正文部分。 1. 类的默认成员函数 默认成员函数就是用户…...

【FFmpeg系列】:音频处理

前言 在多媒体处理领域,FFmpeg无疑是一个不可或缺的利器。它功能强大且高度灵活,能够轻松应对各种音频和视频处理任务,无论是简单的格式转换,还是复杂的音频编辑,都不在话下。然而,要想真正发挥FFmpeg的潜…...

Python绘制雪花

文章目录 系列目录写在前面技术需求完整代码代码分析1. 代码初始化部分分析2. 雪花绘制核心逻辑分析3. 窗口保持部分分析4. 美学与几何特点总结 写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4…...

vue3 如何调用第三方npm包内部的 pinia 状态管理库方法

抛砖引玉: 如果在开发vue3项目是, 引用了npm第三方包 ,而且这个包内使用了Pinia 状态管理库,那我们如何去调用 npm内部的 Pinia 状态管理库呢? 实际遇到的问题: 今天在制作npm包时遇到的问题,之前Vue2版本的时候状态管理库用的Vuex ,当时调用npm包内的状态管理库很简单,直接引…...

uni-app快速入门(七)--组件路由跳转和API路由跳转及参数传递

uni-app有两种页面路由跳转模式,即使用navigator组件跳转和调用API跳转,API调转不要理解为调用后台接口的API,而是指脚本函数中使用跳转函数。 一、组件路由跳转 1.1 打开新页面 打开新页面使用组件的open-type"navigate",见下面…...

Flink升级程序和版本

Flink DataStream程序通常设计为长时间运行,如几周、几个月甚至几年。与所有长时间运行的服务一样,Flink streaming应用程序也需要维护,包括修复错误、实现改进或将应用程序迁移到更高版本的Flink集群。 这里就来描述下如何更新Flink streaming应用程序,以及如何将正在运行…...

从0安装mysql server

安装 MySQL Server 首先,你需要在 Ubuntu 上安装 MySQL 服务器。运行以下命令来安装:sudo apt update sudo apt install mysql-server安装完成后,MySQL 服务会自动启动。你可以通过以下命令检查 MySQL 服务是否正在运行: sudo systemctl status mysql如果 MySQL 正在运行,…...

web安全测试渗透案例知识点总结(上)——小白入狱

目录 一、Web安全渗透测试概念详解1. Web安全与渗透测试2. Web安全的主要攻击面与漏洞类型3. 渗透测试的基本流程 二、知识点详细总结1. 常见Web漏洞分析2. 渗透测试常用工具及其功能 三、具体案例教程案例1:SQL注入漏洞利用教程案例2:跨站脚本&#xff…...

PHP访问NetSuite REST Web Services

“同等看待欢乐和痛苦、得到和失去、胜利和失败、投入战斗。以此方式履行职责,你就不会招致任何罪恶。” -Bhagavad Gita 为了帮助PHP开发者快速起步,以REST Web Services方式打通与NetSuite的接口,我们答应给一个样例。但是我是不懂PHP的&a…...

【编译】多图解释 什么是短语、直接短语、句柄、素短语、可归约串

一、什么是短语二、什么是“直接”短语?三、什么是句柄?四、什么是素短语?五、什么是最左素短语可归约串就是“最左素短语” 首先,这些概念 都是相对于【句型】的,都是相对于【句型】的,都是相对于【句型】…...

React中事件绑定和Vue有什么区别?

1. 绑定方式 React:使用jsx语法,通过属性绑定事件。Vue:使用指令(如v-on)在模板中直接绑定事件。 2. 事件处理 React:通过合成事件系统封装原生事件,提供统一的API。Vue:直接使用…...

【DBA攻坚指南:左右Oracle,右手MySQL-学习总结】

处理log file sync等待事件 首先明确什么是log file sync等待事件 从用户提交会话开始,LGWR进程将redo缓存中的信息写入redo日志文件后,LGWR进程通知用户写操作完成,到用户会话接受到LGWR进程通知为止,这整个过程就是可能出现lo…...

C++中的内联函数

在C中,内联函数是一种特殊的函数。 定义 内联函数是在函数定义前加上关键字“inline”的函数。编译器在处理对内联函数的调用时,会尝试将函数体的代码直接插入到函数调用处,而不是像普通函数调用那样,进行跳转指令执行函数体代码…...

ssh.service could not be found“

如果你收到 “ssh.service could not be found” 错误,说明目标主机上没有安装 SSH 服务,或者安装的 SSH 服务的名称不为 ssh。这里有一些解决步骤: 1. 检查 SSH 服务是否已安装 在目标主机上执行以下命令来检查是否安装了 SSH 服务&#x…...

tensorflow有哪些具体影响,和chatgpt有什么关系

### TensorFlow的影响 **1. 深度学习框架的领军者** - **广泛使用**: TensorFlow是由Google开发的开源深度学习框架,广泛应用于各种机器学习任务,包括图像识别、自然语言处理、语音识别等。它是深度学习领域中最受欢迎的框架之一。 - **大规模生产环境*…...

Android OpenGL ES详解——几何着色器

目录 一、概念 1、图元 2、几何着色器 1、输入类型 2、输出类型 3、输出顶点数量最大值限制 二、使用几何着色器 三、应用举例——造几个房子 四、应用举例——爆破物体 1、获取法向量 2、显示法线 五、应用举例——细分三角形 六、应用举例——广告牌技术 一、概…...

Java学生管理系统(GUI和数据库)

Java学生管理系统(GUI和数据库) 本文简介 本资源演示了一个用Java实现的学生管理系统,结合了图形用户界面(GUI)和数据库操作。系统实现了学生、课程和账号三张表的管理功能,包括增删改查等操作。通过本资…...

035_Progress_Dialog_in_Matlab中的进度条对话框

进度条 概念 在使用Matlab开发界面时,有一个很好用的工具就是进度条。在计算过程中,为用户提供计算进度的反馈是改善用户体验的重要手段。 一项进行的计算任务,如果其总体进度是比较容易量化,则可以按照0%~100%的方式&#xff0…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...