MATLAB与数学实验讲义2013_第1页
MATLAB与数学实验讲义2013_第2页
MATLAB与数学实验讲义2013_第3页
MATLAB与数学实验讲义2013_第4页
MATLAB与数学实验讲义2013_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、烟台大学数学与信息科学学院数学实验讲义第一部分 MATLAB 入门第一讲 变量与函数1. MATLAB作为线性系统的一种分析和仿真工具,是理工科大学生应该掌握的技术工具,它作为一种编程语言和可视化工具,可解决工程、科学计算和数学学科中许多问题.2. MATLAB建立在向量、数组和矩阵的基础上,使用方便,人机界面直观,输出结果可视化。3. 矩阵是MATLAB的核心4. MATLAB的进入与运行方式(两种)一、变量与函数1、变量MATLAB中变量的命名规则是:(1)变量名必须是不含空格的单个词;(2)变量名区分大小写;(3)变量名最多不超过19个字符;(4)变量名必须以字母打头,之后可以是任意字母

2、、数字或下划线,变量名中不允许使用标点符号. 特殊变量表2、数学运算符号及标点符号(1)MATLAB的每条命令后,若为逗号或无标点符号, 则显示命令的结果;若命令后为分号,则禁止显示结果. (2)“%” 后面所有文字为注释. (3) “.”表示续行.3、数学函数4、常用编辑为了便于对输入的内容进行编辑,MATLAB提供了一些控制光标位置和进行简单编辑的一些常用编辑键,掌握这些命令可以在输入命令的过程中起到事半功倍的效果调用上一行;调用下一行;光标左移一个字符;光标右移一个字符;home光标置于当前行首;end光标置于当前行尾;del删除光标处的字符;backspace删除光标前的字符第二讲 数

3、组与矩阵一、数组1、创建简单的数组x=a b c d e f 创建包含指定元素的行向量x=first:last 创建从first开始,加1计数,到last结束的行向量x=first:increment:last 创建从first开始,加increment计数,last结束的行向量x=linspace(first,last,n) 创建从first开始,到last结束,有n个元素的行向量2、 数组元素的访问(1)访问一个元素: x(i)表示访问数组x的第i个元素. (2)访问一块元素: x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺损

4、时为1. (3)直接使用元素编址序号. x(a b c d) 表示提取数组x的第a、b、c、d个元素构成一个新的数组x(a) x(b) x(c) x(d). 3、数组的方向前面例子中的数组都是一行数列,是行方向分布的. 称之为行向量. 数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示. 产生列向量有两种方法: 直接产生 例 c=1;2;3;4 转置产生 例 b=1 2 3 4; c=b 说明:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素. 4、数组的运算(1)标量-数组运算数组对标量的加、减、乘、除、乘方是数组的每个元素对

5、该标量施加相应的加、减、乘、除、乘方运算. 设:a=a1,a2,an, c=标量则:a+c=a1+c,a2+c,an+c a.*c=a1*c,a2*c,an*c a./c= a1/c,a2/c,an/c(右除) a.c= c/a1,c/a2,c/an (左除) a.c= a1c,a2c,anc c.a= ca1,ca2,can (2)数组-数组运算当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的. 设:a=a1,a2,an, b=b1,b2,bn则:a+b= a1+b1,a2+b2,an+bn a.*b= a1*b1,a2*b2,an

6、*bn a./b= a1/b1,a2/b2,an/bn a.b=b1/a1,b2/a2,bn/an a.b=a1b1,a2b2,anbn二、 矩阵1、矩阵的建立逗号或空格用于分隔某一行的元素,分号用于区分不同的行. 除了分号,在输入矩阵时,按Enter键也表示开始一新行. 输入矩阵时,严格要求所有行有相同的列. 例 m=1 2 3 4 ;5 6 7 8;9 10 11 12 p=1 1 1 1 2 2 2 2 3 3 3 3特殊矩阵的建立:a= 产生一个空矩阵,当对一项操作无结 果时,返回空矩阵,空矩阵的大小为零. b=zeros(m,n) 产生一个m行、n列的零矩阵c=ones(m,n) 产

