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

matlab使用教程(5)—矩阵定义和基本运算

        本博客介绍如何在 MATLAB 中创建矩阵和执行基本矩阵计算。
        MATLAB 环境使用矩阵来表示包含以二维网格排列的实数或复数的变量。更广泛而言,数组为向量、矩阵或更高维度的数值网格。MATLAB 中的所有数组都是矩形,在这种意义上沿任何维度的分量向量的长度均相同。矩阵中定义的数学运算是线性代数的主题。

1创建矩阵

        MATLAB 提供了许多函数,用于创建各种类型的矩阵。例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵:
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6
        您也可以创建一个非对称幻方矩阵,它的行总和与列总和相等:
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
        另一个示例是由随机整数构成的 3×2 矩形矩阵:在这种情况下,randi 的第一个输入描述整数可能值的范围,后面两个输入描述行和列的数量。
C = randi(10,3,2)
C =
9 10
10 7
2 1
        列向量为 m×1 矩阵,行向量为 1×n 矩阵,标量为 1×1 矩阵。要手动定义矩阵,请使用方括号 [ ] 来表示数组的开始和结束。在括号内,使用分号 ; 表示行的结尾。在标量(1×1 矩阵)的情况下,括号不是必需的。例如,以下语句生成一个列向量、一个行向量和一个标量:
u = [3; 1; 4]
v = [2 0 -1]
s = 7
u =
3
1
4
v =
2 0 -1
s =
7

2矩阵的加法和减法

        矩阵和数组的加减法是逐个元素执行的,或者说是按元素执行的。例如,A B 之后再减去 A 又可以得到 B
X = A + B
Y = X - A
X =
9 2 7
4 7 10
5 12 8
Y =
8 1 6
3 5 7
4 9 2
        加法和减法要求两个矩阵具有兼容的维度。如果维度不兼容,将会导致错误:
X = A + C
Error using +
Matrix dimensions must agree.

3向量乘积和转置

        长度相同的行向量和列向量可以按任一顺序相乘。其结果是一个标量(称为内积)或一个矩阵(称为外积):
u = [3; 1; 4];
v = [2 0 -1];
x = v*u
x =
2
X = u*v
X =
6 0 -3
2 0 -1
8 0 -4
        对于实矩阵,转置运算对 aij 和 a ji 进行交换。对于复矩阵,还要考虑是否用数组中复数项的复共轭来形成复共轭转置。MATLAB 使用撇号运算符 ( ' ) 执行复共轭转置,使用点撇号运算符 (.') 执行无共轭的转置。对于包含所有实数元素的矩阵,这两个运算符返回相同结果。示例矩阵 A = pascal(3) 是对称的,因此 A' 等于 A 。然而, B = magic(3) 不是对称的,因此 B' 的元素是 B 的元素沿主对角线反转之后的结果:
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
X = B'
X =
8 3 4
1 5 9
6 7 2
        对于向量,转置会将行向量变为列向量(反之亦然):
x = v'
x =
2
0
-1
        如果 x y 均为实数列向量,则乘积 x*y 不确定,但以下两个乘积
x'*yy'*x
        产生相同的标量结果。此参数使用很频繁,它有三个不同的名称内积、标量积或点积。甚至还有一个专门的点积函数,称为 dot。对于复数向量或矩阵 z ,参量 z' 不仅可转置该向量或矩阵,而且可将每个复数元素转换为其复共轭数。也就是说,每个复数元素的虚部的正负号将会发生更改。以如下复矩阵为例:
z = [1+2i 7-3i 3+4i; 6-2i 9i 4+7i]
z =
1.0000 + 2.0000i 7.0000 - 3.0000i 3.0000 + 4.0000i
6.0000 - 2.0000i 0.0000 + 9.0000i 4.0000 + 7.0000i
        z 的复共轭转置为:
z'
ans =
1.0000 - 2.0000i 6.0000 + 2.0000i
7.0000 + 3.0000i 0.0000 - 9.0000i
3.0000 - 4.0000i 4.0000 - 7.0000i
        非共轭复数转置(其中每个元素的复数部分保留其符号)表示为 z.'
