MATLA数值数组及向量化运算_第1页
MATLA数值数组及向量化运算_第2页
MATLA数值数组及向量化运算_第3页
MATLA数值数组及向量化运算_第4页
MATLA数值数组及向量化运算_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章数值数组及向量化运算教学目标教学重点教学内容教学目标掌握数组的创建方法掌握数组的标识与寻访掌握数组的运算了解“非数”NaN和“空”数组掌握关系操作和逻辑操作教学重点数组的创建方法数组的标识与寻访关系操作和逻辑操作教学内容3.1数值计算的特点和地位3.2一、二维数值数组的创建和寻访3.3数组运算和向量化编程3.4“非数”NaN和“空”数组3.5关系操作和逻辑操作3.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)符号计算解法:dt=0.05;t=0:dt:15;Ft=t.^2.*cos(t);Sx=dt*cumtrapz(Ft);

plot(t,Sx,'.k','MarkerSize',12)xlabel('x'),ylabel('Sx'),gridon

数值计算解法:ezplot(sx,[0,15])例3.1-2已知求(1)符号计算解法symst;ft=exp(-sin(t));sx=int(ft,t,0,4)Warning:Explicitintegralcouldnotbefound.sx=int(1/exp(sin(t)),t=0..4)(2)数值计算解法delt=0.01;x=0:delt:4;y=exp(-sin(x));sx=delt*cumtrapz(y);plot(x,y,'r','LineWidth',6);holdon;plot(x,sx,'.b','MarkerSize',15);plot(x,ones(size(x)),'k');3.2数值数组的创建和寻访3.2.1一维数组的创建3.2.2二维数组的创建3.2.3二维数组元素的标识和寻访3.2.4数组操作技法综合(1)冒号生成法:

array=a:inc:b<向量>a--数组的第一个元素

inc--采样点之间的间隔,即步长.最后一个元素不一定等于b,其大小为b’=a+inc*fix((b-a)/inc);步长可以省略,默认为1;inc可以取正或负数,但要注意当取正时,要保证b>a,数组最后一个元素不超过b,取负时b<a,最后一个元素不小于b.特点:

等差数列3.2.1

一维数组的创建和寻访

1.递增/递减一维数组的创建:abInc<0b’abinc>0b’(2)线性(或对数)定点采样法在设定的总点数下,均匀采样生成一维行数组.格式为:

x=linspace(a,b,n)特点:方便对数组的元素的总个数进行控制,最后一个元素肯定是设定之值.a数组初始值b数组最后值n数组总个数增量的计算inc=(b-a)/(n-1)等效于:x=a:(b-a)/(n-1):b

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

x=logspace(a,b,n)3.2.1

一维数组的创建和寻访

2.其他类型一维数组的创建:(1)逐个元素输入法:

如:array=[2,pi/2,sqrt(3),3+5i]使用场合及特点使用场合:数据元素比较少并都已知.如对少量实验数据的处理可用此种方法.x=[1,2,3,4,5]'行向量列向量

2.其他类型一维数组的创建:(2)运用MATLAB函数生成法:MATLAB特殊形式数组生成函数见表3.2-1:均匀分布随机数组rand(1,n),

全1数组ones(1,n)指令含义指令含义diag产生对角形数组(二维以下)rand产生均匀分布随机数组eye产生单位数组(二维以下)randn产生正态分布随机数组magic产生魔方数组(二维以下)zeros产生全0数组ones产生全1数组3.一维数组的子数组寻访和赋值