7、生一个m行、n列的元素全为1的矩阵d=eye(m,n) 产生一个m行、n列的单位矩阵2、矩阵中元素的操作(1)矩阵A的第r行:A(r,:)(2)矩阵A的第r列:A(:,r)(3)依次提取矩阵A的每一列,将A拉伸为一个列向量:A(:)(4)取矩阵A的第i1i2行、第j1j2列构成新矩阵:A(i1:i2, j1:j2)(5)以逆序提取矩阵A的第i1i2行,构成新矩阵:A(i2:-1:i1,:)(6)以逆序提取矩阵A的第j1j2列,构成新矩阵:A(:, j2:-1:j1 )(7)删除A的第i1i2行,构成新矩阵:A(i1:i2,:)= (8)删除A的第j1j2列,构成新矩阵:A(:, j1:j2)=

8、 (9)将矩阵A和B拼接成新矩阵:A B;A;B3、矩阵的运算(1)标量-矩阵运算 同标量-数组运算。(2)矩阵-矩阵运算 1 元素对元素的运算,同数组-数组运算。 2矩阵运算:矩阵加法:A+B矩阵乘法:A*B方阵的行列式:det(A)方阵的逆:inv(A)方阵的特征值与特征向量:V,D=eig(A)关系与逻辑运算1、关系操作符2、逻辑运算符第三讲 M文件与程序设计初步一、M文件的特点与形式要说明M文件的特点,就得从MATLAB本身说起。MATLAB实质上是一种解释性语言,就MATLAB(matlab.exe)本身来说,它并不能做任何事情,它就像DOS操作系统的一样,本身没有实现功能而只对用户

9、发出的指令起到解释执行的作用。像前面介绍过的命令行式的操作一样,命令先送到MATLAB系统内解释,再运行得到结果。这样就给用户提供了最大的方便。用户可以把所要实现的指令罗列编制成文件,再统一送入MATLAB系统中解释运行,这就是M文件。只不过此文件必须以m为扩展名,MATLAB系统才能识别。也就是说,M文件其实是一个像命令集一样的ASCII(纯文本)码文件。因此M文件语法简单,调试容易,人机交互性强。用户可以便用任何字处理软件对其进行编写和修改。正是M文件的这个特点造就了MATLAB强大的可开发性和可扩展性,Mathworks公司推出的一系列工具箱就是明证。而正是有了这些工具箱,MATLAB才

10、能被广泛地应用于信号处理、神经网络、鲁棒控制、系统识别、控制系统、实时工作系统、图形处理、光谱分析、模型预测、模糊逻辑、数字信号处理、定点设置、金融管理、小波分析、地图工具、交流通信、模型处理、LMI控制、概率统计、样条处理、工程规划、非线性控制设计、QFT控制设计、NAG等各个领域。对个人用户来说,还可以利用M文件来建造和扩充属于自己的“库”。因此,一个不了解M文件,没有掌握 M文件的MATLAB使用者不能称其为一个真正的 MATLAB用户。由于商用的MATLAB软件用C/C+语言编写而成。因此,M文件的语法与C语言十分相似。对广大的C语言爱好者来说,M文件的编写是相当容易的。M文件有两种形

11、式,命令式(Script)和函数式(Function).两者相同之处在于它们都是以m作为扩展名的文本文件,不进入命令窗口,而是由文本编辑器来创建的外部文本文件。命令式M文件就是命令行的简单叠加,MATLAB会自动按顺序执行文件中的命令,与批处理文件类似,在MATLAB命令窗口直接输入此文件的文件名,MATLAB可逐一执行在此文件内的所有命令,和在命令窗口中逐行输入这些命令一样。这样就解决了用户在命令窗中运行许多命令的麻烦;还可以避免用户做许多重复性的工作。函数式M文件主要用以解决参数传递和函数调用的问题,它的第一句以function语句为引导。另外,值得注意的是,命令式M文件在运行过程中可以调

12、用MATLAB工作域内所有的数据,而且,所产生的所有变量均为全局变量。也就是说,这些变量一旦生成,就一直保存在工作空间中,直到执行clear 或quit时为止。在函数式M文件中的变量除特别声明外,均为局部变量。因为 MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。要查出某目录中所有的M函数语法错误,首先应该用 cd 命令 进入该目录,然后运行 pcode * 命令进行伪代码转换。因为该命令会将 MATLAB 函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,

