您现在的位置:首页 > >

Matlab数组与绘图操作大全.ppt

发布时间:

第11周
Matlab 一、二维数组 二、二维数组与绘图

一、二维数组

二维数组是由实数或复数排列成矩形而构成的, 从数据结构上看,二维数组和矩阵没有什么区别。 当二维数组带有线形变换含义时,该二维数组就是 矩阵(matrix)。

1、二维数组的输入方法
?1 2 3? ? ? 例:简单矩阵A ? ? 4 5 6 ? 的输入步骤。 ? 7 8 9? ? ? (1)在键盘上输入下列内容
A = [1,2,3; 4,5,6; 7,8,9] (2)按【Enter】键,指令被执行。 (3)在指令执行后,MATLAB指令窗中将显示以下结果: A = 1 2 3 4 5 6 说明:直接输入矩阵时,每行元素用 7 8 9 空格或逗号分隔,矩阵行用分号分隔, 整个矩阵放在方括号里,标点符号一 定要在英文状态下输入。

2、由一维数组创建二维数组

A = [1,3,5] B = [2,4,6] C = [3,5,7]

D = [A;B] E = [A;B;C] F = [A’,B’] G = [A’,B’,C’]

3、由函数创建二维数组
zeros(m,n)
ones(m,n) eye(m,n)
生成一个 m 行 n 列的零矩阵,m=n 时可简写为 zeros(n)
生成一个 m 行 n 列的元素全为 1 的矩阵, m=n 时可写为 ones(n) 生成一个主对角线全为 1 的 m 行 n 列矩阵, m=n 时可简写为 eye(n),即为 n 维单位矩阵 生成魔方数组,各行、列之和 = (1+2+……+n2 )/n

magic(n) diag(v,k)
rand(m,n) randn(m,n)

v是向量,diag(v) 产生以 v 为第k条对角线的矩阵, 默认k=0
产生 0~1 间均匀分布的随机矩阵 m=n 时简写为 rand(n) 产生均值为0,方差为1的标准正态分布随机矩阵 m=n 时简写为 randn(n)

diag(v,k)

练*:在matlab中生成二维数组
A= 0 0 0 1 1 1
0 0 0 1 1 1 0 0 0 1 1 1
B= 1 0 0 0 -4 0 0 0
0 2 0 0 0 -3 0 0 0 0 3 0 0 0 -2 0 0 0 0 4 0 0 0 -1

已知一维数组x和y: x ? [ x1 , x2 , x3 , x4 , x5 ] ? [1, 0, ?1, 2,3], y ? [ y1 , y2 , y3 , y4 , y5 ] ? [3, 2,1, ?1, ?2] 在matlab生成下面的二维数组: x1 x2 x3 x4 x5 1? x 2? x 3? x 4? x 5? x
2 1 2 2 2 3 2 4 2 5

x1 y1 x2 y2 x3 y3 x4 y4 x5 y5

y1 /1 x1 y5 y2 / 2 x2 y4 y3 / 3 x3 y3 y4 / 4 x4 y2 y5 / 5 x5 y1

4、二维数组操作函数
把“大小”相同的若干数组,沿“指 cat(dim, A, B) 定维”方向,串接成高维数组 。行 (dim=1) 列(dim=2)

diag(A,k) flipud(A) fliplr(A) kron(A,B)

A 是矩阵,则 diag(A,k) 返回A的第k 条对角线向量,默认k=0 以数组“水*中线”为对称轴,交换 上下对称位置上的数组元素 以数组“垂直中线”为对称轴,交换 左右对称位置上的数组元素

按Kronecker乘法规则(直积)产生 “积”数组

二维数组操作函数
repmat(A,m,n) rot90(A,k)
按指定的“行数、列数”铺放模块 数组,以形成更大的数组 逆时针旋转 k×90 度

在总元素数不便的前提下,改变数 reshape(A,m,n) 组的“行数、列数”

tril(A)

提取一个矩阵的下三角部分

triu(A)

提取一个矩阵的上三角部分