z.'
ans =
1.0000 + 2.0000i 6.0000 - 2.0000i
7.0000 - 3.0000i 0.0000 + 9.0000i
3.0000 + 4.0000i 4.0000 + 7.0000i
        对于复数向量,两个标量积 x'*y y'*x 互为复共轭数,而复数向量与其自身的标量积 x'*x 为实数。

4矩阵乘法

        矩阵乘法是以这样一种方式定义的:反映底层线性变换的构成,并允许紧凑表示联立线性方程组。如果 A的列维度等于 B 的行维度,或者其中一个矩阵为标量,则可定义矩阵乘积 C = AB。如果 A 为 m×p 且 B为 p×n,则二者的乘积 C 为 m×n。该乘积实际上可以使用 MATLAB for 循环、 colon 表示法和向量点积进行定义:
A = pascal(3);
B = magic(3);
m = 3;
n = 3;
for i = 1:m
for j = 1:n
C(i,j) = A(i,:)*B(:,j);
end
end
        MATLAB 使用星号表示矩阵乘法,如 C = A*B 中所示。矩阵乘法不适用交换律;即 A*B 通常不等于B*A
X = A*B
Y = B*A
X =
15 15 15
26 38 26
41 70 39
Y =
15 28 47
15 34 60
15 28 43
        矩阵可以在右侧乘以列向量,在左侧乘以行向量:
u = [3; 1; 4];
x = A*u
v = [2 0 -1];
y = v*B
x =
8
17
30
y =
12 -7 10
        矩形矩阵乘法必须满足维度兼容性条件:由于 A 是 3×3 矩阵, C 是 3×2 矩阵,因此可将二者相乘得到 3 ×2 结果(共同的内部维度会消去):
X = A*C
X =
24 17
47 42
79 77
        但是,乘法不能以相反的顺序执行:
Y = C*A
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns
in the first matrix matches the number of rows in the second matrix. To perform
elementwise multiplication, use '.*'.
        您可以将任何内容与标量相乘:
s = 10;
w = s*y
w =
120 -70 100
        当您将数组与标量相乘时,标量将隐式扩展为与另一输入相同的大小。这通常称为标量扩展。

5单位矩阵

        普遍接受的数学表示法使用大写字母 I 来表示单位矩阵,即主对角线元素为 1 且其他位置元素为 0 的各种大小的矩阵。这些矩阵具有以下属性:无论维度是否兼容,AI = A 和 IA = A。原始版本的 MATLAB 不能将 I 用于此用途,因为它不会区分大小字母和小写字母,并且 i 已用作下标和复
数单位。因此,引入了英语双关语。函数
eye(m,n)
返回 m×n 矩形单位矩阵, eye(n) 返回 n×n 单位方阵。

6矩阵求逆

        如果矩阵 A 为非奇异方阵(非零行列式),则方程 AX = I 和 XA = I 具有相同的解 X。此解称为 A 的逆矩阵,表示为 A^{-1} inv 函数和表达式 A^-1 均可对矩阵求逆。
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6
X = inv(A)
X =
3.0000 -3.0000 1.0000
-3.0000 5.0000 -2.0000
1.0000 -2.0000 1.0000
A*X
ans =
1.0000 0 0
0.0000 1.0000 -0.0000
-0.0000 0.0000 1.0000
        通过 det 计算的行列式表示由矩阵描述的线性变换的缩放因子。当行列式正好为零时,矩阵为奇异矩阵,因此不存在逆矩阵。
d = det(A)
d =
1
        有些矩阵接近奇异矩阵,虽然存在逆矩阵,但计算容易出现数值误差。cond 函数计算逆运算的条件数,它指示矩阵求逆结果的精度。条件数的范围是从 1 (数值稳定的矩阵)到 Inf (奇异矩阵)。
c = cond(A)
c =
61.9839
        很少需要为某个矩阵构造显式逆矩阵。当解算线性方程组 Ax = b 时,往往会错误使用 inv。从执行时间和数值精度方面而言,求解此方程的最佳方法是使用矩阵反斜杠运算符,即 x = A\b。有关详细信息,请参阅 mldivide

7向量范数和矩阵范数

        向量 x 的 p-范数,
        使用 norm(x,p) 进行计算。此运算是为 p > 1 的任意值定义的,但最常见的 p 值为 1、2 和 ∞。默认值为 p = 2,这与欧几里德长度或向量幅值对应:
