ch3数组.docx
- 文档编号:22890438
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:30
- 大小:261.01KB
ch3数组.docx
《ch3数组.docx》由会员分享,可在线阅读,更多相关《ch3数组.docx(30页珍藏版)》请在冰豆网上搜索。
ch3数组
第3章数组运算及数组化编程
与其它编程语言不同,MATLAB数据的保存和传送的基本单元不是标量,而是复数阵列型数据,即数组;MATLAB算术、关系、逻辑运算的基本运算单元也不是标量,而是数组;MATLAB提供的许多M函数的基本作用单元也不是标量,而是数组。
基于数组、数组运算在MATLAB中的基本地位,本章将系统阐述:
有关数组的各种基本概念、数组的编制和寻访、数组运算的基本含义和通则、以及数组化编程的重要性。
对于外形、元素排列和编址都与二维数组相同,但概念、运算规则又绝然不同的矩阵,本章也将安排专门的节次加以详述。
不但讲述矩阵与数组的区别,而且要特别强调矩阵化编程的重要性,因为矩阵是MATLAB诞生和发展的原动力。
本章之所以如此强调数组与矩阵的区别,是为了帮助读者正确理解“MATLAB帮助文档中Matrix、Vector英文词汇的泛义以及在它们不同意境下定义的两组运算”。
.1数组、结构和创建
.1.1数组及其结构
101数组的维度
图3.1-1二维数组的结构及相关术语
102数组的规模及相关术语
103获取数组结构参数的M指令
〖说明〗
.1.2行(列)数组的创建
101递增/减型行(列)数组的创建
〖说明〗
102其他类型行(列)数组的创建
(1)
(2)
【例3.1-1】
a1=1:
6%
na1=ndims(a1)%
Sa1=size(a1)%
La1=length(a1)%
a1=
123456
na1=
2
Sa1=
16
La1=
6
a2=0:
pi/4:
pi%
a3=1:
-0.1:
0%
a2=
00.78541.57082.35623.1416
a3=
Columns1through6
1.00000.90000.80000.70000.60000.5000
Columns7through11
0.40000.30000.20000.10000
b1=linspace(0,pi,4)%
b2=logspace(0,3,4)%
b1=
01.04722.09443.1416
b2=
1101001000
c1=[2pi/2sqrt(3)3+5i]%
c1=
Columns1through3
2.00001.57081.7321
Column4
3.0000+5.0000i
rngdefault%
c2=rand(1,5)%
c2=
0.81470.90580.12700.91340.6324
〖说明〗
.1.3二维通用数组的创建
101小规模数组的直接输入法
【例3.1-2】
1)
a=2.7358;b=33/79;%
na=ndims(a)%
sa=size(a)%
na=
2
sa=
11
2)
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]%
nC=ndims(C)%
SC=size(C)%
C=
1.0000+0.0000i5.4716+0.4177i0.6909+0.0000i
0.7071+0.0000i4.8244+0.0000i3.5000+1.0000i
nC=
2
SC=
23
〖说明〗
102中规模数组的数组编辑器创建法
【例3.1-3】
0.64590.96370.52890.07100.83260.9786
0.43760.38340.56800.08710.77820.7992
1.89180.79170.92560.02020.87000.4615
操作步骤如下:
1)
2)
3)
4)
图3.1-2
103中规模的M文件创建法
【例3.1-4】
操作步骤如下:
1)打开文件编辑器EDITOR
2)编写脚本内容
3)保存文件
4)运行文件生成数组
图3.1-3
104利用MATLAB函数创建数组
表3.1-1
指令
含义
指令
含义
diag
ones
eye
zeros
magic
rand
random
randn
randsrc
gallery
【例3.1-5】
ones(2,4)%
ans=
1111
1111
rng(0)%
randn(2,3)%
ans=
0.5377-2.25880.3188
1.83390.8622-1.3077
D=eye(3)%
D=
100
010
001
diag(D)%
ans=
1
1
1
diag(diag(D))%
ans=
100
010
001
randsrc(3,20,[-3,-1,1,3],1)
%
%
ans=
Columns1through12
-1-1-31-31-333-3-31
1-3-1-13-1-3-13-3-11
-3-3-11-3131-333-1
Columns13through20
13-1-1-11-1-3
3333-3-3-31
-31-3-1-3-111
.1.4数组构作技法综合
表3.1-2
指令
含义
diag
repmat
reshape
flipud
fliplr
rot90
【例3.1-6】
a=1:
8%
A=reshape(a,4,2)%
A=reshape(A,2,4)%
a=
12345678
A=
15
26
37
48
A=
1357
2468
b=diag(A)%
B=diag(b)%
b=
1
4
B=
10
04
D1=repmat(B,2,4)%
D1=
10101010
04040404
10101010
04040404
D1([1,3],:
)=[]%
D1=
04040404
04040404
【例3.1-7】
A=reshape(1:
9,3,3)
A=
147
258
369
B=flipud(A)%
B=
369
258
147
C=fliplr(A)%
C=
741
852
963
D=rot90(A,2)%
D=
963
852
741
.2数组元素编址及寻访
.2.1数组元素的编址
101全下标编址和单序号编址
(1)
(2)
图3.2-1
102两种编址间的转换
〖说明〗
.2.2二维数组元素的寻访
101按址寻访
表3.2-1
格式
使用说明
全下标
寻访
A(r,c)
A(r,:
)
A(:
c)
单序号
寻访
A(ind)
A(:
)
102按条件寻访
【例3.2-1】
1)
clear
A=[1:
3:
16;2:
3:
17;3:
3:
18]%
A=
147101316
258111417
369121518
2)
Ass1=A(2,3)%
r=[2,3];%
c=[1,5];%
As22=A(r,c)%
%
Ass1=
8
As22=
214
315
As26=A([1,3],:
)%
As26=
147101316
369121518
3)
Ais1=A(8)%
ind=[1,3,18];%
%
Ai1r=A(ind)%
Ai1c=A(ind')%
Ais1=
8
Ai1r=
1318
Ai1c=
1
3
18
4)
A(r,c)=zeros(2,2)%
A([1,end])=-A([1,end])%<13>
A=
147101316
05811017
06912018
A=
-147101316
05811017
069120-18
5)
L=A<=0%
AL=A(L)%
L=
100000
100010
100011
AL=
-1
0
0
0
0
-18
A(L)=NaN%
A=
NaN47101316
NaN5811NaN17
NaN6912NaNNaN
〖说明〗
.3数组运算
.3.1实施数组运算的算符
101算符数组运算通则
102算术、关系、逻辑算符
表3.3-1
算术运算
ArithmeticOperations
算符
+
-
.*
.\或./
.^
名称
加
减
数组乘
数组左除或数组右除
数组幂
示例
关系运算
RelationalOperations
算符
>
<
>=
<=
==
~=
名称
大于
小于
大于等于
小于等于
等于
不等于
示例
逻辑运算
LogicalOperations
算符
&
|
~
xor
名称
与
或
非
异或
示例
103各种算符的优先级别
表3.2-3
代数运算
.^
.*、./、.\
+、-
关系运算
==、~=
>、<、>=、<=
逻辑运算
~
&
|
104算符数组运算实例及机理解释
【例3.3-1】
clear
t=-3*pi:
pi/10:
3*pi;%
st=sin(t);%<3>
y=st./t;%<4>
Lt=(t==0);%<5>
tt=t+Lt.*realmin;%<6>
yy=sin(tt)./tt;%<7>
subplot(1,2,1),plot(t,y),axis([-9,9,-0.5,1.2]),
xlabel('t'),ylabel('y'),title('残缺图形')
subplot(1,2,2),plot(tt,yy),axis([-9,9,-0.5,1.2])
xlabel('tt'),ylabel('yy'),title('正确图形')
图3.3-1
〖说明〗
图3.3-2
图3.3-3
图3.3-4
【例3.3-2】
1)
A=[-2,-1,0,0,1,2,3]
B=[0,-1,1,0,1,-2,-3]
disp(['A的数据类型是',class(A)])
A=
-2-100123
B=
0-1101-2-3
A的数据类型是double
2)
R1=A==B%<4>
R2=A>B%<5>
fprintf('R1的数据类型是什么?
%s\n',class(R1))
fprintf('R2的数据属于逻辑类?
(1为真;0为假)%d\n',islogical(R2))%<7>
R1=
0101100
R2=
0000011
R1的数据类型是什么?
logical
R2的数据属于逻辑类?
(1为真;0为假)1
3)
LA=logical(A)%<8>
LB=logical(B)
L1=LA&LB
LL1=A&B%
LA=
1100111
LB=
0110111
L1=
0100111
LL1=
0100111
4)
L3=xor(LA,LB)%
LL3=xor(A,B)%<12>
L3=
1010000
LL3=
1010000
5)
TOTAL1=all([1,1,1,1,1])
TOTAL2=all([1,0,1,1,1])
TOTAL1=
1
TOTAL2=
0
6)
ANYONE1=any([0,1,0,0,0])
ANYONE2=any([0,0,0,0,0])
ANYONE1=
1
ANYONE2=
0
〖说明〗
.3.2实施数组运算的函数
101函数数组运算通则
102服从数组运算通则的M函数
表3.2-4服从数组运算通则的MATLAB函数
分类
M函数名称
三角函数
Trigonometry
弧度单位
sin,cos,tan,cot,sec,csc
asin,acos,atan,acot,asec,acsc
度数单位
sind,cosd,tand,cotd,secd,cscd
asind,acosd,atand,acotd,asecd,acscd
双曲类
sinh,cosh,tanh,coth,sech,csch
asinh,acosh,atanh,acoth,asech,acsch
指数函数
Exponential
exp
log,log10,log2,log1p,reallog
nexpow2,pow2,realpow,
sqrt,realsqrt,nthroot
复函数
Complex
abs,angle
real,imag,conj,
sign,unwrap
圆整求余函数
RoundingandRemainder
ceil,fix,floor,idivide,mod,rem,round
特殊函数
SpecialFunctions
airy,besselh,besseli,beta,ellipj,erf,erfinv,
gamma,gammaln,psi
数据类型转换函数
ConversionFunction
char,double,logical,int2str,int8,int16,num2str,uint8,uint16
示例
.3.3数组运算中的溢出及非数处理
.3.4数组化编程
(1)
(2)
【例3.3-3】
1)
functiony=exm030303_1(x)
%exm030303_1
%x
%y
M=length(x);
y=zeros(1,M);
forjj=1:
M
ifx(jj)<=-1
y(jj)=x(jj);
elseif-1 y(jj)=x(jj)^3*cos(2*pi*x(jj)); else y(jj)=exp(-x(jj)+1); end end functiony=exm030303_2(x) %exm030303_2 L1=x<=1;%<2> L2=-1 L3=1 y=zeros(size(x));%<5> y(L1)=x(L1);%<6> y(L2)=x(L2).^3.*cos(2*pi*x(L2));%<7> y(L3)=exp(-x(L3)+1);%<8> 2) x=-2: 0.01: 2;% y1=exm030303_1(x);% y2=exm030303_2(x);% e12=max(abs(y1(: )-y2(: )))% clf% plot(x,y2,'r','Linewidth',3)% xlabel('x'),ylabel('y')% gridon% axis([-2,2,min(min(y1)),max(max(y1))])% e12= 0 图3.3-5 〖说明〗 .4矩阵及其运算 .4.1矩阵和数组的异同 表3.4-1 数组 矩阵 概念 来源和背景 一般 记述方式 维(度) 的含义 元素 排列结构 算法定义 加法 乘法 代数结构 .4.2矩阵运算符和矩阵函数 101独特的矩阵运算符 表3.4-2 矩阵运算名称 算符 运算规则 乘 标量与矩阵乘 * 矩阵与矩阵乘 除 左除 或 右除 \ 或 / 幂 标量为底的方阵指数 ^ 方阵底的标量指数 102矩阵函数 表3.4-3 分类 函数名称 举例 M码 M码的数学内涵简述 专用矩阵函数 矩阵指数函数 矩阵对数函数 矩阵平方根函数 通用矩阵函数 【例3.4-1】 1) Am=magic(3)% Aa=reshape(1: 12,3,4)% B=repmat(1: 4,3,1)% Am= 816 357 492 Aa= 14710 25811 36912 B= 1234 1234 1234 2) AmmB=Am*B% AamB=Aa.*B% AmmB= 15304560 15304560 15304560 AamB= 182140 2102444 3122748 3) AmLdB=Am\B% AaadB=Aa.\B% AmLdB= 0.06670.13330.20000.2667 0.06670.13330.20000.2667 0.06670.13330.20000.2667 AaadB= 1.00000.50000.42860.4000 0.50000.40000.37500.3636 0.33330.33330.33330.3333 4) Amm2=Am^2% Ama2=Am.^2% Amm2= 916767 679167 676791 Ama2= 64136 92549 16814 5) Am2m=2^Am% Am2a=2.^Am% Am2m= 1.0e+04* 1.09421.09061.0921 1.09121.09331.0924 1.09151.09301.0923 Am2a= 256264 832128 165124 6) rng(0)% D=randn(3,3);% AmLdD=Am\D% DRdAm=D/Am% AmLdD= -0.3301-0.00270.1153 -0.2305-0.18360.4118 0.56810.1778-0.2946 DRdAm= 0.0349-0.14040.1699 0.2438-0.19310.1156 -0.32220.9731-0.6501 .4.3矩阵化编程 【例3.4-2】采用“实数标量+循环”法和“MATLAB矩阵乘算符”分别计算两个复数矩阵 和 的乘积。 1) functionD=exm030402_1(A,B) %D=exm030402_1(A,B) %A、B %D [m,p]=size(A);% [q,n]=size(B);% ifp~=q% error('A阵的列数不等于B阵的行数,所以A不能与B相乘! ') end forii=1: m forjj=1: n wr=0;wi=0; fork=1: p wr=wr+real(A(ii,k))*real(B(k,jj))... -imag(A(ii,k))*imag(B(k,jj)); wi=wi+real(A(ii,k))*imag(B(k,jj))... +imag(A(ii,k))*real(B(k,jj)); end D(ii,jj)=wr+j*wi; end end 2) clear rng('default')% m=100;p=300;n=200; A=randn(m,p)+1j*randn(m,p);% B=randn(p,n)+1j*randn(p,n);% 3) tic% Dc=exm030402_1(A,B);% Tc=toc;% 4) tic Dm=A*B;% Tm=toc;% 5) RE=abs((Dm-Dc)./Dm);% re=max(RE(: ));% tmc=Tm/Tc;% fprintf('两种编码所得矩阵间的最大元素相对误差为%6.4e\n',re) fprintf('“直接乘算符法”耗时与“标量循环法”耗
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch3 数组