矩阵工厂

写在前面的话

28 July 2018

为什么不写三国系列了?——因为懒=_=

以后还写不写三国介绍了?——等我想起来再说。

为什么要写这玩意儿?——突然想起来公众号好久没写东西了,最近新学,写着玩玩=_=

介绍点概念

矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。矩阵是数学中最重要的基本概念之一,是线性代数的一个主要研究对象,也是数学研究及应用的一个重要工具。

数组(Array)是把具有相同类型的若干元素按无序的形式组织起来的一种形式,是计算机语言中一个重要的概念。而二维数组就是“数组的数组”。

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。本质上,矩阵就是数组的二维形式,即使在运算的模式上有差异,但我们仍然无法将它们割裂开来看,matlab正是基于数组的形式来进行矩阵运算、绘制函数和数据等各种功能的。

高能预警,前方全部是干货

数组的创建

linspace(初值,终值,个数)   个数省略时默认100

logspace(初值,终值,个数) 生成[10^初值,10^终值]之间的数 个数省略时默认50

ones(m,n) 元素全为1的矩阵

zeros(m,n) 零矩阵

eye(m,n) 主对角线为1其余为零的矩阵

rand(m,n) 分布在0-1之间的伪随机数

randn(m,n) 均值为0,方差为1的标准正态分布的伪随机数

randi(max,m,n) 分布在1-max的伪随机数

randi([iMin,iMax],m,n)

magic(m)函数 生成一个魔方数组

数组的大小

d=size(x)  返回值为行向量 [m,n]=size(x) 返回m,n的值 均表示x的尺寸大小

length函数 返回数组中尺度较大维度的长度

空 返回0,

标量 返回1,

向量 返回实际个数,

多维数组 返回较大维度

numel函数 返回数组中元素总个数

数组的索引

a(m,n)双下标索引  a(m)单下标索引,列优先索引

单下标索引=sub2ind(size(x),m,n) 双下标索引转换为单下标索引

[行,列]=ind2sub(数组大小,单下标索引) 单下标索引转换为双下标索引

数组的扩展

扩展结果=cat(标识,数组1,数组2,...) 标识为1或2,1代表列,2代表行

vertcat(a,b)=cat(1,a,b) [vertical]

horzcat(a,b)=cat(2,a,b) [horizontal]

数组的块操作

数组B=repmat(数组A,m,n)或repmat(A,m) [repeat] 重复几行几列

数组D=blkdiag(数组A,B,C,...) [block,diagonal] 沿对角线上拼接

数组C=kron(数组A,B) [Kronecker] 分块矩阵数乘法,结构与A相同,元素是B乘A中对应元素

索引扩展  直接指定当前数组外的一个位置,对其赋值,确保数组以最小的代价完成扩展,扩展的其他元素为零

数组的裁剪

罗列序号裁剪数组=原数组(保留的行,保留的列) b=a([1 3],[2,4]) 可以更改行或列的顺序

冒号区间裁剪 m:n  m:初始值 n:终止值 b=a(1:3,4:5)

冒号等差序列 m:k:n  m:初始值 k:等差值 n:终止值 b=a(1:3:9,2:3:9)

冒号全部裁剪 b=a(3:5,:)表示取所有的列

删除整行整列 数组(要删除的行,:)=[]  数组(:,要删除的列)=[]

数组的转置

实数:操作符 .'或 '  函数 transpose 或 ctranspose

有复数: 非共轭转置:  .'或transpose  共轭转置: '或ctranspose

数组的翻转

B=flipud(A)=flip(A)=flip(A,1) [flip up and down] 上下翻转

B=fliplr(A)=flip(A,2) [flip left and right] 左右翻转

flipdim=flip (不被官方推荐)

rot90函数 B=rot90(A,k) [rotate] 把数组A按照逆时针旋转90*k度,k默认值为1,k可为负数

数组的尺寸调整

reshape函数 B=reshape(A,a,b) [re-shape] 将数组A调整为a行b列,调整后大小保持不变,数组单下标索引保持不变

下期写matlab数组运算,至于下期在什么时候...我也不知道,随缘就好(* ̄∇ ̄*)