v = [2 0 -1];
[norm(v,1) norm(v) norm(v,inf)]
ans =
3.0000 2.2361 2.0000
矩阵 A 的 p-范数,
        可以针对 p = 1、2 和 ∞ 通过 norm(A,p) 进行计算。同样,默认值也为 p = 2:
A = pascal(3);
[norm(A,1) norm(A) norm(A,inf)]
ans =
10.0000 7.8730 10.0000
        如果要计算矩阵的每行或每列的范数,可以使用 vecnorm
vecnorm(A)
ans =
1.7321 3.7417 6.7823

8使用线性代数方程函数的多线程计算

        对于许多线性代数函数和按元素的数值函数,MATLAB 软件支持多线程计算。这些函数将自动在多个线程上执行。要使函数或表达式在多个 CPU 上更快地执行,必须满足许多条件:
1 函数执行的运算可轻松划分为并发执行的多个部分。这些部分必须能够在进程之间几乎不通信的情况 下执行。它们应需要很少的序列运算。
2 数据大小足以使并发执行的任何优势在重要性方面超过对数据分区和管理各个执行线程所需的时间。 例如,仅当数组包含数千个或以上的元素时,大多数函数才会加速。
3 运算未与内存绑定;处理时间不受内存访问时间控制。一般而言,复杂函数比简单函数速度更快。 对于大型双精度数组(约 10,000 个元素),矩阵乘法 (X*Y) 和矩阵乘幂 (X^p) 运算符会大幅增加速度。矩阵分析函数 det rcond hess expm 也会对大型双精度数组大幅增加速度。

相关文章:

matlab使用教程(5)—矩阵定义和基本运算

本博客介绍如何在 MATLAB 中创建矩阵和执行基本矩阵计算。 MATLAB 环境使用矩阵来表示包含以二维网格排列的实数或复数的变量。更广泛而言,数组为向量、矩阵或更高维度的数值网格。MATLAB 中的所有数组都是矩形,在这种意义上沿任何维度的分量向量的长度…...

用HTML写一个简单的静态购物网站

实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>购物网站</title> &l…...

如何在go中实现程序的优雅退出,go-kratos源码解析

使用kratos这个框架有近一年了&#xff0c;最近了解了一下kratos关于程序优雅退出的具体实现。 这部分逻辑在app.go文件中&#xff0c;在main中&#xff0c;找到app.Run方法&#xff0c;点进入就可以了 它包含以下几个部分: App结构体:包含应用程序的配置选项和运行时状态。 …...

Appium+python自动化(二十八)- 高级滑动(超详解)

高级溜冰的滑动 滑动操作一般是两点之间的滑动&#xff0c;这种滑动在这里称其为低级的溜冰滑动&#xff1b;就是上一节给小伙伴们分享的。然而实际使用过程中用户可能要进行一些多点连续滑动操作。如九宫格滑动操作&#xff0c;连续拖动图片移动等场景。那么这种高级绚丽的溜…...

github token使用方法

git remote set-url origin https://<githubtoken>github.com/<username>/<repositoryname>.git 在私有仓库的HTTPS的url上加入<githubtoken>即为token url&#xff0c;可以免ssh key登录...

Spring属性注解对配置项名称的自动转换

一、前言 在Spring中&#xff0c;我们经常需要将配置文件中的属性值注入到Java类中。Spring提供了两个主要的注解来实现这一功能&#xff1a;Value 和 ConfigurationProperties。其中 ConfigurationProperties支持将配置项名称与Java类中的属性名进行自动转换&#xff0c;包括…...

Docker 安全 Docker HTTPS请求过程与配置

Docker 容器安全注意点 尽量别做的事 尽量不用 --privileged 运行容器&#xff08;授权容器root用户拥有宿主机的root权限&#xff09; 尽量不用 --network host 运行容器&#xff08;使用 host 网络模式共享宿主机的网络命名空间&#xff09; 尽量不在容器中运行 ssh 服务 尽…...

DevOps(三)

CD(二) 1. 整体流程2. 环境准备1. jenkins安装2. 编译安装git3. docker安装4. docker-compose安装5. sonarqube安装6. harbor安装7. gitlab私服8. maven安装9. Nexus部署10. K8s部署3. 安装java及编写代码3.1 安装java3.2 安装IntelliJ IDEA3.3 安装tomcat3.4 安装maven3.5 c…...