x=[012345]; x(3) x([123]),x([123]') x(4:6)=x([1,2,3])%x(4:6)=[0,1,2] x(3:end)%end表示最后一个下标

x(3:-1:1) x(find(x>2))

注意:数组的第一个元素为x(1),与C语言中第一个元素为x[0]不同3.2.2二维数组的创建创建二维数组与创建一维数组的方式类似。在创建二维数组时,整个输入数组以方括号[]为其首尾。用逗号(,)或者空格(_)区分同一行的不同元素,用分号(;)或者回车(Enter)区分不同行。1.小规模数组的直接输入法2.中规模数组的数组编辑器创建法3.中规模数组的M文件创建法例3.2.4利用M文件创建和保存数组1.编写M文件并运行AM=[100,101,102;103,104,105;106,107,108],保存为文件名MyMatrix.m2.在命令窗中输入MyMatrix3.2.2二维数组的创建4.利用MATLAB函数创建数组指令含义指令含义diag产生对角形数组(二维以下)rand产生均匀分布随机数组eye产生单位数组(二维以下)randn产生正态分布随机数组magic产生魔方数组(二维以下)zeros产生全0数组ones产生全1数组【例3.2-5】标准数组产生的演示。ones(2,4)ans=11111111

randn('state',0)randn(2,3)ans=-0.43260.1253-1.1465-1.66560.28771.1909D=eye(3)D=100010001diag(D)ans=1113.2.3二维数组元素的标识和寻访数组名(行下标m,列下标n)数组的第m行n列的元素.A=[1,2,3;4,5,6]A(2,3)=61)全下标标识2)单下标标识只用一个下标来指定元素在数组中的位置-将数组中所有的元素按照从上到下(列),从左到右的方法从1开始编号,其编号就是单下标.A(4)=2

|1①2④3⑦|A=|4②5⑤6⑧||7③8⑥9⑨|A(:)—按单下标方式列出全部元素,组成列向量。A(:)=[1,4,7,2,5,8,3,6,9]'A=1234563)逻辑1标识法A=[1,2,3,4,5];L=logical([1,0,1,0,1])A(L)ans=[1,3,5]【例3.2-6】数组标识与寻访A=zeros(2,6) A=

000000000000A(:)=1:12A=135791124681012A(2,4) ans=8A(8)ans=8A(:,[1,3])ans=1526A(:,4:end)ans=791181012

A(2,1:2:5)=[-1,-3,-5]A=1357911

-14-38-512B=A([1,2,2,2],[1,3,5])B=159-1-3-5-1-3-5-1-3-5L=A<3L=100000101010A(L)=NaNA=

NaN357911

