《MATLAB第三章 数值数组及其运算.ppt》由会员分享,可在线阅读,更多相关《MATLAB第三章 数值数组及其运算.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第三章第三章 数值数组及向量化运算数值数组及向量化运算13.1 数值计算的特点和地位数值计算的特点和地位符号运算优点:可以对包含变量字符、参数字符和符号运算优点:可以对包含变量字符、参数字符和数字的表达式进行推理、运算,并给出符号结果,数字的表达式进行推理、运算,并给出符号结果,与高校教科书中的解析表达式接近。与高校教科书中的解析表达式接近。不足:有很多问题无法解,有些问题求解时间过长不足:有很多问题无法解,有些问题求解时间过长现代主流计算机都只能表示、保存、运算和输出有现代主流计算机都只能表示、保存、运算和输出有限精度的数字,处理离散的信息。数值计算正好适限精度的数字,处理离散的信息。数值
2、计算正好适应了现代计算机的这种特点,它计算速度快,能处应了现代计算机的这种特点,它计算速度快,能处理各种复杂的函数关系。但数值计算是以有限精度理各种复杂的函数关系。但数值计算是以有限精度数字为基本操作元素,只能用有限长度的数据,以数字为基本操作元素,只能用有限长度的数据,以有限的精度表现有限时间和范围内的函数关系。有限的精度表现有限时间和范围内的函数关系。2例例 3.1-1 已知已知求求(1)符号计算解法符号计算解法syms t;ft=exp(sin(t);sx=int(ft,t,0,4)Warning:Explicit integral could not be found.sx=int(e
3、xp(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);hold on;plot(x,sx,.b,MarkerSize,15);plot(x,ones(size(x),k);33.2 引导数值数组数值数组(Numeric Array)和数组运算和数组运算(Array Operations)是是matlat的核心内容的核心内容.数组数组:一组实数或复数排成的长方阵列一组实数或复数排成的长方阵列.可以是一维的行或列,可以是一维的行或列,
4、二维的矩形二维的矩形,也可以是三维的若干同维矩形的堆叠也可以是三维的若干同维矩形的堆叠,甚至更高维甚至更高维.数组运算:无论在数组上施加什么运算数组运算:无论在数组上施加什么运算(加减乘除或函数加减乘除或函数),),总认总认为那种运算对被运算数组中的每个元素平等地实施同样的操作为那种运算对被运算数组中的每个元素平等地实施同样的操作matlab 设计数组和数组运算的目的:1)使程序简单易读,使程序指令更接近教科书上的数学计算公式.2)提高程序的向量化程度,提高计算效率,节省计算机开销数组运算符数组运算符:.opr+,-,.*,./,.,.,fun43.3 一维数组的创建和寻访一维数组的创建和寻访
5、 1.一维数组的创建一维数组的创建:(1)逐个元素输入法:逐个元素输入法:如:array=2,pi/2,sqrt(3),3+5i使用场合及特点使用场合:数据元素比较少并都已知.如对少量实验数据的处理可用此种方法.x=1,2,3,4,5行向量行向量列向量列向量5(2)冒号生成法:冒号生成法:array=a:inc:b a-数组的第一个元素数组的第一个元素 inc-采样点之间的间隔采样点之间的间隔,即步长即步长.最后一个元素不一定等于最后一个元素不一定等于b,其大小为其大小为b=a+inc*(b-a)/inc;步长可以省略步长可以省略,默认默认为为1;inc可以取正数或负数可以取正数或负数,但要注
6、意当取正时但要注意当取正时,要保证要保证ba,数组最后一个元素不超过数组最后一个元素不超过b,取负时取负时ba)得到得到n+1个元素的数组个元素的数组.abinc0abinc06x=1:5x=1,2,3,4,5y=5:-1:1y=5,4,3,2,1Z=1:2:7z=1,3,5,7 u=1:2:8u=1,3,5,7x=31,32 ,33,34,35,36,37,38,39输出一个等比数列:a=1:1:9;x=3.a7A=1:-1:9 A=Empty matrix:1-by-0B=9:1:1B=Empty matrix:1-by-0B=1:2:8B=1,3,5,7C=8:-2:1C=8,6,4,2
7、8(3)定数线性采样法定数线性采样法在设定的总点数下,均匀采样生成一维行数组格式为:x=linspace(a,b,n)a-数组初始值b-数组最后值n-数组总个数特点:方便对数组的元素的总个数进行控制,最后一个元素肯特点:方便对数组的元素的总个数进行控制,最后一个元素肯定是设定之值三个参数之间不必满足一定条件定是设定之值三个参数之间不必满足一定条件增量的计算-inc=(b-a)/(n-1)等效于等效于:x=a:(b-a)/(n-1):b92.一维数组的子数组寻访和赋值一维数组的子数组寻访和赋值 x=1 2 3 4 5;x(3)x(1 2 3),x(1 2 3)x(1:3)=x(1,2,3)%1:
8、3=1,2,3x(3:end)%end表示最后一个下标表示最后一个下标x(3:-1:1)x(find(x2)x(1 2 3 4 5 5 4 3 2 1)注意注意:数组的第一个元素为数组的第一个元素为x(1),与与C语言中第一个元语言中第一个元素为素为x0不同不同103.4二维数组的创建二维数组的创建二维数组是由实数或复数排列成矩形而构成的二维数组是由实数或复数排列成矩形而构成的.从数据结构上看从数据结构上看,矩阵和二维数组没区别矩阵和二维数组没区别.当二维数组带有线性变换含义时当二维数组带有线性变换含义时,该二该二维数组就是矩阵维数组就是矩阵2.利用文件创建和保存数组利用文件创建和保存数组 1
9、.直接输入法:直接输入法:对于较小数组对于较小数组,从键盘直接输入最简便从键盘直接输入最简便.二维数组必须有以下三二维数组必须有以下三个个 要素要素:1)整个输入数组必须以方括号整个输入数组必须以方括号“”为其首尾;为其首尾;2)数组的行与行之间必须用分号或回车键隔离;数组的行与行之间必须用分号或回车键隔离;3)数组元素必须有逗号或空格分隔数组元素必须有逗号或空格分隔11例3.1 用直接输入法创建数组a=pi,b=5;array=1,2*pi,2+3i;sqrt(b),sin(pi/4)+i,6;例3.2利用文件创建和保存数组1.编写M文件并运行AM=100,101,102;103,104,1
10、05;106,107,108,保存为文件名MyMatrix.m2.在命令窗中输入MyMatrix123.5 二维数组的标识二维数组的标识 (mxn,m1,n1)2)单下标标识单下标标识数组名数组名(行下标行下标m,列下标列下标n)-数组的第数组的第m行行n列的元素列的元素.A=1,2,3;4,5,6A(2,3)只用一个下标来指定元素在数组中的位置将数组中所只用一个下标来指定元素在数组中的位置将数组中所有的元素按照从上到下有的元素按照从上到下(列列),从左到右的方法从开始从左到右的方法从开始编号编号,其编号就是单下标其编号就是单下标1)全下标标识全下标标识|1 2 3|A=|4 5 6|7 8
11、9|A(:)按单下标方式列出按单下标方式列出全部元素全部元素A(:)=1,4,7,2,5,8,3,6,9134)全下标与单下标间的转换函数全下标与单下标间的转换函数sub2ind-全下标单下标ind2sub-单下标全下标3)单下标与全下标之间的转换单下标与全下标之间的转换对数组对数组A(m,n)来说,若元素来说,若元素A(r,c)与与A(s)是同一元是同一元素,则有:素,则有:s=m*(c-1)+r5)逻辑逻辑1标示标示A=1,2,3,4,5;TRUE=10;FALSE=01;L=TRUE,FALSE,TRUE,FALSE,TRUEA(L)=1,3,5143.6 二维数组的子数组寻访和赋值二维
12、数组的子数组寻访和赋值1)寻访某一个元素寻访某一个元素array(r,c)-数组中的第数组中的第r行行c列的元素列的元素array(r,:)-数组的第数组的第r行全部元素行全部元素array(:,c)-数组的第数组的第c列的全部元素列的全部元素array(r1,r2,:)-数组的数组的第第r1,r2行的全部元素行的全部元素array(x)-按单下标寻访数组按单下标寻访数组,从第一个元素按列数第从第一个元素按列数第x个元素个元素2)寻访某一列或一行的元素寻访某一列或一行的元素3)单下标寻访单下标寻访4)寻访全部元素寻访全部元素array(:,:),array(:)15A=1,2,3;4,5,6;
13、7,8,9;A(2,3)=6A(3)=7A(:,:)=1,2,3;4,5,6;7,8,9;A(:)=1,4,7,2,5,8,3,6,9A(1,3,5)=1,7,5A=1,2,3 4,5,6 7,8,9例例3.6.1二维数组的寻访二维数组的寻访x(2,:)=x(2,:)+1163.7 执行数组运算的常用函数执行数组运算的常用函数函数数组运算规则的定义函数数组运算规则的定义|x11 x12 x1n|x21 x22 x2n|对于对于(m x n)数组数组X|=xij m x n|xm1 xm2 xmn|函数函数f(.)的数组运算规则是指:的数组运算规则是指:f(X)=f(xij)m x n也就是对数
14、组中每个元素都实施同样的操作也就是对数组中每个元素都实施同样的操作例例2.1 x=30,45,60;90,105,120,计算计算sin(pi/180*x)17常用函数:常用函数:名称含义名称含义名称含义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余割三角函数和双曲
15、函数18指数函数指数函数名称名称 含义含义 名称名称含义含义名称名称含义含义exp 指数指数(ex)log10 常用对数常用对数pow2 的幂的幂log自然对数自然对数 log2以为底对数以为底对数 sqrt平方根平方根复数函数复数函数名称名称含义含义名称名称含义含义名称名称 含义含义abs模或绝对值模或绝对值 conj 复数共轭复数共轭 real 复数实部复数实部angle 相角相角(弧度弧度)imag 复数虚部复数虚部19坐标变换函数名称含义名称含义cart2sph直角坐标变球坐标pol2cart极坐标变直角坐标cart2pol直角坐标变极坐标sph2cart球坐标变直角坐标圆整函数与求余
16、函数圆整函数与求余函数名称名称 含义含义名称名称含义含义ceil向向圆整函数圆整函数rem求余数求余数fix向圆整函数向圆整函数round 向最近整数圆整函数向最近整数圆整函数floor 向向圆整函数圆整函数sign符号函数符号函数 -(-1),+(1)0(0)mod 模除求余模除求余203.8 数组运算与矩阵运算数组运算与矩阵运算数组运算数组运算是指每个对应元素之间的运算,比如对应元素相加,是指每个对应元素之间的运算,比如对应元素相加,相减,相乘,相除等,而相减,相乘,相除等,而矩阵运算矩阵运算则服从线性代数中的矩阵运则服从线性代数中的矩阵运算规则算规则数组运算符是数组运算符是.opr,op
17、r为运算符,可以是为运算符,可以是,*,/,矩阵运算则没有在操作符左边加矩阵运算则没有在操作符左边加.,matlab中矩阵的运算是按中矩阵的运算是按照线性代数中的定义进行的照线性代数中的定义进行的数组运算函数:数组运算函数:sqrt,exp,log.矩阵运算函数:矩阵运算函数:sqrtm,expm,logm.21数组数组(矩阵矩阵)的点乘和乘法的区别的点乘和乘法的区别乘法乘法:是矩阵相乘是矩阵相乘,必须满足矩阵相乘的定义必须满足矩阵相乘的定义,即只有即只有Amxn*Bnxk才有意义才有意义,行向量和行向量之间不能相乘行向量和行向量之间不能相乘点乘点乘:是数组对应元素间的乘法,必须满足相乘的两是
18、数组对应元素间的乘法,必须满足相乘的两个数组的维数完全相同,如个数组的维数完全相同,如Amxn.*Bmxn例例 将函数将函数y=xsinx在区间在区间0,2离散化离散化x=0:2*pi/100:2*pi;y=x.*sin(x);x=0,2*pi/100,2*2*pi/100 ,2*pisin(x)=sin(0),sin(2*pi/100),sin(2*2*pi/100),sin(2*pi)22例例2.2a=1,2,3;4,5,6;7,8,9,b=2,4,6;8,10,12;14,16,18,计算计算a+b,a.*b,a*b,sqrt(a),sqrtm(a)+,-相同位置的元素相加相同位置的元素
19、相加,减减.*相同位置的元素相乘相同位置的元素相乘*矩阵相乘矩阵相乘,满足矩阵相乘的条件满足矩阵相乘的条件.点幂点幂,数组数组(矩阵矩阵)中每个元素进行幂运算中每个元素进行幂运算矩阵的运算矩阵的运算233.9 标准数组生成函数和数组操作函数标准数组生成函数和数组操作函数 指令指令含义含义 指令指令含义含义diag建立和提取对角阵建立和提取对角阵 rand产生均布随机数组产生均布随机数组eye产生单位数组产生单位数组randn 产生正态分布随即数组产生正态分布随即数组magic 产生魔方数组产生魔方数组zeros 产生全数组产生全数组ones产生全数组产生全数组空矩阵空矩阵1)标准数组生成函数标
20、准数组生成函数例2.3 diag,eye,zeros,ones 的演示eye(3),eye(2,3),zeros(3),zeros(2,3),ones(3),ones(2,3)a=1,2,3;4,5,6;7,8,9,x=1:1:9;diag(a),diag(x)24指令指令含义含义cat把大小相同的若干数组把大小相同的若干数组,沿指定维方向沿指定维方向,串接成高串接成高维数组维数组diag提取对角元素提取对角元素,或生成对角矩阵或生成对角矩阵flipud矩阵作上下翻转矩阵作上下翻转fliplr矩阵作左右翻转矩阵作左右翻转 repmat扩大数组扩大数组reshape 改变矩阵大小改变矩阵大小 k
21、ronKronecker张量积张量积 rot90矩阵旋转矩阵旋转90度度 tril提取矩阵的下三角部分提取矩阵的下三角部分 triu提取矩阵的上三角部分提取矩阵的上三角部分 2)数组操作函数数组操作函数25矩阵的常用操作矩阵的常用操作(1)转置转置共轭转置共轭转置-A,z共轭共轭-conj(A)转置转置-conj(A)-复数复数=A.(2)+-*/A=1,2,3;,4,5,6;7,8,9;C=2,4,6;8,10,12;14,16,18b=12;15;20 z=1+i,2+3i,5;2,3i,4+i;4+3i,5,i(3)tril,triu,reshapea=1,2,3;4,5,6;7,8,9
22、,x=1:1:9;tril(a),triu(a);reshape(x,3,3)26数组的组合数组的组合:x1=1,2,3;x2=4,5,6;x3=7,8,9;a=x1,x2,x3,b=x1;x2;x3y1=x1,y2=x2,y3=x3c=y1,y2,y3,d=y1;y2;y3a=1 2 3 4 5 6 7 8 9b=1 2 3 4 5 6 7 8 9 c=1 4 7 2 5 8 3 6 9d=a,增加列增加列,要要保证行数相等保证行数相等;增加行增加行,要要保证列数相等保证列数相等273)矩阵分析矩阵分析指指 令令 含义含义rank计算矩阵的秩计算矩阵的秩det计算矩阵行列式的值计算矩阵行列式
23、的值size计算矩阵的大小,行数,列数(二维)计算矩阵的大小,行数,列数(二维)find按条件查找按条件查找null零空间零空间trace 计算矩阵的迹计算矩阵的迹eig求矩阵的特征值和特征向量求矩阵的特征值和特征向量norm 计算矩阵或向量的范数计算矩阵或向量的范数28例例解多元一次方程解多元一次方程 x +3y+z =15已知:已知:2x+y +3z=20求求 x,y,z之值之值 x +y =4 1)将方程化为矩阵与矢量相乘的形式:将方程化为矩阵与矢量相乘的形式:AX=b,写出写出 解题步骤:解题步骤:2)判断方程组是否有解计算矩阵和其增广矩阵的判断方程组是否有解计算矩阵和其增广矩阵的3)
24、如果有解,则解为:如果有解,则解为:X=A-1*b=A(-1)*b=inv(A)*b或或 X=Ab A,b秩秩 r(A),r(A|b)A=1,3,1;2,1,3;1,1,0;b=15,20,4;rank(A);rank(A,b);293.11 非数和空数组非数和空数组按按IEEE规定规定,0/0,/,0*等运算都会产生非数等运算都会产生非数,在在matlab 中中记为记为nan.它具有以下性质:它具有以下性质:1)nan参与运算所得结果也是参与运算所得结果也是nan,即具有传递性,即具有传递性2)非数没有大小概念,因此不能比较两个非数的大小非数没有大小概念,因此不能比较两个非数的大小功能:功能
25、:真实记述真实记述0/0,/,0*运算的后果运算的后果;避免可能因以上避免可能因以上运算而造成的程序执行的中断运算而造成的程序执行的中断;在数据可视化中在数据可视化中,用来裁减图形用来裁减图形30例例2.11-1 非数的产生和性质演示非数的产生和性质演示(1)非数的产生非数的产生a=0/0,b=0*log(0),c=inf-inf(2)非数的传递性非数的传递性0*a,sin(a);(3)非数的属性判断非数的属性判断class(a),isnan(a)isnan-唯一能正确判断非数的指令313.11.2 空数组空数组空数组的功能:空数组的功能:在没有空数组参与运算时在没有空数组参与运算时,计算结果
26、中的空可以合理地解释所得计算结果中的空可以合理地解释所得结果的含义结果的含义(如在某数组中寻找满足一定条件的数据如在某数组中寻找满足一定条件的数据,结果没有结果没有,得到空数组得到空数组,表示没有满足条件的元素表示没有满足条件的元素);运用空数组对其他非空运用空数组对其他非空数组赋值数组赋值,可以改变数组的大小可以改变数组的大小,但不能改变数组的维数但不能改变数组的维数空数组的创建空数组的创建array1=;array2=zeros(2,0);array3=1:-5;a=1,2,3;array4=find(a0)空数组的判断空数组的判断isempty(array1)323.12 关系操作和逻辑
27、操作关系操作和逻辑操作 matlab 的约定的约定1)在所有关系表达式和逻辑表达式中在所有关系表达式和逻辑表达式中,作为输入的任作为输入的任何非何非0数都被看作逻辑真数都被看作逻辑真,只有只有0才被认为是逻辑假才被认为是逻辑假.2)所有关系表达式和逻辑表达式的计算结果所有关系表达式和逻辑表达式的计算结果,即输出即输出,是一个由是一个由0和作成的逻辑数组和作成的逻辑数组.其中表示真其中表示真,0表示表示假假.3)逻辑数组是一种特殊的逻辑数组是一种特殊的,它表示着对事物的判断结它表示着对事物的判断结论论“真真”与与”假假“33关系操作关系操作指令指令 含义含义指令指令 含义含义=大于等于大于等于大
28、于大于=不等于不等于说明:说明:1)标量可以与任何维数的数组进行比较标量可以与任何维数的数组进行比较,比较在此标量和数组比较在此标量和数组 每个元素之间进行每个元素之间进行,因此比较结果为与被比数组同维的数组因此比较结果为与被比数组同维的数组.2)数组进行比较时数组进行比较时,两数组必须是同维的两数组必须是同维的,结果也得到一个同结果也得到一个同维的数组维的数组34|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|AB=|0,0,0|A5=|0,0,1|0,1,0|0,1,1|find(A5)=6,7,8,9%得到数组下标,单下标得到
29、数组下标,单下标A(find(A5)=8,6,7,935例例3.12-1 求近似极限求近似极限,修补图形缺口修补图形缺口sin(t)/t t-2,2t=-2*pi:pi/10:2*pi;y=sin(t)./t;%除还是点除除还是点除tt=t+(t=0)*eps;%处理分母为的点处理分母为的点yy=sin(tt)./tt;subplot(1,2,1),plot(t,y);axis(-7,7,-0.5,1.2);xlabel(t),ylabel(y),title(残缺图形残缺图形);subplot(1,2,2),plot(tt,yy);axis(-7,7,-0.5,1.2);xlabel(t),y
30、label(yy),title(完整图形完整图形)3637逻辑操作逻辑操作指令指令含义含义&与,和与,和|或或 否,非否,非说明:说明:1)标量可以与任何维的数组运算标量可以与任何维的数组运算.逻辑运算在标量与数逻辑运算在标量与数组每个元素间进行组每个元素间进行,因此运算结果是与参与运算的数组因此运算结果是与参与运算的数组维数相同的数组维数相同的数组.2)数组之间也可以进行逻辑运算,参与运算的必须维数组之间也可以进行逻辑运算,参与运算的必须维数相同数相同.此时运算在两数组同位置上的元素之间进行此时运算在两数组同位置上的元素之间进行.因因此运算结果是与参与运算的数组维数相同的数组此运算结果是与参
31、与运算的数组维数相同的数组38 关系关系,逻辑函数逻辑函数 指令 含 义指 令 含 义all(A)A中元素全为非中元素全为非0是为是为1,否则否则0isequal(A,B)A,B对应元素相等时,对应元素相等时,相应元素位置取相应元素位置取1,否则否则取取0any(A)A中有非中有非0则为则为1xor(A,B)对应位置元素异或对应位置元素异或isempty(x)X为空,则为为空,则为1isnan(x)判断数组中元素是否为判断数组中元素是否为NaNisfinite(x)X中有限大小元素的位中有限大小元素的位置取置取1,其余取,其余取0isprime(x)质数元素位置处取质数元素位置处取1,其余取其
32、余取0isinf(x)x中无穷大处位置取中无穷大处位置取1,其余取其余取0isreal(x)实数元素位置处取实数元素位置处取1,其余取其余取0isletter(x)X中英文字母处取中英文字母处取1,其其余为余为0isspace(x)空格元素处取空格元素处取1,其余取其余取01)特殊数据判断指令392)数据类型判断指令指令含义指令含义isa(x,name)判断判断x类型类型ishandle(x)判断是否图柄代判断是否图柄代号号iscell(x)判断判断x是否元胞是否元胞islogical(x)判断是否逻辑数判断是否逻辑数据据iscellstr(x)判断判断x是否字符串是否字符串元胞数组元胞数组i
33、snumeric(x)判断是否数值判断是否数值ischar(x)判断判断x是否字符串是否字符串isobject(x)判断是否对象判断是否对象isfield(x,name)判断判断name是否架构是否架构x的域名的域名issparse(x)判断矩阵是否稀判断矩阵是否稀疏疏isglobal(x)判断是否全局变量判断是否全局变量isstruct(x)判断是否是架构判断是否是架构40例例3.12-1 正弦函数正弦函数y=sint(t0,3)的半波整流的半波整流.0,pi,2pi,3pit2pi,z=sin(t)*1否则否则 z=sin(t)*041t=linspace(0,3*pi,500);y=sin(t);z=(t2*pi).*y;subplot(1,2,1),plot(t,y),ylabel(y);subplot(1,2,2),plot(t,z),axis(0 10-1 1);x=1,2,3,4,5,6,7,8,9y=x6y=1,1,1,0,0,0,1,1,1z=x.*y=1,2,3,0,0,0,7,8,9z=y.*(y0);42