5、二维数组的转置运算
? A.’:转置 ? A’:共轭转置

6、两个维数相同的 二维数组之间的数组运算
? ? ? ? ? ? A + B:加,对应位置的数组元素相加 A - B:减,对应位置的数组元素相减 A.*B:点乘,对应位置的数组元素相乘 A./B:右点除,对应位置的数组元素相除 A.\B:左点除 A.^B:点幂,对应位置的数组元素做幂运算

7、二维数组的与标量 的运算
? ? ? ? ? ? ? A + c :A的每个元素加c A - c: A的每个元素减c A.*c:点乘, A的每个元素乘c A./c:右点除, A的每个元素除c A.\c:左点除,c除A的每个元素 A.^c:点幂, A的每个元素做幂运算 c.^A:点幂,c做幂运算

8、函数作用在二维数组上的 运算规则
? x11 ?x 21 ? X? ? ... ? ? xm1 x12 x22 ... xm 2 ... x1n ? ? ... x2 n ? ? xij ... ... ? ? ... xmn ?
m?n

? ?

m?n

? f ?X ? ? ? f x ? ? ? ij ?

9、引用二维数组的元素
1、 A(r,c):“全下标”标识: 即指出是“第几行,第几列”的元素 2、A(ind):“单下标”标识: Linear Index 只用一个下标来指明元素在数组中的位置: 把二维数组的所有列,按先左后右的次序,首 尾相接排成“一维长列”,然后,自上往下对元素位 置进行标号。 3、“单下标”与“全下标”的转化: 全下标→单下标: ind = sub2ind(siz,r,c) 单下标→全下标: [r,c] = ind2sub(siz,ind)

二维数组的单个元素 的引用和赋值
? X=magic(6) ? 单个元素寻访 X(2,3) X(5,5) X(16) ? 单个元素的赋值 X (2,3) = 0 X (5,5) = 7 X (16) = 8

二维数组的子数组 的引用和赋值
(1)使用“双下标”方式
A(r,:)
A(:,c) A(r,c)
由A的“r行”和“全部列”上的元素组 成 由A的“全部行”和“c列”上的元素组 成 由A的“r行”和“c列”上的元素组成

对子数组A(r,c)进行赋值:B的“行、列” A(r,c) = B 必须与A(r,c)的“行、列”相同

(2)使用“单下标”方式
A(:) A(s)
由A的各列按自左到右的次序,首尾相接而生成 的“一维长列”数组 引用A中由一维数组s指定的元素。s若是行(或 列),则A(s)就是长度相同的行(或列) 全元素赋值方式。结果:保持A的“行宽、列长” 不变。条件:A、D两个数组的总元素相等,但 “行宽、列长”不一定相同 对A的部分元素重新赋值。结果:保持A的“行 宽、列长”不变。条件:s单下标数组的长度必 须与“一维数组”B的长度相等,但是s、B不一 定同是“行数组”或“列数组”

A(:) = D(:) A(s) = B

(3)使用“逻辑数组”方式
“逻辑数组”寻访,生成“一维”列数组: 由与A同样大小的“逻辑数组”L中的“1元 素”选出A的对应元素;按“单下标”次序 排成长列组成

A(L)

??4 ?2 0 2 4? 例:找出数组A ? ? ? ? ?3 ?1 1 3 5 ? 中所有绝对值大于3的元素。

10、与二维数组相关的函数
cmax = max(A) rmax = max(A,[],2)
返回cmax为一个行数组,元素为A中每个列的最大值 返回rmax为一个列数组,元素为A中每个行的最大值

[cmax,index] = max(A)
[rmax,index] = max(A,[],2) max(A,B)
返回一个二维数组,元素为A,B相同位置上的较大值 返回A中每个列的最大值及其位置,cmax,index为行数组 返回A中每个列的最大值及其位置,rmax,index为列数组

min(A),min(A,[],2) [c,d]= min(A),[c,d]= min(A,[],2),min(A,B)

mean(A) mean(A,2)

返回A中每个列向量的*均值 返回A中每个行向量的*均值