13、将会停止翻译,给出错误信息。改正了该语法错误后,再重新执行 pcode 命令,直到没有错误为止。至少这样会保证目录下所有的程序不含有语法错误。一个M文件首次被调用时,MATLAB将首先对该M文件进行语法分析。并把生成的相应内部伪代码(P码)存放在内存中。此后当再次调用该M文件时,将直接运行该文件在内存中的P码文件而不会对原码文件重复进行语法分析。P码文件和原码文件具有相同的文件名,但其扩展名为“.p”,并且其运行速度要高于原码文件,但对于规模不大的文件,用户一般察觉不到这种速度上的优势。P码文件不是只有当M文件被调用时才生成,也可被预先生成。二. 命令式M文件由于命令式M文件的运行相当于在命令

14、窗口中逐行输入并运行命令,因此,在编制此类文件时,只需把所要执行的命令按行编辑到指定的文件中,且变量不需要预先定义,也不存在文件名对应问题。例:假设当前目录下有一个命令M文件:%solver.m%used to solve A*x=b%where A=-1.5 1 2;3 -1 1;-1 3 5,b=2.5;5;8.A=-1.5 1 2;3 -1 1;-1 3 5;b=2.5;5;8;x=Ab在命令窗口中执行solver命令,即可得到方程组的解。x=0.7500-0.62502.1250在命令窗口中键入type solver.m即可在命令窗口中看到该文件。在命令窗口中运行help solver

15、,可以得到该文件的注释部分。结合上例,有以下说明:1. 以%引导的行是注释行,不执行,可供help命令查询。2. 不需要end语句作为M文件的结束标志。3. 在运行次文件之前,需要把它所在目录加到MATLAB的搜索路径上去,或将文件所在目录设为当前目录。三. 函数式M文件为了实现计算中的参数传递,需要用到函数式M文件. 函数式M文件的标志是第一行的function关键词。函数式文件可以有返回值,也可以只执行操作而无返回值,大多数函数式文件有返回值。函数式文件在MATLAB中应用十分广泛,MATLAB所提供的绝大多数功能函数都是由函数式文件实现的,这足以说明函数式文件的重要性。函数式文件执行之后

16、,只保留最后结果,不保留中间过程,所定义的变量也仅在函数内部起作用,并随调用的结束而被清除。MATLAB 的 M 函数由 function 语句引导,其基本格式如下:function 返回变量列表 = 函数名 (输入变量列表) 注释说明语句段, 由 % 引导 输入、返回变量格式的检测函数体语句  MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件. 函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为: function 因变量名=函数名(自变量名)函数值的获

