第一章 Matlab中的数组操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、数组的建立 1.直接输入法 matlab在创立数组时以逗号或空格表示分列,分号 或回车表示分行。数组开头“[”、结尾“]” 行数组:如a=[1,2,3,8,-1] 列数组: b=[1;2;3;8;-1] 或a’ 矩阵:A= [2,4,1;8:-2:4;2,4,6]
2.通过数组编辑器生成矩阵
步骤:先建立空矩阵a=[],
MATLAB基础应用
第一章 Matlab中的数组操作
matlab中的运算和操作是以数组为对象的, 数组又包括:数值数组、字符数组、元胞数组等。 数值数组:(1)n元数值向量(行向量与列向量) (2)数值矩阵 (3)由数值矩阵构成的元胞数组 几个标点符号的作用: 逗号:用来将数组中的元素分开。(可用空格代替) 分号:用来将矩阵中的行分开。 (可用回车键代替) 冒号:相当于文字中的省略号。 中括号:界定数组的首与尾。
2
5
6
9 2 8
7 11 4 13
(4)数组的复制: c=[1,2,5] c1=repmat(c,4,1) c2=repmat(c,1,4) c3=repmat(c,3,2) c4=repmat(c,3)
c3 = 1 2 5 1 2 5
1
1
2
2
5
5
1
1
2
2
5
5
(5)稀疏矩阵与满矩阵的转化: 稀疏矩阵生成命令:sparse(a,b,c) 数组a,b,c的大小必须相同 数组a与b分别指定元素的行标与列标, 数组c指定元素的值 A=sparse([2,4,18],[3,12,20],[-5,-3,-8]) 创建稀疏矩阵A,A的(2,3),(4,12),(18,20)元素分别 为-5,-3,-8,其余元素为零,A为18×20阶矩阵。 将稀疏矩阵x变回满矩阵: A=full(A)
0 0 -1 0 0 0 0
0 0 0 5 0 0 0 0 0 0 0 6 0 0
0 0 0 0 0 0
例1.1 输入n阶矩阵
4 2 1 A 0 2 4 2 1 1 2 4 2 1 2 4 1 0 1 2 4
n=input('输入方阵阶数n=')
D=10
N=
M=
3
3
2
1
wxy
wxz
3
2
7
1Hale Waihona Puke Baidu
wyz
xyz c1=120
2
1
7
7
c2=4 20 120
三、数组的运算
1.数值运算 数组的运算,也称点运算,是同阶数组对应分 量的运算。包括点乘、点除和点乘方,对应的运 算符号为 .* , ./ .^ 这些运算符的公共特点是在算符前加上一个英文 句号,以便与对应的矩阵运算相区别。 设A与B为同阶数的数组,k为常数, A+B,A-B,k*A A.*B, A./B, A.^n
b2 = 5 6 b3 = 2 2 2 6 3 2 4 3 5 4
7
2
2
2
2
2
7
2
2
2
3
2
(7)diag命令: b=diag(A): 提取方阵A的对角线元素构成列向量b A=diag(b): 用一维数组b的元素生成对角方阵A A=diag(b,k): b为一维数组,k为整数 将b元素作为偏离主对角线的第k条对角生成方阵A
x=0:2:10, y=[-2,-5,-8], xx=[x,y] xx = 0 2 4 6 8 10 -2 -5 -8 yy=[xx([2,5]);y(2:3)] yy = 2 8 -5 -8
x = 0 2 4 6 8 10 y = -2 -5 -8
空数组的使用: 建立空数组A: A=[ ] ,空数组大小任意。 可用空数组删除已有数组中的元素 B=1:8 B(1:2:5)=[] B= 2 4 6 7 8 A=[2,3,4,5,6;1,2,3,4,5;0,1,2,3,4;-1,0,1,2,3] 删除矩阵A第3行: A(3,:)=[] 删除矩阵A第2列: A(:,2)=[]
3.常用的数组操作命令 (1)确定数组大小命令 A=[2,5,1,-2,7;0,3,-1,-2,4;0,0,5,8,8] 求数组A行数与列数的最大值:n=length(A) 提取数组A的行数与列数:[m,n]=size(A) (2)排序命令 将一维数组x的元素排序: x=[3,-1,2,5,7,4,6,11,13,9,2,0,7,8] b=sort(x), [b,k]=sort(x)
2.数组拼接与数组中的元素值的改变 在命令窗口实验: a= 1 3 5 a=1:2:11 a= 0 3 5 a(1)=0 a= 2 -1 -2 a(1:4)=[2,-1,-2,-3] a= 2 1.5 -2 a([2,5])=[1.5,0.5]
7 9 11 7 9 11 -3 9 11 -3 0.5 11
A= B= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0
b=[2,3,-1,5,6], A=diag(b,1)
0 2 0 0 0 0
0 0 3 0 0 0 0 0 0 -1 0 0 0 0 0 0 5 0 0 0 0 0 0 6
B=diag(b,-2)
b1 = 16.2000 12.4000 b2 = 12.40 16.20 20.00 8.6000 4.8000
二维数组A的元素的提取: 由于数组A有两种编址方法,matlab会根据接受的指 令,先判断是哪一种编址方法,然后再进行元素的提取。 如: A=[1,2,3,4,5;0,1,2,3,4;-1,0,1,2,3;-2,-1,0,1,2]
A = (2,3) -5
(4,12)
(18,20)
-3
-8
创建18×20稀疏矩阵A,使A的(2,3),(4,12),(15,16) 元素分别为-5,-3,-8,其余元素为零? A=sparse([2,4,15,18],[3,12,16,20],[-5,-3,-8,0])
(6) sum(A):矩阵A按列求和,返回一个行向量; sum(A,2):矩阵A按行求和,返回一个列向量。 max(A):返回由矩阵各列的最大值构成的向量。 max(A,B):返回A与B对应元素最大值构成的矩阵 min(A),min(A,B)类似
b6= 2 4 0 2
b1=2 b2=2 b3=[0 1 2 3 4] b4=[0,-1] b5= 0 1 2 3 4 1 2 3 4 5
元胞数组元素的提取: ()和 { }有着本质的区别, { }用于表示元胞的内容, ()小括号表示指定的元胞。 a={'matlab',20;ones(2,3),1:10;ones(4,5),eye(4)}
然后在工作空间(workspace)中点开a进入数 组编辑器,输入元素。 3.用函数创建数组
定步长生成法: x=a:t:b (t步长,省略是为1); 定数线性采样法: x=linspace(a,b,n), a与b是数组的第一个和最后一个元素, n是采样的总点数。 x=linspace(2,5,6)
x= 2.0000 2.6000 3.2000 3.8000 4.4000 5.0000
1 2 0 1 A -1 0 -2 -1
3 2 1 0
4 3 2 1
5 4 3 2
b1=A(5) b2=A(2,3) b3=A(2,:) b4=A([2,3]) b5=[A(2,:);A(1,:)] b6=A([2,4],[3,5]) b7=A([2,4],[3,5,1]) b7= 2 4 0 0 2 -2
A=[0,0,2,-1,3,0,0,5,0,6,-7,0,0,9]; b1=find(A,3) b2=find(A,2, 'last') b1=3 4 5 b2=11 14 B=[0,1,0;2,3,0;4,0,0] c1=find(B) c1 = m= [m,n]=find(B) 2 2
B= 0 2 4 1 3 0 0 0 0
a1=4*ones(n,1);
2
a2=2*ones(n-1,1);
a3=ones(n-2,1);
A1=diag(a1)+diag(a2,1)+diag(a3,2); A2=diag(a2,-1)+diag(a3,-2);
A=A1+A2
(8) find命令: find(A) 找出A的不为0的元素的下标 find(A,k) 找出A的前k个不为0的元素的下标 find(A,k,’last’)找出A的后k个不为0的元素的下标 find(g(A)),其中g(A)是数组A的逻辑表达式, 返回数组A中满足条件g(A)的元素下标。
a=linspace(1,20,6)
a= 1.00 4.80 8.60 12.40 16.20 20.00
提取a的第1,3,5个元素构成数组b: b=a(1:2:5) 提取a的第2到5个元素,并反转次序构成数组b1: b1=a(5:-1:2) 按条件提取子数组: 提取a的元素值大于10的元素构成数组b2 b2=a(find(a>10))
n= 1
3
4 5
3
1 2
1
2 2
B=[0,1,0;2,3,0;4,0,0] t= t=find(B>2) [x,y]=find(B>2) 3 [m,n]=find(B>=1&B<=3)
5 B= 0 2 4 1 3 0 0 0 0 m= 2 1 2
x= 3 2 n= 1 2 2
y= 1 2
(9) 排列组合 求组合nchoosek(a,k) D=nchoosek(5,2) a=[3,2,1,7]; M=nchoosek(a,2) b='wxyz' N=nchoosek(b,3) 求连乘积 c1=prod(4:6) c2=cumprod(4:6) 求向量的全排列 perms([2,1,8])
A=[1,2,3,4,5;0,6,2,3,4;-1,0,7,2,3;2,-1,0,1,2]
1 2 0 6 A -1 0 2 -1
3 2 7 0
4 3 2 1
5 4 3 2
B=sum(A,2) b1=max(A)
b1 =
B=
15 15
2
6
7
4
5
11 4
返回由矩阵A各行的最大值构成的列向量? b2=max(A')' b3=max(A,2) ?
b=a{3,2}
b= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
改变元胞数组元素的元胞:赋值
a{2,3}=cell(2)
a=
'matlab'
[2x3 double] [4x5 double]
[
20]
[]
{2x2 cell} []
[1x10 double] [4x4 double]
zeros(m): m阶全零方阵 zeros(m,n): m×n阶全零方阵 eye(m): m阶单位阵 ones(m): m阶全1方阵 ones(m,n): m×n阶全1方阵 rand(m): m阶均匀分布随机方阵 randn(m): m阶正态分布随机方阵
4.元胞数组的创建 元胞数组是MATLAB的一种特殊数据类型, 可以将元胞数组看做一种无所不包的通用矩阵, 或者叫做广义矩阵。 组成元胞数组的元素可以是任何一种数据类型的 量,每一个元素也可以具有不同的尺寸,每一个元素 的内容也可以完全不同,元胞数组的元素叫做元胞。 建立元胞数组:{ } a={'matlab',20;ones(2,3),1:10}
a= 'matlab' [2x3 double] [ 20]
[1x10 double]
二、数组的操作 数组的编址:数组a建立后,a中各元素的编址方法 如下: 单下标编址:a(1)表示a的第1个元素,a(n)表示a 的第n个元素,对于二元数组按列优先原则进行单下标 编址。 双下标编址:a(2,3)表示矩阵a的第2行第3列元素。 1. 数组元素与子数组的提取 提取数组a的第3个元素:y=a(3) 提取a的第3到7个元素:y=a(3:7),
a= 'matlab' [2x3 double] [4x5 double] [ 20]
[1x10 double] [4x4 double]
a=
'matlab' [2x3 double] [4x5 double] [ 20] b=a(3,2)
[1x10 double] [4x4 double]
b=
[4x4 double]
b = -1 0 2 2 3 4 5 6 7 7 8 9 11 13 9 k = 2 12 3 11 1 6 4 7 5 13 14 10 8
(3)改变数组形状的命令 B= x=[3,-1,2,5,7,4,6,11,13,9,2,8] 3 将一维数组x按条件转化为矩阵: -1 B=reshape(x,3,4)