median(A) 返回A中每个列向量的中值 Median(A,2) 返回A中每个行向量的中值

std(A) std(A,2)

返回A中每个列向量的标准差 返回A中每个行向量的标准差

sum(A) sum(A,2)

计算A中每个列向量的元素的和 计算A中每个行向量的元素的和
A中每个列向量的累加和,维数与A相同 A中每个行向量的累加和,维数与A相同

cumsum(A) cumsum(A,2)
prod(A) prod(A,2) cumprod(A) cumprod(A,2)

计算A中每个列向量的元素的积 计算A中每个行向量的元素的积
A中每个列向量的累乘积,维数与A相同 A中每个行向量的累乘积,维数与A相同

sort(A)

对A中列向量进行升序排序

sort(A,’descend’) 对A中列向量进行降序排序 sort(A,2)

对A中行向量进行升序排序

sort(A,2,’descend’) 对A中行向量进行降序排序

当只有一个输出参数时,size函数返 sz=size(A) 回的是一个行向量,该行向量的第一 个元素是数组的行数,第二个元素是 数组的列数。 当有两输出参数时,size函数将数组 [r,c]=size(A) 的行数返回到第一个输出变量,将数 组的列数返回到第二个输出变量。

r=size(A,1)

返回数组 A 的行数

c=size(A,2) 返回数组 A 的列数 length(A)
返回数组的长度(行数或列数的较大值)

numel(A)

返回数组元素的个数

练*
函数f ? x ?的定义如下: ? x2 ? x ? 6 ? 2 f ( x) ? ? x ? 5 x ? 6 ? x2 ? x ?1 ? , , , x ? 0且x ? ?4 0 ? x ? 10 , x ? 2且x ? 3 其它

编写一个Matlab函数实现该函数,且要求函数能够 处理输入参数为一维、二维数组的情况,即要求: ? f ? xij ? ? ? f ? x ? ij ? ? m?n ? ? m?n

?

?

二、二维数组与绘图
1、二维数组在2d绘图中的应用 plot(x,y)
(1)若x, y 都是二维数组, 将 x 的列和 y 中相应的列相组合,绘制多条* 面曲线。此时 x, y 必须具有相同的大小。

例:利用二维数组在同一坐标轴中同时绘制下 列函数的图形:

y ? k cos ? x ? , x ??0,2? ?, k ? 1,2,3

plot用二维数组绘图的细节
你想要是下面的哪一种图形?怎样绘制出这两种图形?

3

3

2

2

1

1

0

0

-1

-1

-2

-2

-3

0

1

2

3

4

5

6

7

-3

0

1

2

3

4

5

6

7

补充:plot绘图的细节
例题:用plot函数动 态演示利萨如图形 的形成。
x ? sin ? t ?
t=
…… plot(x([1,2]),y([1,2])) hold on axis([-1.1,1.1,-1.1,1.1])

?? ? y ? sin ? 2t ? ? 6? ?

for k = 2:length(t)-1
plot(x([k,k+1]),y([k,k+1])) pause(0.1) end

plot(x,y)
(2)若x 是一维数组, y 是二维数组 当 x 的长度与 y 的行数相等,则将 x 与 y 中的各列相对应,绘制多条*面曲线; 否则,若 x 的长度与 y 的列数相等,则将 x 与 y 中的各行相对应,绘制多条*面曲线。

例:利用plot函数的上述功能在同一坐标轴中 同时绘制下列函数的图形:

y ? k cos ? x ? , x ??0,2? ?, k ? 1,2,
10 8 6 4 2 0 -2 -4 -6 -8 -10

,9

x = linspace(0,2*pi,50) y = cos(x)’*(1:9)

plot(x,y)

线性代数中: 列 × 行 = 矩阵
0 1 2 3 4 5 6 7

2、二维数组在3d绘图中的应用
? 绘制由函数 z=z(x,y) 确定的曲面时,首先需产生一个网格 矩阵,然后计算函数在各网格点上的值。 ? 网格生成函数:meshgrid

