ch3数组.docx

上传人:b****4 文档编号:5878515 上传时间:2023-05-09 格式:DOCX 页数:30 大小:261.06KB
下载 相关 举报
ch3数组.docx_第1页
第1页 / 共30页
ch3数组.docx_第2页
第2页 / 共30页
ch3数组.docx_第3页
第3页 / 共30页
ch3数组.docx_第4页
第4页 / 共30页
ch3数组.docx_第5页
第5页 / 共30页
ch3数组.docx_第6页
第6页 / 共30页
ch3数组.docx_第7页
第7页 / 共30页
ch3数组.docx_第8页
第8页 / 共30页
ch3数组.docx_第9页
第9页 / 共30页
ch3数组.docx_第10页
第10页 / 共30页
ch3数组.docx_第11页
第11页 / 共30页
ch3数组.docx_第12页
第12页 / 共30页
ch3数组.docx_第13页
第13页 / 共30页
ch3数组.docx_第14页
第14页 / 共30页
ch3数组.docx_第15页
第15页 / 共30页
ch3数组.docx_第16页
第16页 / 共30页
ch3数组.docx_第17页
第17页 / 共30页
ch3数组.docx_第18页
第18页 / 共30页
ch3数组.docx_第19页
第19页 / 共30页
ch3数组.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ch3数组.docx

《ch3数组.docx》由会员分享,可在线阅读,更多相关《ch3数组.docx(30页珍藏版)》请在冰点文库上搜索。

ch3数组.docx

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('“直接乘算符法”耗时与“标量循环法”耗

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2