NaN4NaN8NaN12A([1,2,5,6]')ans=12563.2.4数组操作技法综合【例3.2-7】数组操作函数reshape,diag,repmat的用法;空阵[]

删除子数组的用法。a=1:8 A=reshape(a,4,2)A=reshape(A,2,4)a=12345678A=15263748A=13572468D1=repmat(B,2,4) %D1=10101010040404041010101004040404D1([1,3],:)=[]%删除1,3行

D1=0404040404040404b=diag(A) b=14B=diag(b)B=10043.2.4数组构作技法综合【例3.2-8】函数flipud,fliplr,rot90对数组的操作体现着“矩阵变换”。A=reshape(1:9,3,3)A=147258369B=flipud(A)B=369258147C=fliplr(A) %C=741852963D=rot90(A,2)%逆时针旋转D=9638527413.3数组运算1.函数关系数值计算模型的分类个别的,无规律的数据集所执行的函数关系运算;一组有规律数据需要反复所执行的函数关系运算;一组有规律数据按矩阵运算法则执行的函数关系运算。3.3.1数组运算的由来和规则对一般编程,后两种运算程序包含一重或多重循环体。2.提高程序执行性能的三大措施JIT(justintime)-Accelerator;数组运算;向量或矩阵运算。3.3.1数组运算的由来和规则3.数组运算规则数组运算是指每个对应元素之间的运算,比如对应元素相加,相减,相乘,相除等,而矩阵运算则服从线性代数中的矩阵运算规则.数组运算符是.opr,opr运算符为+,-,*,/,\,^,

'

矩阵运算则没有在操作符左边加.

,matlab中矩阵的运算是按照线性代数中的定义进行的。详细的数组运算符意义见表3.3-1.数组的加减法数组加减法为数组元素的加减法,与矩阵加减法相同。利用运算符“+”和“-”实现该运算。需要注意的是相加或相减的两个数组必须有相同的维数,或者是数组与数值相加减。数组的乘除法数组乘除为元素的乘除,通过运算符“.*”和“./”来实现。运算时需要两个数组有相同的维数,或者数组与数值相乘除。数组的乘方数组乘方用符号“.^”实现。数组乘方运算以三种方式进行。底为数组,指数为标量的形式。这种形式的结果是将数组的每个元素进行指数相同的乘方。返回的结果为与底维数相同的数组,结果数组的每个元素为底中相应元素的乘方。底为标量,指数为数组的形式。该形式返回的结果为数组,维数与指数数组相同。结果数组的每个元素以标量为底,以指数数组相应元素为指数做乘方的结果。底和指数都是数组的形式。此时两个数组需要有相同的维数。返回结果为一个数组,维数与前面两个数组相同,每个元素为底数数组和指数数组相应元素做乘方的结果。函数f(.)的数组运算规则函数数组运算规则的定义

x11x12…x1n

x21x22…x2n

对于(m*n)数组X=

…………=[xij]mxn

xm1xm2…xmn

函数f(.)的数组运算规则是指:

f(X)=[f(xij)]mxn也就是对数组中每个元素都实施同样的操作.名称含义名称含义名称含义acos反余弦asinh反双曲正弦csch双曲余割acosh反双曲余弦atan反正切sec正割acot反余切atan2四象限反正切sech双曲正割acoth反双曲余切atanh反双曲正切sin正弦acsc反余割cos余弦sinh双曲正弦acsch反双曲余割cosh双曲余弦tan正切asec反正割cot余切tanh双曲正切asech反双曲正割coth双曲余切asin反正弦csc余割

三角函数和双曲函数4.

数组运算符和数组运算函数

指数函数名称含义名称含义名称含义exp指数(ex)log10常用对数pow22的幂log自然对数log2以2为底对数sqrt平方根

复数函数名称含义名称含义名称含义abs模或绝对值conj复数共轭real复数实部angle相角(弧度)imag复数虚部

坐标变换函数名称含义名称含义cart2sph直角坐标变球坐标pol2cart极坐标变直角坐标cart2pol直角坐标变极坐标sph2cart球坐标变直角坐标

圆整函数与求余函数名称含义名称含义ceil向+∞圆整函数rem求余数fix向0圆整函数round向最近整数圆整函数floor向-∞圆整函数sign符号函数-(-1),+(1)

0(0)mod模除求余clearvr=[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);endrm=sr/L非向量化程序3.3.2数组运算与向量化编程向量化编程r=vr./irrm=mean(r)

【例3.3-1】欧姆定律:,其中

r,u,i

分别是电阻(欧姆)、电压(伏特)、电流(安培)。验证实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。(测得具体数据见程序)。3.3.2数组运算与向量化编程clearx=-5:0.1:5;y=(-2.5:0.1:2.5)';

N=length(x);M=length(y);forii=1:Mforjj=1:NZ0(ii,jj)=sin(abs(x(jj)*y(ii)));endend非向量化程序【例3.3-2】用间距为0.1的水平线和垂直线均匀分割的矩形域,在所有水平线和垂直线交点上计算函数y=sin|xy|的值,并图示。[X,Y]=meshgrid(x,y);Z=sin(abs(X.*Y));

向量化程序norm(Z-Z0)

ans=0比较两个数组是否相等(2范数接近eps)surf(X,Y,Z)xlabel('x')ylabel('y')shadinginterpview([190,70])绘制二元函数图形按IEEE规定,0/0,∞/∞,0*∞等运算都会产生非数,在matlab中记为nan.它具有以下性质:1)nan参与运算所得结果也是nan,即具有传递性.2)非数没有大小概念,不能比较两个非数的大小.功能:真实记述0/0,∞/∞,0*∞运算的后果;避免可能因以上运算而造成的程序执行的中断;在数据可视化中,用来裁减图形.3.4“非数”和“空”数组3.4.1非数NaN【例3.4-1】非数的产生和性质演示(1)