17、得必须通过具体的运算实现,并赋给因变量. M文件建立方法:1. 在Matlab中,点:File->New->M-file 2. 在编辑窗口中输入程序内容 3. 点:File->Save,存盘,M文件名必须与函数名一致。Matlab的应用程序也以M文件保存。例:定义函数 f(x1,x2)=100(x2-x12)2+(1-x1)21.建立M文件:fun.mfunction f=fun(x)f=100*(x(2)-x(1)2)2+(1-x(1)22. 可以直接使用函数fun.m例如:计算 f(1,2), 只需在Matlab命令窗口键入命令:x=1 2fun(x)四、控制流MATLA

18、B提供三种决策或控制流结构: for循环、while循环、if-else-end结构. 这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下. 1、for循环:允许一组命令以固定的和预定的次数重复 for x=array commands end例 对n=1,2,10,求的值例子:如果求1+2+.+100 的值,可以作下列的循环:>> mysum=0; for i=1:1:100,mysum=mysum+i; end; mysum2、While循环 与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值.

19、while expression commands end 只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串commands. 例 mysum = 0; i=1;while (i<=100) mysum=mysum+i; i=i+1;end mysum3、If-Else-End结构(1)有一个选择的一般形式是: if expression commands end 如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串commands.下面是一个简单的分支语句的例子:function y=control(n)

20、a=20;if n=0 y=a+1;elseif n=1 y=a*(1+n);elseif n=2 y=a+n;elseif n=3 y=a*4;else y=a;end说明:注意if语句嵌套时,if 和else必须对应,否则容易出错;else子句中嵌套if时,就形成了elseif结构,可以实现多路选择结构。先建立M文件fun1.m定义函数f(x),再在Matlab命令窗口输入fun1(2),fun1(-1)即可。先建立M文件fun2.m定义函数f(x),再在Matlab命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可。If-elseSwitch-casefunction

21、 f=fun2(x)if x>1 f=x2+1;elseif 0<x&x<=1 f=2*x;else f=x3;endfunction f=fun2(x)switch 1 case x>1 f=x2+1; case 0<x&x<=1 f=2*x; otherwise f=x3;end2. switch-case-otherwise语句(开关结构)此语句与C语言中的选择语句具有相同的功能,它通常用于条件较多而且较单一的情况,类似于一个数控的多路开关。其语法结构如下:switch expressioncase value1statements1;

22、 case value2statements2; case value nstatements n; otherwisestatements; endexpression是一个标量或者字符串,将expression的值依次和各个case指令后面的检测值进行比较,当比较结果为真时,MATLAB执行后面的一组命令,然后跳出switch结构。如果所有的结果都为假,则执行otherwise后的命令。当然otherwise指令也可以不存在。function f=chen7(x)switch x case 1 f=x*7; case 2 f=x*8; case 3 f=x*9; case 4 f=x*10

23、; case 5 f=x*11; otherwise f=100000;end第四讲 图形处理功能图形可视化技术一直是数学计算人员所喜爱和追求的一项技术,因为不管是数值计算还是符号计算,无论计算多么完美、结果多么准确,人们还是很难直接从大量的数据堆或符号堆中感受它们的具体含义。人们更喜欢直接用眼睛看到直观的图形。因此,对任何数学计算人员来说,可视化技术都是必须掌握的。MATLAB为用户提供了完整的可视化工具。从最原始版本的MATLAB开始,图形功能就已经成为其最基本的功能之一。随着MATLAB版本的逐步升级,MATLAB的图形工具箱从最简单的点、线、面处理发展到了集二维图形、三维图形甚至四维表

24、现图和对图形进行着色、消隐、光照处理、渲染及多视角处理等多项功能于一身的强大功能包。在进行数值计算的过程中,为了从直观上认识计算结果,可以通过MATLAB的图形功能将计算结果图形化MATLAB是通过描点、连线来作图的,因此,在作二维图形和三维图形之前,必须先取得该图形上一系列点的坐标,然后利用MATLAB函数作图下面着重介绍二维图形的画法,对三维图形只作简单叙述一、二维图形二维图形的绘制是MATLAB图形功能的基础,也是在绝大多数数值计算中广泛应用的图形方式之一1、基本绘图命令(1). plot命令 绘制二维图形最常用的函数是plot函数,对于不同形式的输入,该函数可以实现不同的功能(i).

25、当plot函数仅有一个输入变量时:plot(X)如果X为实向量,则以X的索引坐标作为横坐标,以X的各元素作为纵坐标绘制图形如果X为复向量,则以X的实部作为横坐标,虚部作为纵坐标绘制图形如果X为实数矩阵,则绘制X的列向量对其坐标索引的图形如>>X=0 0.5 0.75 0.95 0.8 0.35; plot(X) %图1>>x=1+2i,2+4i,3+2i,5+i,6+4i;plot(x) %图2图1 图2(ii). 当plot函数有两个输入变量时:plot(X,Y)当X和Y为向量时,X和Y的维数必须相同,而且同时为行向量或同时为列向量此时以第一个向量的分量为横坐标,第二

26、个向量的分量为纵坐标绘制图形,这是实际应用过程中最为常用的例如:>>x=0:0.01*pi:pi; y=sin(x).*cos(x); %注意:此处的.*表示两个向量对应元素的乘积>>plot(x,y) %图3图3 图4当X,Y为m*n矩阵时,将在同一幅图中绘出n条不同颜色的连线绘制规则为: 以X矩阵的第j列分量作为横坐标,矩阵Y的第j列分量作为纵坐标,绘得第j条连线若在同一幅图中出现多条曲线,MATLAB会自动地把不同曲线绘制成不同的颜色,以进行简单的区别如:>>x=0:0.01*pi:pi; y=sin(x'),cos(x');>&

27、gt;plot(x',x',y)(iii). 当plot函数有三个输入变量时:plot(X,Y, 'Linespec')想绘制不同的线型、颜色、标识等的图形时,可以调用此形式,第3个输入变量为图形显示属性的设置选项:线型、颜色、标识线型:-实线; : 点线;-. 虚点线;-虚线;颜色:y 黄;m紫;c青;r 红;g 绿;b 蓝;w 白;k 黑;标识:. 点;o圆点;x 叉号;+ 加号;* 星号;s方形;d菱形;v下三角; 上三角;< 左三角;> 右三角;p 五角星;h 六角星应用上述符号的不同组合可以为图形设置不同的线型、颜色、标识在调用时,选项应置

28、于单引号内,当多于一个选项时,各选项直接相连,中间不需要任何的分隔符如:>>x=1:0.1*pi:2*pi; y=sin(x); z=cos(x); plot(x,y,'-k',x,z,'-.kd') %图4 (2). fplot命令 前面介绍的plot命令是根据外部输入数据或通过函数数值计算得到的数据进行作图而在实际应用中,我们可能并不知道某一函数随自变量变化的趋势,此时若采用plot命令来绘图,则有可能会因为自变量的取值间隔不合理而使曲线图形不能反映出自变量在某些区域内函数值的变化情况当然我们可以将自变量间隔取得足够小以体现函数值随自变量变化的曲

29、线,但这样会使数据量变大fplot命令可以很好地解决这个问题该命令通过内部的自适应算法来动态决定自变量的取值间隔,当函数值变化缓慢时,间隔取大一点;变化剧烈时,间隔取小一点fplot命令的调用方式:fplot(fun, xmin xmax ymin ymax) 在xmin xmax内画出字符串fun表示的函数的图形,ymin ymax给出了y的限制例如:>>fplot('sin(x)./x',-20 20 -0.3 1.3) %图5图5 图62、图形处理的基本技术除了提供强大的绘图功能外,MATLAB语言还有极为强大的图形处理能力下面介绍一些图形处理技术,包括图形控

30、制、图形标注、图形保持以及子图的绘制等(1). 图形控制MATLAB语言中较常用的图形控制函数有坐标轴控制函数axis、坐标轴缩放函数zoom和坐标网格函数grid等(i). axis函数控制坐标轴的特征在缺省情况下MATLAB自动选择图形的横、纵坐标的比例,如果你对这个比例不满意,可以用axis命令控制,常用的有:axis(xmin xmax ymin ymax) 中分别给出了x轴和y轴的最小、最大值;axis equal 或 axis('equal') x轴和y轴单位长度相同;axis square 或 axis('square') 图框呈方形;axis o

31、ff 或 axis('off') 清除坐标刻度例如:>>x=0:0.025:pi/2; plot(x,tan(x),'-ko') %使用axis命令设定坐标轴之前的图形 图6>>axis(0 pi/2 0 5) %使用axis命令设定坐标轴之后的图形 图7图7 图8 (ii). zoom函数控制坐标轴的缩放:zoom函数可以实现对二维图形的缩放,该函数在处理局部较为密集的图形中有很大作用常用的调用格式有:zoom 在zoom on 和zoom off之间切换;zoom on 允许对图形进行缩放;zoom off 禁止对图形进行缩放;zoo

32、m xon 允许x 轴缩放;zoom yon 允许y轴缩放;zoom out 恢复进行的一切缩放当zoom处于on 状态时,可以通过鼠标进行图形缩放,单击鼠标左键将光标处的图形放大一倍;而单击鼠标右键将光标处的图形缩小一倍;双击鼠标左键则将会恢复缩放前的状态,即取消一切缩放操作应当注意,对图形的缩放不会影响图形的原始尺寸,也不会影响图形的横纵坐标的比例,即不会改变图形的基本结构(iii). grid函数控制平面图形的坐标网格:MATLAB提供了平面网图函数grid用于绘制坐标网格,提高图形显示效果grid函数的调用格式如下:grid on 在图形中绘制坐标网格;grid off 取消坐标网格单

33、独的函数grid将实现grid on 与grid off两种状态之间的转换>>x=0:0.1*pi:2*pi; y=sin(x);>>plot(x,y) >>grid on %图8 (2). 图形的标注MATLAB语言还提供了丰富的图形标注函数供用户自由地标注所绘制的图形(i).坐标轴标注和图形标题xlabel ylabel 为x, y坐标轴添加标注title 为图形添加标题xlabel('标注内容','属性1', '属性值1', '属性2', '属性值2',) %属性包括标注文

34、本的属性,包括字体大小、字体名等三个函数的调用结果的区别仅在于标注所处的位置不同,title 给出的标注将置于图的顶部,而xlabel 和ylabel则分置于相应的坐标轴的边上例如:>>x=1:0.1*pi:2*pi; y=sin(x);>>plot(x,y) >>xlabel('x(0-2pi)', 'fontweight', 'bold');>>title('y=sin(x)','fontsize', 12, 'fontweight', '

35、bold') %12不加单引号 %图9图9 图10在标注过程中经常会遇到特殊符号的输入问题,为了解决这个问题,MATLAB语言提供了相应的字符转换,如:alpha;beta;gamma;delta;epsilon;zeta;pi;omega;Omega等等用户也可以对文本标注进行显示控制,如:bf 黑体,it 斜体,rm 标准形式,例如:>>x=-10:0.1:10; y=exp(-x.2/2);>>plot(x,y, '-')>>title('bf y=e-x2/2') %图10(ii). 文本标注MATLAB对图形

36、进行文本注释所提供的函数为text和gtexttext函数的调用格式:text(x,y, '标注文本及控制字符串') 其中(x,y)给定标注文本在图中添加的位置,例如:>>x=1:0.1*pi:2*pi; y=sin(x);>>plot(x,y)>>text(3*pi/4,sin(3*pi/4), 'leftarrow sin(3pi/4)=0.707')>>text(5*pi/4,sin(5*pi/4),'sin(5pi/4)=',num2str(sin(5*pi/4),'rightarr

37、ow','HorizontalAlignment', 'right', 'Fontsize', 12) %图11%属性HorizontalAlignment用来控制文本标注输入起点是在标注本身的左侧还是右侧图11 图12交互式文本输入函数gtext. 使用该函数,用户可以通过使用鼠标来选择文本输入的点,单击后,系统将把指定的文本输入到所选的位置上>>x=1:0.1*pi:2*pi; y=sin(x);>>plot(x,y)>>gtext('y=sin(x)', 'Fontsize

38、', 12)执行该函数时,将鼠标放在图形上会出现“+”字型交叉线供用户添加标注的点,选择添加标注的位置后,单击鼠标左键即可在该位置上添加标注(iii). 图例标注在对数值计算结果进行绘图时,经常会出现在同一张图形中绘制多条曲线的情况,这时可以使用legend命令为曲线添加图例以便于区别它们legend 函数能够为图形中的所有曲线进行自动标注,以其输入变量作为标注文本,具体调用格式如下:legend('标注1', '标注2',) 标注1,标注2等分别对应绘图过程中按绘制先后顺序所生成的曲线>>x=0:0.1*pi:2*pi; y=sin(x);

39、 z=cos(x);>> plot(x,y,'k-o',x,z,'k-h')>>legend('sin(x)', 'cos(x)') %图12可以用鼠标拖动图例框改变其在图中的位置也可以在legend函数调用时进行简单的定位设置:legend('标注1', '标注2', '定位代号')MATLAB 给出了6个定位代号,具体说明如下:0: 自动定位,使得图标与图形重复最少;1: 置于图形的右上角(默认值);2: 置于图形的左上角;3: 置于图形的左下角;4: 置

40、于图形的右下角;-1: 置于图形的右外侧关于标注位置,没有必要记住,可以通过在线帮助获得help legend图例标注后,也可以用鼠标来调整图例标注的位置(3). 图形保持与子图(i).图形保持在绘图过程中,经常会遇到在已存在的一张图中添加新的曲线,这就要求保持已存在的图形,MATLAB语言中实现该功能的函数是hold.hold on 启动图形保持功能,此后绘制的图形将添加到当前的图形窗口中,并自动调整坐标轴的范围;hold off 关闭图形保持功能,新绘制图形将覆盖原图形hold 在hold on 和 hold off之间切换如:>>x=0:0.1*pi:2*pi; y=sin(

41、x); z=cos(x);>>plot(x,y,'k-*') >>hold on>>plot(x,z, 'k-o') >>plot(x,y+z,'k-h')>>legend('sin(x)', 'cos(x)', 'sin(x)+cos(x)', 0)>>hold off %图13图13(ii).子图在绘图过程中,经常需要将几个图形在同一图形窗口中表示出来,但又不在同一个坐标系中绘制,此时要用到函数subplot调用格式如下:s

42、ubplot(m,n,p) 将一个图形窗口分割成m*n个小窗口,可以通过参数p分别对若干子绘图区域进行操作,子绘图区域的编号为按行从左至右编号如果p是一个向量,则创建一坐标轴,包含所有罗列在p中的小窗口例如:在四个子图中绘制不同的三角函数图>>x=0:0.1*pi:2*pi; >>subplot(2,2,1) %第1个绘图子域>>plot(x,sin(x), '-*'); axis(0 2*pi -1 1); title('sin(x)')>>subplot(2,2,2) %第2个绘图子域>>plot(

43、x,cos(x), '-o'); axis(0 2*pi -1 1); title('cos(x)')>>subplot(2,2,3) %第3个绘图子域>>plot(x,2*sin(x).*cos(x), '-x'); axis(0 2*pi -1 1); title('2sin(x)cos(x)')>>subplot(2,2,4) %第4个绘图子域>>plot(x,sin(x)./cos(x), '-h'); axis(0 2*pi -1 1); title(

44、9;sin(x)/cos(x)') %图14图14在子图绘制过程中,axis,hold,title,xlabel,grid等都可以只针对某个子图进行图形设置,而不会影响到其他子图3、特殊的二维图形函数MATLAB提供了一系列特殊的二维图形函数,其中包括特殊坐标系的二维图形函数以及特殊二维图形函数(1).极坐标图形 用polar函数可以画出极坐标图形, 该函数有两种表达形式:polar(theta, rho) 创建一个幅角theta相对于半径rho的极坐标图polar(theta, rho, LineSpec) %LineSpec为绘出的图形指定线型、颜色和标识>>x=0:0

45、.01*pi:4*pi;>>y=sin(x/2)+x;>>polar(x,y,'k-') %图15图15(2). 二维特殊函数图下列函数可以绘制其它的二维特殊函数图形:area填充绘图;bar条形图;barh水平条形图;comet彗星图; ezpolar简单绘制极坐标图;feather矢量图;fill多边形填充;gplot拓扑图;hist直方图;pie饼状图;rose极坐标系下的柱状图等等以上各函数均有不同的调用方法,详细内容读者可以通过MATLAB在线帮助获得二、三维图形三维图形的绘制与二维图形的绘制在许多方面都很类似,其中曲线的属性设置完全相同最常用

46、的三维绘图是绘制三维曲线图、三维网格图和三维曲面图三种基本类型,相应的MATLAB命令为plot3、mesh、surf, 下面分别介绍它们的具体使用方法1. plot3命令 与plot类似,plot3是三维绘图的基本函数,调用格式如下: plot3(x,y,z) 其中x,y,z为同维向量绘制一条以向量x,y,z为X,Y,Z轴坐标值的空间曲线.plot3(X,Y,Z) 若X,Y,Z均为m*n的矩阵,将绘制n条曲线,其第j条曲线是以X,Y,Z矩阵的第j列分量为x,y,z轴坐标值的空间曲线.plot3(X,Y,Z,s) s为定义线型、颜色等的字符串plot3(x1,y1,z1,s1,x2,y2,z2

47、,s2,)例如:>>x=0:pi/50:10*pi; plot3(cos(x),sin(x),x) %绘制螺旋线图16图16 图17 2.mesh 网图函数命令mesh命令可以绘出某一区间内完整的曲面,而不是单根曲线调用格式如下:mesh(X,Y,Z)例如:>>x=-4:0.25:4; y=x;>>X Y=meshgrid(x,y); %三维图形的X,Y数组>>a=sqrt(X.2+Y.2)+eps; z=sin(a)./a; %加eps是防止出现0/0>>mesh(X,Y,z) %三维网格表面,图17MATLAB中的网图函数mesh

48、c、meshz、和meshgrid命令对基本的三维绘图命令增加了一些特别的处理图形的功能meshgrid命令的作用是将给定的区域按一定的方式划分成平面网格,该平面网格可以用来绘制三维曲面调用方法如下:X,Y=meshgrid(x,y) 其中x和y为给定的向量,用来定义网格划分区域,也可以定义网格划分方法,X和Y用来存储网格划分后的数据矩阵函数meshc与函数mesh调用方式相同,该函数在mesh函数的作用之上又增加了contour函数的功能,即绘制相应的等高线如: >>X,Y=meshgrid(-4:0.5:4);>>Z=sqrt(X.2+Y.2); mesh(Z)&g

49、t;>meshc(Z)函数meshz与函数mesh调用方式相同,该函数在mesh函数的作用之上又增加了屏蔽作用,即增加了边界面屏蔽3. surf 着色函数命令该命令的调用方法与mesh命令类似,不同的是mesh函数绘制的图形是一个网格图,而surf命令绘制得到的是着色的三维曲面其调用格式如下:surf(X,Y,Z)例1:>>X,Y=meshgrid(-4:0.5:4);>>Z=sqrt(X.2+Y.2); surf(Z) 例2:>>X,Y,Z=peaks(30); surf(X,Y,Z)这里,我们不给出上述两个例子的图形,读者可以通过在MATLAB命令

50、窗口中运行上面的命令得到第二部分 Matlab与数学实验第五讲插值一、一维插值1. Lagrange 插值 容易产生Runge现象,是一种不稳定的插值。不实用。设n个节点以数组x0,y0输入,m个插值点以数组x输入。输入数组y为m个插值。注意:程序中用n个节点而不是n1个节点。命名lagr.m。程序为function y=lagr(x0,y0,x)n=length(x0);m=length(x);for i=1:m z=x(i); %由数组x取出插值点 s=0; for k=1:n p=1; for j=1:n if j=k p=p*(z-x0(j)/(x0(k)-x0(j); %Lagran

51、ge插值公式基函数 end end s=p*y0(k)+s;%按Lagrange插值公式计算 end y(i)=s;end2. 分段线性插值 具有良好的收敛性。可以通过增加插值节点的个数来控制插值误差。是一种较实用的插值方法,Matlab有分段线性插值函数。但总体光滑程度不够。分段线性插值有现成的函数命令: y=interp1(x0,y0,x)其中x0,y0,x和输出y的意义同上。3. 三次样条插值 较低次的多项式可以达到较高阶的光滑度。样条曲线本身来自飞机、船舶等外形曲线设计中所用的绘图工具。在工程实际中,要求这样的曲线具有连续的曲率,即二阶连续导数。三次样条插值也有现成的函数命令:y3=i

52、nterp1(x0,y0,x,'spline');或者y4=spline(x0,y0,x);其中x0,y0,x和输出y的意义同上。例:对出现龙格现象的例子将-5,5区间n(=10)等分,用g(x)产生n+1(=11)个节点,用Matlab作以上三种方法的插值计算、作图,进行比较。解:编写程序如下:x0=-5:5;y0=1./(1+x0.2); %产生节点(x0,y0)x=-5:0.1:5; %产生插值点x,间隔0.1y=1./(1+x.2); %计算g(x)用于比较,这是 真解y1=lagr(x0,y0,x); %计算拉格朗日插值y2=interp1(x0,y0,x); %计算

53、分段线性插值 y3=interp1(x0,y0,x,'spline'); %计算三次样条插值z=0*x; %产生横轴subplot(2,2,1),plot(x,z,'r',x,y),title('真解')subplot(2,2,2),plot(x,z,'r',x,y1)title('lagrange解')subplot(2,2,3),plot(x,z,'r',x,y2)title('分段线性插值解')subplot(2,2,4),plot(x,z,'r',x,y3)title('三次样条插值解')得到结果如下图:在上面的程序的基础上加上下面的程序,得到部分数值结果比较:程序:for k=1:11 xx(k)=x(46+5*k); %x>=0且间隔0.5的插值点 yy(k)=y(46+5*k); %x>=0且间隔0.5的g(x) yy1(k)=y1(46+5*k); %x>=0且间隔0.5的lagrange插值 yy2(k)=y2(46+5*k); %x>=0且间隔0.5的分段线性插值 yy3(k)=y3(46+5*k); %x>=0且间隔0.5的g(x)三次样条插值endxx;yy;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论