数值数组及其运算.ppt_第1页
数值数组及其运算.ppt_第2页
数值数组及其运算.ppt_第3页
数值数组及其运算.ppt_第4页
数值数组及其运算.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第二章 数值数组及其运算,2.2.1 一维数组的创建 (1)逐个元素输入法:最简单,最通用的构造数组的方法。 x2 pi/2 sqrt(3) 3+5i (2)冒号生成法:通过“步长”设定,生成一维“行”数组的方法。 x=a:inc:b (3)定数线性采样法:在设定的“总点数”下,均匀采样生成一维“行”数组。 x=linspace(a,b,n) (4)定数对数采样法:在设定的“总点数”下,经“常用对数”采样生成一维“行”向量;生成数组的第一个元素值为 ,最后一个元素值为 x=logspace(a,b,n),2.2.2一维数组的子数组寻访和赋值 【例2.2.2-1】子数组的寻访(Address) rand(state,0) %把均匀分布伪随机发生器 %置为0状态 x=rand(1,5) %产生x的均布随机数组 x(3) %寻访数组x的第三个元素 x(1 2 5) %寻访数组x的第一、二、五个元素组成的子数组 x(1:3) %寻访前三个元素组成的子数组 x(3:end) %寻访除前2个元素外的全部其他 %end是最后一个元素的下标 x(3:-1:1) %由前三个元素倒排构成的子数组 x(find(x0.5) %由大于0.5的元素构成的子数组 x(1 2 3 4 4 3 2 1) %对元素可以重复寻访,使所得数组长度允许大于原数组。,【例2.2.2-2】子数组的赋值(Assign)。 x(3)=0 %把上例中第三个元素重新赋值为0 x(1 4)=1 1 把当前x数组的第一、四个元素都赋值为1,2.3 二维数组的创建 2.3.1 直接输入法 二维数组必须有一下三个要素: 整个输入数组必须以方括号“ ”为其首尾; 数组的行与行之间必须用分号“;”或回车enter隔离; 数组元素必须由逗号“,”或空格分隔。,【例2.3.1-1】在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,【例2.3.1-2】复数数组的另一种输入方式。 M_r=1,2,3;4,5,6, M_i=11,12,13;14,15,16 CN=M_r+i*M_i,【例2.3.2-1】创建和保存数组AM的 MyMatrix.m 文件。 (1)打开文件编辑调器,输入以下内容 % MyMatrix.m Creation and preservation of matrix AM AM=101,102,103,104,105,106,107,108,109;. 201,202,203,204,205,206,207,208,209;. 301,302,303,304,305,306,307,308,309; (2)保存此文件,并且起名MyMatrix (3)以后只要在MATLAB指令窗中,运行此文件,数组AM就会自动生成于MATLAB内存中,2.4 二维数组元素的标识 2.4.1 “全下标”标识 采用“全下标”标识法,即指出是“第几行,第几列”的元素 例如:A(2,3)就表示二维数组A的“第二行,第三列”的元素 多维数组也同样,2.4.2 “单下标”标识 “单下标(Linear Index)”标识就是“只用一个下标来指明元素在数组中的位置” 这种方法首先要对二维数组的所有元素进行“一维编号”,所谓“一维编号”就是:先设想把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列”。然后,自上往下对元素位置进行编号。 “单下标”与“全下标”的转换关系:以(mn)的二维数组A为例,若“全下标”元素位置是“第r行,第c列”,那么相应的“单下标”为l=(c-1)mr。MATLAB有两个指令可以实现以上标识方法之间的转换: sub2ind 根据全下标换算出单下标 ind2sub 根据单下标换算出全下标,2.4.3 “逻辑1”标识 元素或是0或是1的数组是“逻辑数组(Logic Array)”。所谓“逻辑1”标识法,就是通过与矩阵同样大小的逻辑数组中“逻辑值1”所在的位置,指示出数组中的元素位置。实际应用中,一般用于寻找大于某值的元素。 【例2.4.3-1】找出数组中所有绝对值大于3的元素。 A=zeros(2,5); A(:)=-4:5 L=abs(A)3 islogical(L) X=A(L),【例2.4.3-2】演示逻辑数组与一般双精度数值数组的关系和区别。 (1)逻辑数组与双精度数组的相同之处 Num=1,0,0,0,1;0,0,0,0,1; N_L=Num=L c_N=class(Num) c_L=class(L) (2)逻辑数组与双精度数组的差别 islogical(Num) Y=A(Num),有关逻辑数组的补充说明,逻辑数组一方面具有双精度性,另一方面又区别于一般的双精度数组 逻辑数组产生于逻辑函数或逻辑运算,它具有“逻辑标识”能力。 从本质上说,逻辑数组是双精度数组的子类。它继承了双精度类数组的全部性质,又有自己特定的属性和能力。,2.5 二维数组的子数组寻访和赋值 【例2.5-1】不同赋值方式示例。 A=zeros(2,4) %创建(24)的全零数组 A(:)=1:8 %全元素赋值方式 s=2 3 5; %产生单下标数组行数组 A(s) %由“单下标行数组”寻访产生A元素组成的行数组 Sa=10 20 30 %Sa是长度为3的“列数组” A(s)=Sa %单下标方式赋值 A(:,2 3)=ones(2) %双下标赋值方式:把A的第2、3列元素全赋为1,2.6 执行数组运算的常用函数 2.6.1 函数数组运算规则的定义: 对于(mn)数组 函数 的数组运算规则是: 2.6.2 执行数组运算的常用函数,【例2.6.2-1】演示pow2的数组运算性质。 A=1:4;5:8 pow2(A),2.7 数组运算和矩阵运算 2.7.1 数组运算和矩阵运算指令对照汇总 【例 2.7.1-1】两种不同转置的比较 clear; A=zeros(2,3); A(:)=1:6; A=A*(1+i) A_A=A. A_M=A,2.8 多项式的表达方式及其操作 2.8.1 多项式的表达和创建 一 多项式表达方式的约定 MATLAB约定降幂多项式: 用系数行向量 表示。 二 多项式行向量的创建方法 (1)多项式系数向量的直接输入法 即按照约定,把多项式的各项系数依次排放在行向量的元素位置上。需要注意的是:多项式系数应以降幂排列,假如多项式中缺某幂次项,那么认为该幂次项的系数为零。 (2)利用指令:Ppoly(AR),产生多项式系数向量。 若AR是方阵,则多项式P是该方阵的特征多项式; 若 ,则AR的元素被认为是多项式P的根。,【例 2.8.1.2-1】求3阶方阵A的特征多项式。 A=11 12 13;14 15 16;17 18 19; PA=poly(A) PPA=poly2str(PA,s) 【例 2.8.1.2-2】由给定根向量求多项式系数向量。 R=-0.5,-0.3+0.4*i,-0.3-0.4*i; P=poly(R) PR=real(P) PPR=poly2str(PR,x),2.8.2 多项式运算函数 【例2.8.2-1】求的 “商”及“余”多项式。 p1=conv(1,0,2,conv(1,4,1,1); p2=1 0 1 1; q,r=deconv(p1,p2); cq=商多项式为 ; cr=余多项式为 ; disp(cq,poly2str(q,s), disp(cr,poly2str(r,s),【例 2.8.2-2】两种多项式求值指令的差别。 S=pascal(4) P=poly(S); PP=poly2str(P,s) PA=polyval(P,S) PM=polyvalm(P,S),【例 2.8.2-3】部分分式展开。 a=1,3,4,2,7,2; 分母多项式系数向量 b=3,2,5,4,6; 分子多项式系数向量 r,s,k=residue(b,a),2.9 标准数组生成函数和数组操作函数 2.9.1 标准数组生成函数 【例2.9.1-1】标准数组产生的演示。 ones(1,2) %产生长度为2的全1行数组 ones(2) %产生(22)的全1阵 randn(state,0) %把正态随机数发生器置0 randn(2,3) %产生(23)的正态随机阵 D=eye(3) %产生(33)的单位阵 diag(D) %取D阵的对角元素 diag(diag(D) %内diag取D的对角元,外diag利用一维数组生成对角阵 repmat(D,1,3) %在水平方向“铺放”三个D阵,2.9.1 数组操作函数 【例 2.9.2-1】diag与reshape的使用演示。 a=-4:4 %产生一维数组 A=reshape(a,3,3) %把一维数组a重排成 的二维数组 a1=diag(A,1) %取A阵“第一上对角线”的元素 A1=diag(a1,-1) %产生以a1数组元素为“第一下对角线”元素的二维数组 【例2.9.2-2】数组转置、对称交换和旋转操作后果的对照比较。 A A. %转置 flipud(A) %上下对称交换 fliplr(A) %左右对称交换 rot90(A) %逆时针旋转90度,2.10 数组构作技法综合 【例2.10-1】数组的扩展。 (1)数组的赋值扩展法 A=reshape(1:9,3,3) %创建 数组A A(5,5)=111 %扩展数组,扩展部分除(5,5)元素为111外,其余均为0。 A(:,6)=222 %标量对子数组赋值,并扩展数组。 (2)多次扩展法 AA=A(:,1:6,1:6) %相当于指令repmat(A,1,2) (3)合并扩展法 B=ones(2,6) %创建 全1数组 AB_r=A;B %行数扩展合成 AB_c=A,B(:,1:5) %列数扩展合成,【例2.10-2】提取子数组,合成新数组。 A %重显A数组 AB_BA=triu(A,1)+tril(A,-1) %利用操作函数,使主对角元素为全0 AB1=A(1:2,end:-1:1);B(1,:) %灵活合成,【例2.10-3】单下标寻访和reshape指令演示。 clear %清除内存变量 A=reshape(1:16,2,8) %变一维数组成 数组 reshape(A,4,4) %变 数组为 数组 s=1 3 6 8 9 11 14 16; %定义“单下标”数组 A(s)=0 %利用“单下标”数组对A的元素重新赋值,【例2.10-4】逻辑函数的运用示例。 R=randn(3,6) %创建正态随机阵 L=abs(R)1.5 %不等式条件运算,结果给出逻辑数组 R(L)=0 %“逻辑1”对应的元素赋0值 s=(find(R=0) %利用find获得符合关系等式条件的元素“单下标” R(s)=111 %利用“单下标”定位赋值 ii,jj=find(R=111); %利用find获得符合关系等式条件的元素“双下标”,2.11 高维数组 2.11.1 高维数组的创建 【例2.11.1-1】“全下标”元素赋值方式创建高维数组演示。 A(2,2,2)=1 单元素赋值创建(222)数组 B(2,5,:)=1:3 子数赋值组创建(253)数组 【例2.11.1-2】低维数组合成高维数组。 clear, A=ones(2,3); A(:,:,2)=ones(2,3)*2; A(:,:,3)=ones(2,3)*3,【例2.11.1-3】由函数ones, zeros, rand, randn直接创建标准高维数组的示例。 rand(state,1111), rand(2,4,3) 【例2.11.1-4】借助cat, repmat, reshape等函数构作高维数组。 cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3) repmat(ones(2,3),1,1,3) reshape(1:12,2,2,3) 说明:cat(2,A,B) 得到 A,B cat(1,A,B) 得到 A;B,2.11.2 高维数组的标识 为更好的表述复杂的高维数组操作,现对若干术语和MATLAB相关指令说明如下: (1)数组的维数(Dimension)和ndims指令 “行”或“列”数组(或称向量)是一维数组,即“维数为1 ” 。矩阵是二维数组,即“维数是2”。 指令ndims(A)可直接给出数组A的维数 (2)数组的大小(Size)和size指令 不管A数组的维数是多少,size(A)可直接给出A的各维的大小,而指令length(A)可给出所有维中的最大长度。即length(A)=max(size(A),【例2.11.2-1】获取数组A的维数、大小和长度 clear;A=reshape(1:24,2,3,4); dim_A=ndims(A) size_A=size(A) L_A=length(A),2.1 2 “非数”和“空”数组 2.12.1 非数NaN 根据IEEE规定 等运算都会产生非数(Not a Number)。该非数在MATLAB中用NaN或nan记述。 (1)根据IEEE数学规范,NaN具有以下性质: NaN参与运算所得的结果也是NaN,即具有传递性 非数没有“大小”概念,因此不能比较两个非数的大小 (2)非数的功用 真实记述 运算后的结果 避免可能因 运算而造成程序执行的中断 在数据可视化中,用来裁剪图形。,【例2.12.1-1】非数的产生和性质演示。 (1)非数的产生 a=0/0, b=0*log(0), c=inf-inf 0*a,sin(a) (2)非数的不可比较性 a= =nan a=nan a= =b %两个非数不存在“等”与“不等”的概念 bc %两个非数不能比较大小 (5)非数的属性判断 class(a) %数据类型归属 isnan(a) %该指令是唯一能正确判断非数的指令,【例2.12.1-2】非数元素的寻访 R=rand(2,5); R(1,5)=NaN; R(2,3)=NaN isnan(R) %对数组元素是否非数进行判断,找出非数元素的位置标识 Linear_index=find(isnan(R) %非数的“单下标”标识 r_index,c_index=ind2sub(size(R),Linear_index) %转换成“全下标”标识 disp(r_index c_index) disp(r_index c_index),2.12.2 “空”数组 某维长度为0或若干维长度为0的数组就是“空”数组,它是MATLAB为操作和表述需要而专门设计的一种数组。 “空”数组的功用: 在没有“空”数组参与的运算时,计算结果中的“空”可以合理地解释“所得结果的含义” 运用“空”数组对其他非空数组赋值,可以收缩数组的大小,但不能改变那数组的维数。,说明: 不能把“空”数组与全零数组混淆 不要把“空”数组看成“虚无”。它确实存在。利用which,who,whos,以及变量浏览器都可以验证它的存在 唯一能正确判断一个数组是否“空”的指令是isempty。 “空”数组在运算中不具备传递性。对运算中出现的“空”结果,解释要谨慎。,【例2.12.2-1】关于“空”数组的算例。 (1)创建“空”数组的几种方法 a=, b=ones(2,0), c=zeros(2,0), d=eye(2,0), e=rand(2,3,0,4) (2)”空”数组的属性 class(a) %“空”的数据类别 isnumeric(a) %是数值数组类吗 isempty(a) %唯一可正确判断数组是否“空”的指令 which a %变量a是什么 ndims(a) %数组a的维数 size(a) %a数组的大小,(3)“空”数组不具备一般传递性 b_c1=b.*c %两个空阵的点乘 b_c2=b*c %矩阵乘,生成矩阵为0-by-0,故“空” b_c3=b*c %矩阵乘,生成矩阵为2-by-2 (4)”空“数组的比较要谨慎 a=b %结果可解释为“不等于” b=c %结果可合理解释为“无法比较” cd %结果可合理解释“无法比较” a=0 %结果可解释为“不等于” A =0 %结果解释为“是不等”,(5) 没有“空”数组参与运算时,结果中的“空”有合理解释 A=reshape(-4:5,2,5) %创建一个数值数组A L2=A10 %检查A中大于10的元素位置 find(L2) %找出L2逻辑数组中非0元素的“单下标”标识。 (6)“空”数组用于子数组的删除和数组大小的缩放 A(:,2,4)= %删除A的第二、四列,【例2.11.3-4】赋“空阵”值操作。 A=reshape(1:18,2,3,3) %创建3维数组 A(:,2:3,:)= %赋“空”,使原A数组的第二、三列消失 B=A; size(A) A_1=squeeze(A) Size(A_1) %撤消“孤维”,数组由3维降为2维 size(B) %B数组与A同样存在“孤维” B(:,1,:)= %对“孤维”赋“空”,不能降维,【例2.11.3-5】“孤维”的撤消和降维。 clear, A=ones(2,3); A(:,:,2)=ones(2,3)*2; A(:,:,3)=ones(2,3)*3 B=cat(4,A(:,:,1),A(:,:,2),A(:,:,3) %串接为4维数组 size(B) %测量数组B的大小 C=

温馨提示

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

评论

0/150

提交评论