非数的产生a=0/0,b=0*log(0),c=inf-inf(2)

非数的传递性0*a,sin(a);(3)

非数的属性判断class(a),isnan(a)isnan唯一能正确判断非数的指令3.4.2“空”数组空数组的功能:空数组没参与运算时,计算结果中的空可以合理地解释所得结果的含义(如在某数组中寻找满足一定条件的数据,结果没有,得到空数组,表示没有满足条件的元素);a=[1,2,3];f_array=find(a<0)f_array=Emptymatrix:1-by-0运用空数组对其他非空数组赋值,可以改变数组的大小,但不能改变数组的维数.A=reshape(-4:5,2,5)

A=-4-2024-3-1135

size(A)ans=25A(:,[2,4])=[]A=-404-315

size(A)ans=23ndims(A)ans=2运用空数组对其他非空数组赋值,可以改变数组的大小,但不能改变数组的维数.A=rand(2,3,2,4);size(A)ans=2324ndims(A)ans=4A(:,:,[1,2],:)=[]A=Emptyarray:2-by-3-by-0-by-4size(A)ans=2304ndims(A)ans=43.4.2“空”数组(1)创建”空”数组的几种方法a=[]b=ones(2,0),c=zeros(2,0),d=eye(2,0)f=rand(2,3,0,4);array3=1:-5;(2)空数组的属性【例3.4-3】关于“空”数组的算例。class(a)isnumeric(a) isempty(a)%空数组的判断ans=doubleans=1ans=1whichandims(a)size(a)aisavariable.ans=2ans=003.5关系操作和逻辑操作3.5.1关系操作3.5.2逻辑操作3.5.3常用逻辑函数

matlab的约定1)在所有关系表达式和逻辑表达式中,作为输入的任何非0数都被看作逻辑真,只有0才被认为是逻辑假.2)所有关系表达式和逻辑表达式的计算结果,即输出,是一个由0和1作成的逻辑数组.其中1表示真,0表示假.3)逻辑数组是一种特殊的数值数组,它表示着对事物的判断结论“真”与”假“3.5关系操作和逻辑操作3.5.1关系操作指令含义指令含义<小于>=大于等于<=小于等于==等于>大于~=不等于说明:1)标量可以与任何维数的数组进行比较,比较在此标量和数组每个元素之间进行,因此比较结果为与被比较数组同维的数组.2)数组进行比较时,两数组必须是同维的,结果也得到一个同维的数组.

|2,4,6||1,3,5|A=|3,5,7|B=|4,6,8||1,8,9||2,7,9||1,1,1||0,0,1|A>B=|0,0,0|A>5=|0,0,1||0,1,0||0,1,1|A=[246;357;189]find(A>5)=>ans=[6,7,8,9]'%得到数组下标,单下标A(find(A>5))=>ans=[8,6,7,9]'A(find(A>5))=5;%A(A>5)=5A=245355155【例3.5-2】关系运算应用。求近似极限,修补图形缺口sin(t)/t,

t∈[-2π,2π]t=-2*pi:pi/10:2*pi;y=sin(t)./t;%在t=0处产生非数tt=t+(t==0)*eps;

%处理分母为0的点yy=sin(tt)./tt;subplot(2,1,1),plot(t,y);axis([-7,7,-0.5,1.2]);xlabel('t'),ylabel('y'),title('残缺图形');subplot(2,1,2),plot(tt,yy);axis([-7,7,-0.5,1.2]);xlabel('t'),ylabel('yy'),title('完整图形')tt=t;tt(find(tt==0))=eps;tt(tt==0)=eps;3.5.2逻辑操作说明:1)标量可以与任何维的数组运算.逻辑运算在标量与数组每个元素间进行,因此运算结果是与参与运算的数组维数相同的数组.2)数组之间也可以进行逻辑运算,参与运算的必须维数相同.此时运算在两数组同位置上的元素之间进行.因此运算结果是与参与运算的数组维数相同的数组.指令

&|

~xor含义与或非异或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论