matlab矩阵和数组的操作汇总
- X=a:h:b %a为起点,h为步长的行向量
2.Y=linspace(a,b,m) %a为起点,b为终点的m个数组成的等距向量。
- x=logspace(a,b,n)
>> logspace(1,2,5)
ans =
10.0000 17.7828 31.6228 56.2341 100.0000
>> log10(ans)
ans =
1.0000 1.2500 1.5000 1.7500 2.0000
- A=ones(m,n) %m´n的全1数组
A1=zeros(m,n) %m´n的全0数组
A2=eye(m,n) %m´n的单位矩阵
B1=rand(m,n) %m´n的随机数数组,其中个元素服从[0,1]上的平均分布
B2=randn(m,n) %m´n 标准正态分布随机数组
例: 生成5阶随机数矩阵,其中的随机数服从参数为20,2*2 的正态分布。
>> A=2*randn(5)+20
A =
21.0753 17.3846 17.3002 19.5901 21.3430
23.6678 19.1328 26.0698 19.7517 17.5850
15.4823 20.6852 21.4508 22.9794 21.4345
21.7243 27.1568 19.8739 22.8181 23.2605
20.6375 25.5389 21.4295 22.8344 20.9778
>> A=2*randn(5)+20
A =
22.0694 21.7768 22.8768 19.7955 19.9399
21.4538 17.7059 20.6504 19.5171 19.6702
19.3931 17.8623 18.4901 20.6384 21.2554
20.5877 18.3810 22.7406 20.6257 22.1865
18.4254 14.1114 16.5770 18.2702 22.2185
5.生成对角形矩阵的diag语句
函数diag(x)的用法:
(1)若x是向量,则diag(x) 返回以x为对角元素的对角阵, diag(x,1) 是以x为次对角元素的次对角矩阵,依此类推。
(2)若X是矩阵(可以不是正方矩阵),则 diag(X)是X的对角元素组成的向量,diag(X,1) 是X的次对角元素组成的向量,以此类推。
例1.4:输入100阶5对角矩阵
参考程序:
x=4*ones(100,1);y=2*ones(99,1);z=ones(98,1);
A=diag(x)+diag(y,1)+diag(y,-1)+diag(z,2)+diag(z,-2);
6.1.3 数组的操作
1.3.1 子数组
类似于矩阵代数中子矩阵的定义,matlab中数组A的子数组由A的若干个行、列的交叉点上的元素组成。
一般,设U表示行的数组,V表示列的数组,则子数组表示为A(U,V)
当U (V)是全部的行(列)时,可以用冒号代替。如
>> A([2,3],:)
ans =
2 3 4 5 6 7
3 4 5 6 7 8
在由数组A的第2,4行,第2,4,6列交叉点处元素形成的子数组如图 1.6所示。子数组的matlab描述为 A([2,4],[2,4,6])
7.数组的拼接与剪切
>> a=[1,2,3,4;2,3,4,5];
>> b=[3,4;4,5;5,6];
>> c=[5,6;6,7;7,8];
>> d=[5,6;6,7;7,8;8,9;9,10];
>> A=[[a;[b,c]],d] ;号代表拼接到下一行(上下相接) ,代表左右相接
A =
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
5 6 7 8 9 10
8.没有元素的数组[ ]称为空数组。给矩阵A的若干个行(列)赋值空数组相当于剪切掉这些行(列)。例如,对上面的数组A作下面操作:
>> A(:,[2,4])=[ ]
A =
1 3 5 6
2 4 6 7
3 5 7 8
4 6 8 9
5 7 9 10
9.集合(元胞数组)
在matlab中,变量可以存放一个数组,也可以存放以数组为元素的集合。集合以花括号限定,元素之间用逗号分隔。
例: 观察下面语句的运行结果
>> A={[1 2;3,4],‘This is a book’,1:5};
>> A{2}
ans =
This is a book
>> A{1}+5
ans =
6 7
8 9
>> length(A)
ans =
3
10.B=repmat(A,m,n); %把A作元素铺成m´n大数组
C=reshape(A,m,n); %在总元素个数不变的前提下,改变数组的行列数。
D=rot90(A, k); %数组逆时针旋转k个90度
E=flipud(A); %数组上下翻转
F=fliplr(A); %数组左右翻转
- 矩阵运算
F=A+B F=A-B F=A*B F=A\B F=B/A F=A^m
除法是乘法的逆运算。
Ax=B®x=A\B
注:运算的逆是解方程!
- 数组运算
数组运算的运算符是算术运算符前加点,故又称点运算
点运算有:
.* ./ .\ .^
数组的加减法和矩阵的加减法一致,不用加点。
注:在MATLAB中,函数作数值运算要用点运算。
13.逻辑运算
matlab定义以下逻辑运算
~ 非
& 与
| 或
xor 异或
逻辑运算也是数组运算。
例 输入一个矩阵,求其中被3整除的正数及其位置
>> A=[-1 5 9 -3 7;
6 -2 5 15 8;
-6 7 21 -7 -12];
>> B=A>=0&mod(A,3)==0 返回为逻辑值0-1
B =
0 0 1 0 0
1 0 0 1 0
0 0 1 0 0
>> B.*A
ans =
0 0 9 0 0
6 0 0 15 0
0 0 21 0 0
(先进行逻辑判断再进行复原可行元素)
14.参考程序:
x=0:0.1:4;
flag1=x<=1;
flag2=x>1;
f=flag1.*x.^2+flag2.*sqrt(x);
plot(x, f)
15.Matlab中的find函数提供了一个简便的下标操作方法。find函数的调用格式为
find(g(A))
其中 g是矩阵A的关系或逻辑表达式。find 函数则返回满足这一条件的元素的一维下标集合。
例 将矩阵A中大于0.5的元素换成0.5。
>> A=rand(5)
A =
0.8147 0.0975 0.1576 0.1419 0.6557
0.9058 0.2785 0.9706 0.4218 0.0357
0.1270 0.5469 0.9572 0.9157 0.8491
0.9134 0.9575 0.4854 0.7922 0.9340
0.6324 0.9649 0.8003 0.9595 0.6787
>> U=find(A>0.5);%返回A的符合条件的位置
>> A(U)=0.5
A =
0.5000 0.0975 0.1576 0.1419 0.5000
0.5000 0.2785 0.5000 0.4218 0.0357
0.1270 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.4854 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
16.Matlab的函数: 矩阵函数, 数组函数
matlab矩阵函数
最常使用的矩阵函数包括行列式函数det、矩阵求逆函数inv和求特征值和特征向量的函数eig。调用格式为
det(A) %返回矩阵A的行列式的值
inv(A) %返回矩阵A的逆矩阵
E= eig(A) %返回由矩阵A的全部特征值为元素的向量
[E,R]=eig(A) %返回特征向量和特征值
17.数组函数
初等数学函数都是数组函数。
数组函数作用于数组的每个分量。例如,sin(A)相当于对数组A的每个分量求正弦。
常用的数组函数:
sin(A) cos(A) tan(A) cot(A)
exp(A) log(A) log10(A) sqrt(A)
round(A) floor(A) ceil(A) fix(A)