0 前言
学习了很多程序语言,在各种语言之间跳来跳去,有时候总是弄混。
在网上找相关内容的时候,发现支零破碎,搞一段代码需要东找找西凑凑才能齐全,网上系统成掌的资料找起来还是有点吃力。
“山不过来我过去”,将数组相关的内容再整理一遍,之后根据所用一一补全,作为系统学习、后期查看的资料。
1.引用来源
MathWorks:https://ww2.mathworks.cn/help/matlab/learn_matlab/matrices-and-arrays.html
2.正文
矩阵是按行和列排列的数据元素的二维矩阵数组,数组则是单行或者单列数据,元素可以是数字、逻辑值、日期和时间、字符串或其他数据类型等。
2.1 数组的创建
(1)已知数组内元素的创建
每行的元素用逗号(,)或者空格分隔;包含多行数据则使用分号分隔各行;
a=[1,2,3; 3 4 5; 5 6 7];
![](https://i-blog.csdnimg.cn/blog_migrate/92702562493e577f57972b6b083c5564.png)
元素可以用函数、特定表示符建立
B=[pi,2*pi,exp(1),3,2^3]
(2)未知数组内元素的创建
MATLAB不用事先定义数组的大小,可以自己动态增加,
a=[]
对指定行比如第m行赋值:a(m,:)=[2 4 6],例如:
a(2,:)=[2 4 6]
(3)特定类型的数组或矩阵
ones 生成元素全部为1 的矩阵,括号内元素值行、列的个数
o=ones(3,3)
zeros生成元素全部为0 的矩阵,括号内元素值行、列的个数
z=zeros(3,3)
rand 生成元素为随机数的矩阵,括号内元素值行、列的个数
r=rand(3,3)
这类数组或矩阵还有如下,其调用格式同上,不再赘述
eye函数:产生对角线为1的矩阵。当矩阵为方阵时,得到一个单位矩阵。
randn函数:产生均值为0,方差为1的标准正态分布的随机矩阵。
(4)冒号的使用
冒号的使用:创建连续且按一定增量(默认为1)均匀分布的矩阵
如:
A = 0:2:10
还可以按非整数值递增或递减,递减则在增量的位置加负号(-)。
如果增量值不能均分指定的范围,MATLAB 会在超出范围之前在可以达到的最后一个值处自动结束序列。
A = 2.1:-0.2:1
(5)定数创建
定数线性采样法
E=linspace(10,20,6)
定数对数采样法
A=logspace(1,5,3)
2.2 数组运算
(1)常用运算符直接进行运算
相加、相减,需要矩阵的维度一致。
A=[2 4 6 8;10 12 14 16;18 20 22 24;26 28 30 32];
B=A+A
C=B-A
(2)需要带符号的运算
转置
A=[2 4 6 8;10 12 14 16;18 20 22 24;26 28 30 32];
A'
相乘:可以乘一个常数,也可以乘一个矩阵(矩阵需要注意维度);如果将矩阵中元素进行元素级相乘而不是矩阵乘法,可以在前面加(.)
![](https://i-blog.csdnimg.cn/blog_migrate/01e564d89bbc6475326b0f4797f5ccd8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fbdd975a13a7aec70ab05f63da31c331.png)
相除:两矩阵相除需要加(.),例如:A./A,
![](https://i-blog.csdnimg.cn/blog_migrate/d6a1e72acd46dfe3cfef27223f2ddcc4.png)
求逆,必须是方阵,也必须是可逆矩阵才可以计算,否则会提示“警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND = 3.265362e-19。 ”
inv(A)
2.3 其他操作
(1)串联矩阵
串联是连接数组以便形成更大数组的过程。实际上,第一个数组是通过将其各个元素串联起来而构成的。成对的方括号 []
即为串联运算符。
例如(a和r为前文生成的数组或矩阵),逗号分隔生成并排的,分号分隔生成多行的
A=[a,r]
A=[a;r]
(2)复数
复数包含实部和虚部,虚数单位是 -1
的平方根,使用 i
或 j
表示复数的虚部。
c = [3+4i, 4+3j; -i, 10j]
2.4 相关函数
(1)size
size函数用于给出矩阵的行、列数
sz = size(A)
(2)diag
diag函数将输入元素放在矩阵的对角线上
A = [12 62 93 -8];
B = diag(A)
3.数组的索引与使用
3.1 数组的索引
按元素位置索引
e = B(1,2)
3.2 for循环的结合使用
用for循环存数据进入数组中,首先创建一个空数组xx,然后用for循环,如下:
clc,clear
xx=[];
for i=1:10
a=i*2;
xx(i)=a;
end
disp(xx)