矩阵
1、v2=1:3:18 ;表示的是从1 开始 18 结束,间隔为3 的一个等差数列
v2 =
1 4 7 10 13 16
2、linspace(1,10,9);,介于1-10 之间,取9个数,使得他们是一个等差数列
>> linspace(1,10,9)
ans =
1.0000 2.1250 3.2500 4.3750 5.5000 6.6250 7.7500 8.8750 10.0000
3、 logspace(1,10,9) 等比数列
ans =
1.0e+10 *
0.0000 0.0000 0.0000 0.0000 0.0000 0.0004 0.0056 0.0750 1.0000
4、v(2) // matlab 中的下标都是从1开始的,不是0
ans =
2
5、>> c=[1;3;4;65] // 列向量的创建,行与行之间的用;隔开
c =
1
3
4
65
6、>> mat=[1:4;455,667,6,77] // 2行4列的矩阵
mat =
1 2 3 4
455 667 6 77
7、 randi([1 10],[4,3]) 随机一个在1-10 之间,4行3列的矩阵
ans =
9 7 10
10 1 10
2 3 2
10 6 10
8、zeros(6) 6介0 矩阵
ans =
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
9、 eye(6) 6介单位矩阵
ans =
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
10 、diag([1,4,6,7]) // 生成括号中的单位矩阵
ans =
1 0 0 0
0 4 0 0
0 0 6 0
0 0 0 7
11、 M =randi([1,9],[3,5])
M =
9 2 8 1 7
5 4 9 8 7
8 9 6 9 7
12、 M =randi([1,9],[3,4])
M =
4 7 1 7
6 1 1 3
2 3 8 9
>> reshape(M,2,6)
ans =
4 2 1 1 8 3
6 7 3 1 7 9
13、>> diag(1:5)
ans =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
>> diag(1:4,1) 次对角线
ans =
0 1 0 0 0
0 0 2 0 0
0 0 0 3 0
0 0 0 0 4
0 0 0 0 0
>> diag(1:5)+ diag(1:4,1)
ans =
1 1 0 0 0
0 2 2 0 0
0 0 3 3 0
0 0 0 4 4
0 0 0 0 5
二、矩阵的基本操作
1、矩阵行列式变换 收尾行
M =
4 7 1 7
6 1 1 3
2 3 8 9
>> flipud(M)
ans =
2 3 8 9
6 1 1 3
4 7 1 7
2、flip([123, 344,555])
ans =
555 344 123
3、rot90(M)
ans =
7 3 9
1 1 8
7 1 3
4 6 2
4、 A=[1 2;3 4]
A =
1 2
3 4
>> repmat(A,2,3)
ans =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
5、A =
1 2
3 4
>> repelem(A,2,3)
ans =
1 1 1 2 2 2
1 1 1 2 2 2
3 3 3 4 4 4
3 3 3 4 4 4
6、 E=[]
E =
[]
>> size(E)
ans =
0 0
>> [E A]
ans =
1 2
3 4
7、diff([1 3 45 5 ]) // 差值 difference
ans =
2 42 -40
E=[E,randi([1,6])]
E =
1
>> E=[E,randi([1,6])]
E =
1 3
>> E=[E,randi([1,6])]
E =
1 3 3
>> E=[E,randi([1,6])]
E =
1 3 3 5
>> E=[E,randi([1,6])]
E =
1 3 3 5 5
>> E=[E,randi([1,6])]
E =
1 3 3 5 5 2
>> E=[E,randi([1,6])]
E =
1 3 3 5 5 2 3
>> E=[E,randi([1,6])]
E =
1 3 3 5 5 2 3 3
>>
三、矩阵的简单运算
1、 [1 3 4 6]*3 // 矩阵的乘法 加法
ans =
3 9 12 18
2、矩阵之间的加减法
C=[2 5 7 88 8]
C =
2 5 7 88 8
>> D=[24 55 75 858 85]
D =
24 55 75 858 85
>> C+D
ans =
26 60 82 946 93
2、矩阵的乘法 对应原始相乘
C.*D
ans =
48 275 525 75504 680
3、 矩阵对应位置的乘方
>> A=[ 1 3 4]
A =
1 3 4
>> B=[2 4 0]
B =
2 4 0
>> A.^B 【1^1 3^4 4^0】
ans =
1 81 1
T(:,:,1)% T的括号中第一个: 表示的是所有的行
第二个: 表示的是所有的列
Question:建立一个 3*4 的矩阵 ,连续创建5页,形成一个3位的数据
M=randi([1,9],[3,4])
M =
6 3 2 9
7 7 2 4
7 6 5 6
>> T(:,:,1)=M
T =
6 3 2 9
7 7 2 4
7 6 5 6
>> T(:,:,2)=randi([1,9],[3,4])
T(:,:,1) =
6 3 2 9
7 7 2 4
7 6 5 6
T(:,:,2) =
3 5 9 2
7 7 5 3
3 9 2 8
>> T(:,:,3)=randi([1,9],[3,4])
T(:,:,1) =
6 3 2 9
7 7 2 4
7 6 5 6
T(:,:,2) =
3 5 9 2
7 7 5 3
3 9 2 8
T(:,:,3) =
3 9 3 4
8 4 6 8
3 2 5 6
>> T(:,:,4)=randi([1,9],[3,4])
T(:,:,1) =
6 3 2 9
7 7 2 4
7 6 5 6
T(:,:,2) =
3 5 9 2
7 7 5 3
3 9 2 8
T(:,:,3) =
3 9 3 4
8 4 6 8
3 2 5 6
T(:,:,4) =
5 7 6 5
9 7 1 8
3 4 1 9
>> T(:,:,5)=randi([1,9],[3,4])
T(:,:,1) =
6 3 2 9
7 7 2 4
7 6 5 6
T(:,:,2) =
3 5 9 2
7 7 5 3
3 9 2 8
T(:,:,3) =
3 9 3 4
8 4 6 8
3 2 5 6
T(:,:,4) =
5 7 6 5
9 7 1 8
3 4 1 9
T(:,:,5) =
2 1 8 2
6 4 3 6
5 2 5 3
>> size(T)
ans =
3 4 5
>> whos
Name Size Bytes Class Attributes
M 3x4 96 double
T 3x4x5 480 double
>> numel(T)
ans =
60
// 绝对值==================================================================
>> V=randi([-5 5],[1 5])
V =
2 2 3 -1 -5
>> abs(V)
ans =
2 2 3 1 5
// ======================================================================
>> sign(V) % 单位
ans =
1 1 1 -1 -1
// =======================================================================
>> prod(V) % 矩阵内的乘积
ans =
60
>> cumsum(V) % 2 第一个的值 4是前面连个的和7是前面三个的和
ans =
2 4 7 6 1
>> cumprod(V) 2 第一个的值 4是前面连个的乘积 12是前面三个的乘积
ans =
2 4 12 -12 60
>> cummax(V)
ans =
2 2 3 3 3
>> cummin(V)
ans =
2 2 2 -1 -5
=============================================================================
>> M
M =
6 3 2 9
7 7 2 4
7 6 5 6
>> min(M)
ans =
6 3 2 4
>> max(M)
ans =
7 7 5 9
四、逻辑属性
>> r=rand(1,5)
r =
0.2290 0.9133 0.1524 0.8258 0.5383
>> r>0.5
ans =
1×5 logical 数组
0 1 0 1 1
//===================================================================
>> u=r>0.5
u =
1×5 logical 数组
0 1 0 1 1
>> r(u)
ans =
0.9133 0.8258 0.5383
//=======================================================================
>> vec=[5 7 8 9 7 0]
vec =
5 7 8 9 7 0
>> vc=[0 1 0 1 0 0]
vc =
0 1 0 1 0 0
>> vec(vc)
数组索引必须为正整数或逻辑值。
>> vec(vc=1)
无法将类型为 string 的值用作索引。
>> vc=logical([0 1 0 1 0 0])
vc =
1×6 logical 数组
0 1 0 1 0 0
//=====================================================================
>>
>> log_true=ones(3,4,'logical')
log_true =
3×4 logical 数组
1 1 1 1
1 1 1 1
1 1 1 1
//=======================================================================
>>R=rand(50,50)
>> all(R>=0.001)
ans =
1×50 logical 数组
列 1 至 34
1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
列 35 至 50
1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1
//=============================================================================
>> any(R<0.001)
ans =
1×50 logical 数组
列 1 至 34
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
列 35 至 50
0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
//===================================================================
>> R1=rand(1,10)
R1 =
0.8866 0.4468 0.8160 0.0983 0.8596 0.0276 0.8992 0.8999 0.5241 0.1202
>> R1>0.5
ans =
1×10 logical 数组
1 0 1 0 1 0 1 1 1 0
>> b=R1>0.5
b =
1×10 logical 数组
1 0 1 0 1 0 1 1 1 0
>> find(b) // find 返回的是索引
ans =
1 3 5 7 8 9
//=======================================================================
>> b=R1>0.5
>> n= find(b,1,'first') //找到第一个逻辑正的索引
n =
1
//====================================================================
>> v1=[1 2 4 5]
v1 =
1 2 4 5
>> v2=[1 2 4 5]
v2 =
1 2 4 5
>> all(v1==v2)
ans =
logical
1
>> v3=[1 2 4 4 5]
v3 =
1 2 4 4 5
>> all(v1==v3)
对于此运算,数组的大小不兼容。
//===================================================================
>> v3=[1 2 4 4 5]
v3 =
1 2 4 4 5
>> all(v1==v3)
对于此运算,数组的大小不兼容。
相关文档
>> isequal(v1,v3)
ans =
logical
0
//==================================================================
练习 删除矩阵中的负数 Vec=[11 -5 33 2 8 -4 25]
>> Vec=[11 -5 33 2 8 -4 25]
Vec =
11 -5 33 2 8 -4 25
>> x=find(Vec<0)
x =
2 6
>> Vec(x)=[]
Vec =
11 33 2 8 25
//一句matlab 就能实现
>> Vec(find(Vec<0))=[]
Vec =
11 33 2 8 25
// 这个是速度最快的
Vec=[11 -5 33 2 8 -4 25];
Vec(Vec<0)=[];
>> Vec=[11 -5 33 2 8 -4 25]
Vec =
11 -5 33 2 8 -4 25
>> Vec(Vec<0)=[]
Vec =
11 33 2 8 25
//============================================================================
// 练习, 有 一个数组原始 1 或者 1 ,1000个元素,找出前面是1 后面是0 ,和前面是0 后面是1 的元素
>> rng(0)
>> V=randi([0,1],[1,1000]);
>> % switching 0 ->1 ,1->0
// 如下
>> V(1:10)
ans =
1 1 0 1 1 0 0 1 1 1
>> diff(V(1:10))
ans =
0 -1 1 0 -1 0 1 0 0
>> find(diff(V(1:10))==-1)
ans =
2 5
>> find(diff(V(1:10))==1)
ans =
3 7
* 0 ->1 ,1->0的这种情况有多少个
>> size(diff(V)==1)
ans =
1 999
>> numel(diff(V)==1)
ans =
999
>> sum(diff(V)==1)
ans =
243
>> sum(diff(V)==-1)
ans =
243
//===================================================================================
练习
>> U=randi([0 2],[1,1000]);% U 中有 0-2之间的整数组成,有1000个
>> U(1:10)
ans =
1 1 2 0 1 1 1 0 0 1
>> %1-2 的事件有多少次,有两种思路,可以将0转成NaN
>> U2(U2==0)==NaN
第二中思路,将数见减去 1
>> U=U-1;
>> sum(diff(U)==-1)
ans =
240
//=============================================================================
科学计数法的e
>> 3.4444E5
ans =
344440
五、矩阵的乘法
矩阵之间的乘法
>> M1=randi([1,9],[3,4])
M1 =
4 7 7 2
3 4 6 9
9 1 1 5
>> M2=randi([1,8],[4,3])
M2 =
4 5 1
3 3 8
6 2 5
8 4 2
>> M1*M2 矩阵的乘法 点乘,第一个矩阵的列是和第二个矩阵的行数要相同
ans =
95 63 99
132 75 83
85 70 32
// ===========================================================================
>> M0=randi([1,9],[4,4])
M0 =
5 5 1 1
1 6 5 9
8 7 1 7
4 4 7 9
>> M0^2 两个矩阵的乘法,第一个矩阵的列是和第二个矩阵的行数要相同
ans =
42 66 38 66
87 112 99 171
83 117 93 141
116 129 94 170
>> M0.^2 这个表示的矩阵中的数据的平方
ans =
25 25 1 1
1 36 25 81
64 49 1 49
16 16 49 81
>> M0.^2.5
ans =
55.9017 55.9017 1.0000 1.0000
1.0000 88.1816 55.9017 243.0000
181.0193 129.6418 1.0000 129.6418
32.0000 32.0000 129.6418 243.0000
>> M0.^5
ans =
3125 3125 1 1
1 7776 3125 59049
32768 16807 1 16807
1024 1024 16807 59049
// ==============================================================================
>> size(M0)
ans =
4 4
>> M0
M0 =
5 5 1 1
1 6 5 9
8 7 1 7
4 4 7 9
>> V2=randi([1,9],[4,1])
V2 =
5
3
3
7
>> M0*V2
ans =
50
101
113
116
//=================================================================
向量之间的乘法:
//=============================================================
点乘
>> V1=randi([1,5],[1,3])
V1 =
5 2 4
>> V2=randi([1,9],[1,3])
V2 =
1 6 4
>> V1.*V2 向量之间对应的元素的点乘
ans =
5 12 16
内积
有两种方法:
>> % 内积 假如V1=[a b c ] V2=[a1 b1 c1],那么V1V2 的内积就是 a*a1+ b*b1+c*c1
>> sum(V1.*V2)// 第一种
ans =
33
>> V1*V2' % 内积 第二种
ans =
33
注意:V2' 是矩阵的装置它的优先级是高于乘法的
//==================================================
差积
>> cross(V1,V2)
ans =
-16 -16 28
>> V3=[1]
V3 =
1
>> cross(V3,V3)
错误使用 cross (第 29 行)
在获取交叉乘积的维度中,A 和 B 的长度必须为 3。
五、常用的矩阵
希尔伯特方矩阵
>> hilb(3)
ans =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
// pascal 矩阵
>> pascal(5)
ans =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
// magic矩阵 行和列的和都是一样的
>> magic(5)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
//=========================================================================
找出一个矩阵中的某个值的具体位置(索引)
>> M=randi([1,9],[4,4])
M =
4 6 7 6
9 1 7 2
8 8 7 7
9 9 4 1
>> find(M==1)
ans =
6
16
>> [i,j]=ind2sub(size(M),find(M==1)) // 找到这个索引和位置
i =
2
4
j =
2
4
//==========================================================================
矩阵的基本使用总结:
文章来源地址https://www.toymoban.com/news/detail-440719.html
A =
1 2 3 4 5
12 12 14 56 657
23 46 34 67 56
A(:,3) % 表示的是返回A矩阵的第3列的向量----------------------------
ans =
3
14
34
A(2,:) % 表示返回矩阵A的第2行的向量
ans =
12 12 14 56 657
A(:,2:5) % 表示返回的是从第二列到第5类的子矩阵---------------------
ans =
2 3 4 5
12 14 56 657
46 34 67 56
A(1:2,3:5) % 表示返回一个2*3的矩阵-----------------------------
ans =
3 4 5
14 56 657
B(:) % 表示将矩阵B中的每个元素按照列 合并成一个列向量----------------------------
ans =
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
A(2,5)% 表示返回矩阵A中的第2行第5列的那个元素 --------------------
657
A(:,[2 5]) % 表示返回矩阵中第2 5 列的所有列向量-------------------------
ans =
2 5
12 657
46 56
[max_A,index]=max(A,[],1) 求出矩阵每列中的最大值:--------------------
max_A =
23 46 34 67 657
index =
3 3 3 3 2
[min_A,index]=min(A,[],2) 求出矩阵每行中的最小值:--------------------
min_A =
1
12
23
index =
1
1
1
矩阵的合并:
horzcat(A,B) //水平合并
>> A=[1 2 3 4 5;
12 12 14 56 657;
23 46 34 67 56];
B=[1 1 1 1 1;
2 2 2 2 2;
3 3 3 3 3];
>> horzcat(A,B) %矩阵A,B左右合并
竖直方向上的合并:
vertcat(A,B);
矩阵的基本运算:
a、A+/-B,表示矩阵A和矩阵B中对应位置元素的相加 /减
b、A.*B 和A./B: 表示的是A矩阵中和B矩阵中对应元素的乘除,是点元素,和顺序没有关系
[1,2,3].*[4,5,6] =1*4 2*5 3*6 =【4 10 18】 点乘
c、矩阵的乘法要严格遵守 A(m*n)*B(n*z)=Z(m*z)
d、矩阵的除法,必须要求A(m*n).*B(m*n)=Z(m*n)
可以看成 A* B(-1),B(-1)表示的是B矩阵的逆,但是这种方法强烈不推荐。
举例2:
e、矩阵之间的点乘 必须要求A(m*n).*B(m*n)=Z(m*n)
f、A^B 表示矩阵A的B 次幂(B是矩阵)
如果B是一个数字数字
g、A.^B 表示矩阵A的B 次幂(B是矩阵点乘)
如果B是数字,A(矩阵).^4 表示的是每个元素的做4次1
如果B是矩阵:表示矩阵A的每个元素的B次幂
文章来源:https://www.toymoban.com/news/detail-440719.html
到了这里,关于Matlab 数组与矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!