MATLAB数值数组及其运算.ppt

上传人:tia****nde 文档编号:12806161 上传时间:2020-05-25 格式:PPT 页数:140 大小:976.50KB
返回 下载 相关 举报
MATLAB数值数组及其运算.ppt_第1页
第1页 / 共140页
MATLAB数值数组及其运算.ppt_第2页
第2页 / 共140页
MATLAB数值数组及其运算.ppt_第3页
第3页 / 共140页
点击查看更多>>
资源描述
第二讲数值数组及其运算,数值数组和数组运算始终是MATLAB的核心,第二讲数值数组及其运算,2.1表达式2.2引导2.3一维数组的创建和寻访2.4二维数组的创建2.5二维数组元素的标识2.6二维数组的子数组寻访和赋值2.7执行数组运算的常用函数,第二讲数值数组及其运算,2.8数组运算和矩阵运算2.9标准数组生成函数和数组操作函数2.10数组构作技法综合2.11高维数组2.12“非数”和“空”数组2.13关系操作和逻辑操作,2.1表达式,MATLAB采用表达式语言形式,语句常用的形式:例:1.3+2*0.9%值存放在默认变量ans中a=1.3+2*0.9x=rand(2,4)%产生2*4大小的随机矩阵如果表达式过长,可分装在几行,行末加三个点,表示下一行是续行。,z=3*(1-x).2.*exp(-(x.2)-(y+1).2)-10*(x/5-x.3-y.5).*exp(-x.2-y.2)-1/3*exp(-(x+1).2-y.2);,2.1表达式,表达式的组成:1)数值2)变量3)操作符4)函数,2.1.1数值,在MATLAB中,所有的数都用浮点双精度类型来存储和运算。(实矩阵的每个元素占8个字节,复矩阵的每个元素占16个字节)缺点:浪费内存、降低运算的速度。优点:省略了定义数据类型的语句,而且编程时无须考虑数据类型的匹配问题,减少了出错的可能。这种战略取得了成功:使人们不在编程细节上化精力,把注意力集中到科学计算的方法和建模合理性等大问题上。,重点,2.1.1数值,MATLAB采用十进制表示形式合法的数值形式举例:3-990.001.19-5.1+6.8i7.8-6j(虚数)9.4e61.3e-3-4.5E33(科学表示法),2e3.4e后面不允许小数形式,2.1.2变量,变量的命名规则:1)变量名、函数名对字母的大、小写敏感。2)变量名由字母、数字和下划线构成。第一个字母必须是英文字母。3)有字符个数限制(版本5.0:最多31个字符),2.1.2变量,MATLAB系统默认变量(注意大小写!)i或j:虚单元正确:5+7j错误:5j7pi:圆周率ans:计算机结果的缺省变量名eps:机器的零阈值2.2204e-016Inf或inf:正无穷大NaN或nan:不定值(即无效数据),重点,可以表示“无穷大”、“不定值”,说明matlab容错性强,运算优先级:算术运算符关系运算符逻辑运算符圆括号可以改变其顺序!,2.1.3操作符,MATLAB操作符包括:算术运算关系运算逻辑运算位运算其他操作符,重点,一)算术运算符,:加法:减法*:矩阵乘法(叉乘).*:矩阵元素乘法/:矩阵右除法./:矩阵元素右除法:矩阵左除法.:矩阵元素左除法,:矩阵指数.:矩阵元素指数:复共轭转置.:非共轭转置,二)逻辑运算符,针对数组元素注释行末的“;”用于抑制结果在屏幕上显示例如:sin(a),sin(b),a+b同在一行的表达式,必须用“,”分开,2.2引导,数组:由一组实数或复数排成的长方阵列(Array)一维的“行”或“列”二维的“矩形”三维的“若干矩形的堆叠”更高的任意维,2.2引导,数组运算:无论对数组施加什么运算(包括函数),总认为是对数组中每个元素平等的实施同样的操作设计数组和数组运算的目的:使程序简单、易读;更接近数学公式提高程序向量化程度,提高计算效率,节省系统开销,2.2引导,绘制函数在0x1时的曲线x=0:0.1:1%定义自变量的采样点取值数组y=x.*exp(-x)%利用数组运算计算各自变量采样点上的函数值plot(x,y),xlabel(x),ylabel(y),title(y=x*exp(-x)%绘图第一句定义自变量数组:0为起点,每隔0.1取一个点,直到1。得到111的数组,2.2引导,第二句中,指数函数exp(-x)对x每个元素求值,结果也是111的数组数组乘使两个数组对应元素相乘,得到y也是111的数组连续函数必须在相应区间上采样才能进行数值计算,一维数组包括行向量和列向量,是所有元素排列在一行或一列的数组。创建行向量创建列向量由行向量转置为列向量,2.3二维数组的创建,A=1:4A=1234B=1:2:4B=13D=linspace(1,4,5)D=1.00001.75002.50003.25004.0000,例:创建一维等差数组,A=logspace(0,log10(32),6)A=1.00002.00004.00008.000016.000032.0000,例:创建一维等比数组,创建一维数组可能用到:方括号、逗号、空格、分号、冒号、函数linspace、logspace以及转置符,2.3二维数组的创建,二维数组与矩阵二维数组是由实数或复数排列成矩形构成的从数据结构上看,矩阵和二维数组没有区别当二维数组带有线性变换含义时,就是矩阵,可通过输入每个元素的方式产生可以通过数据文件产生可以通过MATLAB提供的标准函数产生直接调用其他M文件,即可使用已有的矩阵变量,2.3二维数组的创建,数组的产生:,2.3二维数组的创建,1.直接输入法二维数组三要素:整个数组必须以“”为首尾数组行与行之间必须用“;”或回车隔离数组元素必须用“,”或空格分隔,2.3二维数组的创建,在MATLAB环境下,用下面三条指令创建二维数组Ca=2.7358;b=33/79;%这两条指令分别给变量a,b赋值C=1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i%创建二维数组CC=1.00005.4716+0.4177i0.69090.70714.82443.5000+1.0000i“;”在“”内,是数组行分隔符“;”作为指令结束符,不显示执行结果,2.3二维数组的创建,复数数组的另一种输入方式M_r=1,2,3;4,5,6,M_i=11,12,13;14,15,16CN=M_r+i*M_i%由实部、虚部数组构成复数数组M_r=123456M_i=111213141516CN=1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i“,”在“”内,是数组元素分隔符“,”作为指令结束符,显示执行结果,2.3二维数组的创建,2.利用M文件创建和保存数组对于经常需要调用的数组尤其是比较大而复杂的数组值得为它专门建立一个M文件,通过数据文件产生矩阵,例如,我们已经得到一个数据文件,名为mydata.dat,里面存放一个5*3的数组,则可用命令:loadmydata.dat得到矩阵mydata。应用:可以和其它语言程序进行数据通信。举例:,2.4二维数组元素的标识,1.“全下标”标识经典教科书的标识法即指出是“第几行,第几列”的元素优点:几何概念清楚,引述简单。(最常用)“全下标”由两个下标组成:行下标,列下标。例如:A(2,5),2.4二维数组元素的标识,2.“单下标”标识就是用一个下标来指明元素在数组中的位置对二维数组元素进行“一维编号”把二维数组所有列,按照先左后右的次序,首尾相接排成“一维长列”,然后自上往下编号“单下标”与“全下标”转换关系:以(mn)的二维数组A为例,全下标元素位置是“第r行,第c列”,改为单下标表示为a=(c-1)m+r。MATLAB有两个指令可实现此转换:Sub2ind据全下标算出单下标Ind2sub据单下标算出全下标,2.4二维数组元素的标识,3.“逻辑1”标识常用问题:寻找数组中大于某值的元素找出数组中所有绝对值大于3的元素A=zeros(2,5);%预生成一个25全零数组A(:)=-4:5%运用“全元素”赋值法获得AL=abs(A)3%产生与A同维的“0-1”逻辑值数组islogical(L)%判断L是否逻辑值数组X=A(L)%把L中逻辑值1对应的A元素取出,2.4二维数组元素的标识,A=-4-2024-3-1135L=1000100001ans=1X=-445L的元素是0或1,它是“逻辑数组”,它是一种特殊的数据类型。“逻辑1”标识法:通过与A同样大小的逻辑数组L中“1”的位置指示A中元素的位置,2.5二维数组的子数组寻访和赋值,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.5二维数组的子数组寻访和赋值,A(r,c)=Sa“双下标”方式赋值。Sa的“行宽、列长”必须与A(r,c)的“行宽、列长”相同。A(:)=D(:)全元素赋值。结果:保持A的“行宽、列长”不变。条件:A、D辆数组的元素数相等。A(s)=Sa“单下标”部分元素赋值。结果:保持A的“行宽、列长”不变。条件:s单下标数组长度必须与一维数组Sa的长度相等,但s、Sa不一定同是“行数组”或“列数组”。,2.5二维数组的子数组寻访和赋值,A=zeros(2,4)%创建24的全零数组A=00000000A(:)=1:8%全元素赋值方式A=13572468s=235;%产生单下标数组行数组A(s)%由“单下标行数组”寻访产生A元素组成的行数组Sa=102030%Sa是长度为3的“列数组”A(s)=Sa%单下标方式赋值,2.5二维数组的子数组寻访和赋值,ans=235Sa=102030A=12030710468A(:,23)=ones(2)%双下标赋值方式:把A的第2、3列元素全赋为1A=111710118,A(:)=1:6;%全元素赋值法A=A*(1+i)%运用标量与数组乘产生复数矩阵A_A=A.%数组转置,即非共轭转置A_M=A%矩阵转置,即共轭转置A=1.0000+1.0000i3.0000+3.0000i5.0000+5.0000i2.0000+2.0000i4.0000+4.0000i6.0000+6.0000iA_A=1.0000+1.0000i2.0000+2.0000i3.0000+3.0000i4.0000+4.0000i5.0000+5.0000i6.0000+6.0000iA_M=1.0000-1.0000i2.0000-2.0000i3.0000-3.0000i4.0000-4.0000i5.0000-5.0000i6.0000-6.0000i,2.6标准数组生成函数和数组操作函数,1.标准数组生成函数diag产生对角形数组eye产生单位数组magic产生魔方数组(以上三数组高位不适用,只适用于二维以下)ones产生全1数组rand1)产生0,1之间的均匀分布的随机数:Randn产生均值为0,方差为1的标准正态分布随机数zeros产生全0数组,2.6标准数组生成函数和数组操作函数,标准数组产生的演示ones(1,2)%产生长度为2的全1行数组ans=11randn(state,0)%把正态随机数发生器置0randn(2,3)%产生23的正态随机阵ans=-0.43260.1253-1.1465-1.66560.28771.1909D=eye(3)%产生33的单位阵D=100010001,2)产生元素在m,n间分布的随机数:,重点,通过MATLAB提供的函数产生随机矩阵,2.6标准数组生成函数和数组操作函数,diag(D)%取D阵的对角元ans=111diag(diag(D)%内diag取D的对角元,外diag利用一维数组生成对角阵ans=100010001,对角矩阵的产生第一步:给出对角线上的元素,放在一个向量V中。第二步:用函数A=diag(V);可产生相应的对角矩阵。,旋转重新排列复制,翻转拼接行列删除,2.6标准数组生成函数和数组操作函数,重点,数组的操作,1)数组的旋转,数组元素的排列旋转90度:B=rot90(A)逆时针旋转90度,2)矩阵的重新排列,将矩阵的元素重新排列:reshape(矩阵,行数,列数),按原矩阵的列顺序,重点,A=0.3220.950.0680.1662;0.72070.13110.12520.9114,B=AB=0.32200.72070.95000.13110.06800.12520.16620.9114,C=reshape(A,4,2)C=0.32200.06800.72070.12520.95000.16620.13110.9114,3)矩阵的复制,将矩阵元素复制:repmat(原矩阵,行复制数,列复制数),重点,A=12;34A=1234,B=repmat(A,3,2)B=121234341212343412123434,4)矩阵的翻转,fliplr()将矩阵左右镜像翻转flipud()将矩阵上下镜像翻转A=9684;2470c1=fliplr(A)48690742C2=flipud(A)24709684,5)矩阵的拼接,通过连接符,可将小矩阵拼接成大矩阵注意:横拼接:,纵拼接:;,重点,2.6标准数组生成函数和数组操作函数,2.数组操作函数cat把相同大小的若干数组串接成高维diag提取对角元素,或生成对角阵flipud上下交换fliplr左右交换kronKronecker乘法以上指令只适用于二维数组,2.6标准数组生成函数和数组操作函数,repmat按指定的行数列数铺放模块数组reshape改变行数列数,元素数不变,2.7数组构作技法综合,1.数组的扩展赋值扩展法A=reshape(1:9,3,3)%创建33数组AA=147258369,2.7数组构作技法综合,A(5,5)=111%扩展为55数组。扩展部分除(5,5)元素为111外,其余均为0A=147002580036900000000000111,2.7数组构作技法综合,A(:,6)=222%标量对子数组赋值,扩展为56数组A=147002222580022236900222000002220000111222,2.7数组构作技法综合,AA=147002221470022225800222258002223690022236900222000002220000022200001112220000111222,指令repmat中,A为模块数组,1表示行方向上铺一块,2表示列方向上铺两块。,多次寻访扩展法AA=A(:,1:6,1:6)%相当于指令repmat(A,1,2),2.7数组构作技法综合,合成扩展法B=ones(2,6)%创建26全1数组B=111111111111,2.7数组构作技法综合,AB_r=A;B%行数扩展合成AB_r=147002222580022236900222000002220000111222111111111111,2.7数组构作技法综合,AB_c=A,B(:,1:5)%列数扩展合成AB_c=1470022211258002221136900222110000022211000011122211两者的差别主要体现在;和,上。,2.7数组构作技法综合,2.单下标寻访和reshape指令演示clear%清除内存变量A=reshape(1:16,2,8)%变一维数组成28数组A=13579111315246810121416,2.7数组构作技法综合,reshape(A,4,4)%变28数组为44数组ans=15913261014371115481216,2.7数组构作技法综合,s=13689111416;%定义“单下标”数组A(s)=0%利用“单下标”数组对A的元素重新赋值A=00570013152400101200,3、通过冒号操作符裁剪数组冒号操作符实现裁剪功能时,其意义和冒号用于创建一维数组的意义是一样的,都是实现一个递变效果。一般的裁剪语法:B=A(a1,a2,a3,b1,b2,b3,)表示提取数组A的a1,a2,a3,等行,b1,b2,b3,等列的元素组成子数组B。A=magic(8)A=64236160675795554121351501617474620214342244026273736303133323435292838392541232244451918484915145253111056858595462631,2.9数组构作技法综合,A(1:2:5,3:7)%提取数组A的第1、3、5行,3到7列的所有元素ans=361606746202143423529283839,如果某一位置上不是用数字表示,而是用冒号代替,表示这一位置可以取得所有值。例如:A(2,:)%提取数组A的第2行所有元素ans=955541213515016,A(:,3:2:7)%提取数组A的第3,5,7列所有元素ans=360754135046214227363135283922451814531059463,A(321,658)%提取指定行列元素,注意新提取元素的顺序ans=43212451131666057A(50:60)%单下标索引裁剪数组,提取第50到第60号元素ans=5042313918106357162433,4、数组元素删除通过部分的删除也可以实现数组的裁剪。但注意,进行删除时,索引结果必须是完整的行或列,而不能是数组内部的块或单元格。,2.9数组构作技法综合,A(1:3:8,:)=%即把第1、4、7行所有元素裁剪A=38477918272946681726353713152433424442123324143312,A(:,356)=A=38479294661737131533421234112,2.7数组构作技法综合,4.逻辑函数的运用演示randn(state,1),R=randn(3,6)%创建正态随机阵R=0.86440.8735-1.10270.1684-0.5523-0.61490.0942-0.43800.3962-1.9654-0.8197-0.2546-0.8519-0.4297-0.9649-0.74431.1091-0.2698L=abs(R)1.5%不等式条件运算,结果给出逻辑数组L=000100111101010001,R(L)=0%“逻辑1”对应的元素赋0值R=0.86440.8735-1.10270-0.5523-0.61490000-0.81970-0.85190-0.9649-0.74431.10910,2.7数组构作技法综合,s=(find(R=0)%利用find获得符合关系等式条件的元素“单下标”s=256810111718R(s)=111%利用“单下标”定位赋值R=0.86440.8735-1.1027111.0000-0.5523-0.6149111.0000111.0000111.0000111.0000-0.8197111.0000-0.8519111.0000-0.9649-0.74431.1091111.0000,2.7数组构作技法综合,ii,jj=find(RA=magic(4)A=16231351110897612414151C=ones(4,2)C=11111111,B=eye(4)B=1000010000100001,B-Aans=-15-2-3-13-5-10-10-8-9-7-5-12-4-14-150,B+Aans=17231351210897712414152,A*Cans=3434343434343434,C*Cans=2222222222222222,(C*C)3ans=128128128128128128128128128128128128128128128128,矩阵的右除、左除,MATLAB的基本处理单元是复数矩阵(标量是一个1*1的矩阵)。而在线性代数理论中没有除法运算。所以定义了除法为乘法的逆运算。注意:因为矩阵乘法不满足交换律,即一般A*BB*A,所以除法要考虑“右除”、“左除”。,矩阵除法A/B相当于A*inv(B)或A*pinv(B)AB相当于inv(A)*B或pinv(A)*B其中inv是数组求逆函数,仅适用于行列数相同的方形数组(线性代数中,称为方阵);,A=356;214;256A=356214256,B=randn(3)B=-0.43260.28771.1892-1.6656-1.1465-0.03760.12531.19090.3273,A/Bans=4.9369-3.08030.04063.9586-2.4124-2.43894.7620-2.38060.7564,A*inv(B)ans=4.9369-3.08030.04063.9586-2.4124-2.43894.7620-2.38060.7564,ABans=-0.5579-0.90320.86190.59020.57350.3559-0.28500.0216-0.5293,pinv(A)*Bans=-0.5579-0.90320.86190.59020.57350.3559-0.28500.0216-0.5293,2点运算在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.和.。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。,A=magic(4)A=16231351110897612414151,B=ones(4)+4*eye(4)B=5111151111511115,A.*Bans=802313555108973012414155,B.*Aans=802313555108973012414155,B.3ans=125111112511111251111125,A.Bans=0.31250.50000.33330.07690.20000.45450.10000.12500.11110.14290.83330.08330.25000.07140.06675.0000,A./Bans=3.20002.00003.000013.00005.00002.200010.00008.00009.00007.00001.200012.00004.000014.000015.00000.2000,点乘元素对元素乘法叉乘矩阵对矩阵乘法对比举例,2.9数组运算,矩阵运算有明确、严格的数学规则数组运算是MATLAB定义的规则目的:数据管理方便、操作简单、指令形式自然、执行计算有效缺乏严谨的数学推理,本身仍在完善影响随MATLAB而扩大,2.9数组运算,运算指令对照A.非共轭转置A共轭转置A.n各元素n次幂An方阵的n次幂A.*B对应元素相乘A*B矩阵相乘A./BA元素除以B元素A/BA右除BB.A同上BAA左除Bexp(A)对各元素求幂expm(A)矩阵指数log(A)对各元素求对数logm(A)矩阵对数sqrt(A)对各元素求方根sqrtm(A)矩阵平方根,2.9数组运算和矩阵运算,A=s标量赋给A的每个元素A#B对应元素关系运算AB对应元素逻辑运算数组“除、乘方、转置”运算符前的点不能遗漏。“乘、除、乘方、三角和指数函数”时,两种运算有区别。关系运算和逻辑运算仅对数组进行。,2.9数组运算和矩阵运算,两种不同转置的比较clear;A=zeros(2,3);A(:)=1:6;%全元素赋值法A=A*(1+i)%运用标量与数组乘产生复数矩阵A_A=A.%数组转置,即非共轭转置A_M=A%矩阵转置,即共轭转置A=1.0000+1.0000i3.0000+3.0000i5.0000+5.0000i2.0000+2.0000i4.0000+4.0000i6.0000+6.0000iA_A=1.0000+1.0000i2.0000+2.0000i3.0000+3.0000i4.0000+4.0000i5.0000+5.0000i6.0000+6.0000iA_M=1.0000-1.0000i2.0000-2.0000i3.0000-3.0000i4.0000-4.0000i5.0000-5.0000i6.0000-6.0000i,2.10关系操作和逻辑操作,MATLAB的约定:任何非0数认为是“逻辑真”只有0作为“逻辑假”关系表达式和逻辑表达式的计算结果是“逻辑数组(LogicalArray)”。1表示“真”,0表示“假”逻辑数组是一种特殊的数值数组数值类的有关操作和函数同样适用,1、关系运算,:大于=:大于等于=:等于=:不等于注意:两个矩阵的尺寸应相同分别比较对应位置上的元素比较结果为1或0,重点,2.10关系操作和逻辑操作,2.10关系操作和逻辑操作,关系运算示例A=1:9,B=10-A,r0=(Api/3%关系逻辑运算生成逻辑数组w,2.10关系操作和逻辑操作,w_n=w;%逻辑操作生成逻辑数组w相反的逻辑数组w_nz2=w*sin(pi/3)+w_n.*z1;%通过逻辑数组,获得削顶整流半波subplot(1,3,1),plot(t,y,:r),ylabel(y)subplot(1,3,2),plot(t,z1,:r),axis(010-11)subplot(1,3,3),plot(t,z2,-b),axis(010-11),2.10关系操作和逻辑操作,3.关系、逻辑函数MATLAB中能给出“逻辑数组”结果的函数:关系逻辑函数、工作状态函数特殊数据判断函数、数据类型判断函数等关系逻辑函数all(A)isequal(A,B)any(A)xor(A,B),逻辑运算函数,MATLAB给出了许多非常方便的函数供用户对数据的条件进行检测。灵活应用这些函数,可大大提高编程效率。xor()对矩阵元素进行逻辑异或all()测试矩阵中是否全为非零元素any()测试矩阵中是否含有非零元素find()找出矩阵中非零元素及其下标isnan(x)测试矩阵是否含有无效元素,1)异或函数C=xor(A,B),重点,A=rand(2,4),A=0.95010.60680.89130.45650.23110.48600.76210.0185,B=A0.5B=11100010,C=A0.6%获取ASCII码w=find(s=a%小写改为大写(大小写字母ASCII值差32)char(ascii_s)%把新的ASCII码翻成字符,lower()%大写改为小写upper()%小写改为大写,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!