MATLAB数值数组及向量化运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.中规模数组的 M 文件创建法
【例 2.2-4】创建和保存数组 AM 的 MyMatrix.m 文件。 (1) 打开文件编辑调试器,并在空白填写框中输入所需数组(见图 2.2-2)。 (2) 在文件的首行,编写文件名和简短说明,以便查阅(见图 2.2-2)。 (3) 保存此文件,并且文件起名为 MyMatrix.m 。 (4) 以后只要在 MATLAB 指令窗中,运行 MyMatrix.m 文件 ,数组 AM 就会自动生成于 MATLAB 内存
-0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909
D=eye(3) D=
10 01 00
%产生单位数组
0 0 1
diag(D) ans =
1 1 1
%产生对角数组
diag(diag(D)) ans =
100 010 001
randsrc(3,20,[-3,-1,1,3],1) %在指定字符集生成均匀随机数组;random — 生成各种分布随机数组 ans =
8 ans =
8
A(:,[1,3]) A([1,2,5,6]') ans =
15 26 ans = 1 2 5 6
A(:,4:end) ans =
7 9 11 8 10 12
A(2,1:2:5)=[-1,-3,-5] A=
1 3 5 7 9 11 -1 4 -3 8 -5 12
B=A([1,2,2,2],[1,3,5] )
2.2.4 数组构作技法综合
【例 2.2-7】数组操作函数 reshape, diag, repmat 的用法;空阵 [ ] 删除子数组的用法。 a=1:8 A=reshape(a,4,2) %在总元素不变的前提下,改变数组的行数或列数 A=reshape(A,2,4) a=
12345678 A=
15 26 37 48 A= 1357 2468
结 论:数组运算是对单个元素进行运算。
2.数组运算符及数组运算函数
(1)运算符
+, -, .*, ./(.\), .^(乘方运算),.'(表示非共轭转置),关系、逻辑运算符。 数组运算两个数组必须同维数,矩阵还必须乘法要求的维数;矩阵左除运算是 MATLAB 专门设计的 一种运算。
(2)运算函数
三角、反三角函数;双曲、反双曲函数;指数、对数函数(exp, sqrt, log, log10);园整、求余函数 (round, fix, mod, floor);模、角、虚实部(abs, angle, real, imag, conj);符号函数(sign)。
xlabel('x'),ylabel('Sx'),grid on
ans =
4.8000 4.8500 4.9000 4.9500 5.0000
ans =
-20.1144 -19.9833 -19.7907 -19.5345 -19.2131
1
图 2.1-1 在区间[0, 5]采样点上算得的定积分值
使用说明
A(:) 单下标法
A(s)
逻辑标识 A(L)
法
“单下标全元素”,由 A 的各列按自左到右次序,首尾相连生成的“一维”数组
“单下标”寻访,生成 s 指定的“一维”数组,s 行数组(列数组),则 A(s) 就是长度相同的行数组(列数组) “逻辑 1”寻访,由与 A 同样大小的“逻辑数组”L 中的“1”元素选出 A 的对应 元素
2
用范围比符号计算广,以有限的精度表现有限时间和范围内的函数关系。
2.2 数值数组的创建和寻访
MATLAB 把数组看作存储和运算的基本单元,而标量数据看作(1×1)的数组。
2.2.1 一维数组的创建
1.递增/减型一维数组的创建
数组元素值的大小按递增或递减的次序排列,数组元素之间的“差”是“确定的”, 即“等步长”。 (1)“冒号”生成法 x=a : inc : b ;a—数组的第一个元素;inc—步长,默认值为 1;最后一个元素小于等于 b。
Columns 1 through 10 3 1 3 -1 -3 3 -3 -3 -1 3 1 3 1 3 -1 1 1 1 1 1 3 -1 -3 -1 1 -1 3 -1 -1 1
5
Columns 11 through 20 -1 -1 -3 1 1 -3 3 -1 1 1 3 -1 -1 -3 -1 -1 1 -1 -3 3 -1 -1 3 -1
> In sym.int at 58
sx =
int(exp(-sin(t)),t = 0 .. 4)
(2)数值计算解法
dt=0.05;
t=ቤተ መጻሕፍቲ ባይዱ:dt:4;
Ft=exp(-sin(t));
Sx=dt*cumtrapz(Ft);
Sx(end)
plot(t,Ft,'*r','MarkerSize',4)
hold on
第 2 章 数值数组及向量化运算
数值数组(Numeric Array)和数组运算(Array Operations)始终是 MATLAB 的核心内 容。
本章教学内容:数组浮点算法的特点;一、二维数值数组的创建和寻访;常用标准数组 生成函数和数组构作技法;数组运算和向量化编程;实现数组运算的基本函数;关系和逻辑 操作。
7
b=diag(A) B=diag(b) b=
1 4 B= 10 04
D1=repmat(B,2,4) %按指定的行数 2、列数 4,把 B 作为模块铺放形成更大维数的数组 D1 =
10101010 04040404 10101010 04040404
D1([1,3],: )=[ ] D1 =
04040404 04040404
【例 2.2-1】一维数组的常用创建方法举例。 a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 a1 =
123456 a2 =
0 0.7854 1.5708 2.3562 a3 =
Columns 1 through 6 1.0000 0.9000 0.8000 0.7000
Columns 7 through 11 0.4000 0.3000 0.2000 0.1000
C A.# B
cij aij # bij
(2)标量和数组运算
a , B [bij ]mn , C [cij ]mn
C a.# B
cij a# bij
(3)函数的数组运算
f () , X [xij ]mn
C f (X)
cij f (xij )
f ( X ) [ f (xij )]mn
74 85 96
%以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素
1 2 3
D=rot90(A,2) D=
96 85 74
%把数组逆时针旋转 90 度
3 2 1
8
2.3 数组运算
2.3.1 数组运算的由来和规则 1.数组运算规则
(1)同维数组运算
A [aij ]mn , B [bij ]mn , C [cij ]mn
2.1 数值计算的特点和地位
【例 2.1-1】已知 f (t) t 2 cos t ,求 s( x)
x
f (t) dt 。
0
(1)符号计算解法
syms t x
%定义符号变量
ft=t^2*cos(t)
sx=int(ft,t,0,x)
ft =
t^2*cos(t)
sx =
x^2*sin(x)-2*sin(x)+2*x*cos(x)
C=
1.0000
5.4716 + 0.4177i 0.6909
0.7071
4.8244
3.5000 + 1.0000i
数组的三个要素:括号[];逗号或空格;分号或回车键。
2. 中规模数组的数组编辑器创建法
【例 2.2-3】根据现有数据创建一个 (3 8) 的数组。
图 2.2-1 利用数组编辑器创建中规模数组
中。
4
图 2.2-2 利用 M 文件创建数组
4.利用 MATLAB 函数创建数组
【例 2.2-5】标准数组产生的演示。
ones(2,4)
%产生全 1 元素数组 zeros — 产生全 0 元素数组
ans =
1111
1111
randn('state',0) %产生正态分布随机数组;rand — 产生均匀分布随机数组 randn(2,3) ans =
(2)线性(或对数)定点法 x=linspace(a, b, n); 产生线性等间隔(1×n)行数组,等价于 x=a : (b-a)/(n-1) : b ; x=logspace(a, b, n);产生对数等间隔(1×n)行数组,n—一维数组的长度。
2.通用型一维数组的创建
利用函数生成特殊形式数组。
【例 2.1-2】已知 f (t) esin(t) ,求 s( x)
4
f (t) dt 。
0
本例演示:被积函数没有“封闭解析表达式”,符号计算无法解题!
(1)符号计算解法
syms t x
ft=exp(-sin(t))
sx=int(ft,t,0,4)
ft =
exp(-sin(t))
Warning: Explicit integral could not be found.
(2)数值计算解法
dt=0.05;
t=0:dt:5;
%取一些离散点
Ft=t.^2.*cos(t);
Sx=dt*cumtrapz(Ft); %梯形法求定积分
t(end-4:end)
%end 表示最后一个元素
Sx(end-4:end)
%Sx 的最后 5 个元素
plot(t,Sx,'.k','MarkerSize',12)
6
B= 159
-1 -3 -5 -1 -3 -5 -1 -3 -5
L=A<3 A(L)=NaN L=
100 101 A= NaN 3 5 NaN 4 NaN
000 010
7 9 11 8 NaN 12
格式 A(r,c) A 的 r 行 c 列上元素 全下标法 A(r,:) A 的 r 行全部列元素 A(:,c) A 的 c 列全部行元素
3.1416
0.6000 0
0.5000
b1=linspace(0,pi,4)
b2=logspace(0,3,4)
b1 =
0 1.0472 2.0944
b2 =
1
10
3.1416 100
1000
c1=[2 pi/2 sqrt(3) 3+5i]
3
c1 =
Columns 1 through 3
2.0000
【例 2.2-8】函数 flipud, fliplr, rot90 对数组的操作体现着“矩阵变换”。 A=reshape(1:9,3,3) A=
147 258 369
B=flipud(A) B=
36 25 14
%以数组“水平中线”为对称轴,交换上下对称位置上的数组元素
9 8 7
C=fliplr(A) C=
1.5708
Column 4
3.0000 + 5.0000i
1.7321
rand('state',0) c2=rand(1,5) c2 =
0.9501 0.2311
%均匀随机数组 0.6068 0.4860
0.8913
2.2.2 二维数组的创建 1. 小规模数组的直接输入法
【例 2.2-2】在 MATLAB 环境下,用下面三条指令创建二维数组 C。 a=2.7358; b=33/79; C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
plot(t,Sx,'.k','MarkerSize',15)
hold off
xlabel('x')
legend('Ft','Sx')
ans =
3.0632
图 2.1-2 在区间[0, 4]中间的被积函数及其原函数的离散计算结果
小结: (1) 符号计算 长处——可以对包含变量字符、参数字符和数字的表达式进行推理、运算,并给出符号结 果,与高等数学中的解析式比较接近;符号计算的短处——很多问题无解或求解时间过长。 (2) 数值计算 在确定一组自变量采样点基础上,执行数值计算的表达式在已知的数值点上进行计算。它适
2.3.2 数组运算和向量化编程
【例 2.3-1】欧姆定律: r u ,其中 r, u, i 分别是电阻(欧姆)、电压(伏特)、电流(安培)。验证 i
实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。 (测得的电压电流具体数据见下列程序)。 (1)非向量化程序 clear vr=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41]; ir=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345]; % -------------------L=length(vr); for k=1:L
13 1 -3 33
2.2.3 二维数组元素的标识和寻访
【例 2.2-6】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end 的作用。 A=zeros(2,6) A(:)=1:12 A=
000000 000000 A= 1 3 5 7 9 11 2 4 6 8 10 12
A(2,4) A(8) ans =
【例 2.2-4】创建和保存数组 AM 的 MyMatrix.m 文件。 (1) 打开文件编辑调试器,并在空白填写框中输入所需数组(见图 2.2-2)。 (2) 在文件的首行,编写文件名和简短说明,以便查阅(见图 2.2-2)。 (3) 保存此文件,并且文件起名为 MyMatrix.m 。 (4) 以后只要在 MATLAB 指令窗中,运行 MyMatrix.m 文件 ,数组 AM 就会自动生成于 MATLAB 内存
-0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909
D=eye(3) D=
10 01 00
%产生单位数组
0 0 1
diag(D) ans =
1 1 1
%产生对角数组
diag(diag(D)) ans =
100 010 001
randsrc(3,20,[-3,-1,1,3],1) %在指定字符集生成均匀随机数组;random — 生成各种分布随机数组 ans =
8 ans =
8
A(:,[1,3]) A([1,2,5,6]') ans =
15 26 ans = 1 2 5 6
A(:,4:end) ans =
7 9 11 8 10 12
A(2,1:2:5)=[-1,-3,-5] A=
1 3 5 7 9 11 -1 4 -3 8 -5 12
B=A([1,2,2,2],[1,3,5] )
2.2.4 数组构作技法综合
【例 2.2-7】数组操作函数 reshape, diag, repmat 的用法;空阵 [ ] 删除子数组的用法。 a=1:8 A=reshape(a,4,2) %在总元素不变的前提下,改变数组的行数或列数 A=reshape(A,2,4) a=
12345678 A=
15 26 37 48 A= 1357 2468
结 论:数组运算是对单个元素进行运算。
2.数组运算符及数组运算函数
(1)运算符
+, -, .*, ./(.\), .^(乘方运算),.'(表示非共轭转置),关系、逻辑运算符。 数组运算两个数组必须同维数,矩阵还必须乘法要求的维数;矩阵左除运算是 MATLAB 专门设计的 一种运算。
(2)运算函数
三角、反三角函数;双曲、反双曲函数;指数、对数函数(exp, sqrt, log, log10);园整、求余函数 (round, fix, mod, floor);模、角、虚实部(abs, angle, real, imag, conj);符号函数(sign)。
xlabel('x'),ylabel('Sx'),grid on
ans =
4.8000 4.8500 4.9000 4.9500 5.0000
ans =
-20.1144 -19.9833 -19.7907 -19.5345 -19.2131
1
图 2.1-1 在区间[0, 5]采样点上算得的定积分值
使用说明
A(:) 单下标法
A(s)
逻辑标识 A(L)
法
“单下标全元素”,由 A 的各列按自左到右次序,首尾相连生成的“一维”数组
“单下标”寻访,生成 s 指定的“一维”数组,s 行数组(列数组),则 A(s) 就是长度相同的行数组(列数组) “逻辑 1”寻访,由与 A 同样大小的“逻辑数组”L 中的“1”元素选出 A 的对应 元素
2
用范围比符号计算广,以有限的精度表现有限时间和范围内的函数关系。
2.2 数值数组的创建和寻访
MATLAB 把数组看作存储和运算的基本单元,而标量数据看作(1×1)的数组。
2.2.1 一维数组的创建
1.递增/减型一维数组的创建
数组元素值的大小按递增或递减的次序排列,数组元素之间的“差”是“确定的”, 即“等步长”。 (1)“冒号”生成法 x=a : inc : b ;a—数组的第一个元素;inc—步长,默认值为 1;最后一个元素小于等于 b。
Columns 1 through 10 3 1 3 -1 -3 3 -3 -3 -1 3 1 3 1 3 -1 1 1 1 1 1 3 -1 -3 -1 1 -1 3 -1 -1 1
5
Columns 11 through 20 -1 -1 -3 1 1 -3 3 -1 1 1 3 -1 -1 -3 -1 -1 1 -1 -3 3 -1 -1 3 -1
> In sym.int at 58
sx =
int(exp(-sin(t)),t = 0 .. 4)
(2)数值计算解法
dt=0.05;
t=ቤተ መጻሕፍቲ ባይዱ:dt:4;
Ft=exp(-sin(t));
Sx=dt*cumtrapz(Ft);
Sx(end)
plot(t,Ft,'*r','MarkerSize',4)
hold on
第 2 章 数值数组及向量化运算
数值数组(Numeric Array)和数组运算(Array Operations)始终是 MATLAB 的核心内 容。
本章教学内容:数组浮点算法的特点;一、二维数值数组的创建和寻访;常用标准数组 生成函数和数组构作技法;数组运算和向量化编程;实现数组运算的基本函数;关系和逻辑 操作。
7
b=diag(A) B=diag(b) b=
1 4 B= 10 04
D1=repmat(B,2,4) %按指定的行数 2、列数 4,把 B 作为模块铺放形成更大维数的数组 D1 =
10101010 04040404 10101010 04040404
D1([1,3],: )=[ ] D1 =
04040404 04040404
【例 2.2-1】一维数组的常用创建方法举例。 a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 a1 =
123456 a2 =
0 0.7854 1.5708 2.3562 a3 =
Columns 1 through 6 1.0000 0.9000 0.8000 0.7000
Columns 7 through 11 0.4000 0.3000 0.2000 0.1000
C A.# B
cij aij # bij
(2)标量和数组运算
a , B [bij ]mn , C [cij ]mn
C a.# B
cij a# bij
(3)函数的数组运算
f () , X [xij ]mn
C f (X)
cij f (xij )
f ( X ) [ f (xij )]mn
74 85 96
%以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素
1 2 3
D=rot90(A,2) D=
96 85 74
%把数组逆时针旋转 90 度
3 2 1
8
2.3 数组运算
2.3.1 数组运算的由来和规则 1.数组运算规则
(1)同维数组运算
A [aij ]mn , B [bij ]mn , C [cij ]mn
2.1 数值计算的特点和地位
【例 2.1-1】已知 f (t) t 2 cos t ,求 s( x)
x
f (t) dt 。
0
(1)符号计算解法
syms t x
%定义符号变量
ft=t^2*cos(t)
sx=int(ft,t,0,x)
ft =
t^2*cos(t)
sx =
x^2*sin(x)-2*sin(x)+2*x*cos(x)
C=
1.0000
5.4716 + 0.4177i 0.6909
0.7071
4.8244
3.5000 + 1.0000i
数组的三个要素:括号[];逗号或空格;分号或回车键。
2. 中规模数组的数组编辑器创建法
【例 2.2-3】根据现有数据创建一个 (3 8) 的数组。
图 2.2-1 利用数组编辑器创建中规模数组
中。
4
图 2.2-2 利用 M 文件创建数组
4.利用 MATLAB 函数创建数组
【例 2.2-5】标准数组产生的演示。
ones(2,4)
%产生全 1 元素数组 zeros — 产生全 0 元素数组
ans =
1111
1111
randn('state',0) %产生正态分布随机数组;rand — 产生均匀分布随机数组 randn(2,3) ans =
(2)线性(或对数)定点法 x=linspace(a, b, n); 产生线性等间隔(1×n)行数组,等价于 x=a : (b-a)/(n-1) : b ; x=logspace(a, b, n);产生对数等间隔(1×n)行数组,n—一维数组的长度。
2.通用型一维数组的创建
利用函数生成特殊形式数组。
【例 2.1-2】已知 f (t) esin(t) ,求 s( x)
4
f (t) dt 。
0
本例演示:被积函数没有“封闭解析表达式”,符号计算无法解题!
(1)符号计算解法
syms t x
ft=exp(-sin(t))
sx=int(ft,t,0,4)
ft =
exp(-sin(t))
Warning: Explicit integral could not be found.
(2)数值计算解法
dt=0.05;
t=0:dt:5;
%取一些离散点
Ft=t.^2.*cos(t);
Sx=dt*cumtrapz(Ft); %梯形法求定积分
t(end-4:end)
%end 表示最后一个元素
Sx(end-4:end)
%Sx 的最后 5 个元素
plot(t,Sx,'.k','MarkerSize',12)
6
B= 159
-1 -3 -5 -1 -3 -5 -1 -3 -5
L=A<3 A(L)=NaN L=
100 101 A= NaN 3 5 NaN 4 NaN
000 010
7 9 11 8 NaN 12
格式 A(r,c) A 的 r 行 c 列上元素 全下标法 A(r,:) A 的 r 行全部列元素 A(:,c) A 的 c 列全部行元素
3.1416
0.6000 0
0.5000
b1=linspace(0,pi,4)
b2=logspace(0,3,4)
b1 =
0 1.0472 2.0944
b2 =
1
10
3.1416 100
1000
c1=[2 pi/2 sqrt(3) 3+5i]
3
c1 =
Columns 1 through 3
2.0000
【例 2.2-8】函数 flipud, fliplr, rot90 对数组的操作体现着“矩阵变换”。 A=reshape(1:9,3,3) A=
147 258 369
B=flipud(A) B=
36 25 14
%以数组“水平中线”为对称轴,交换上下对称位置上的数组元素
9 8 7
C=fliplr(A) C=
1.5708
Column 4
3.0000 + 5.0000i
1.7321
rand('state',0) c2=rand(1,5) c2 =
0.9501 0.2311
%均匀随机数组 0.6068 0.4860
0.8913
2.2.2 二维数组的创建 1. 小规模数组的直接输入法
【例 2.2-2】在 MATLAB 环境下,用下面三条指令创建二维数组 C。 a=2.7358; b=33/79; C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
plot(t,Sx,'.k','MarkerSize',15)
hold off
xlabel('x')
legend('Ft','Sx')
ans =
3.0632
图 2.1-2 在区间[0, 4]中间的被积函数及其原函数的离散计算结果
小结: (1) 符号计算 长处——可以对包含变量字符、参数字符和数字的表达式进行推理、运算,并给出符号结 果,与高等数学中的解析式比较接近;符号计算的短处——很多问题无解或求解时间过长。 (2) 数值计算 在确定一组自变量采样点基础上,执行数值计算的表达式在已知的数值点上进行计算。它适
2.3.2 数组运算和向量化编程
【例 2.3-1】欧姆定律: r u ,其中 r, u, i 分别是电阻(欧姆)、电压(伏特)、电流(安培)。验证 i
实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。 (测得的电压电流具体数据见下列程序)。 (1)非向量化程序 clear vr=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41]; ir=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345]; % -------------------L=length(vr); for k=1:L
13 1 -3 33
2.2.3 二维数组元素的标识和寻访
【例 2.2-6】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end 的作用。 A=zeros(2,6) A(:)=1:12 A=
000000 000000 A= 1 3 5 7 9 11 2 4 6 8 10 12
A(2,4) A(8) ans =