当前位置: 首页 > 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…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...