AOP的妙用

一、改代码 自定义注解用于提示该代码已经在AOP中重构了 public interface ReviseToAop {// 用于记录修改状态String value() default ""; }使用注解&#xff08;无意义&#xff0c;只是表名被修改&#xff09; ReviseToAop("修改于&#xff1a;2023/7/30&quo…...

CAN转ETHERCAT网关将CAN 总线和 ETHERCAT 网络连接方法

由于好多现场会出现将CAN总线的设备接到EtherCAT网络中&#xff0c;由于协议的不相同&#xff0c;不能直接进行连接&#xff0c;现需一种能同时兼容CAN 总线和ETHERCAT网络的一种设备&#xff0c;由此捷米JM-ECT-CAN 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要…...

【大数据趋势】7月30日 汇率,恒指期货的大数据趋势概率分析。

1. 数据源头之一 : 汇率变化 从程序模拟趋势来看&#xff0c;美元在持续弱势状态&#xff0c;周线上正在构建一个新的下跌趋势&#xff0c;而且正在反抽过程中&#xff0c;即将完成&#xff0c;如果没有外部干预&#xff0c;会顺势往下。从月线来看&#xff0c;高点逐步降低&a…...

mac使用mvn下载node-sass 会Binary download failed, trying source

m1 上使用nvm 以下node的版本可以直接下载&#xff08;Binary download&#xff0c;而不是 trying source&#xff09;而不用切换mac cpu架构 zhiwenwenzhiwenwendeMBP cockpit % nvm install 14.15.5 Downloading and installing node v14.15.5... Downloading https://node…...

【C++】开源:Muduo网络库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…...

VCS ICO - Intelligent Coverage Optimization

ico是vcs提供的用于优化覆盖率的feature&#xff1b;一般用户通过dist solver bofore等约束了变量的随机概率&#xff0c;而ico会在用户约束的基础上&#xff0c;做一些自动“修正”&#xff0c;以此来优化随机激励&#xff0c;提高随机多样性&#xff0c;加速覆盖率收敛&#…...

【分布式系统】分布式系统的8个谬误

网络可靠 对于分布式系统来说&#xff0c;网络、计算、存储是三大基石&#xff0c;系统之间进行拆分隔离之后&#xff0c;那么必定存在网络通讯&#xff0c;而网络是最不可靠的。 不管是从硬件层面还是软件层面来说&#xff0c;网络是不可靠的。&#xff08;断电、配置错误、ID…...

tinkerCAD案例:25. 量角器 - 测量角度

tinkerCAD案例&#xff1a;25. 量角器 - 测量角度 原文 Now we’re going to make a protractor! A Protractor is one of the most basic, but essential, tools for making measurements. It is, then, surprising that the modern protractor is barely over 200 years ol…...

Flutter 使用texture_rgba_renderer实现桌面端渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频&#xff08;本…...

linux虚拟机开机后桌面显示CentOS-7.5-x86盘片文件,并且无法远程连接虚拟机?

在虚拟机启动后遇到了显示CentOS-7.5-x86光盘片文件的问题&#xff0c;并且无法远程连接到虚拟机&#xff0c;有几个可能的解决方法&#xff1a; 检查虚拟机设置&#xff1a;确保虚拟机的网络适配器已正确配置&#xff0c;并且虚拟机配置的网络选项是桥接模式或 NAT 模式&#…...

【Spring Boot 源码学习】走近 AutoConfigurationImportSelector

AutoConfigurationImportSelector 源码解析 引言主要内容1. ImportSelector 接口2. DeferredImportSelector 接口3. AutoConfigurationImportSelector 功能概述 总结 引言 上篇博文我们了解了 EnableAutoConfiguration 注解&#xff0c;其中真正实现自动配置功能的核心实现者 …...

系统学习Linux-MySQL数据库备份(四)

一、概述 数据库备份是指将数据库中的数据、表格、视图、存储过程、触发器等信息备份到另一个地方&#xff0c;一遍在数据库丢失或损坏时进行恢复&#xff0c;数据库备份是数据库管理中必不可少的一项工作&#xff0c;通过备份可以保护数据库中的数据和业务。 二、数据备份的…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

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

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

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...