广州大学 数学建模暑期培训
2011.8.6
广州大学2010数学建模暑期培训专题之MATLAB
第一部分 MATLAB 入门
1. MATLAB作为线性系统的一种分析和仿真工具,是理工科大学生应该掌握的技术工具,
它作为一种编程语言和可视化工具,可解决工程、科学计算和数学学科中许多问题. 2. MATLAB建立在向量、数组和矩阵的基础上,使用方便,人机界面直观,输出结果可
视化。
3. 矩阵是MATLAB的核心
4. MATLAB的进入与运行方式(两种)
一、变量与函数
1、变量
MATLAB中变量的命名规则是:
(1)变量名必须是不含空格的单个词; (2)变量名区分大小写;
(3)变量名最多不超过19个字符;
(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号. 特殊变量表
特殊变量anspiepsflopsinfNaNi,jnarginnargoutrealminrealmax取 值用于结果的缺省变量名圆周率计算机的最小数,当和1相加就产生一个比1大的数浮点运算数无穷大,如1/0不定量,如0/0i=j=1所用函数的输入变量数目所用函数的输出变量数目最小可用正实数最大可用正实数
2、数学运算符号及标点符号
(1)MATLAB的每条命令后,若为逗号或无标点符号,
1
广州大学2010数学建模暑期培训专题之MATLAB
则显示命令的结果;若命令后为分号,则禁止显示结果. (2)“%” 后面所有文字为注释. (3) “...”表示续行.
+—*.*/./^.^\\3、数学函数
加法运算,适用于两个数或两个同阶矩阵相加.减法运算乘法运算点乘运算除法运算点除运算乘幂运算点乘幂运算反斜杠表示左除.
函 数sin(x)cos(x)tan(x)abs(x)min(x)sqrt(x)log(x)sign(x)
名 称正弦函数余弦函数正切函数 绝对值 最小值 开平方自然对数符号函数函 数asin(x)acos(x)atan(x)max(x)sum(x)exp(x)log10(x)fix(x)名 称反正弦函数反余弦函数反正切函数 最大值元素的总和以e为底的指数以10为底的对数取整
2
广州大学2010数学建模暑期培训专题之MATLAB
二、数组与矩阵 1. 数组
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个元素的行向量 x=logspace(first,last,n)
创建从first开始,到last结束,有n个元素的对数分隔行向量. 2、 数组元素的访问
(1)访问一个元素: x(i)表示访问数组x的第i个元素.
(2)访问一块元素: x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺损时为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)标量-数组运算
数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算.
设: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= [a1^c,a2^c,…,an^c] c.^a= [c^a1,c^a2,…,c^an]
3
广州大学2010数学建模暑期培训专题之MATLAB
(2)数组-数组运算
当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的. 设:a=[a1,a2,…,an], b=[b1,b2,…,bn] 则:a+b= [a1+b1,a2+b2,…,an+bn] a.*b= [a1*b1,a2*b2,…,an*bn] a./b= [a1/b1,a2/b2,…,an/bn] a.\\b=[b1/a1,b2/a2,…,bn/an] a.^b=[a1^b1,a2^b2,…,an^bn]
2. 矩阵
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) 产生一个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的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2, j1:j2) (5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:) (6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:A(:, j2:-1:j1 ) (7)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[ ] (8)删除A的第j1~j2列,构成新矩阵:A(:, j1:j2)=[ ] (9)将矩阵A和B拼接成新矩阵:[A B];[A;B] 3、矩阵的运算
4
广州大学2010数学建模暑期培训专题之MATLAB
(1)标量-矩阵运算
同标量-数组运算。 (2)矩阵-矩阵运算
[1] 元素对元素的运算,同数组-数组运算。 [2]矩阵运算: 矩阵加法:A+B 矩阵乘法:A*B
方阵的行列式:det(A) 方阵的逆:inv(A)
方阵的特征值与特征向量:[V,D]=eig[A]
关系与逻辑运算 1、关系操作符
关系操作符<<=>>== =~=说明小于小于或等于大于大于或等于等于不等于
2、逻辑运算符
逻辑操作符&︱~说明与或非
5
广州大学2010数学建模暑期培训专题之MATLAB
三、 M文件与程序设计初步 1. M文件的特点与形式
要说明M文件的特点,就得从MATLAB本身说起。MATLAB实质上是一种解释性语言,就MATLAB(matlab.exe)本身来说,它并不能做任何事情,它就像DOS操作系统的command.com一样,本身没有实现功能而只对用户发出的指令起到解释执行的作用。像前面介绍过的命令行式的操作一样,命令先送到MATLAB系统内解释,再运行得到结果。这样就给用户提供了最大的方便。用户可以把所要实现的指令罗列编制成文件,再统一送入MATLAB系统中解释运行,这就是M文件。只不过此文件必须以m为扩展名,MATLAB系统才能识别。也就是说,M文件其实是一个像命令集一样的ASCII(纯文本)码文件。因此M文件语法简单,调试容易,人机交互性强。用户可以便用任何字处理软件对其进行编写和修改。正是M文件的这个特点造就了MATLAB强大的可开发性和可扩展性,Mathworks公
司推出的一系列工具箱就是明证。而正是有了这些工具箱,MATLAB才能被广泛地应用于信号处理、神经网络、鲁棒控制、系统识别、控制系统、实时工作系统、图形处理、光谱分析、模型预测、模糊逻辑、数字信号处理、定点设置、金融管理、小波分析、地图工具、交流通
信、模型处理、LMI控制、概率统计、样条处理、工程规划、非线性控制设计、QFT控制设计、NAG等各个领域。对个人用户来说,还可以利用M文件来建造和扩充属于自己的“库”。因此,一个不了解M文件,没有掌握 M文件的MATLAB使用者不能称其为一个真正的 MATLAB用户。
由于商用的MATLAB软件用C/C++语言编写而成。因此,M文件的语法与C语言十分相似。对广大的C语言爱好者来说,M文件的编写是相当容易的。
M文件有两种形式,命令式(Script)和函数式(Function).两者相同之处在于它们都是以m作为扩展名的文本文件,不进入命令窗口,而是由文本编辑器来创建的外部文本文件。
命令式M文件就是命令行的简单叠加,MATLAB会自动按顺序执行文件中的命令,与批处理文件类似,在MATLAB命令窗口直接输入此文件的文件名,MATLAB可逐一执行在此文件内的所有命令,和在命令窗口中逐行输入这些命令一样。这样就解决了用户在命令窗中运行许多命令的麻烦;还可以避免用户做许多重复性的工作。
函数式M文件主要用以解决参数传递和函数调用的问题,它的第一句以function语句为引导。
另外,值得注意的是,命令式M文件在运行过程中可以调用MATLAB工作域内所有的数据,而且,所产生的所有变量均为全局变量。也就是说,这些变量一旦生成,就一直保存在工作空间中,直到执行clear 或quit时为止。在函数式M文件中的变量除特别声明外,均为局部变量。
因为 MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。要查出某目录中所有的M函数语法错误,首先应该用 cd 命令 进入该目录,然后运行 pcode * 命令进行伪代码转换。因为该命令会将 MATLAB 函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,将会停止翻译,给出错误信息。
6
广州大学2010数学建模暑期培训专题之MATLAB
改正了该语法错误后,再重新执行 pcode 命令,直到没有错误为止。至少这样会保证目录下所有的程序不含有语法错误。
一个M文件首次被调用时,MATLAB将首先对该M文件进行语法分析。并把生成的相应内部伪代码(P码)存放在内存中。此后当再次调用该M文件时,将直接运行该文件在内存中的P码文件而不会对原码文件重复进行语法分析。P码文件和原码文件具有相同的文件名,但其扩展名为“.p”,并且其运行速度要高于原码文件,但对于规模不大的文件,用户一般察觉不到这种速度上的优势。P码文件不是只有当M文件被调用时才生成,也可被预先生成。
2. 命令式M文件
由于命令式M文件的运行相当于在命令窗口中逐行输入并运行命令,因此,在编制此类文件时,只需把所要执行的命令按行编辑到指定的文件中,且变量不需要预先定义,也不存在文件名对应问题。
例:假设当前目录下有一个命令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=A\\b
在命令窗口中执行solver命令,即可得到方程组的解。 +
在命令窗口中键入type solver.m即可在命令窗口中看到该文件。 在命令窗口中运行help solver,可以得到该文件的注释部分。
结合上例,有以下说明:
1. 以%引导的行是注释行,不执行,可供help命令查询。 2. 不需要end语句作为M文件的结束标志。
3. 在运行次文件之前,需要把它所在目录加到MATLAB的搜索路径上去,或将文件所在目录设为当前目录。
3. 函数式M文件
为了实现计算中的参数传递,需要用到函数式M文件. 函数式M文件的标志是第一行的function关键词。函数式文件可以有返回值,也可以只执行操作而无返回值,大多数函数式文件有返回值。函数式文件在MATLAB中应用十分广泛,MATLAB所提供的绝大多数功能函数都是由函数式文件实现的,这足以说明函数式文件的重要性。函数式文件执行之后,只保留最后结果,不保留中间过程,所定义的变量也仅在函数内部起作用,并随调用的结束而被清除。
MATLAB 的 M 函数由 function 语句引导,其基本格式如下:function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
7
广州大学2010数学建模暑期培训专题之MATLAB
输入、返回变量格式的检测 函数体语句
MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件. 函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为:
function 因变量名=函数名(自变量名) 函数值的获得必须通过具体的运算实现,并赋给因变量. M文件建立方法:1. 在Matlab中,点:File->New->M-file 2. 在编辑窗口中输入程序内容
3. 点:File->Save,存盘,M文件名必须与函数名一致。 Matlab的应用程序也以M文件保存。 222
例:定义函数 f(x1,x2)=100(x2-x1)+(1-x1)
1.建立M文件:fun.m function f=fun(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2 2. 可以直接使用函数fun.m
例如:计算 f(1,2), 只需在Matlab命令窗口键入命令: x=[1 2] fun(x)
4. 控制流
MATLAB提供三种决策或控制流结构:
for循环、while循环、if-else-end结构.
这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下.
1、for循环:允许一组命令以固定的和预定的次数重复 for x=array
{commands} end
在for和end语句之间的命令串{commands}按数组(array)中的每一列执行一次. 在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n) 例 对n=1,2,…,10,求xnsinn的值 10例子:如果求1+2+...+100 的值,可以作下列的循环: >> mysum=0; for i=1:1:100
mysum=mysum+i; end; mysum
8
广州大学2010数学建模暑期培训专题之MATLAB
2、While循环
与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值.
while expression
{commands} end
只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串{commands}. 例mysum = 0; i=1;
while (i<=100) mysum=mysum+i; i=i+1; end
3、If-Else-End结构
(1)有一个选择的一般形式是: if expression
{commands} end
如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串{commands}.
下面是一个简单的分支语句的例子: function y=control(n) a=20; if n==0 y=a+1; elseif n==1 y=a*(1+n); elseif n==2 y=a+n; else y=a; end
说明:注意if语句嵌套时,if 和else必须对应,否则容易出错;else子句中嵌套if时,就形成了elseif结构,可以实现多路选择结构。
x21x1例 设f(x), 求f(2),f(1)
2xx1
9
广州大学2010数学建模暑期培训专题之MATLAB
先建立M文件fun1.m定义函数f(x),再在Matlab命令窗口输入fun1(2),fun1(-1)即可。 2) 有三个或更多的选择的一般形式是: if (expression1) {commands1}
else if (expression2) {commands2}
else if (expression3) {commands3} else if ……
………………………………… else {commands} end end end ……
End
x21x1例 设 f(x)2x0x1, 求f(2),f(0.5),f(1)
x3x0先建立M文件fun2.m定义函数(fx),再在Matlab命令窗口输入fun2(2),fun2(0.5), fun2(-1)
即可。
2. switch-case-otherwise语句(开关结构)
此语句与C语言中的选择语句具有相同的功能,它通常用于条件较多而且较单一的情况,类似于一个数控的多路开关。其语法结构如下: switch expression case value1 statements1; case value2 statements2; …… case value n statements n; otherwise
statements; end
expression是一个标量或者字符串,将expression的值依次和各个case指令后面的检测值进行比较,当比较结果为真时,MATLAB执行后面的一组命令,然后跳出switch结构。如果所有的结果都为假,则执行otherwise后的命令。当然otherwise指令也可以不存在。
10
广州大学2010数学建模暑期培训专题之MATLAB
四、图形处理功能
图形可视化技术一直是数学计算人员所喜爱和追求的一项技术,因为不管是数值计算还是符号计算,无论计算多么完美、结果多么准确,人们还是很难直接从大量的数据堆或符号堆中感受它们的具体含义。人们更喜欢直接用眼睛看到直观的图形。因此,对任何数学计算人员来说,可视化技术都是必须掌握的。MATLAB为用户提供了完整的可视化工具。
从最原始版本的MATLAB开始,图形功能就已经成为其最基本的功能之一。随着MATLAB版本的逐步升级,MATLAB的图形工具箱从最简单的点、线、面处理发展到了集二维图形、三维图形甚至四维表现图和对图形进行着色、消隐、光照处理、渲染及多视角处理等多项功能于一身的强大功能包。
在进行数值计算的过程中,为了从直观上认识计算结果,可以通过MATLAB的图形功能将计算结果图形化.MATLAB是通过描点、连线来作图的,因此,在作二维图形和三维图形之前,必须先取得该图形上一系列点的坐标,然后利用MATLAB函数作图.下面着重介绍二维图形的画法,对三维图形只作简单叙述.
1. 二维图形
二维图形的绘制是MATLAB图形功能的基础,也是在绝大多数数值计算中广泛应用的图形方式之一. 1、基本绘图命令
(1). plot命令 绘制二维图形最常用的函数是plot函数,对于不同形式的输入,该函数可以实现不同的功能.
(i). 当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的维数必须相同,而且同时为行向量或同时为列向量.此时以第一个向量的分量为横坐标,第二个向量的分量为纵坐标绘制图形,这是实际应用过程中最为常用的.例如:
11
广州大学2010数学建模暑期培训专题之MATLAB
>>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')]; >>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 六角星.
应用上述符号的不同组合可以为图形设置不同的线型、颜色、标识.在调用时,选项应置于单引号内,当多于一个选项时,各选项直接相连,中间不需要任何的分隔符.如:
>>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命令来绘图,则有可能会因为自变量的取值间隔不合理而使曲线图形不能反映出自变量在某些区域内函数值的变化情况.当然我们可以将自变量间隔取得足够小以体现函数值随自变量变化的曲线,但这样会使数据量变大.
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
12
广州大学2010数学建模暑期培训专题之MATLAB
图5 图6
2、图形处理的基本技术
除了提供强大的绘图功能外,MATLAB语言还有极为强大的图形处理能力.下面介绍一些图形处理技术,包括图形控制、图形标注、图形保持以及子图的绘制等.
(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 off 或 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 禁止对图形进行缩放;
13
广州大学2010数学建模暑期培训专题之MATLAB
zoom xon 允许x 轴缩放; zoom yon 允许y轴缩放;
zoom out 恢复进行的一切缩放.
当zoom处于on 状态时,可以通过鼠标进行图形缩放,单击鼠标左键将光标处的图形放大一倍;而单击鼠标右键将光标处的图形缩小一倍;双击鼠标左键则将会恢复缩放前的状态,即取消一切缩放操作.
应当注意,对图形的缩放不会影响图形的原始尺寸,也不会影响图形的横纵坐标的比例,即不会改变图形的基本结构.
(iii). grid函数控制平面图形的坐标网格:MATLAB提供了平面网图函数grid用于绘制坐标网格,提高图形显示效果.grid函数的调用格式如下:
grid on 在图形中绘制坐标网格; grid off 取消坐标网格.
单独的函数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',…) %属性包括标注文本的属 性,包括字体大小、字体名等.
三个函数的调用结果的区别仅在于标注所处的位置不同,title 给出的标注将置于图的 顶部,而xlabel 和ylabel则分置于相应的坐标轴的边上.例如:
>>x=1:0.1*pi:2*pi; y=sin(x); >>plot(x,y)
>>xlabel('x(0-2\\pi)', 'fontweight', 'bold');
>>title('y=sin(x)','fontsize', 12, 'fontweight', 'bold') %12不加单引号 %图9
图9 图10
在标注过程中经常会遇到特殊符号的输入问题,为了解决这个问题,MATLAB语言提供了相应的字符转换,如:\\alpha→α;\\beta→β;\\gamma→γ;\\delta→δ;\\epsilon→ε;\\zeta→δ;\\pi→π;\\omega→ω;\\Omega→Ω等等.
14
广州大学2010数学建模暑期培训专题之MATLAB
用户也可以对文本标注进行显示控制,如:\\bf 黑体,\\it 斜体,\\rm 标准形式,例如: >>x=-10:0.1:10; y=exp(-x.^2/2); >>plot(x,y, '-')
>>title('\\bf y=e^{-x^{2}/2}') %图10 (ii). 文本标注
MATLAB对图形进行文本注释所提供的函数为text和gtext. text函数的调用格式: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(3\\pi/4)=0.707')
>>text(5*pi/4,sin(5*pi/4),['sin(5\\pi/4)=',num2str(sin(5*pi/4)),'\\rightarrow'],'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', 12)
执行该函数时,将鼠标放在图形上会出现“+”字型交叉线供用户添加标注的点,选择添加标注的位置后,单击鼠标左键即可在该位置上添加标注.
(iii). 图例标注
在对数值计算结果进行绘图时,经常会出现在同一张图形中绘制多条曲线的情况,这时可以使用legend命令为曲线添加图例以便于区别它们.legend 函数能够为图形中的所有曲线进行自动标注,以其输入变量作为标注文本,具体调用格式如下:
legend('标注1', '标注2',…) 标注1,标注2等分别对应绘图过程中按绘制先后顺序所 生成的曲线.
>>x=0:0.1*pi:2*pi; y=sin(x); z=cos(x); >> plot(x,y,'k-o',x,z,'k--h')
>>legend('sin(x)', 'cos(x)') %图12
可以用鼠标拖动图例框改变其在图中的位置.也可以在legend函数调用时进行简单的定位设置:legend('标注1', '标注2',…, '定位代号')
15
广州大学2010数学建模暑期培训专题之MATLAB
MATLAB 给出了6个定位代号,具体说明如下:
0: 自动定位,使得图标与图形重复最少;1: 置于图形的右上角(默认值);2: 置于图形的左上角;3: 置于图形的左下角;4: 置于图形的右下角;-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(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).子图
16
广州大学2010数学建模暑期培训专题之MATLAB
在绘图过程中,经常需要将几个图形在同一图形窗口中表示出来,但又不在同一个坐标系中绘制,此时要用到函数subplot.调用格式如下:
subplot(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(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('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.01*pi:4*pi; >>y=sin(x/2)+x;
17
广州大学2010数学建模暑期培训专题之MATLAB
>>polar(x,y,'k-') %图15
图15
(2). 二维特殊函数图
下列函数可以绘制其它的二维特殊函数图形:area填充绘图;bar条形图;barh水平条形图;comet彗星图; ezpolar简单绘制极坐标图;feather矢量图;fill多边形填充;gplot拓扑图;hist直方图;pie饼状图;rose极坐标系下的柱状图等等.以上各函数均有不同的调用方法,详细内容读者可以通过MATLAB在线帮助获得.
2. 三维图形
三维图形的绘制与二维图形的绘制在许多方面都很类似,其中曲线的属性设置完全相同.最常用的三维绘图是绘制三维曲线图、三维网格图和三维曲面图三种基本类型,相应的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,s2,…)
例如:>>x=0:pi/50:10*pi; plot3(cos(x),sin(x),x) %绘制螺旋线图16
18
广州大学2010数学建模暑期培训专题之MATLAB
图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) %三维网格表面,图17 MATLAB中的网图函数meshc、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) >>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命令窗口中运行上面的命令得到.
第二部分 Matlab与数学实验
一、插值 1. 一维插值
1. Lagrange 插值
容易产生Runge现象,是一种不稳定的插值。不实用。
设n个节点以数组x0,y0输入,m个插值点以数组x输入。输入数组y为m个插值。 注意:程序中用n个节点而不是n+1个节点。 命名lagr.m。程序为 function y=lagr(x0,y0,x)
19
因篇幅问题不能全部显示,请点此查看更多更全内容