




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第二讲MATLAB基础知识与数组,介绍课本第一章1.3及第3章,提纲,Matlab入门(数值表示、变量、表达式)数组(教材第3章和附录A),提纲,Matlab入门(数值表示、变量、表达式)数组(教材第3章和附录A),介绍一些基本规定。这里先介绍关于变量的若干规定。,1、数值的记述,MATLAB的数值采用习惯的十进制表示,可以带小数点或负号。以下记述都合法。,3-990.0019.4561.3e-34.5e33,。,2、变量命名规则,变量名、函数名是对字母大小写敏感的。,如变量myvar和MyVar表示两个不同的变量。sin是MATLAB定义的正弦函数名,但SIN,Sin等都不是。,变量名的第一个字符必须是英文字母,其后最多可包含63个字符(英文、数字和下连符)。,如myvar201是合法的变量名。,变量名中不得包含空格、标点、运算符,但可以包含下连符。,如变量名my_var_201是合法的,且读起来更方便。而my,var201由于逗号的分隔,表示的就不是一个变量名。,用户自定义变量或函数名,不能与matlab关键词同名,iskeywordVarName不能与Matlab自用变量名、函数名、文件夹相同existVarName,3、MATLAB默认的预定义变量,在MATLAB中有一些所谓的预定义变量(PredefinedVariable),见下表。每当MATLAB启动,这些变量就被产生。这些变量都有特殊含义和用途。建议:用户在编写命令和程序时,应尽可能不对下表所列预定义变量名重新赋值,以免产生混淆。,表MATLAB中最常用的预定义变量,不是一个数(NotaNumber),如0/0,,虚单元,圆周率,说明,假如用户对表中任何一个预定义变量进行赋值,则那个变量的默认值将被用户新赋的值“临时”覆盖。所谓“临时”是指:假如使用clear命令清除MATLAB内存中的变量,或MATLAB命令窗被关闭后重新启动,那么所有的预定义变量将被重置为默认值,不管这些预定义变量曾被用户赋过什么值。,被0除是允许的。它不会导致程序执行的中断,只是在给出警告信息的同时,用一个特殊名称(如Inf,NaN)记述。这个特殊名称将在以后的计算中以合理的形式发挥作用。,4、运算符和表达式,(1)标量算术运算符在MATLAB中的表达方式,见下表。(3.3节数组和3.4节矩阵),(2)Matlab表达式由已赋值变量、运算符和已经存在的函数组成。可通过等号“=”向某个变量赋值。如无等号,结果默认保存在ans变量中,说明,Matlab用“”和”/”分别表示“左除”和“右除”。对标量而言,两者没有区别。对矩阵产生不同影响。(后面详细说明)MATLAB表达式的书写规则与“手写方式”几乎完全相同。表达式按与常规相同的优先级自左至右执行运算。优先级:指数运算级别最高,乘除次之,加减最低。括号改变运算的次序。,5、面向复数设计的运算,MATLAB的所有运算都是定义在复数域上的。这样设计的好处是:在进行运算时,不必像其他程序语言那样把实部、虚部分开处理。为描述复数,虚数单位用预定义变量i或j表示。,【例】,复数,表达,,及计算,。,本例演示:正确的复数输入法;涉及复数表示方式的基本命令。,1)经典教科书的直角坐标表示法,z1=4+3i%合法,但建议少用或不用,z1=4.0000+3.0000i,在这种书写格式中,3i是一个完整的虚数,在3和i之间不许“空格”存在,2)采用运算符构成的直角坐标表示法和极坐标表示法,z2=1+2*i%运算符构成的直角坐标表示法z3=2*exp(i*pi/6)%运算符构成的极坐标表示法z=z1*z2/z3,1.8840+5.2631i,z2=,1.0000+2.0000i,z3=,z=,1.7321+1.0000i,运行结果,3)复数的实虚部、模和幅角计算,real_z=real(z),image_z=imag(z),magnitude_z=abs(z),angle_z_radian=angle(z)%弧度单位,angle_z_degree=angle(z)*180/pi%度数单位,【例】,图示复数,本例演示:MATLAB的运算在复数域上进行;命令后“分号”的作用;复数加法的几何意义;展示MATLAB的可视化能力。,的和(下图)。,z1=4+3*i;z2=1+2*i;z12=z1+z2%以下用于绘图clf,holdonplot(0,z1,z12,-b,LineWidth,3)plot(0,z12,-r,LineWidth,3)plot(z1,z12,ob,MarkerSize,8)holdoff,gridon,axisequalaxis(0,6,0,6)text(3.5,2.3,z1)text(5,4.5,z2)text(2.5,3.5,z12)xlabel(real)ylabel(image)shg,%在一个物理行中,允许输入多条命令。%但各命令间要用“分号”或“逗号”分开。%命令后采用“分号”,使运算结果不显示。,%clf清空图形窗。逗号用来分隔两个命令。,【例】,用MATLAB计算能得到2吗?,1)直接计算时,得到处于第一象限的方根。,a=-8;r_a=a(1/3)%求3次根,%先构造一个多项式,p=1,0,0,-a;%p是多项式,3)图形表示,MR=abs(R(1);%计算复根的模t=0:pi/20:2*pi;%产生参变量在0到2*pi间的一组采样点x=MR*sin(t);y=MR*cos(t);plot(x,y,b:),gridon%画一个半径为R的圆%注意“英文状态逗号”在不同位置的作用holdonplot(R(2),.,MarkerSize,30,Color,r)%画第一象限的方根plot(R(1,3),o,MarkerSize,15,Color,b)%画另两个方根axis(-3,3,-3,3),axissquare%保证屏幕显示呈真圆holdoff,注:MarkerSize图形对象属性,点大小square-轴属性为方形,说明,本例有助于理解MATLAB的计算特点。,对复数进行方根运算时,MATLAB只给出处于“第一象限”的那个根,运算只返还一个“主解”。要得复数的全部方根,必须专门编写程序。,6、面向数组设计的运算,在MATLAB中,标量数据被看作的数组(Array)数据。所有的数据都被存放在适当大小的数组中。为加快计算速度(运算的向量化处理),MATLAB对以数组形式存储的数据设计了两种基本运算:一种是所谓的数组运算;另一种是所谓的矩阵运算。在此仅以算例展示MATLAB的计算特点,在后续的课程中更详细的叙述。,【例】,AR=1,3;2,4,AI=5,76,8,说明,在MATLAB中,不必事先对数组维数及大小做任何说明,内存将自动配置。,二维数组输入的三大要素:数组标识符“”;元素分隔符空格或逗号“,”;数组行间分隔符分号“;”或“回车键”。,MATLAB对字母大小写是敏感的。比如本例中的数组赋给了变量AR,而不是Ar,aR,或ar。,在全部键入一个命令行内容后,必须按下Enter键,该命令才会被执行。,【例】,本例演示:复数数组的生成;MATLAB命令对数组元素“并行操作”的实质。,1)创建复数数组,AR=1,3;2,4;AI=5,7;6,8;A=AR-AI*i%形成复数矩阵,2)求复数数组的实部和虚部,A_real=real(A)A_image=imag(A),3)求复数数组中各元素的模和幅角循环法(笨拙!),form=1:2forn=1:2Am1(m,n)=abs(A(m,n);Aa1(m,n)=angle(A(m,n)*180/pi;%以度为单位计算幅角endendAm1,Aa1,4)求复数数组中各元素的模和幅角直接法,Am2=abs(A)Aa2=angle(A)*180/pi,说明,函数real,imag,abs,angle是同时、并行地作用于数组的每个元素。对4个元素运算所需的时间大致与对单个元素所需时间相同。这有利于运算速度的提高。这是“向量化”运算的一种形式。,本例给出了循环法求各元素模和幅角的命令。这是很笨拙的计算方法。对于MATLAB以外的许多编程语言来说,可能不得不采用“循环”处理方式来解本例。记住:对于MATLAB来说,应该尽量摒弃“循环”处理,而采用“向量化”处理方式。,【例】,画出衰减振荡曲线,,,,的取值范围是,t=0:pi/50:4*pi;%定义自变量t的取值数组y=exp(-t/3).*sin(3*t);%计算与自变量相应的y数组。plot(t,y,-r,LineWidth,2)%绘制曲线axis(0,4*pi,-1,1)xlabel(t),ylabel(y),注意:乘法符前面的小黑点。,乘法符前面的小黑点,称为点乘,对于矩阵的点乘,即为对应元素的乘法,例如:,A=A1,A2,A3,A4;B=B1,B2,B3,B4C=A.*B=A1*B1,A2*B2,A3*B3,A4*B4,说明,本例第二条命令中的“.*”符号表示乘法是在两个数组相同位置上的元素间进行的。Matlab中把这种乘法称为“数组乘”或简称“点乘”。数组乘的引入,不但使得程序简洁自然,而且避免了耗费机时的“循环计算”。关于数组运算的详细叙述以后进行。,本例第二条命令是典型的“向量化”处理形式。建议同学们,只要可能,应尽量采用“向量化”运算形式。,【例】,复数矩阵,的生成,既计算矩阵A,B的乘积,本例演示:MATLAB矩阵运算命令的简捷性。,A=1-5*i,3-7i;2-6*i,4-8*i%复数数组的又一种输入方式B=3+2i,2+6i;5+3*i,4-2*i%注意标点符号的作用C=A*B%矩阵乘法,说明,当数组被赋予“变换”属性时,二维数组就被称为矩阵。只有当两个矩阵的“内维大小相等”时,矩阵乘法才能进行。本例中,矩阵A的列数与矩阵B的行数相等,所以可以进行A乘B。,从表达方式看,“矩阵相乘”的命令格式与“标量相乘”命令格式一样。在其他编程语言中,矩阵乘法不得不依赖“循环”进行。,Matlab之所以能把矩阵运算表达得像标准“线性代数”那样简洁易读、自然流畅,那是由于Matlab的设计者采用了“面向对象”编程技术。,提纲,Matlab入门(数值表示、变量、表达式)数组(教材第3章和附录A),Matlab的数据保存和传输的基本单位不是标量,而是复数阵列型数据,即数组Matlab算数、关系、逻辑运算的基本运算单元也不是标量,而是数组Matlab提供的许多M函数的基本作用单元也不是标量也是数组,数组运算及数组化编程,数组及其运算在Matlab是最基本元素,1数组、结构,一个个标量数据被组织成矩形或长方体型的阵列集合,称为数组矩阵:由mn个标数组成的排成m行n列的一个矩形的数表,其中00矩阵为空矩阵()。数表中第i(1im)行第j(1jn)列的数据称为矩阵元素二维数组标量:11的矩阵,即为只含一个数的矩阵。向量:1n或n1的矩阵,即只有一行的或者一列的矩阵。只有一行的矩阵称为行向量,只有一列的矩阵称为列向量。数表中第i(1in)个数据称为向量元素。更一般数组是矩阵的延伸,一般指多维数组,其中标量、向量和矩阵都是数组的特例。,获取数组结构参数的M命令,Nd=ndims(A)维度数目S=size(A)维度规模Snd=size(A,nd)某维度规模L=length(A)长度Ne=numel(A)总数目,2一维数组的创建和寻访,创建:(1)逐个元素输入法x=2pi/2sqrt(3)3+5ix=2,pi/2,sqrt(3),3+5i(2)冒号生成法(x=a:inc:b)x=1:2:10;y=1:100;z=100:-3:1;(3)线性(或对数)定点法x=linspace(a,b,n)(等差)同x=a:(b-a)/(n-1):bx=logspace(a,b,n)(等比)%n为数组长度例:x=linspace(1,7,5)访问:x(3),x(1,35),x(1:3),x(4:end),x(find(x4)(4)函数生成法例:ones(1,6),3.二维数组的创建和寻访,(1)小规模数组直接创建:A=23;5,9;(2)中规模数组用数组编辑器或文件创建(3)用matlab函数创建数组rand/randn均匀/正态分布随机数组eye单位数组zeros全部元素都为0的数组ones全部元素都为1的数组diag对角数组空数组matlab允许输入数组,当一项操作无结果时,返回空数组。,(1)按址寻访全下标法A(r,c)它由A的“r指定行”和“c指定列”上的元素组成A(r,:)它由A的“r指定行”和“全部列”上的元素组成A(:,c)它由A的“全部行”和“c指定列”上的元素组成A(1:3,c),A(1,3,c)B=11,12,13,14;21,22,23,24;31,32,33,34;,单下标法A(:)“单下标全元素”寻访,由A的各列按自左到右的次序,首位相接而生成“一维长列”数组A(s)“单下标”寻访,生成“s指的”一维数组,s若是“行数组”(或“列数组”),则A(s)就是长度相同的“行数组”(或“列数组”),逻辑标识法A(L)“逻辑1”寻访,生成“一维”列数组:由与A同样大小的“逻辑数组”L中的“1”元素选出A的对应元素;按“单下标”次序排成长列组成,数组操作技法综合变维a=1:12;b=reshape(a,3,4)抽取diag(c):抽取主对角线元素成列向量;diag(diag(c):抽取主对角线元素成对角阵扩展B=A,AC=A;A%要维数一致,“非数”和“空”数组(课本3.3.3P114)非数该非数在MATLAB中NaN或nan记述。根据IEEE数学规范,NaN具有以下性质:NaN参与运算所得的结果也是NaN,具有传递性非数没有“大小”概念,因此不能比较两个非数的大小非数的功用真实记述的运算后果避免可能因运算而造成程序执行中断在测量数据处理中,可以用来标识非正常点在数据可视化中,用来裁剪图形,运算的后果。,a=0/0,b=0*log(0),c=inf-infa=NaNb=NaNc=NaNclass(a),isnan(a)ans=doubleans=1R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN;LR=isnan(R)ri,ci=find(LR)%结果第2行3列,第1行5列元素为NaN,例:“非数”数组算例(非数不能用=),a=,b=ones(2,0),c=zeros(4,0,2)a=b=Emptymatrix:2-by-0c=Emptyarray:4-by-0-by-2class(a),isnumeric(a),isempty(a),whicha,size(a)ans=doubleans=1ans=1aisavariable.ans=00reshape(-4:5,2,5),ans(:,2,4)=ans=-4-2024-3-1135ans=-402-313,例:“空”数组算例,3.数组运算和矩阵运算(课本3.33.4)采用“数组运算”模式处理那些借助循环而反复执行的标量运算。向量化运算采用向量或矩阵运算模式去执行那些传统上靠多重循环标量运算完成的矩阵计算,(1)两个同维同大小的(mn)数组A=aijmn和B=bijmn的算术运算结果为C=cijmn,且cij=aij#bij(2)设标量a和数组B=bijmn进行算术运算的结果是C=cijmn,cij=a#bij(3)函数f()的数组运算规则是指“该函数对数组的逐个元素起作用”。该表述的数学含义是:对于(mn)的数组,数组运算,运算符,课本的表3.3-3P114,几点需要注意的:需要避免数组运算和矩阵运算的混淆特别注意:数组运算程序表达算符.(英文状态下的小黑点)数组运算若在两个数组间见进行,那么这两个数组必须维数大小相同但可准许a-.B和a+.B的形式出现,且a-B和a+B含义相同注意左除右除5/10=0.5510=2,aba,b两数组必须有相同的行和列,相应元素相乘。a*b满足a矩阵的行数与b矩阵列数相等,矩阵乘法a=123;456;789;b=246;135;7910;a.*ba*bans=ans=281825374641530558510949729085133172,例:数组与矩阵乘法,表3.3-1,表3.2-3,数组化编程假如把标量看做“单件产品”,那么标量运算相当于“产品的单件生产”,这是效率低下的生成组织方式。把大量的“单件产品”组织在“流水线”加工,可以大大提高效率。这种思想程序中的体现,就是“向量化编程“。在MATLAB中,若想达到向量化编程目的,就要尽量少地采用标量运算表达式,且尽可能使用数组/矩阵运算指令替代原先那些”包含标量运算表达式的循环体“。向量化程序不但可读性好,而且执行速度快。,【例】,欧姆定律:,其中r,u,i分别是电阻、电压、电流。验证实验:根据电阻两端施加的电压,测量电阻中流过的电流,然后根据测得的电压、电流计算平均电阻值。(测得的电压电流具体数据见程序)。,(1)非向量化编程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:Lr(k)=vr(k)/ir(k);endsr=0;fork=1:Lsr=sr+r(k);endrm=sr/Lrm=30.5247,(2)向量化编程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;r=vr./irrm=mean(r)r=Columns1through831.785730.000030.900029.448330.678029.883730.066930.8171Columns9through1031.493530.1739rm=30.5247,下去可以参考书上3.3-3,说明:只要知道“数组除”的含义和算符,很容易写出向量化程序。尽量克服在C语言中养成的编程习惯,熟悉“数组运算符”。尽可能的熟悉MATLAB自带的程序,质量高,可读性好,【例】,t=-3*pi:pi/10:3*pi;%y=sin(t)./t;subplot(1,2,1),plot(t,y),axis(-9,9,-0.5,1.2),xlabel(t),ylabel(y),title(残缺图形),tt=t+(t=0)*eps;yy=sin(tt)./tt;subplot(1,2,2),plot(tt,yy),axis(-9,9,-0.5,1.2)xlabel(tt),ylabel(yy),title(正确图形),【例】,functiony=exm030303_2(x)%exm030303_2L1=xa=Thisisanexampleascii_a=double(a)w=find(a=aw=3;t=0:0.01:10;y=exp(-a*t).*sin(w*t);y_max,i_max=max(y);%得到函数最大值和对应t的下标t_text=t=,num2str(t(i_max);y_text=y=,num2str(y_max);max_text=char(maximum,t_text,y_text);%排3行tit=y=exp(-,num2str(a),t)*sin(,num2str(w),t)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政工程实践运用试题及答案
- 小学数学教学由“1”到多 由多返“1”
- 合作经济与可持续发展试题及答案
- 艺术创作与批评技能测试卷
- 工程经济的创新思维探讨试题及答案
- 网络教育在线教育平台与课程资源开发
- 心理学社会认知专题知识梳理
- 村民合作参与农田养殖项目协议书
- 化学工程与工艺实践应用题
- 干货满满的中级经济师试题和答案
- 骨质疏松用药治疗
- 2024信息安全意识培训课件完整版含内容
- 《炎症与冠心病》课件
- 2024国家电网公司(第二批)招聘国家电网公司华北分部管理单位遴选500模拟题附带答案详解
- 《汽车灯具的标准》课件
- 一例糖尿病酮中毒个案护理
- GB/T 18601-2024天然花岗石建筑板材
- 第6课 全球航路的开辟 说课稿 -2023-2024学年高一下学期统编版(2019)必修中外历史纲要下册
- 融资融券业务流程详解
- (新版)抄表核算收费员(高级工)技能等级认定考试题库(含答案)
- 2024年高考真题-生物(黑吉辽卷) 含解析
评论
0/150
提交评论