关闭

关闭

关闭

封号提示

内容

首页 Matlab经典教程——从入门到精通.pdf

Matlab经典教程——从入门到精通.pdf

Matlab经典教程——从入门到精通.pdf

上传者: 张晶1989 2017-09-07 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《Matlab经典教程——从入门到精通pdf》,可适用于IT/计算机领域,主题内容包含第一章基础准备及入门本章有两个目的:一是讲述MATLAB正常运行所必须具备的基础条件二是简明系统地介绍高度集成的Desktop操作桌面的功能和使用方符等。

第一章基础准备及入门本章有两个目的:一是讲述MATLAB正常运行所必须具备的基础条件二是简明系统地介绍高度集成的Desktop操作桌面的功能和使用方法。本章的前两节分别讲述:MATLAB的正确安装方法和MATLAB环境的启动。因为指令窗是MATLAB最重要的操作界面所以本章用第、两节以最简单通俗的叙述、算例讲述指令窗的基本操作方法和规则。这部分内容几乎对MATLAB各种版本都适用。MATLABx不同于其前版本的最突出之处是:向用户提供前所未有的、成系列的交互式工作界面。了解、熟悉和掌握这些交互界面的基本功能和操作方法将使新老用户能事半功倍地利用MATLAB去完成各种学习和研究。为此本章特设几节用于专门介绍最常用的交互界面:历史指令窗、当前目录浏览器、工作空间浏览器、内存数组编辑器、交互界面分类目录窗、M文件编辑调试器、及帮助导航浏览器。本章是根据MATLAB版编写的但大部分内容也适用于其他x版。MATLAB的安装和内容选择图Desktop操作桌面的启动MATLAB的启动Desktop操作桌面简介一操作桌面的缺省外貌图二通用操作界面CommandWindow运行入门CommandWindow指令窗简介图最简单的计算器使用法【例】求)(divideminustimes的算术运算结果。()用键盘在MATLAB指令窗中输入以下内容(*())^()在上述表达式输入完成后按【Enter】键该就指令被执行。()在指令执行后MATLAB指令窗中将显示以下结果。ans=【例】简单矩阵=A的输入步骤。()在键盘上输入下列内容A=,,,,,,()按【Enter】键指令被执行。()在指令执行后MATLAB指令窗中将显示以下结果:A=【例】矩阵的分行输入。A=,,,,,,A=【例】指令的续行输入S=S=数值、变量和表达式一数值的记述二变量命名规则三MATLAB默认的预定义变量四运算符和表达式五复数和复数矩阵【例】复数ieziziz,,pi===表达及计算zzzz=。()z=iz=i()z=*iz=*exp(i*pi)z=z*zzz=iz=iz=i【例】复数矩阵的生成及运算A=,,,,*iB=i,i*i,*iC=A*BA=iiiiB=iiiiC=e*ii【例】求上例复数矩阵C的实部、虚部、模和相角。Creal=real(C)Cimag=imag(C)Cmagnitude=abs(C)Cphase=angle(C)*pi以度为单位计算相角Creal=Cimag=Cmagnitude=Cphase=【例】用MATLAB计算minus能得到ndash吗?()a=r=a^()r=i()m=,,R=abs(a)^()Theta=(angle(a)*pi*m)rrr=R*exp(i*Theta)rrr=iii()t=:pi:*pix=R*sin(t)y=R*cos(t)plot(x,y,#b:#),gridholdonplot(rrr(),##,#MarkerSize#,,#Color#,#r#)plot(rrr(,),#o#,#MarkerSize#,,#Color#,#b#)axis(,,,),axissquareholdoff图计算结果的图形表示【例】画出衰减振荡曲线teytsinminus=及其它的包络线teyminus=。t的取值范围是,pi。(图)t=:pi:*piy=exp(t)y=exp(t)*sin(*t)plot(t,y,#r#,t,y,#:b#,t,y,#:b#)grid图【例】画出)sin(yxyxz=所表示的三维曲面(图)。yx,的取值范围是,minus。clearx=::y=x#X=ones(size(y))*xY=y*ones(size(x))R=sqrt(X^Y^)epsZ=sin(R)Rsurf(X,Y,Z)colormap(cool)xlabel(#x#),ylabel(#y#),zlabel(#z#)图CommandWindow操作要旨指令窗显示方式的操作一缺省显示方式二显示方式的设置数值计算结果的显示格式指令行中的标点符号指令窗的常用控制指令指令窗中指令行的编辑【例】指令行操作过程示例。CommandHistory和实录指令diaryCommandHistory历史指令窗简介图历史指令行的再运行【例】再运行图所示历史指令窗中的三行指令。图指令窗实录指令diaryCurrentDirectory、路径设置器和文件管理CurrentDirectory当前目录浏览器简介图一用户目录和当前目录设置二借助当前目录浏览器获取M和MAT文件信息【例】从图所示MATLAB缺省桌面开始叙述引出图所示面貌的当前目录浏览器的操作过程。MATLAB的搜索路径MATLAB搜索路径的扩展和修改一何时需要修改搜索路径二利用设置路径对话框修改搜索路径图三利用指令path设置路径WorkspaceBrowser和ArrayEditorWorkspaceBrowser工作空间浏览器简介图现场菜单用于内存变量的查阅和删除一内存变量查阅、删除的指令操作法【例】在指令窗中运用who,whos查阅MATLAB内存变量。whoYourvariablesare:ABnumberDRXYZZyBCDDXYxwhosNameSizeBytesClassAxcellarrayBxstructarrayBnumberxdoublearrayCxsymobjectDxchararrayDDxchararrayRxdoublearrayXxdoublearrayXYZxxdoublearrayYxdoublearrayZxdoublearrayxxdoublearrayyxdoublearrayGrandtotaliselementsusingbytes【例】在指令窗中运用clear指令可以删除内存中的变量。clearBnumberwhoYourvariablesare:ABCDDDRXXYZYZxy二内存变量查阅和删除的现场菜单操作法图【例】通过ldquo工作空间浏览器rdquo的运作采用图形显示内存变量Z。图【例】通过ldquo工作空间浏览器rdquo删除内存变量。ArrayEditor数组编辑器和大数组的输入图数据文件的存取一存取数据文件的指令操作法二通过内存变量浏览器实现数据文件的存取()产生保存全部内存变量的数据文件的操作方法图【例】数据的存取。(假定内存中已经存在变量X,Y,Z)()mkdir(#c:#,#mydir#)cdc:mydirsavesafXYZdirsafmat()clearloadsafZwhoYourvariablesare:ZLaunchPad交互界面分类目录窗图EditorDebugger和脚本编写初步EditorDebuggerM文件编辑调试器简介一编辑调试器的开启图二编辑器使用中的若干注意事项M脚本文件编写初步【例】编写解算例题目的M脚本文件并运行之。操作步骤:帮助系统帮助方式概述一ldquo纯文本rdquo帮助【例】在指令窗中运行help的示例。()helphelpHELPOnlinehelp,displaytextatcommandlineHELP,byitself,listsallprimaryhelptopicsEachprimarytopiccorrespondstoadirectorynameontheMATLABPATH()helpHELPtopics:matlabgeneralGeneralpurposecommandsmatlabopsOperatorsandspecialcharactersmatlablangProgramminglanguageconstructsmatlabelmatElementarymatricesandmatrixmanipulationmatlabelfunElementarymathfunctionsFormorehelpondirectorytopic,typehelptopic()helpelmatElementarymatricesandmatrixmanipulationElementarymatriceszerosZerosarrayonesOnesarrayeyeIdentitymatrix()helpeyeEYEIdentitymatrixEYE(N)istheNbyNidentitymatrixEYE(M,N)orEYE(M,N)isanMbyNmatrixwith#sonthediagonalandzeroselsewhereEYE(SIZE(A))isthesamesizeasASeealsoONES,ZEROS,RAND,RANDN【例】在指令窗中运用lookfor找H行(M函数文件的第一注释行)lookforfourierFFTDiscreteFouriertransformFFTTwodimensionaldiscreteFourierTransformFFTNNdimensionaldiscreteFourierTransformIFFTInversediscreteFouriertransformIFFTTwodimensionalinversediscreteFouriertransformIFFTNNdimensionalinversediscreteFouriertransformXFOURIERGraphicsdemoofFourierseriesexpansionMOTFFTDiscreteFouriertransformMOTIFFTInversediscreteFouriertransformMOTFFTDiscreteFouriertransformMOTIFFTInversediscreteFouriertransformDFTMTXDiscreteFouriertransformmatrixINSTDFFTInversenonstandardDfastFouriertransformNSTDFFTNonstandardDfastFouriertransformFFTQuantizedFastFourierTransformFOURIERFourierintegraltransformIFOURIERInverseFourierintegraltransform二ldquo导航浏览器交互界面rdquo帮助三PDF帮助四其他帮助HelpNavigatorBrowser帮助导航浏览器简介图一Contents帮助文件目录窗【例】通过鼠标操作获得如图所示的界面。二Index帮助索引窗【例】利用Idex搜索fourier这条术语。(注意把本例与例、例比较。)图三Search搜索窗【例】利用ldquoSearchrdquo窗搜索词汇fourier。(注意把本例与例、例比较。)图四Favorites书签窗第二章数值数组及其运算数值数组(NumericArray)和数组运算(ArrayOperations)始终是MATLAB的核心内容。自MATLABx版起由于其ldquo面向对象rdquo的特征这种数值数组(以下简称为数组)成为了MATALB最重要的一种内建数据类型(BuiltinDataType)而数组运算就是定义在这种数据结构上的方法(Method)。本章系统阐述:一、二维数值数组的创建、寻访数组运算和矩阵运算的区别实现数组运算的基本函数多项式的表达、创建和操作常用标准数组生成函数和数组构作技法高维数组的创建、寻访和操作非数NaN、ldquo空rdquo数组概念和应用关系和逻辑操作。顺便指出:()本章所涉内容和方法不仅使用于数值数组而且也将部分地延伸使用于在其他数据结构中。()MATLABx和x版在本章内容上的差异极微。()MATLAB版新增的两种逻辑操作在第节给予介绍。引导【例】绘制函数xxeyminus=在lelex时的曲线。x=::y=x*exp(x)plot(x,y),xlabel(#x#),ylabel(#y#),title(#y=x*exp(x)#)x=ColumnsthroughColumnsthroughy=ColumnsthroughColumnsthroughxyy=x*exp(x)图一维数组的创建和寻访一维数组的创建一维数组的子数组寻访和赋值【例】子数组的寻访(Address)。rand(#state#,)x=rand(,)x=x()ans=x()ans=x(:)ans=x(:end)ans=x(::)ans=x(find(x))ans=x()ans=ColumnsthroughColumn【例】子数组的赋值(Assign)。x()=x=x()=x=二维数组的创建直接输入法【例】在MATLAB环境下用下面三条指令创建二维数组C。a=b=C=,*ai*b,b*sqrt(a)sin(pi),a*b,iC=ii【例】复数数组的另一种输入方式。Mr=,,,,,Mi=,,,,CN=Mri*MiMr=Mi=CN=iiiiii利用M文件创建和保存数组【例】创建和保存数组AM的MyMatrixm文件。()MyMatrixmCreationandpreservationofmatrixAMAM=,,,,,,,,,,,,,,,,,,,,,,,,()()二维数组元素的标识ldquo全下标rdquo标识ldquo单下标rdquo标识ldquo逻辑rdquo标识【例】找出数组minusminusminusminus=A中所有绝对值大于的元素。A=zeros(,)A(:)=:L=abs(A)islogical(L)X=A(L)A=L=ans=X=【例】演示逻辑数组与一般双精度数值数组的关系和区别。(本例在例基础上进行)。()Num=,,,,,,,,NL=Num==LcN=class(Num)cL=class(L)NL=cN=doublecL=double()islogical(Num)Y=A(Num)ans=IndexintomatrixisnegativeorzeroSeereleasenotesonchangestologicalindices二维数组的子数组寻访和赋值【例】不同赋值方式示例。A=zeros(,)A=A(:)=:A=s=A(s)Sa=#A(s)=Saans=Sa=A=A(:,)=ones()A=执行数组运算的常用函数函数数组运算规则的定义:执行数组运算的常用函数【例】演示pow的数组运算性质。A=::A=pow(A)ans=数组运算和矩阵运算数组运算和矩阵运算指令对照汇总【例】两种不同转置的比较clearA=zeros(,)A(:)=:A=A*(i)AA=A#AM=A#A=iiiiiiAA=iiiiiiAM=iiiiii多项式的表达方式及其操作多项式的表达和创建一多项式表达方式的约定二多项式行向量的创建方法【例】求阶方阵A的特征多项式。A=PA=poly(A)PPA=polystr(PA,#s#)PA=PPA=s^s^se【例】由给定根向量求多项式系数向量。R=,*i,*iP=poly(R)PR=real(P)PPR=polystr(PR,#x#)P=PR=PPR=x^x^x多项式运算函数【例】求))()((sssss的ldquo商rdquo及ldquo余rdquo多项式。p=conv(,,,conv(,,,))p=q,r=deconv(p,p)cq=#商多项式为#cr=#余多项式为#disp(cq,polystr(q,#s#)),disp(cr,polystr(r,#s#))商多项式为s余多项式为s^s【例】两种多项式求值指令的差别。S=pascal()P=poly(S)PP=polystr(P,#s#)PA=polyval(P,S)PM=polyvalm(P,S)S=PP=s^s^s^sPA=e*PM=e*【例】部分分式展开。a=,,,,,b=,,,,r,s,k=residue(b,a)r=iiiis=iiiik=标准数组生成函数和数组操作函数标准数组生成函数【例】标准数组产生的演示。ones(,)ans=ones()ans=randn(#state#,)randn(,)ans=D=eye()D=diag(D)ans=diag(diag(D))ans=repmat(D,,)ans=ColumnsthroughColumn数组操作函数【例】diag与reshape的使用演示。a=:A=reshape(a,,)a=ColumnsthroughColumnA=a=diag(A,)a=A=diag(a,)A=【例】数组转置、对称交换和旋转操作后果的对照比较。AA=A#ans=flipud(A)ans=fliplr(A)ans=rot(A)ans=【例】演示Kronecker乘法不具备ldquo可交换规律rdquo。B=eye()C=reshape(:,,)B=C=kron(B,C)ans=kron(C,B)ans=数组构作技法综合【例】数组的扩展。()数组的赋值扩展法A=reshape(:,,)A=A(,)=A=A(:,)=A=()多次寻访扩展法AA=A(:,:,:)AA=()合成扩展法B=ones(,)B=ABr=ABABr=ABc=A,B(:,:)#ABc=【例】提取子数组合成新数组。AA=ABBA=triu(A,)tril(A,)ABBA=AB=A(:,end::)B(,:)AB=【例】单下标寻访和reshape指令演示。clearA=reshape(:,,)A=reshape(A,,)ans=s=A(s)=A=【例】ldquo对列(或行)同加一个数rdquo三种的操作方法。clear,A=reshape(:,,)A=b=Ab=Ab(,:)Ab=Ab=Arepmat(b,,)Ab=Ab=A(:,)b(),A(:,)b(),A(:,)b()Ab=【例】逻辑函数的运用示例。randn(#state#,),R=randn(,)R=L=abs(R)|abs(R)L=R(L)=R=s=(find(R==))#s=R(s)=R=ii,jj=find(R==)disp(ii#),disp(jj#)高维数组高维数组的创建【例】ldquo全下标rdquo元素赋值方式创建高维数组演示。A(,,)=A(:,:,)=A(:,:,)=B(,,:)=:B(:,:,)=B(:,:,)=B(:,:,)=【例】低维数组合成高维数组。clear,A=ones(,)A(:,:,)=ones(,)*A(:,:,)=ones(,)*A(:,:,)=A(:,:,)=A(:,:,)=【例】由函数ones,zeros,rand,randn直接创建标准高维数组的示例。rand(#state#,),rand(,,)ans(:,:,)=ans(:,:,)=ans(:,:,)=【例】借助cat,repmat,reshape等函数构作高维数组。()cat(,ones(,),ones(,)*,ones(,)*)ans(:,:,)=ans(:,:,)=ans(:,:,)=()repmat(ones(,),,,)ans(:,:,)=ans(:,:,)=ans(:,:,)=()reshape(:,,,)ans(:,:,)=ans(:,:,)=ans(:,:,)=高维数组的标识【例】维数、大小和长度clearA=reshape(:,,,)dimA=ndims(A)sizeA=size(A)LA=length(A)dimA=sizeA=LA=高维数组构作和操作函数汇总【例】数组元素对称交换指令flipdim的使用示例。A=reshape(:,,,)A(:,:,)=A(:,:,)=A(:,:,)=flipdim(A,)ans(:,:,)=ans(:,:,)=ans(:,:,)=flipdim(A,)ans(:,:,)=ans(:,:,)=ans(:,:,)=【例】数组的ldquo维序号左移rdquo重组。shiftdim(A,)ans(:,:,)=ans(:,:,)=shiftdim(A,)ans(:,:,)=ans(:,:,)=ans(:,:,)=【例】广义非共轭转置。permute(A,,,)ans(:,:,)=ans(:,:,)=permute(A,,,)ans(:,:,)=ans(:,:,)=ans(:,:,)=【例】ldquo孤维rdquo的撤消和降维。B=cat(,A(:,:,),A(:,:,),A(:,:,))B(:,:,,)=B(:,:,,)=B(:,:,,)=size(B)ans=C=squeeze(B)C(:,:,)=C(:,:,)=C(:,:,)=size(C)ans=【例】赋ldquo空阵rdquo值操作。A=reshape(:,,,)A(:,:,)=A(:,:,)=A(:,:,)=A(:,:,:)=B=AA(:,:,)=A(:,:,)=A(:,:,)=size(A)ans=A=squeeze(A)A=size(B)ans=B(:,,:)=B=Emptyarray:bybyldquo非数rdquo和ldquo空rdquo数组非数NaN【例】非数的产生和性质演示。()a=,b=*log(),c=infinfWarning:Dividebyzeroa=NaNWarning:Logofzerob=NaNc=NaN()*a,sin(a)ans=NaNans=NaN()a==nanans=()a~=nana==bbcans=ans=ans=()class(a)isnan(a)ans=doubleans=【例】非数元素的寻访rand(#state#,)R=rand(,)R(,)=NaNR(,)=NaNR=NaNNaNisnan(R)ans=Linearindex=find(isnan(R))rindex,cindex=indsub(size(R),Linearindex)disp(#rindexcindex#),disp(rindexcindex)Linearindex=rindexcindexldquo空rdquo数组【例】关于ldquo空rdquo数组的算例。()a=,b=ones(,),c=zeros(,),d=eye(,),f=rand(,,,)a=b=Emptymatrix:byc=Emptymatrix:byd=Emptymatrix:byf=Emptyarray:bybyby()class(a)isnumeric(a)isempty(a)ans=doubleans=ans=whichandims(a)size(a)aisavariableans=ans=()bc=b*cbc=b#*cbc=b*c#bc=Emptymatrix:bybc=bc=()a==bans=b==cans=Emptymatrix:bycdans=Emptymatrix:bya==Warning:Futureversionswillreturnemptyforempty==scalarcomparisonsans=a~=Warning:Futureversionswillreturnemptyforempty~=scalarcomparisonsans=()A=reshape(:,,)A=L=Afind(L)L=ans=()A(:,,)=A=关系操作和逻辑操作关系操作【例】关系运算示例。A=:,B=A,r=(A),r=(A==B)A=B=r=r=【例】关系运算运用之一:求近似极限修补图形缺口。t=*pi:pi:*piy=sin(t)ttt=t(t==)*epsyy=sin(tt)ttsubplot(,,),plot(t,y),axis(,,,),xlabel(#t#),ylabel(#y#),title(#残缺图形#)subplot(,,),plot(tt,yy),axis(,,,)xlabel(#t#),ylabel(#yy#),title(#正确图形#)Warning:Dividebyzero图极限处理前后的图形对照逻辑操作【例】逻辑操作示例。注意逻辑运算和关系运算之间的优先级次序。(详见下节的表)A=:L=~(A)L=~AL=~AL=AAL=L=L=L=【例】逻辑操作应用之一:逐段解析函数的计算和表现。本例演示削顶整流正弦半波的计算和图形绘制。t=linspace(,*pi,)y=sin(t)处理方法一:z=((tpi)|(t*pi))*yw=(tpit*pi)(t*pit*pi)wn=~wz=w*sin(pi)wn*zsubplot(,,),plot(t,y,#:r#),ylabel(#y#)subplot(,,),plot(t,z,#:r#),axis()subplot(,,),plot(t,z,#b#),axis()y图处理方法二:z=(y=)*ya=sin(pi)z=(y=a)*a(ya)*zplot(t,y,#:r#)holdonplot(t,z,#b#)xlabel(#t#),ylabel(#z=f(t)#),title(#逐段解析函数#)legend(#y=sin(t)#,#z=f(t)#),holdoff图关系、逻辑函数第三章字符串、元胞和构架数组MATLABx版的内建数据类型(Builtindatatype)就有种以上此外还有许多其他专门设计的类(Class)如符号类、内联函数类、控制工具包中的线性时不变模型类、神经网络类等。就程序设计而言MATLABx版采用了面向对象编程技术。数据和编程的改变使用户能更简捷而自然地解决复杂的计算问题(如符号计算问题、多变量控制系统问题、神经网络问题)。本章内容根据MATLAB编写但绝大部分内容适用于其他MATLABx版本。第二章介绍了数值数组(NumericArray)这是读者比较熟悉的数据类型。本章将集中讲述另外三类数据:字符串数组(CharacterStringArray)、元胞数组(Cellarray)和构架数组(Structurearray)。它们之间的基本差别见表。表四种数据类型基本构成比较表数组类型基本组分组分内涵基本组分占用字节数数值数组元素双精度实数标量或双精度复数标量字符串数组元素字符元胞数组元胞可以存放任何类型、任何大小的数据。不定构架数组构架只有挂接在构架上的ldquo域rdquo才能存放数据。数据可以是任何类型、任何大小。不定字符串数组字符串入门【例】先请读者实际操作本例以体会数值量与字符串的区别。cleara=class(a)as=size(a)a=eans=doubleas=b=#S#class(b)bs=size(b)b=Sans=charbs=whosNameSizeBytesClassaxdoublearrayasxdoublearrayansxchararraybxchararraybsxdoublearrayGrandtotaliselementsusingbytes串数组的属性和标识【例】本例演示:串的基本属性、标识和简单操作。()a=#Thisisanexample#a=Thisisanexample()size(a)ans=()a=a(:)ra=a(end::)a=Thisra=elpmaxenasisihT()asciia=double(a)asciia=ColumnsthroughColumnsthroughchar(asciia)ans=Thisisanexample()w=find(a=#a#a=#z#)asciia(w)=asciia(w)char(asciia)ans=THISISANEXAMPLE()A=#这是一个算例。#As=size(A)A=A()ASCIIA=double(A)As=A=算例ASCIIA=ColumnsthroughColumnchar(ASCIIA)ans=这是一个算例。()b=#Example#####b=Example##()ab=a(:),##,b,##ab=ThisisExample##复杂串数组的创建多行串数组的直接创建【例】多行串数组的直接输入示例。clearS=#Thisstringarray##hasmultiplerows#S=Thisstringarrayhasmultiplerowssize(S)ans=利用串操作函数创建多行串数组【例】演示:用专门函数char,strmat,strvcat创建多行串数组示例。S=char(#Thisstringarray#,#hastworows#)S=ThisstringarrayhastworowsS=strmat(#这#,#字符#,#串数组#,##,#由行组成#)S=这字符串数组由行组成S=strvcat(#这#,#字符#,#串数组#,##,#由行组成#)S=这字符串数组由行组成size(S)ans=转换函数产生数码字符串【例】最常用的数组字符串转换函数intstr,numstr,matstr示例。()A=eye(,)Astr=intstr(A)Astr=()rand(#state#,)B=rand(,)B=numstr(B,)B=()Bstr=matstr(B,)Bstr=Expression=#

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/281
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部