




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章MATLAB语言程序设计根底MATLAB语言的简洁高效性MATLAB语言的科学运算功能MATLAB语言的绘图功能MATLAB庞大的工具箱与模块集MATLAB强大的动态系统仿真功能MATLAB语言是当前国际上自动控制领域的首选计算机语言,也是很多理工科专业最适合的计算机数学语言。通过学习可更深入理解和掌握数学问题的求解思想,提高求解数学问题的能力,为今后其他专业课程的学习提供帮助。MATLAB语言的优势:1本章主要内容MATLAB根本命令简介MATLAB程序设计语言根底根本数学运算MATLAB语言流程控制MATLAB函数的编写二维图形绘制三维图形绘制20初识MATLAB
例1-1绘制正弦曲线和余弦曲线。
x=[0:0.5:360]*pi/180;
plot(x,sin(x),x,cos(x));
例1-2求方程3x4+7x3+9x2-23=0的全部根。
p=[3,7,9,0,-23];
%建立多项式系数向量
x=roots(p)
%求根345例1-3求积分
quad('x.*log(1+x)',0,1)
例1-4求解线性方程组。
a=[2,-3,1;8,3,2;45,1,-9];
b=[4;2;17];
x=inv(a)*b67Mathematica的计算结果-〔比较〕8Mathematica的计算结果-29Mathematica的计算结果-3、410Matlab工作环境界面包含一行标题栏、一行菜单栏、一行工具栏、五个工作窗口和一行注释栏。五个工作窗口分别为:发射台〔LaunchPad〕、工作区〔Workspace〕、命令历史〔CommandHistory〕、当前路径〔CurrentDirectory〕和命令窗口〔CommandWindows〕。历史命令发射台命令窗口
标题栏
菜单栏
常用工具栏
工作区当前路径112.1MATLAB根本命令简介MATLAB通用命令12Matlab常用的窗口帮助命令13help命令直接输入help,MATLAB将列出所有的帮助主题,每个帮助主题对应于MATLAB搜索路径中的一个目录;help后加帮助主题,可获得指定帮助主题的帮助信息;help后加函数名;help后加命令名,将得到指定命令的用法;14demo命令15helpwin命令用于翻开MATLAB的帮助文件窗16lookfor命令允许用户通过完整的或局部关键字来搜索要查找的内容who和whos的作用是列出在MATLAB工作内存中驻留的变量名exist命令用来查找或检查变量和函数的存在性171819怎样获得详尽的帮助信息〔总结〕首先是MATLAB窗口中的help命令,它最常用、最快,往往也是最有效的。给出关键字就能找到相应的说明。Help命令简单易用,但是它要求准确给出关键字,如果记忆不准,就很难找到。这时就应该用第二种方案。HelpDesk:这是MATLAB的HTML格式的帮助文档,有着很好的组织。可以在命令行键入helpdesk,进入“MatlabHelpDesk〞。HelpDesk的搜索可以使用不完全关键字,这样即使遇到记忆模糊的情况也可以很快查到。前面两种方法所得到的帮助信息常常是不够细致的,需要用第三种途径来补充,这就是电子版的使用手册。MATLAB里包含了大量关于MATLAB安装、使用、编程以及各种工具箱等的电子版手册,全部为PDF格式,具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。20远程帮助系统
在MathWorks公司的主页(://)上可以找到很多有用的信息,国内的一些网站也有丰富的信息资源。212.2MATLAB程序设计语言根底MATLAB语言的变量命名规那么是:〔1〕变量名必须是不含空格的单个词;〔2〕变量名区分大小写;〔3〕变量名最多不超过19个字符;〔4〕变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号22变量分类:局部变量和全局变量永久变量〔保存常量〕只能在某一函数体内使用,而不能从其他函数和Matlab工作空间访问的变量,就是局部变量。在几个函数及Matlab函数中都能使用的变量就是全局变量。〔全局变量名应尽可能大写,并由globe声明〕23Matlab内部的每一个数据元素都是用双精度数〔double〕来表示和存储的。变量输出时用户可以用format命令设置或改变输出格式。短格式(Short):1.33330.0000短格式e方式(Shorte):1.3333e+001.2345e-06短格式g方式(Shortg):1.33330.0长格式(Long):1.333333333333330.00000123450000长格式e方式(Longe):1.33333333333333e+001.2345000000000e-06长格式g方式(Longg):1.333333333333330.0000012345银行格式(Bank):1.330.00十六进制格式(Hex):3ff5555555553eb46231abfd71+格式(+):++有理数〔Rational〕:1/32469/200000000024MATLAB的保存常量25数学运算符号及标点符号26〔1〕MATLAB的每条命令后,假设为逗号或无标点符号,那么显示命令的结果;假设命令后为分号,那么禁止显示结果.〔2〕“%〞后面所有文字为注释.〔3〕“...〞表示续行.数学运算符号及标点符号27双精度数值变量IEEE标准,64位(占8字节),11指数位,53数值位和一个符号位
double()函数的转换其他数据类型uint8(),无符号8位整形数据类型,值域为0至255,常用于图像表示和处理。〔节省存储空间,提高处理速度〕int8(),int16(),int32(),uint16(),uint32()数值型数据结构28所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。MathWorks公司以Maple的内核作为符号计算引擎〔Engine〕,依赖Maple已有的函数库,开发了实现符号计算的两个工具箱:根本符号工具箱和扩展符号工具箱。符号型变量数据类型291、sym函数sym函数的主要功能是创立符号变量,以便进行符号运算,也可以用于创立符号表达式或符号矩阵。用sym函数创立符号变量的一般格式为:x=sym(‘x’)其目的是将’x’创立为符号变量,以x作为输出变量名。每次调用该函数,可以定义一个符号变量。〔一〕定义符号变量30【例】作符号计算:a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量31a=sym('a');
%定义‘a’为符号运算量,输出变量名为ab=sym('b');x=sym('x');y=sym('y');[x,y]=solve(a*x-b*y-1,a*x+b*y-5,x,y)
%以a,b为符号常数,x,y为符号变量即可得到方程组的解:x=3/ay=2/b322、syms函数syms函数的功能与sym函数类似。syms函数可以在一个语句中同时定义多个符号变量,其一般格式为:
symsvar_listvar_props例:symsabreal
symscpositive33符号型数值可采用变精度函数求值
vpa(A),或vpa(A,n)>>vpa(pi)ans=>>vpa(pi,60)34字符串型数据:用单引号括起来。多维数组:是矩阵的直接扩展,多个下标。单元数组:将不同类型数据集成到一个变量名下面,用{}表示;例:用A{i,j}可表示单元数组A的第i行,第j列的内容。类与对象:允许用户自己编写包含各种复杂详细的变量,可以定义传递函数。MATLAB支持的其它数据结构35ans=36直接赋值语句
赋值变量=赋值表达式例:>>a=pi^2a=9.8696例:表示矩阵>>B=[1+9i,2+8i,3+7j;4+6j5+5i,6+4i;7+3i,8+2j1i]B=1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i4.0000+6.0000i5.0000+5.0000i6.0000+4.0000i7.0000+3.0000i8.0000+2.0000i0+1.0000iMATLAB的根本语句结构37函数调用语句[返回变量列表]=函数名〔输入变量列表〕例:[a,b,c]=my_fun(d,e,f,c)冒号表达式v=s1:s2:s3该函数生成一个行向量v,其中s1是起始值,s2是步长〔假设省略步长为1〕,s3是最大值。例:用不同的步距生成(0,p)间向量。>>v1=0:0.2:piv1=Columns1through900.20000.40000.60000.80001.00001.20001.40001.6000Columns10through161.80002.00002.20002.40002.60002.80003.000038>>v2=0:-0.1:pi%步距为负,不能生成向量,得出空矩阵v2=Emptymatrix:1-by-0>>v3=0:piv3=0123>>v4=pi:-1:0%逆序排列构成新向量v4=3.14162.14161.14160.1416>>v5=[0:0.4:pi,pi]v5=00.40000.80001.20001.60002.00002.40002.80003.141639MATLAB以矩阵为根本的运算单元,向量和标量作为特殊的矩阵处理:向量看作只有一行或一列的矩阵;标量看作只有一个元素的矩阵。1、矩阵的构造a.直接输入b.利用内部函数产生矩阵c.利用M文件产生矩阵d.从外部数据文件调入矩阵40A=[1,2,3;4,5,6];a.
直接输入直接输入需遵循以下根本规那么:整个矩阵应以“[]〞为首尾,即整个输入矩阵必须包含在方括号中;矩阵中,行与行之间必须用分号“;〞或Enter键〔按Enter键〕符分隔;每行中的元素用逗号“,〞或空格分隔;矩阵中的元素可以是数字或表达式,但表达式中不可包含未知的变量,MATLAB用表达式的值为该位置的矩阵元素赋值。当矩阵中没有任何元素时,该矩阵被称作“空阵〞〔EmptyMatrix〕。41>>A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]
A=
12345678910111213141516利用表达式输入>>B=[1,sqrt(25),9,132,6,10,7*23+sin(pi),7,11,154,abs(-8),12,16]B=1591326101437111548121642由向量构成矩阵向量是组成矩阵的根本元素之一。向量元素需要用方括号括起来。元素之间用空格和逗号分隔生成行向量,用分号隔开生成列向量。可以把行向量看成1n阶矩阵,把列向量看成n1阶矩阵。向量的构造方法:直接输入向量利用冒号生成向量利用linspace/logspace生成向量>>a=[1,2,3,4];>>x=0:0.5:2;%x=logspace(a,b,n)生成有n个元素的行向量x,其元素起点x(1)=10a,终点x(n)=10b。>>b=logspace(0,2,4)b=1.00004.641621.5443100.000043>>xx=00.50001.00001.50002.0000%x=linspace(a,b,n)生成有n个元素的行向量x,其元素值在a、b之间线性分布。>>y=linspace(0,2,7)
y=
00.33330.66671.00001.33331.66672.0000>>z=[-1x3]z=-1.000000.50001.00001.50002.00003.0000>>u=[y;z]u=00.33330.66671.00001.33331.66672.0000-1.000000.50001.00001.50002.00003.000044b.利用内部函数产生矩阵%compan生成x向量的伴随矩阵>>x=[2,4,6,8,10]x=
246810>>compan(x)ans=-2-3-4-51000010000100001%eye生成单位阵>>S=eye(6)S=
100000010000001000000100000010000001%ones生成全部元素为1的矩阵>>ones(3,4)ans=111111111111>>F=5*ones(3)F=555555555%zeros生成全部元素为0的矩阵>>Z=zeros(2,4)Z=00000000%rand生成均匀分布的随机矩阵>>R=rand(4)
R=
0.95010.89130.82140.92180.23110.76210.44470.73820.60680.45650.61540.17630.48600.01850.79190.4057%生成空阵>>K=[]
K=
[]45c.利用M文件产生矩阵A=[1,2,3,4,56,7,8,9,1011,12,13,14,1516,17,18,19,2021,22,23,24,25]46d.从外部数据文件调入矩阵用load命令输入用Import菜单输入47根本语句格式B=A(v1,v2)v1、v2分别表示提取行〔列〕号构成的向量。例:>>A=[1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0]A=1234345656787890>>B1=A(1:2:end,:)%提取全部奇数行、所有列。B1=12345678子矩阵提取48>>B2=A([3,2,1],[2,3,4])%提取3,2,1行、2,3,4列构成子矩阵。A=B2=1234
678345645656782347890>>B3=A(:,end:-1:1)%将A矩阵左右翻转,即最后一列排在最前面。B3=432165438765098749矩阵拆分&子矩阵的提取
(1)利用冒号表达式获得子矩阵
①A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。
②
A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。
5051矩阵表示矩阵转置数学表示(假设A有复数元素,先转置再取各元素共轭复数值,Hermit转置〕MATLAB求解B=A.’C=A’2.3根本数学运算矩阵的代数运算52矩阵加减法
C=A+BD=A-B注意维数是否相等注意其一为标量的情形矩阵乘法数学表示MATLAB表示
C=A*B注意两个矩阵维数相容性
53矩阵除法矩阵左除:AX=B,求XMATLAB求解:X=A\B假设A为非奇异方阵,那么X=A-1B最小二乘解〔假设A不是方阵〕矩阵右除:XA=B,求XMATLAB求解:X=B/A假设A为非奇异方阵,那么X=BA-1最小二乘解〔假设A不是方阵〕54矩阵翻转左右翻转B=fliplr(A)上下翻转C=flipud(A)旋转90o(逆时针〕D=rot90(A)如何旋转180o?>>D=rot180(A)???Undefinedfunctionorvariable'rot180'.>>D=rot90(rot90(A))矩阵乘方A为方阵,求MATLAB实现:F=A^x55点运算--矩阵对应元素的直接运算数学表示:MATLAB实现:C=A.*B例:>>A=[1,2,3;4,5,6;7,8,0];>>B=A.^AB=1427256312546656823543167772161>>C=A.*AC=1491625364964056逻辑变量:当前版本有逻辑变量对double变量来说,非0表示逻辑1逻辑运算〔相应元素间的运算〕与运算A&C或运算A|C非运算~A异或运算xor(A,C)矩阵的逻辑运算57各种允许的比较关系>,>=,<,<=,==,~=,find(),all(),any()例:>>AA=123456780>>find(A>=5),%大于或等于5元素的下标ans=3568矩阵的比较运算58>>[i,j]=find(A>=5);[i,j]%显示行标,列标ans=A=31123224563278023>>all(A>=5)%某列元素全大于或等于5时,相应元素为1,否那么为0。ans=000>>any(A>=5)%某列元素中含有大于或等于5时,相应元素为1,否那么为0。ans=11159解析结果的化简与变换MATLAB实现:s1=simple(s)从各种方法中自动选择最简格式[s1,how]=simple(s)化简并返回实际采用的化简方法其中,s为原始表达式,s1为化简后表达式,how为采用的化简方法。其他常用化简函数〔信息与格式可用help命令得出〕collect()合并同类项expand()展开多项式factor()因式分解numden()提取多项式的分子和分母sincos()三角函数的化简60例:>>symss;>>P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)>>simple(P)%一系列化简尝试,得出计算机认为的最简形式ans=(s+3)^2*(s+2)*(s+1)*(s+4)^3
61>>[a,m]=simple(P)%返回化简方法为因式分解方法,用factor()函数将得同样结果a=
(s+3)^2*(s+4)^3*(s^2+3*s+2)
??m=simplify??>>expand(P)ans=s^7+21*s^6+185*s^5+883*s^4+2454*s^3+3944*s^2+3360*s+115262变量替换
其中,f为原表达式,用x1*替换x1得出新的。例:求其Taylor幂级数展开>>symsabcdt;%假设这些变量均为符号变量>>f=cos(a*t+b)+sin(c*t)*sin(d*t);%定义给定函数f(t)>>f1=subs(f,{a,b,c,d,t},{0.5*pi,pi,0.25*pi,0.125*pi,4})f1=-1.000063根本数论运算下取整、上取整、四舍五入、离0近方向取整、最简有理数、求模的余数、最大公约数、最小公倍数、质因数分解、判定是否为质数64例:对下面的数据进行取整运算-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187>>A=[-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187];>>floor(A)%向-inf方向取整ans=-10121-2>>ceil(A)%向+inf方向取整ans=01232-1>>round(A)%取最近的整数ans=01121-2>>fix(A)%向0的方向取整ans=00121-165例:3x3Hilbert矩阵,试用rat()函数变换>>A=hilb(3);[n,d]=rat(A)%将元素变换成最小有理数,n,d分别为分子、分母矩阵。n=111111111d=12323434566例:1856120,1483720,最大公约数、最小公倍数,质因数分解。>>formatlong>>m=1856120;n=1483720;[gcd(m,n),lcm(m,n)]%求m,n的最大公约数、最小公倍数。ans=1.0e+009*0.000001960000001.40508284000000>>factor(lcm(n,m))%对lcm(n,m)进行质因数分解。ans=22257775794767例:1-100间质数>>A=1:10;isprime(A)%假设向量A中某个整数值为质数,那么相应位置为1,其他为零。ans=0110101000>>A=1:100;B=A(isprime(A))B=Columns1through162357111317192329313741434753Columns17through25596167717379838997rem(A,C)%A中元素对C中元素求模得出的余数。682.4.1循环结构for结构while结构2.4MATLAB语言流程控制69例:用循环求解>>s=0;fori=1:100s=s+i;end>>s=0;i=1;while(i<=100)s=s+i;
i=i+1;end>>sum(1:100)ans=5050例:用循环求解求最小的m>>s=0;m=0;while(s<=10000),m=m+1;s=s+m;end,[s,m]%求出的m即是所求ans=1001114170例:求>>tic,s=0;fori=1:100000,s=s+1/2^i+1/3^i;end;tocelapsed_time=1.1820>>tic,i=1:100000;s=sum(1./2.^i+1./3.^i);toc%向量化所需时间少elapsed_time=0.3010>>i=1:10;s=1./2.^i+1./3.^i,ss=sum(1./2.^i+1./3.^i)s=0.83330.36110.16200.07480.03540.01700.00830.00410.00200.0010ss=1.4990712.4.2转移结构7273例:用循环求解求最大的m>>s=0;fori=1:10000s=s+i;ifs>10000,break;endend>>ii=141742.4.3开关结构7576和C语言的区别当开关表达式的值等于某表达式,执行该语句后结束该结构,不用break当需要在开关表达式满足假设干个表达式之一时执行某一程序段,那么用单元形式〔用大括号把这些表达式括起来,用逗号分隔〕otherwise语句,不是C语言中的default〔但与之等价〕程序的执行结果和各个case顺序无关case语句中条件不能重复,否那么列在后面的条件将不能执行77全新结构〔首先试探性执行语句1,假设执行过程中有错,将错误信息赋给保存的lasterr变量,并终止这段语句的执行,转而执行语句2。〕应将不保险但快的算法放在语句1,保险的放在语句2;或语句2说明语句1失效原因。2.4.4试探结构78函数是MATLAB编程的主流方法除了函数外,还可以采用M-script〔M-脚本文件〕文件M-script适合于小规模运算例:假设最大值不为10000,需修改程序对m和10000值的设置,不适合于M-script2.5MATLAB函数的编写792.5.1MATLAB语言的函数的根本结构nargin,nargout分别表示输入和返回变量的实际个数,此为MATLAB保存变量,只要进入该函数,MATLAB就将自动生成这两个变量。varargin,varargout输入、输出变量列表〔可变输入输出个数〕。80例:前面的要求,m,10000
function[m,s]=findsum(k)s=0;m=0;while(s<=k),m=m+1;s=s+m;end>>[m1,s1]=findsum(145323)m1=539s1=145530无需修改程序>>s=0;m=0;while(s<=10000),m=m+1;s=s+m;end,[s,m]ans=1001114181例:假设只给出一个输入参数,那么会自动生成一个方阵在函数中给出适宜的帮助信息检测输入和返回变量的个数editmyhilb82functionA=myhilb(n,m)%产生A=MYHILB(N,M)或A=MYHILB(N);ifnargout>1,error('Toomanyoutputarguments.');endifnargin==1,m=n;elseifnargin==0|nargin>2
error('Wrongnumberofinputarguments.');endA1=zeros(n,m);fori=1:nforj=1:mA1(i,j)=1/(i+j-1);end,endifnargout==1,A=A1;elseifnargout==0,disp(A1);end83>>helpmyhilb产生A=MYHILB(N,M)或A=MYHILB(N);>>A=myhilb(3,4)A=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.1667>>A=myhilb(4)A=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.16670.25000.20000.16670.1429>>A=myhilb(3,4,5)???Errorusing==>myhilbToomanyinputarguments.84例:函数的递归调用:阶乘functionk=my_fact(n)ifnargin~=1,error('输入变量个数错误,只能有一个输入变量');endifnargout>1,error('输出变量个数过多');endifabs(n-floor(n))>eps|n<0%判定n是否为整数error('n应该为非负整数');endifn>1%如果n>1,进行递归调用k=n*my_fact(n-1);elseifany([01]==n)%0!=1!=1k=1;end85>>my_fact(11)ans=39916800其实MATLAB提供了求取阶乘的函数factorial(),其核心算法为prod(1:n),元素乘积,从结构上更简单、直观,速度也更快。>>prod(1:11)ans=39916800>>prod(1:3:11)ans=28086例:conv()可以计算两个多项式的积用varargin实现任意多个多项式的积functiona=convs(varargin)a=1;fori=1:length(varargin),a=conv(a,varargin{i});end>>P=[12405];Q=[12];F=[123];D=convs(P,Q,F)D=16193645443530>>poly2sym(D)ans=x^7+6*x^6+19*x^5+36*x^4+45*x^3+44*x^2+35*x+302.5.2可变输入输出个数87>>E=conv(conv(P,Q),F)%假设采用conv()函数,那么需要嵌套调用E=16193645443530>>poly2sym(E)ans=x^7+6*x^6+19*x^5+36*x^4+45*x^3+44*x^2+35*x+30>>G=convs(P,Q,F,[1,1],[1,3],[1,1])G=1115617637657867864852731590882.5.3inline函数和匿名函数inline函数,可以免去文件f=inline(‘sin(x.^2+y.^2)’,’x’,’y’)MATLAB7.0(匿名函数〕892.6二维图形绘制2.6.1二维图形绘制根本语句构造向量:9091例:选项为红色点划线且每个转折点用五角星表示‘r-.pentagram’92例:>>x=[-pi:0.05:pi];%以0.05为步距构造自变量向量>>y=sin(tan(x))-tan(sin(x));%求出各个点上的函数值>>plot(x,y)>>plot(x,y,'r-.pentagram')93>>x=[-pi:0.05:-1.8,-1.801:.001:-1.2,-1.2:0.05:1.2,...1.201:0.001:1.8,1.81:0.05:pi];%以变步距方式构造自变量向量>>y=sin(tan(x))-tan(sin(x));%求出各个点上的函数值>>plot(x,y)%绘制曲线94例:>>x=[-2:0.02:2];%生成自变量向量>>y=1.1*sign(x).*(abs(x)>1.1)+x.*(abs(x)<=1.1);plot(x,y)>>plot([-2,-1.1,1.1,2],[-1.1,-1.1,1.1,1.1])95图形元素属性获取与修改图形中,每条曲线、坐标轴、图形窗口分别是一个对象。可用set()函数设置对象的属性,用get()函数获得对象的某个属性。这两个语句在界面编程中特别有用。96绘制多根二维曲线1.plot函数的输入参数是矩阵形式(1)当x是向量,y是有一维与x同维的矩阵时,那么绘制出多根不同颜色的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。(2)当x,y是同维矩阵时,那么以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。97(3)对只包含一个输入参数的plot函数,当输入参数是实矩阵时,那么按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。当输入参数是复数矩阵时,那么按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。982.含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn)〔1〕当输入参数都为向量时,x1和y1,x2和y2,…,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。〔2〕当输入参数有矩阵形式时,配对的x,y按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。99例分析以下程序绘制的曲线。x1=linspace(0,2*pi,100);x2=linspace(0,3*pi,100);x3=linspace(0,4*pi,100);y1=sin(x1);y2=1+sin(x2);y3=2+sin(x3);x=[x1;x2;x3]';y=[y1;y2;y3]';plot(x,y,x1,y1-1)1003.具有两个纵坐标标度的图形在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。调用格式为:plotyy(x1,y1,x2,y2)其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。101例用不同标度在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2);1024.图形保持
holdon/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。例采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1)holdony2=2*exp(-0.5*x).*cos(pi*x);plot(x,y2);holdoff103例在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx),标记两曲线交叉点。程序如下:x=linspace(0,2*pi,1000);y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);k=find(abs(y1-y2)<1e-2);
%查找y1与y2相等点(近似相等)的下标x1=x(k);
%取y1与y2相等点的x坐标y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);
%求y1与y2值相等点的y坐标plot(x,y1,x,y2,'k:',x1,y3,'bp');104
图形标注与坐标控制1.图形标注有关图形标注函数的调用格式为:title(图形名称)xlabel(x轴说明)ylabel(y轴说明)text(x,y,图形说明)legend(图例1,图例2,…)函数中的说明文字,除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。例如,text(0.3,0.5,‘sin({\omega}t+{\beta})’)将得到标注效果sin(ωt+β)。105例3-7在0≤x≤2
区间内,绘制曲线y1=2e-0.5x和y2=cos(4πx),并给图形添加图形标注。程序如下:x=0:pi/100:2*pi;y1=2*exp(-0.5*x);y2=cos(4*pi*x);plot(x,y1,x,y2)title('xfrom0to2{\pi}');%加图形标题xlabel('VariableX');%加X轴说明ylabel('VariableY');%加Y轴说明text(0.8,1.5,'曲线y1=2e^{-0.5x}');%在指定位置添加图形说明text(2.5,1.1,'曲线y2=cos(4{\pi}x)');legend(‘y1’,‘y2’)%加图例106对函数自适应采样的绘图函数fplot函数的调用格式为:fplot(fname,lims,tol,选项)其中fname为函数名,以字符串形式出现,lims为x,y的取值范围,tol为相对允许误差,其系统默认值为2e-3。选项定义与plot函数相同。例用fplot函数绘制f(x)=cos(tan(πx))的曲线。命令如下:fplot('cos(tan(pi*x))',[0,1],1e-4)107图形窗口的分割subplot函数的调用格式为:subplot(m,n,p)该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。例在图形窗口中,以子图形式同时绘制多根曲线。(练习做两个图,左侧是Sin(x),右侧为Cos(x))108x=0:0.05:2*piy=sin(x)z=cos(x)subplot(1,2,1);plot(x,y)subplot(1,2,2)plot(x,z)109110例:绘制极坐标曲线>>theta=0:0.01:6*pi;rho=5*sin(4*theta/3);polar(theta,rho)>>rho=5*sin(theta/3);polar(theta,rho)周期确定,可以采用试凑方法1111122.6.3隐函数绘制及应用隐函数例:>>ezplot(‘x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)’)%x自选
>>ezplot('x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)',[-1010])1132.7三维图形绘制114例绘制三维曲线。程序如下:t=0:pi/100:20*pi;x=sin(t);y=cos(t);z=t.*sin(t).*cos(t);plot3(x,y,z);title('Linein3-DSpace');xlabel('X');ylabel('Y');zlabel('Z');gridon;115例:参数方程>>t=0:.1:2*pi;%构造t向量,注意下面的点运算>>x=t.^3.*sin(3*t).*exp(-t);y=t.^3.*cos(3*t).*exp(-t);z=t.^2;>>plot3(x,y,z),grid%三维曲线绘制>>stem3(x,y,z);holdon;plot3(x,y,z),grid1162.7.2三维曲面绘制一般曲面绘制mesh()绘制网格图,surf()绘制外表图。其它函数,光照下surfl(),等高线surfc(),瀑布型waterfall()等高线绘制contour(),contour3()117产生三维数据——Matlab实现说明在MATLAB中,利用meshgrid函数产生平面区域内的网格坐标矩阵。其格式为:x=a:d1:b;y=c:d2:d;[X,Y]=meshgrid(x,y);语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵Y的每一列都是向量y,列数等于向量x的元素的个数。118例绘制三维曲面图z=sin(x+sin(y))-x/10。程序如下:[x,y]=meshgrid(0:0.25:4*pi);z=sin(x+sin(y))-x/10;mesh(x,y,z);axis([04*pi04*pi-2.51]);119例:Butterworth滤波器>>[x,y]=meshgrid(0:31);n=2;D0=200;>>D=sqrt((x-16).^2+(y-16).^2);%求距离>>z=1./(1+D.^(2*n)/D0);mesh(x,y,z),%计算并绘制滤波器>>axis([0,31,0,31,0,1])%重新设置坐标系,增大可读性>>s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品度合同范例
- 单位租凭员工车辆合同范本
- 中粮销售合同范本
- 化工散水出售合同范本
- seb采购合同范本
- 华为销售合同范本
- 农业采购合同范本格式
- 伐树施工合同范本
- 代理业主房屋合同范本
- 写作委托协议合同范本
- 地理-天一大联考2025届高三四省联考(陕晋青宁)试题和解析
- 小巴掌童话课件
- 教科版六年级科学下册全册教学设计教案
- 初中数学新课程标准(2024年版)
- GB/T 19342-2024手动牙刷一般要求和检测方法
- 2024年山东铁投集团招聘笔试参考题库含答案解析
- 8款-组织架构图(可编辑)
- 《钢铁是怎样炼成的》读书报告
- 中学生班干部培训方案(共4页)
- 净土资粮——信愿行(11)第六讲净业三福变化气质
- 美的集团公司分权手册
评论
0/150
提交评论