MATLAB数值数组及向量化运算.docx

上传人:b****4 文档编号:4682818 上传时间:2022-12-07 格式:DOCX 页数:19 大小:514.87KB
下载 相关 举报
MATLAB数值数组及向量化运算.docx_第1页
第1页 / 共19页
MATLAB数值数组及向量化运算.docx_第2页
第2页 / 共19页
MATLAB数值数组及向量化运算.docx_第3页
第3页 / 共19页
MATLAB数值数组及向量化运算.docx_第4页
第4页 / 共19页
MATLAB数值数组及向量化运算.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

MATLAB数值数组及向量化运算.docx

《MATLAB数值数组及向量化运算.docx》由会员分享,可在线阅读,更多相关《MATLAB数值数组及向量化运算.docx(19页珍藏版)》请在冰豆网上搜索。

MATLAB数值数组及向量化运算.docx

MATLAB数值数组及向量化运算

第2章数值数组及向量化运算

数值数组(NumericArray)和数组运算(ArrayOperations)始终是MATLAB的核心内容。

本章教学内容:

数组浮点算法的特点;一、二维数值数组的创建和寻访;常用标准数组生成函数和数组构作技法;数组运算和向量化编程;实现数组运算的基本函数;关系和逻辑操作。

2.1数值计算的特点和地位

【例2.1-1】已知

,求

(1)符号计算解法

symstx%定义符号变量

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)

(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)

xlabel('x'),ylabel('Sx'),gridon

ans=

4.80004.85004.90004.95005.0000

ans=

-20.1144-19.9833-19.7907-19.5345-19.2131

图2.1-1在区间[0,5]采样点上算得的定积分值

【例2.1-2】已知

,求

本例演示:

被积函数没有“封闭解析表达式”,符号计算无法解题!

(1)符号计算解法

symstx

ft=exp(-sin(t))

sx=int(ft,t,0,4)

ft=

exp(-sin(t))

Warning:

Explicitintegralcouldnotbefound.

>Insym.intat58

sx=

int(exp(-sin(t)),t=0..4)

(2)数值计算解法

dt=0.05;

t=0:

dt:

4;

Ft=exp(-sin(t));

Sx=dt*cumtrapz(Ft);

Sx(end)

plot(t,Ft,'*r','MarkerSize',4)

holdon

plot(t,Sx,'.k','MarkerSize',15)

holdoff

xlabel('x')

legend('Ft','Sx')

ans=

3.0632

图2.1-2在区间[0,4]中间的被积函数及其原函数的离散计算结果

小结:

(1)符号计算

长处——可以对包含变量字符、参数字符和数字的表达式进行推理、运算,并给出符号结果,与高等数学中的解析式比较接近;符号计算的短处——很多问题无解或求解时间过长。

(2)数值计算

在确定一组自变量采样点基础上,执行数值计算的表达式在已知的数值点上进行计算。

它适用范围比符号计算广,以有限的精度表现有限时间和范围内的函数关系。

2.2数值数组的创建和寻访

MATLAB把数组看作存储和运算的基本单元,而标量数据看作(1×1)的数组。

2.2.1一维数组的创建

1.递增/减型一维数组的创建

数组元素值的大小按递增或递减的次序排列,数组元素之间的“差”是“确定的”,即“等步长”。

(1)“冒号”生成法

x=a:

inc:

b;a—数组的第一个元素;inc—步长,默认值为1;最后一个元素小于等于b。

(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.2-1】一维数组的常用创建方法举例。

a1=1:

6

a2=0:

pi/4:

pi

a3=1:

-0.1:

0

a1=

123456

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

rand('state',0)

c2=rand(1,5)%均匀随机数组

c2=

0.95010.23110.60680.48600.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]

C=

1.00005.4716+0.4177i0.6909

0.70714.82443.5000+1.0000i

数组的三个要素:

括号[];逗号或空格;分号或回车键。

2.中规模数组的数组编辑器创建法

【例2.2-3】根据现有数据创建一个

的数组。

图2.2-1利用数组编辑器创建中规模数组

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内存中。

图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=

-0.43260.1253-1.1465

-1.66560.28771.1909

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)%在指定字符集生成均匀随机数组;random—生成各种分布随机数组

ans=

Columns1through10

313-1-33-3-3-13

1313-111111

3-1-3-11-13-1-11

Columns11through20

-1-1-311-33-113

113-1-1-3-1-11-3

1-1-33-1-13-133

2.2.3二维数组元素的标识和寻访

【例2.2-6】本例演示:

数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。

A=zeros(2,6)

A(:

)=1:

12

A=

000000

000000

A=

1357911

24681012

A(2,4)

A(8)

ans=

8

ans=

8

A(:

[1,3])

