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

c++矩阵转置_MATLAB的矩阵运算与重构

5. 数组运算与矩阵运算

在MATLAB中,术语矩阵和数组在一般情况下是没有区别的。严格地说,一个矩阵就是一个二维的数组,是用来进行线性代数运算的。MATLAB运用于矩阵上的数学运算符是以线性代数中的矩阵运算法则来进行计算的,而数组运算是基于两个矩阵对应元素之间的,所以在MATLAB中,数组运算和矩阵运算是有区别的。

为了更清晰地表述数组运算和矩阵运算的区别,本节将二者相对应的命令列表进行对比,以说明其异同。表2-8列出了两种运算指令形式和实质功能的区别。

表2-8        数组运算与矩阵运算的区别

数组运算

矩阵运算

指    令

说    明

指    令

说    明

A.'

非共轭转置,相当于(conj(A'))

A'

共轭转置

A+B与A-B

对应元素之间加减

A+B或A-B

对应元素之间加减

k.*A或A.*k

k乘A的每个元素

k*A或A*k

k乘A的每个元素

k+A与k-A

k加(减)A的每个元素

k+A与k-A

k加(减)A的每个元素

A.*B

两数组对应元素相乘

A*B

按线性代数的矩阵乘法规则

A.^k

A的每个元素进行k次方运算

A^k

k个矩阵A相乘

k.^A

以k为底,分别以A的元素为指数求幂值

k^A

矩阵的幂。K和A不能同时为矩阵。按照矩阵幂的运算法则进行计算

k./A和A.\k

k分别被A的元素除

左除A./B

A的元素被B的对应元素除

左除A\B

AX=B的解

右除B.\A

与上式结果相同

右除B/A

XA=B的解

说明:k为标量,即单个数值,A和B均为矩阵或者数组

【例2-11】  数组运算和矩阵运算的比较。

>> A=[1 2;3 4];       % 测试矩阵A

>> B=[4 3;2 1];       % 测试矩阵B

>> r1=100+A           % 矩阵A加上一个常数

r1 =

   101   102

   103   104

>> r2_1=A*B            % 两个矩阵相乘,矩阵乘法

r2_1 =

     8     5

    20    13

>> r2_2=A.*B            % 两个矩阵相乘,数组乘法

r2_2 =

     4     6

     6     4

>> r3_1=A\B             % 矩阵左除

r3_1 =

  -6.0000   -5.0000

   5.0000    4.0000

>> r3_2=A.\B            % 数组除法

r3_2 =

   4.0000    1.5000

   0.6667    0.2500

>> r4_1=B/A             % 矩阵右除

r4_1 =

  -3.5000    2.5000

  -2.5000    1.5000

>> r4_2=B./A           % 数组除法

r4_2 =

   4.0000    1.5000

   0.6667    0.2500

>> r5_1=A.^2           % 数组幂

r5_1 =

     1     4

     9    16

>> r5_2=A^2            % 矩阵幂

r5_2 =

     7    10

    15    22

>> r6_1=2.^A           % 数组幂

r6_1 =

     2     4

     8    16

6  矩阵的重构

6.1 矩阵元素的扩展与删除

MATLAB提供有对矩阵中的元素进行行或者列的扩展与删除的功能。

1.矩阵元素的扩展

将数据保存在矩阵现有维数以外的元素中时,矩阵的尺寸会自动增加,以便容纳下这个新元素。这个功能可以用来进行矩阵的扩展。

【例2-12】  矩阵的扩展。

>> A=magic(4)

A =

    16     2    3    13

     5    11   10     8

     9     7    6    12

     4    14   15     1

>> A(6,7)=17                     

A =

    16     2    3    13     0    0     0

     5    11   10     8     0    0     0

     9     7    6    12     0    0     0

     4    14   15     1     0    0     0

     0     0    0     0     0    0     0

     0     0    0     0     0    0    17

>> A(:,8)=ones(6,1)

A =

    16     2    3    13     0    0     0     1

     5    11   10     8     0    0     0     1

     9     7    6    12     0    0     0     1

     4    14   15     1     0    0     0     1

     0     0    0     0     0    0     0     1

     0     0    0     0     0    0    17     1

本例中,A的原始矩阵并没有A(6,7)这个元素,通过赋值给A(6,7),矩阵A扩展成了一个6´7的新矩阵,其中未赋值的扩展部分以0来填充。另外本例还说明了如何对矩阵的多个元素进行扩展赋值,直接将一个列向量赋值给了扩展部分。

2.矩阵元素的删除

通过将行或列指定为空矩阵[],即可从矩阵中删除行和列。

【例2-13】  矩阵的删除。

>> A=magic(4)

A =

    16     2    3    13

     5    11   10     8

     9     7    6    12

     4    14   15     1

>> A(:,1)=[]          %  删除矩阵A的第1列

A =

     2     3   13

    11    10    8

     7     6   12

    14    15    1

>> A(2,:)=[]         %  删除矩阵A的第2行

A =

     2     3   13

     7     6   12

    14    15    1

6.2 矩阵的重构

用户可以通过矩阵旋转,改变维数和截取部分元素来产生所需要的新矩阵。MATLAB提供了一些矩阵重构函数,如表2-9所示。

表2-9       常用的矩阵重构函数及说明

函数形式

函数功能

函数形式

函数功能

B=rot90(A)

矩阵B由矩阵A逆时针旋转90°所得

L=tril(A,k)

L矩阵第k条对角线及以下的元素取矩阵A的元素,其余为0

B=rot90(A,K)

矩阵B由矩阵A逆时针旋转k×90°所得

L=tril(A)

L矩阵主对角线及以下的元素取矩阵A的元素,其余为0

B=flipud(A)

矩阵B由矩阵A上下翻转所得

U=triu(A,K)

U矩阵第k条对角线及以上的元素取矩阵A的元素,其余为0

B=reshape(A,m,n)

将矩阵A改写为矩阵B,矩阵B的维数为(m×n),m×n等于矩阵A的元素总个数

U=triu(A)

U矩阵主对角线及以上的元素取矩阵A的元素,其余为0

B=fliplr(A)

矩阵B由矩阵A左右翻转所得

说明:A、B、L、U均为矩阵

【例2-14】  矩阵的重构示例。

>> a=reshape(1:9,3,3)                %  创建测试矩阵

>> a= [1,7;2,8;3,9;4,10;5,11;6,12]  %  创建测试矩阵

a =

     1     7

     2     8

     3     9

     4    10

     5    11

     6    12

>> a = reshape(a,4,3)           %  使用reshape改变a的形状,

%  注意前后两个a每一个单下标对应的元素是一致的

a =

     1     5    9

     2     6   10

     3     7   11

     4     8   12

>> b=rot90(a,3)                    %  将矩阵a逆时针旋转3×90°

b =

     4     3    2     1

     8     7    6     5

    12    11   10     9>> c=fliplr(a)                     %  将矩阵a左右翻转

c =

     9     5    1

    10     6    2

    11     7    3

    12     8    4>> d=flipud(a)                   %  将矩阵a上下翻转

d =

     4     8   12

     3     7   11

     2     6   10

     1     5    9【例2-15】  矩阵部分元素的提取。

>> a=[1 2 3;4 5 6; 7 8 9]  %  创建测试矩阵

a =

     1     2    3

     4     5    6

     7     8    9

>> b=diag(a)          %  求a的对角矩阵

b =

     1

     5

     9

>> c=triu(a,1)        % c矩阵第1条对角线及以上的元素取矩阵a的元素,其余为0

c =

     0     2    3

     0     0    6

     0     0    0

>> d=triu(a,2)       %  d矩阵第2条对角线及以上的元素取矩阵a的元素,其余为0

d =

     0     0    3

     0     0    0

     0     0    0

>> e=triu(a,-1)     % e矩阵中除了第3行第1列元素为0,其余元素都取自矩阵a的元素

e =

     1     2    3

     4     5    6

     0     8    9

>> f=tril(a,-1)     % 下三角矩阵的提取

f =

     0     0    0

     4     0    0

     7     8    0

 4480f7dc9936c2c20c5e48c958c7e60a.png

相关文章:

  • rabbitmq 多个消费者消费一个队列_RabbitMQ——消费端限流、TTL、死信队列
  • DX9中如何模拟DX10/11里的ConstantBuffer
  • python怎么除去列表l中所有是x的元素_Python学习教程(Python学习路线):Python3之递归函数简单示例...
  • Windows phone 7 Series发布!
  • json_extract提取复杂json_4个小窍门,让你在Python中高效使用JSON
  • 关于Windows phone 7 series开发方面的传言
  • centos找不到apt-get命令_Centos 使用 pyinstaller 打包踩坑分享
  • python cv2 imshow_Python-OpenCV 2. 图像基本操作
  • wild magic3 渲染状态更新和scene绘制
  • 跨域获取后台数据undefined_拨号跨域问题
  • 软件文档归类汇总
  • java aes加密_行走江湖,安全第一 | 尚硅谷Java安全密码学教程发布!
  • 今天是最后的悠闲。
  • kernel编译 openwrt_OpenWRT实践3:Click Modular Router
  • 关于Mercurial(Hg)
  • bearychat的java client
  • css系列之关于字体的事
  • Effective Java 笔记(一)
  • Java 内存分配及垃圾回收机制初探
  • javascript数组去重/查找/插入/删除
  • PHP的类修饰符与访问修饰符
  • Swift 中的尾递归和蹦床
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端_面试
  • 十年未变!安全,谁之责?(下)
  • 说说动画卡顿的解决方案
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 交换综合实验一
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #Linux(帮助手册)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma data_seg 共享数据区(转)
  • #pragma multi_compile #pragma shader_feature
  • (a /b)*c的值
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Java)【深基9.例1】选举学生会
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (分类)KNN算法- 参数调优
  • (六)c52学习之旅-独立按键
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转载)虚函数剖析
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Core引入性能分析引导优化
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @Bean有哪些属性
  • @取消转义
  • [BZOJ2208][Jsoi2010]连通数
  • [CISCN2019 华东北赛区]Web2
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [HDU3710]Battle over Cities