第三讲MATLAB编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第三讲MATLAB编程编程的基本原理:数据输入(Input)数据处理(算法)数据输出(Output)1.1MATLAB数据类型MATLAB的主要数据类型是数组类型,其中的每一种类型都以数组为基础,都是从数组派生出来的,MATLAB实际上把每种类型的数据作为数组处理。一般把二维数组称为矩阵,1╳n和n╳1数组称为向量,1╳1数组称为数值。数据类型charnumericcellstruc其它doublesingleint,uintsparsehelpdatatypesDatatypesandstructures.Datatypes(classes)double-Converttodoubleprecision.char-Createcharacterarray(string).logical-Convertnumericvaluestological.cell-Createcellarray.struct-Createorconverttostructurearray.single-Converttosingleprecision.uint8-Converttounsigned8-bitinteger.uint16-Converttounsigned16-bitinteger.uint32-Converttounsigned32-bitinteger.uint64-Converttounsigned64-bitinteger.int8-Converttosigned8-bitinteger.int16-Converttosigned16-bitinteger.int32-Converttosigned32-bitinteger.int64-Converttosigned64-bitinteger.2inline-ConstructINLINEobject.function_handle-Functionhandlearray.javaArray-ConstructaJavaarray.javaMethod-InvokeaJavamethod.javaObject-InvokeaJavaobjectconstructor.1.2数组输入与寻访1一维数组的创建和寻访(1)逐个元素输入法这是最简单,但又最通用的构造方法。以下指令就是一例。x=[2pi/2sqrt(3)3+5i]x=2.00001.57081.73213.0000+5.0000i(2)冒号生成法这是通过“步长“设定,生成一维“行“数组的方法。该方法的通用格式是;x=a:inc:b[说明]a是数组的第一个元素,inc是采样点之间的间隔,即步长。若(b-a)是inc的整数倍,则所生成的数组的最后一个元素等于b,否则小于b。inc,b之间必须用冒号“;“分隔。注意:该冒号必须在英文状态下产生。中文状态下的冒号将导致MATLAB操作错误!inc可以省略。省略时,默认其取值为1,即认为inc=1。inc可以取正数或负数。但要注意:inc取正时,要保证ab;而inc取负时,要保证ab。x=1:3:11x=14710(3)定数线性采样法该法在设定的“总点数“下,均匀采样生成一维“行“数组。该法的通用格式是:x=linspace(a,b,n)[说明]a,b分别是生成数组的第一个和最后一个元素。n是采样总点数。该指令生成数组。该指令的作用与x=a:(b-a)/(n-1):b相同。x=linspace(1,11,4)x=1.00004.33337.666711.0000(4)定数对数采样法该法在设定的“总点数“下,经“常用对数“采样生成一维“行“数组。通用格式是:x=logspace(a,b,n)[说明]生成数组的第一个元素值为10a,最后一个元素值是10b。n是采样总点数。该指令生成(1×n)数组。在信号处理和控制学科中,常用该指令去产生频率响应的频率自变量采样点。3x=logspace(1,4,4)x=10100100010000一维数组的子数组寻访和赋值例1子数组的寻访(Address)。rand('state',0)%把均匀分布伪随机发生器置为0状态x=rand(1,5)%产生)51(的均布随机数组x=0.95010.23110.60680.48600.8913x(3)%寻访数组x的第三个元素。ans=0.6068x([125])%寻访数组x的第一、二、五个元素组成的子数组。ans=0.95010.23110.8913x(1:3)%寻访前三个元素组成的子数组ans=0.95010.23110.6068x(3:end)%寻访除前2个元素外的全部其他元素。end是最后一个元素的下标。ans=0.60680.48600.8913x(3:-1:1)%由前三个元素倒排构成的子数组ans=0.60680.23110.9501x(find(x0.5))%由大于0.5的元素构成的子数组ans=0.95010.60680.8913x([12344321])%对元素可以重复寻访,使所得数组长度允许大于原数组。ans=Columns1through70.95010.23110.60680.48600.48600.60680.2311Column80.9501[说明]寻访什么样的子数组,取决于数组X(index)中下标index。下标index本身可以是单个正整数或正整数数组,但index中的每个元素的取值必须在闭区间内[1,end]。在此,end是指一维数组的长度,即最大下标。end的这种用法是MATLAB5.x版新增的。例2子数组的赋值(Assign)。x(3)=0%把上例中的第三个元素重新赋值为0x=0.95010.231100.48600.8913x([14])=[11]%把当前x数组的第一、四个元素都赋值为1。4x=1.00000.231101.00000.8913[说明]要保证被重新赋值的子数组的长度与送入的数组长度相同。2二维数组的创建二维数组是由实数或复数排列成矩形而构成的。从数据结构上看,矩阵和二维数组没有什么区别。当二维数组带有线性变换含义时,该二维数组就是矩阵。(1)直接输入法例3在MATLAB环境下,用下面三条指令创建二维数组C。a=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[说明]分号“;“在“[]“方括号内时,它是数组行间的分隔符。分号“;“作为指令后的结束符时,将不在屏幕上显示该指令执行后的结果。例4复数数组的另一种输入方式。M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]CN=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)利用M文件创建和保存数组对于今后经常需要调用的数组,尤其是比较大而复杂的数组,为它专门建立一个M文件是值得的。下面通过一个简单例子来说明这种M文件的创建过程。例5创建和保存数组AM的MyMatrix.m文件。打开文件编辑调试器,并在空白填写框中输入以下内容。5保存此文件,并且文件起名为MyMatrix.m文件以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成于MATLAB内存中。(3)利用ArrayEditor数组编辑器输入数组在指令窗,向一个新变量赋“空”矩阵。x=[];在内存浏览器中,双击该变量,打开数组编辑器。在数组编辑器左上方的行和列栏中定义行和列的大小。在数组元素格输入数据。3数据的保存与获取生成mat数据文件把MATLAB工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件。save—将工作空间中所有的变量存到matlab.mat文件中。savedata—将工作空间中所有的变量存到data.mat文件中。savedataab—将工作空间中a和b变量存到data.mat文件中。调用已生成的mat文件下次运行MATLAB时即可用load指令调用已生成的mat文件。load—打开matlab.mat文件。loaddata—打开data.mat文件。loaddataab—打开data.mat文件中的a,b变量。mat文件是标准的二进制文件,还可以ASCII码形式保存4二维数组元素的标识6前面采用算例方式介绍了一维子数组的寻访和赋值。在介绍二维或更高维数组中子数组的寻访赋值之前,首先要阐述单个元素标识和寻访的三种方式。(1)“全下标”标识经典数学教科书所引述具体矩阵元素时,采用“全下标“标识法,即指出是“第几行第几列“的元素。这种标识方法的优点是:几何概念清楚,引述简单。它在MATLAB的寻访和赋值中最为常用。对于二维数组来说,“全下标“标识由两个下标组成:行下标,列下标。如A(3,5)就表示在二维数组A的“第三行第5列“的元素。(2)“单下标”标识顾名思义,“单下标“标识就是“只用一个下标来指明元素在数组中的位置“。当然这样做,首先要对二维数组的所有元素进行“一维编号“。所谓“一维编号“是:先设想把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列“。然后,自上往下对元素位置进行编号。“单下标“与“全下标“的转换关系:以(m×n)的二维数组A为例,若“全下标“元素位置是“第r行,第c列“,那么相应的“单下标“为l=(c-l)×m+r。MATLAB有两个指令可以实现以上标识方法间的转换。sun2ind据全下标换算出单下标ind2sub据单下标换算出全下标(3)“逻辑1”标识在实际使用中,常会遇到诸如寻找数组中所有大于某值的元素的问题。此时,“逻辑1“标识法就特别得心应手。例6找出数组5311342024A中所有绝对值大于3的元素。A=zeros(2,5);%预生成一个(2*5)全零数组A(:)=-4:5%运用“全元素”赋值法获得AL=abs(A)3%产生与A同维的“0-1”逻辑值数组islogical(L)%判断L是否逻辑值数组。输出若为1,则是。X=A(L)%把L中逻辑值1对应的A元素取出A=-4-2024-3-1135L=1000100001ans=1X=-445[说明]L的元素或是0或是1,它是“逻辑数组“。这种逻辑数组是一种特殊的数据类型。7所谓“逻辑1“标识法是:通过与A同样的大小的逻辑值数组L中“逻辑值1“所在的位置,指示A中元素的位置。例7演示逻辑数组与一般双精度数值数组的关系和区别。逻辑数组与双精度数组的相同之处Num=[1,0,0,0,1;0,0,0,0,1];%产生与L数组外表完全相同的“双精度数组”N_L=Num==L%假如Num与L数值相等,则应得1。c_N=class(Num)%用class指令检查Num的类属c_L=class(L)%用class指令检查L的类属N_L=1111111111c_N=doublec_L=double逻辑数组与一般双精度数组的差别islogical(Num)%检查Num是否属于逻辑数组类Y=A(Num)%试探Num能否象L一样具有标识作用ans=0???Indexintomatrixisnegativeorzero.Seereleasenotesonchangestologicalindices.[说明]该例表明:逻辑数组一方面具有双精度特性,另一方面又区别于一般的双精度数组。逻辑

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功