A([1,2,5,6]')

ans=

15

26

ans=

1

2

5

6

 

A(:

4:

end)

ans=

7911

81012

A(2,1:

2:

5)=[-1,-3,-5]

A=

1357911

-14-38-512

B=A([1,2,2,2],[1,3,5])

B=

159

-1-3-5

-1-3-5

-1-3-5

 

L=A<3

A(L)=NaN

L=

100000

101010

A=

NaN357911

NaN4NaN8NaN12

格式

使用说明

全下标法

 

A(r,c)

A的r行c列上元素

A(r,:

A的r行全部列元素

A(:

c)

A的c列全部行元素

单下标法

 

A(:

“单下标全元素”,由A的各列按自左到右次序,首尾相连生成的“一维”数组

A(s)

“单下标”寻访,生成s指定的“一维”数组,s行数组(列数组),则A(s)就是长度相同的行数组(列数组)

逻辑标识法

A(L)

“逻辑1”寻访,由与A同样大小的“逻辑数组”L中的“1”元素选出A的对应元素

 

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

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-8】函数flipud,fliplr,rot90对数组的操作体现着“矩阵变换”。

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)%把数组逆时针旋转90度

D=

963

852

741

2.3数组运算

2.3.1数组运算的由来和规则

1.数组运算规则

(1)同维数组运算

(2)标量和数组运算

(3)函数的数组运算

结论:

数组运算是对单个元素进行运算。

2.数组运算符及数组运算函数

(1)运算符

+,-,.*,./(.\),.^(乘方运算),.'(表示非共轭转置),关系、逻辑运算符。

数组运算两个数组必须同维数,矩阵还必须乘法要求的维数;矩阵左除运算是MATLAB专门设计的一种运算。

(2)运算函数

三角、反三角函数;双曲、反双曲函数;指数、对数函数(exp,sqrt,log,log10);园整、求余函数(round,fix,mod,floor);模、角、虚实部(abs,angle,real,imag,conj);符号函数(sign)。

2.3.2数组运算和向量化编程

【例2.3-1】欧姆定律:

,其中

分别是电阻(欧姆)、电压(伏特)、电流(安培)。

验证实验:

据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。

(测得的电压电流具体数据见下列程序)。

(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);

fork=1:

L

r(k)=vr(k)/ir(k);

end

%---------------------------

sr=0;

fork=1:

L

sr=sr+r(k);

end

rm=sr/L

rm=

30.5247

(2)向量化程序

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];

r=vr./ir

rm=mean(r)

r=

31.785730.000030.900029.448330.678029.883730.066930.817131.493530.1739

rm=

30.5247

小结:

(1)采用“数组运算”(“向量化运算”)模式处理反复执行的标量运算,提高程序的执行性能;

(2)采用“向量或矩阵运算”模式去执行那些传统上靠多重循环标量运算完成的矩阵计算。

【例2.3-2】用间距为0.1的水平线和垂直线均匀分割

的矩形域,在所有水平线和垂直线交点上计算函数

的值,并图示。

(1)

clear

x=-5:

0.1:

5;

y=(-2.5:

0.1:

2.5)';

N=length(x);

M=length(y);

forii=1:

M

forjj=1:

N

X0(ii,jj)=x(jj);

Y0(ii,jj)=y(ii);

Z0(ii,jj)=sin(abs(x(jj)*y(ii)));

end

end

(2)

[X,Y]=meshgrid(x,y);

Z=sin(abs(X.*Y));

(3)

norm(Z-Z0)

ans=

0

(4)

surf(X,Y,Z)

xlabel('x')

ylabel('y')

shadinginterp

view([190,70])

图3.3-1指定域上的二元函数图形

2.4关系操作和逻辑操作

在程序流控制、逻辑推理中,需要“真”和“假”判断。

MATLAB约定:

非0看作“逻辑真”;数组运算结果中的1表示“真”、0表示“假”;“数值类”有关操作同样适用于关系和逻辑操作。

2.4.1关系操作

>(大于),>=(大于等于),<(小于),<=(小于等于),==(等于)~=(不等于)

【例2.4-1】关系运算示例。

A=1:

9,B=10-A

r0=(A<4)

r1=(A==B)

A=

123456789

B=

987654321

r0=

111000000

r1=

000010000

【例2.4-2】关系运算应用。

t=-3*pi:

pi/10:

3*pi;

y=sin(t)./t;

tt=t+(t==0)*eps;

yy=sin(tt)./tt;

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('正确图形')

Warning:

Dividebyzero.

图2.4-1采用近似极限处理前后的图形对照

 

2.4.2逻辑操作

&(与),|(或),~(非),xor(异或)

【例2.4-3】逻辑操作和关系操作。

本例演示:

逻辑、关系操作的组合;xor的作用。

(1)逻辑、关系操作的组合

A=[-2,-1,0,0,1,2,3]

L1=~(A>1)%判断A中,哪些元素不大于1

L2=(A>0)&(A<2)%判断A中,哪些元素大于0且小于3

A=

-2-100123

L1=

1111100

L2=

0000100

(2)xor的作用

A,B=[0,-1,1,0,1,-2,-3]

C=xor(A,B)%当A,B数组中,两个对应元素中仅一个为0时,给出1。

否则为0。

A=

-2-100123

B=

0-1101-2-3

C=

1010000

【例2.4-4】试绘制如图2.4-2最下那幅子图所示的“正弦波

的削顶半波整流波形”,削顶发生在每个周期的

之间。

clear,t=linspace(0,3*pi,500);y=sin(t);

z1=((t2*pi)).*y;

w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3);

wn=~w;

z2=w*sin(pi/3)+wn.*z1;

subplot(4,1,1),plot(t,y,':

r'),axis([0,10,-1.5,1.5])

ylabel('y'),gridon

subplot(4,1,2),plot(t,z1,':

r'),axis([0,10,-0.2,1.5]),ylabel('z1')

subplot(4,1,3),plot(t,wn,':

r'),axis([0,10,-0.2,1.5]),ylabel('wn')

subplot(4,1,4),plot(t,z2,'-b'),axis([0,10,-0.2,1.5]),ylabel('z2')

xlabel('t')

图2.4-2逐段解析函数的产生

2.4.3常用逻辑函数

含0数组判断:

all,any

生成逻辑数组:

false,true,logical

数据对象判断:

isempty,isprime,isfinite,isreal,isinf,isletter,isnan,isspace

数据类型判断:

isa,ischar,isglobal,ishandle,islogical,isnumeric

作业2

1.要求在闭区间

上产生具有10个等距采样点的一维数组。

试用两种不同的指令实现。

〖答案〗

 

2.由指令rand('state',0),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。

〖答案〗

 

3.在时间区间[0,10]中,绘制

曲线。

要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。

〖答案〗

 

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1