[X,Y]= meshgrid(x,y)
x, y 为给定的向量 若 x = y, 可简写为 [X,Y]= meshgrid(x) X, Y 是网格划分后得到的网格矩阵

例:“墨西哥帽子”
由函数 z ? sin( r ) / r, 其中 r ? x ? y 确定的曲面
2 2

(1)三维网格图: mesh, meshc, meshz
mesh(X,Y,Z,C) 绘制由矩阵 X,Y,Z 所确定的曲面网格图,矩阵 C 用于
确定网格颜色,省略时 C=Z

meshc(X,Y,Z,C) 调用方式与 mesh 相同,在 mesh 基础上增加等高线

meshz(X,Y,Z,C) 调用方式与 mesh 相同,在 mesh 基础上屏蔽边界面

1

1

0.5

0.5

0

0

-0.5 10 5 0 -5 -5 -10 -10 5 0 10

-0.5 10 5 0 -5 -10 -10 -5 5 0 10

mesh

meshc
1 0.5

0

-0.5 10 5 0 -5 -10 -10 -5 5 0 10

meshz

(2)三维表面图: surf, surfc
surf(X,Y,Z,C) 绘制由矩阵 X,Y,Z 所确定的曲面图,参数含义同 mesh surfc(X,Y,Z,C) 调用方式与 surf 相同,在 surf 基础上增加等高线
1 1

0.5

0.5

0

0

-0.5 10 5 0 -5 -10 -10 -5 5 0 10

-0.5 10 5 0 -5 -10 -10 -5 5 0 10

surf

surfc

若不想在三维表面图中显示网格线,可将属性 “edgecolor”设为“none” surf(X,Y,Z,’edgecolor’,’none’)
1 1

0.5

0.5

0

0

-0.5 10 5 0 -5 -10 -10 -5 5 0 10

-0.5 10 5 0 -5 -10 -10 -5 5 0 10

surf

surfc

(3)mesh和surf绘图的细节
x11 x12 y11 y12 X ? x21 x22 Y ? y 21 y22

z11

z12

c11

c12

Z ? z21 z22

C ? c 21 c22

A、绘制四边形*面
4 1 0.8 3 0.6 2 0.4 1 0.2 0 1.5 0.5 0 -0.5 -1 0 1 3 2 4 1 0.5 0 -0.5 0.5 1 1.5 2 2.5 3 3.5

0 1

练*:绘制一个立方体表面(共六个面)

1.5

1

0.5

0

-0.5 1.5 1 0.5 0.5 0 -0.5 -0.5 0 1 1.5

B、绘制三角形*面
2 2

1.5

1.5

1

1

0.5

0.5

0 2 1 0 1 -1 0 2 4 3

0 2 1 0 1 -1 0 2 4 3

C、绘制五边形*面

4

2

3

1.5

2

1

1

0.5

0 3 2 1 0 -1 0 1 3 2 4

0 3 2 1 0 -1 0 1 3 2 4

D、绘制圆形*面
1

1

0.5

0.5

0

0

-0.5

-0.5

-1 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

-1 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

E、绘制圆(棱)柱、台、锥面

2

2

1.5

1.5

1

1

0.5

0.5

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

2

2

1.5

1.5

1

1

0.5

0.5

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

2

2

1.5

1.5

1

1

0.5

0.5

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

2

1.5

1

0.5

0 4 2 0 -2 -4 -4 -2
2

4 2 0

1.5

1

0.5

0 4 2 0 -2 -4 -4 -2 2 0 4

F、绘制球面
1

0.5

0 0 0.5 0 0 -0.5 -0.5 0.5 -0.5 1

-1

0.5 0 0 -0.5 -0.5 0.5

1

2

1

0

-1

-2 2 1 0 -1 -2 -2 -1 1 1 0 2 2

0

-1

-2 2 1 0 -1 -2 -2 -1 1 0 2



热文推荐
猜你喜欢
友情链接: 医学资料大全 农林牧渔 幼儿教育心得 小学教育 中学 高中 职业教育 成人教育 大学资料 求职职场 职场文档 总结汇报