2024年3月10日发(作者:考研数学试卷分数满分多少)

第 1 节Matlab 基本知识

一、 Matlab 的主要功能

Matlab是一种功能非常强大的工程语言,诞生于20世纪70年代,1984年正式推向市

场。2002年8月,Matlab6.5开始发布。是进行科学研究和产品开发必不可少的工具。

 数值和符号计算

矩阵(数组)的四则运算(Matrix+Laboratory)、数值差分、导数、积分、求解微分方

程、微分方程的优化等

 数字图像、数字信号处理

 工程和科学绘图

 控制系统设计

 财务工程

 建模、仿真功能

二、 Matlab 的界面

1.命令窗口(Command Window):

Matlab各种操作命令都是由命令窗口开始,用户可以在命令窗口中输入Matlab命令,实

现其相应的功能。此命令窗口主要包括文本的编辑区域和菜单栏(如:四则运算;“;”禁止

显示变量的值;↑↓遍历以前的命令)。在命令窗口空白区域单击鼠标右键,打开快捷菜单,

各项命令功能如下:

Evaluate Selection :打开所选文本对应的表达式的值。

Open Selection :打开文本所对应的MatLab文件。

Cut :剪切编辑命令。

Paste :粘贴编辑命令。

2. M-文件编辑/调试(Editor/Debugger)窗口

Matlab Editor/Debugger窗口是一个集编辑与调试两种功能于一体的工具环境。

M-文件(函数文件)

 什么是M-文件:它是一种和Dos环境中的批处理文件相似的脚本文件,对于简单问题,

直接输入命令即可,但对于复杂的问题和需要反复使用的则需做成M-文件(Script

File)。

 创建M-文件的方法:

Matlab命令窗的File/New/M-file。

在Matlab命令窗口运行edit。

 M-文件的扩展名: *.m

 执行M-文件:F5

 M文件的调试

选择Debug菜单,其各项命令功能如下:

1

Step :逐步执行程序。

Step in :进入子程序中逐步执行调试程序。

Step out :跳出子程序中逐步执行调试程序。

run:执行M-文件。

Go Until Cursor :执行到光标所在处。

Exit Debug Mode :跳出调试状态。

 函数文件的创建要求:文件名与函数名必须相同,如sin(x)必有sin.m函数文件存在。

要求实参和形参位置一一对应。形参在工作空间中不会存在。

可以编写递归函数,可以嵌套其他函数。

可以用return命令返回,也可以执行到终点返回

3.工作空间(Workspace)窗口:

显示目前保存在内存中的Matlab的数学结构、字节数、变量名以及类型窗口。

保存变量:File菜单Save Workspace as 命令行:save 文件名

装入变量:File菜单Import Data 命令行:Load 文件名

4.现在目录窗口(Current Directory)

5.命令历史窗口(Command History ):提供先前使用过的函数,可以复制或者再次执行

这些命令。

Matlab帮助系统

Matlab在命令窗口提供了可以获得帮助的命令,用户可以很方便的获得帮助信息。例

如:在窗口中输入“help fft”就可以获得函数“fft”的信息。常用的帮助信息有

help ,demo ,doc ,who ,whos ,what ,which ,lookfor ,helpbrowser ,helpdesk ,exit ,web 等。

三、关于变量

变量命名规则:

 变量名是不包含空格的单个词

 变量名区分大小写

 变量名必须以字母开头的字母、数字、下划线的组合,最多19个字符。

 Matlab提供的标准函数名均以小写字母开头

特殊变量名:

 ans 缺省变量名

 pi 圆周率

 i,j 虚数单位

 eps 无穷小

 inf ,Inf 无穷大

 realmax 最大正实数

 realmin 最小正实数

清除变量的值

 clear

 clear 变量名1 变量名2

显示驻留内存的变量名

 who

2

 whos

第 2 节 Matlab编程

一、矩阵(数组)的输入

1、直接输入

直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空

格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;多维矩阵用多

重方括弧。可建立复数矩阵

如: Null_M = [ ] %生成一个空矩阵

可建立复数矩阵

R=[1,2,3;4,5,6]

I=[7,8,9;10,11,12]

Z=R+I*j

2. 由M文件方式建立,今后使用键入M文件名即可建立相应矩阵

2、利用函数输入

“:”表达式,产生等差行向量 start:step:end 或start:end(step=1)如:t=1:

20

产生等距输入: linspace(a,b,n) 将〔a,b〕区间分成n-1个等距小区间

产生随机排列: randperm(n) 产生1~n之间整数的随机排列

3、特殊矩阵输入

zeros(n) 生成n×n全零阵,

zeros(a,b) 元素全为0的a×b维矩阵, 以下各函数同理具有该类型。

zeros(size(A)) 生成与矩阵A相同大小的全零阵,

ones(a,b) 元素全为1的a×b维矩阵

eye(a,b) 对角线上的元素为1的a×b维矩阵

rand(a,b) 产生a×b维均匀分布的随机矩阵,其元素在(0,1)内

rand 无变量输入时只产生一个随机数

randn(a,b)产生a×b维正态分布的随机矩阵

4.矩阵的转置和逆矩阵

 X的转置:X’ ( 图像顺时针旋转90°,并水平镜像)

如:a=imread(\'D:\');

b=a\';

subplot(1,2,1),subimage(a),subplot(1,2,2),subimage(b)

 X的逆矩阵 inv(X)

二、矩阵元素的访问及其大小的确定

访问第n个元素: X(n)(n>=1)

访问多个元素: X ([n1,n2,n3……]) 或 X(1:10)

确定元素的个数: numel(X)

确定矩阵的大小: [m,n,l]=size(X)

3

三、矩阵的算数运算

 数与矩阵的运算:m等价于m.

m+A : m与A中各元素相加

m-A : m与A中各元素相减

m×A : m与A中各元素相乘

m. /A : m除以A中各元素 (没有m/A)

m A : A中各元素除以m

 矩阵与矩阵的运算

A+B: A、B对应元素相加

A-B: A、B对应元素相减

A×B: A、B矩阵按线性代数中矩阵乘法运算进行相乘(注意维数匹配)

A.*B: A、B对应元素相乘(注意维数相同)

A / B: A除以B矩阵 (A×B

1

)(注意维数匹配)

A./B: A除以B中各元素

A B: B除以A矩阵 (A

1

×B)(注意维数匹配)

A.B: B除以A中各元素

A^m: 相当于矩阵A×矩阵A×矩阵A…….(m为小数即是矩阵的开方运算)(注意维数

匹配)

A.^m:矩阵A中各元素的m次方

A.^B:矩阵A中各元素的进行B中对应元素次方(注意维数相同)

四、关系运算

<、<=、>、>=、= =、~ = 六种关系运算符。关系成立结果为1,否则为0。

五、逻辑运算

设矩阵A和B都是m×n矩阵或其中之一为标量,在MATLAB中定义了如下的逻辑运

算:&、|、~、xor(真为1,假为0)

(1)矩阵的与运算

格式 A&B或and(A, B)

说明 A与B对应元素进行与运算,若两个数均非0,则结果元素的值为1,否则为0。

(2)或运算

格式 A|B或or(A, B)

说明 A与B对应元素进行或运算,若两个数均为0,则结果元素的值为0,否则为1。

(3)非运算

格式 ~A或not (A)

说明 若A的元素为0,则结果元素为1,否则为0。

(4)异或运算

格式 xor (A,B)

说明 A与B对应元素进行异或运算,若相应的两个数中一个为0,一个非0,则结果

为0,否则为1。

4

六、集合运算

1.两个集合的交集 intersect

2.检测集合中的元素 ismember

3.两集合的差 setdiff

4.两个集合交集的非(异或)函数 setxor

5.两集合的并集 union

6.取集合的单值元素 unique

七、MatLab的控制流

由各种语句构成

语句后面加“;”号,不显示运算结果

%开头表示是注释语句

赋值语句

变量=表达式

表达式 (相当于将值付给ans变量)

演示(三)

for循环结构

【例】一个简单的for循环示例。

for i=1:10;

x(i)=i;

end;

x

x =

%i依次取1,2,…10,.

%对每个i值,重复执行由该指令构成的循环体,

%要求显示运行后数组x的值。

1 2 3 4 5 6 7 8 9 10

while循环结构

【例】Fibonacci数组的元素满足Fibonacci 规则:

a

k2

a

k

a

k1

(k1,2,)

;且

a

1

a

2

1

。现要求计算出该数组中第一个大于10000的元素。

a(1)=1;a(2)=1;i=2;

while a(i)<=10000

a(i+1)=a(i-1)+a(i);

i=i+1;

%当现有的元素仍小于10000时,求解下一个元素。

end;

i,a(i),

i =

21

ans =

10946

if-else-end分支结构

【例1】一个简单的分支结构。

cost=10;number=12;

5

if number>8

sums=number*0.95*cost;

end,sums

sums =

114.0000

【例2】用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。

n=100;a=ones(1,n);

for i=3:n

a(i)=a(i-1)+a(i-2);

if a(i)>=10000

a(i),

break; %跳出所在的一级循环。

end;

end,i

ans =

10946

i =

21

switch-case结构

【例】学生的成绩管理,演示switch结构的应用。

clear;

%划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。

for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];

Name={\'Jack\',\'Marry\',\'Peter\',\'Rose\',\'Tom\'}; %元胞数组

Mark={72,83,56,94,100};Rank=cell(1,5);

%创建一个含5个元素的构架数组S,它有三个域。

S=struct(\'Name\',Name,\'Marks\',Mark,\'Rank\',Rank);

%根据学生的分数,求出相应的等级。

for i=1:5

switch S(i).Marks

case 100

%得分为100时

%列为\'满分\'等级

%得分在90和99之间

%得分在80和89之间

%得分在60和79之间

%得分低于60

S(i).Rank=\'满分\';

case a

case b

S(i).Rank=\' 优秀\'; %列为\'优秀\'等级

S(i).Rank=\' 良好\'; %列为\'良好\'等级

case c

otherwise

S(i).Rank=\' 及格\'; %列为\'及格\'等级

S(i).Rank=\'不及格\'; %列为\'不及格\'等级

end

end

%将学生姓名,得分,登记等信息打印出来。

disp([\'学生姓名 \',\' 得分 \',\' 等级\']);disp(\' \')

6

for i=1:5;

disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);

end;

学生姓名 得分 等级

Jack 72 及格

Marry 83 良好

Peter 56 不及格

Rose 94 优秀

Tom 100 满分

try-catch结构

【例】try-catch结构应用实例。

clear,N=4;A=magic(3);

try

A_N=A(N,:),

catch

%设置3行3列矩阵A。

%取A的第N行元素

A_end=A(end,:),

end

lasterr

A_end =

ans =

%如果取A(N,:)出错,则改取A的最后一行。

%显示出错原因

4 9 2

Index exceeds matrix dimensions.

7

第二章 符号数学工具(Symbolic Math Toolbox)

第 1 节 符号表达式

符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。不要

求变量有预先确定的值,符号方程式是含有等号的符号表达式。如表2.1所列。

表2.1

符号表达式

1

2x

n

1

y2x

在MATLAB中的表示

\' 1/(2*x^n) \'

y= \' 1/sqrt(2*x) \'

\' cos(x^2)-sin(2*x) \'

M=sym( \' [a,b;c,d] \' )

cos(x

2

)sin(2x)

ab

M



cd

b

a

x

3

dx

1x

f=int( \' x^3/sqrt(1-x) \' , \' a \' , \' b

\' )

注意:加单引号’’表示是一个符号表达式而不是数字表达式。

符号函数:让用户操作上述符号表达式的方法和函数,比如:

>> diff( \'cos(x)\' ) % differentiate cos(x) with respect to x

ans=

-sin(x)

>> M=sym( \'[a,b;c,d] \') % create a symbolic matrix M

M=

[a,b]

[c,d]

注意:1.建立符号数组时,最好用上函数sym

2.许多符号函数可以自动将字符转变为符号表达式。例如diff cos(x) 也可以,

>> diff x^2+3*x+5 % the argument is equivalent to \' x^2+3*x+5 \'

符号变量是符号表达式中的变量,如:’x+3*y+z’中的x,y,z。

独立变量是当符号表达式中含有多于一个的变量时,只有一个变量是独立变量。缺省

的独立变量是x,如果没有x,则选择最靠近x的作为独立变量。如表达式 \' 1/(5+cos(x)) \' 中

8

是 \' x \' ;在 \' 3*y+z \' 中是 \' y \' ;在 \' a+sin(t) \' 是 \' t \' ,而表达式 \' sin(pi/4)-cos(3/5) \' 是

一个符号常数无符号变量。可利用函数symvar询问MATLAB在符号表达式中哪一个变量它

认为是独立变量(系统找不到一个独立变量,便假定无独立变量并返回x)。

>> symvar( \' a*x+y*) % find the default symbolic variable

ans=

x

>> symvar( \' a*t+s/(u+3) \' ) % u is the closest to \' x \'

ans=

u

>> symvar( \' sin(omega) \' ) % \' omega \' is not a singlee character。

ans=

x

>> symvar( \' 3*i+4*j \' ) % i and j are equel to sqrt(-1)

ans=

x

指定独立变量:

>> diff( \' x^n \' ) % differentiate with respect to the default variable \' x \'

ans=

x^n*n/x

>> diff( \' x^n \' , \' n \' ) % differentiate x^n with respect to \' n \'

ans=

x^n*log(x)

>> diff( \' sin(omega) \' ) % differentiate using the default variables (x)

ans=

0

>> diff( \' sin(omega) \' , \' omega \' ) % specify the independent variable

ans=

cos(omega)

第 2 节 符号表达式运算(目的:更方便的构造符号表达式)

标准代数运算:

symadd、symsub、symlnul、symdiv:分别为加、减、乘、除两个表达式

sympow:将一个表达式上升为另一个表达式的幂次

例如:给定两个函数

f2x

2

3x5gx

2

x7

>> f= \' 2*x^2+3*x-5 \' % define the symbolic expression

f=

2*x^2+3*x-5

>> g= \' x^2-x+7 \'

g=

x^2-x+7

9

>> symadd(f,g) % find an expression for f+g

ans=

3*x^2+2*x+2

>> symsub(f,g) % find an expression for f-g

ans=

x^2+4*x-12

>> symmul(f,g) % find an expression for f*g

ans=

(2*x^2+3*x-5)*(x^2-x+7)

>> symdiv(f,g) % find an expression for f/g

ans=

(2*x^2+3*x-5)/(x^2-x+7)

>> sympow(f,\'3*x\') % find an expression for

f

3*

ans =

(2*x^2+3*x-5)^(3*x)

联接运算:

symop:

取由逗号隔开的、多至16个参量。各个参量可为符号表达式、数值或算子(\' + \'、\' - \'、

\'*\'、\' / \'、\' ^ \'、\' ( \'或\' ) \'),然后symop可将参量联接起来,返回最后所得的表达式.

>> f= \' cos(x) \' % create an expression

f=

cos(x)

>> g= \' sin(2*x) \' % create another expression

g=

sin(2*x)

>> symop(f,\'/ ',g,\'+\',3) % combine them

ans=

cos(x)/sin(2*x)+3

高级运算:

compose:把

f(x)

g(x)

复合成

f(g(x))

finverse: 求函数的逆函数;

symsum:求表达式的序列和。

compose

给定表达式

f

1

1x

2

gsin(x)h

1

1u

2

k=sin(v)

10

>> syms x y u v

f = 1/(1 + x^2); g = sin(y); h = 1/(1+u^2); k= sin(v);

% create the four expression

>> compose(f,g) % find an expression for f(g(x))

ans=

1/(1+sin(y)^2)

>> compose(g,f) % find an expression for g(f(x))

ans=

sin(1/(1+x^2))

用于含有不同独立变量的函数表达式:

>> compose(h,k,\'u\',\'v\') % given h(u),k(v),find(k(v))

compose(h,k) % 结果一样

ans=

1/(1+sin(v)^2)

finverse

表达式譬如

f(x)

的函数逆

g(x)

满足

g(f(x))

=

x

。例如,

e

x

的函数逆是

ln(x)

,因为

ln

(

e

x

)=

x

sin(x)

的函数逆是

arcsin(x)

,函数

1

1

的函数逆是

arcsin

()

。函数finverse返回表达式的

tan(x)

x

函数逆。如果解不是唯一就给出警告。

>> syms x a b c d z

>> finverse(1/x) % the inverse of 1/x is 1/x since \' 1/(1/x)=x \'

ans=

1/x

>> finverse(x^2 ) % g(x^2)=x has more than one solution

Warning: finverse(x^2) is not unique

ans=

x^(1/2)

>> finverse(a*x+b ) % find the solution to \' g(f(x))=x \'

ans=

-(b-x)/a

>> finverse( a*b+c*d-a*z ,\' a \' ) % find the solution to \' g(f(a))=a \'

ans=

-(c*d-a)/(b-z)

11

symsum

求表达式的序列和有四种形式:

symsum(f)返回

f(x)

0

x1

symsum(f,\' s \' )返回

f(s)

0

s1

symsun(f,a,b)返回

f(x)

a

b

symsun(f, \' s \' ,a,b)返回

f(s)

a

b

x

3

x

2

x

1.

x

,它应返回:



326

0

x1

2

>> syms n x %一定要定义符号变量,即使是x

>> symsum(x^2)

ans=

1/3*x^3-1/2* x^2+1/6*x

2.

>> symsum((2*n-1)^2,1,n)

ans=

11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3

n

(2n1)

2

,它应返回

1

n(2n1)(2n1)

3

1

2

3.

,返回应是。

2

8

(2n1)

1

>> syms n

>> symsum( 1/(2*n-1)^2,1,inf)

ans=

1/8*pi^2

变量替换:

subs 将某个符号变量用另一个符号变量来表示。

格式:subs(f,old,new)如:

12

>> f= \' a*x^2+b*x+c \' % create a function f(x)

f=

a*x^2+b*x+c

>> subs(f,\'x\',\'s\') % substitute \' s \' for \' x \' in the

expression f

ans=

a*s^2+b*s+c

>> subs(f,\'a\',\'alpha\') % substitute \' alpha \' for \' a \' in f

ans=

alpha*x^2+b*x+c

求符号表达式的函数值

为了得到数字,需要使用函数eval 来转换字符串。

>> syms x

>> f=symsum(x^2)

>> x=2

>> eval(f)

第 3 节 微积分(Calculus)函数

微分和积分广泛地用在许多工程学科,这部分的主要函数有:

diff():Differentiate.(微分)

Int():Integrate(积分)

Jacobian():Jacobian matrix(雅可比行列式)

Limit():Limit of an expression.(极限)

Symsum():Summation of series(序列和)

Taylor():Taylor series expansion(泰勒级数)

微分和差分:diff

>> f= \' a*x^3+x^2-b*x-c \' % define a symbolic expression

f=

a*x^3+x^2-b*x-c

>> diff(f) % differentiate with respect to the default variable x

ans=

3*a*x^2+2*x-b

>> diff(f,\'a \') % differentiate with respect to a

ans=

x^3

13

>> diff(f,2) % differentiate twice with respect to x

ans=

6*a*x+2

>> diff(f,\' a \',2) % differentiate twice with respect to a

ans=

0

>> m=[(1: 8).^2)] % create a vector

M=

1 4 9 16 25 36 49 64

>> diff(M) % find the differences between elements

ans=

3 5 7 9 11 13 15

如果diff的表达式或可变参量是数值,MATLAB就非常巧妙地计算其数值差分;如果参

量是符号字符串或变量,MATLAB就对其表达式进行微分。

积分int:

格式:int(f),其中f是一符号表达式,它力图求出另一符号表达式F使diff(F)=f。

注意:积分或逆求导不一定是以封闭形式存在,或存在但软件也许找不到,或者软件

可明显地求解,但超过内存或时间限制。当MATLAB不能找到逆导数时,它将返回未经计

算的命令。

>> int( \' log(x)/exp(x^2) \' ) % attempt to integrate

ans=

log(x)/exp(x^2)

积分函数的多种形式:

int(f):相对于缺省的独立变量x求逆导数

int(f,\' s \'):相对于符号变量s积分

int(f,a,b)和int(f,\' s \',a,b):a,b是数值,求解符号表达式从a到b的定积分

int(f,\' m \' ,\' n \')和形式int(f,\' s \',\' m \',\' n \'):其中m,n是符号变量,求解符号表

达式从m到n的定积分。

>> f=\' sin(s+2*x) \' % crate a symbolic function

f=

sin(s+2*x)

>> int(f) % integrate with respect to x

ans=

-1/2*cos(s+2*x)

14

>> int(f,\' s \') % integrate with respect to s

ans=

-cos(s+2*x)

>> int(f,pi/2,pi) % integrate with respect to x from

/2 to

ans=

-cos(s)

>> int(f,\' s \',pi/2,pi) % integrate with respect to s from

/2 to

ans=

2*cos(x)^2-1-2*sin(x)*cos(x)

>> int(f,\' m \',\' n \') % integrate with respect to x from m to n

ans=

-1/2*cos(s+2*n)+1/2*cos(s+2*m)

diff 和 int 均可以对符号数组的每一个元素进行运算。

>> F=sym( \'[a*x,b*x^2;c*x^3,d*s] \' ) % create a symbolic array

F =

[ a*x, b*x^2]

[ c*x^3, d*s]

>> int(F) % ubtegrate the array elements with respect

to x

ans=

[1/2*a*x^2,1/3*b*x^3]

[1/4*c*x^4, d*s*x]

第 4 节 数字信号处理常用Matlab函数简介

一、典型离散信号表示方法

1.单位冲击序列δ(n)

δ(n)可以用zero函数来实现:

x=zeros(1,N);

x(1)=1;

2.单位阶跃序列u(n)

可以用ones函数来实现

X=ones(1,N);

3.正弦序列

n=0:N-1;

x=A*sin(2*pi*f*n*Ts);

4.指数序列

15

N=1:N;

X=a.*^n;

5.复指数序列

n=0:N-1;

x=exp(j*w*n);

6.随机序列

Rand(1,N) :产生[0,1]上的均匀分布的随机序列;

Rand(1,N) :产生均值为0,方差为1的高斯随机序列,即白噪声序列。

二、滤波器分析与实现

滤波器分析与实现常用函数

abs

angle

conv

conv2

deconv

f1 filt

filter

filter2

filtfilt

filtic

freqs

freqspace

freqz

freqzplot

gGrpdelay

latcfilt

impz

medfilt1

sosfilt

zplane

upfirdn

unwrap

求绝对值

求相角

求卷积

求二维卷积

翻卷积

重叠相加法fft滤波器实现

直接滤波器实现

二位数字滤波器

零相位数字滤波器

Filter初始条件选择

模拟滤波器频率响应

画出频率响应曲线

数字滤波器频率响应

画出频率响应曲线

平均滤波延迟

格型滤波实现

数字滤波器中的单位冲击响应

一维中值滤波

二次分式滤波器实现

离散系统零、极点图

上抽样

去除相位

1. abs

y=abs(x) 计算x的绝对值,当x为复数时,其算其模值。当x为字符串时,计算各个

字符的ASCII码。

2. angle

φ= angle(h) 计算复矢量或者复矩阵的相角(以弧度为单位),相角介于-л~л之间。

3.conv

c=conv(a,b) 对序列a,b进行卷积运算。

4.filter

y=filter(b,a,x) 计算输入信号x的滤波器输出,向量a,b分别是所采用的滤波器的分

子系数向量和滤波器的分母向量。

[y,zf]=filter(b,a,x,zi) 参数zi指定滤波器的初始条件,其大小为

zi=max(length(a),length(b))-1

y=filter(b,a,x,zi,dim) dim指定滤波器的维数。'zi'=[]或0表示空集。

16

5. impz

[h,t]=impz(b,a)

返回参数h是冲击相应的数值;返回t是冲击相应的抽样时间间隔。

[h,t]=impz(b,a,N)

N用来制定冲激信号长度。如果N是一个整数向量,只返回N元素所对应时刻的抽

样数值的冲击结果。N为[],表示不制定冲激信号的长度,其长度与滤波器结构保持一致。

[h,t]=impz(b,a,N,fs)

Fs用来指定冲击信号的抽样频率,默认值是1。

三、信号变换

常用变换函数

czt

dct

dftmtx

fft

fft2

fftshift

Hilbert

idct

ifft

ifft2

Chirp z变换

离散余弦变换

离散傅里叶变换

一维快速傅里叶变换

二维快速傅里叶变换

重新排列fft输出

Hilbert变换

离散余弦反变换

一维快速傅里叶反变换

二维快速傅里叶反变换

1.fft

Y=fft(X)

若X是向量,则采用傅里叶变换求解X离散傅里叶变换;若X是矩阵,则计算该

矩阵每一列的离散傅里叶变换。

Y=fft(X,N)

N是进行离散傅里叶变换的X的数据长度,可以通过对X进行补或截取来实现。

Y=fft(X,[],dim)

在参数dim指定的维上进行傅里叶变换。X是矩阵时,dim用来指变换的实施方向:

dim=1,表明变换按列进行;dim=2,表明变换按行进行。

第 5 节 方程求解

一、求解单个变量的代数方程:利用 solve函数

1.没有=号的表达式,用solve将其置成等于0。

>> solve( \' a*x^2+b*x+c \' ) % solve for the roots of the quadratic

eqution

ans=

[1/2/a*(-b+(b^2-4*a*c)^1/2)]

[1/2/a*(-b-(b^2-4*a*c)^1/2)]

注:方程有2个解。

2.对其他非缺省变量求解,在 solve 中指定出该变量。

>> solve( \' a*x^2+b*x+c \' , \' b \' ) % solve for b

17

ans=

-(a*x^2+c)/x

3.对带有等号的方程求解。

>> f=solve( \' cos(x)=sin(x) \' ) % solve for x

f=

1/4*pi

>> t=solve( \' tan(2*x)=sin(x) \' )

t =

[ 0]

[ pi]

[ atan(1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))]

[ atan(-1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))]

[ atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))+pi]

[ -atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))-pi]

二、单个常微分方程求解:利用 dsovle函数

dsovle 函数的句法:用字母D来表示求微分,D2,D3等等表示二阶、三阶微分,并以

此来设定方程。任何D后所跟的字母为因变量。方程

d

2

y

/

dx

2

=0用符号表达式D2y=0来表示。

独立变量可以指定或由symvar规则选定为缺省。

例1,求一阶方程

dy/dx

=1+y

2

的解,其通解为:

>> dsolve( \' Dy=1+y^2 \' ) % find the general solution

ans=

tan(t+C1) %C1是积分常数

给定初值y(0)=1的方程的解:

>> dsolve(\'Dy=1+y^2 \',\' y(0)=1 \') % add an initial condition

y=

tan(t+1/4*pi)

指定独立变量:

>> dsolve(\' Dy=1+y^2 \',\' y(0)=1 \',\' v \') % find solution to dy/dv

ans=

tan(v+1/4*pi)

例2:求二阶微分方程的解,方程有两个初始条件:

d

2

y

dy

=cos(2x)-y (0)=0 y(0)=1

2

dx

dx

>> y=dsolve(\'D2y=cos(2*x)-y \',\' Dy(0)=0 \',\' y(0)=1 \',\'x\')

y=

(1/6*cos(3*x)-1/2*cos(x))*cos(x)+(1/2*sin(x)+1/6*sin(3*x))*sin(x)+4/3*cos(x)

18

>> y=simple(y) % y looks like it can be simplified

y=

-1/3*cos(2*x)+4/3*cos(x)

例3:求解下列形式的微分方程

d

2

y

dy

--y=0

2

dx

dx

通解为: >> y=dsolve( \'D2y-2*Dy-3*y=0 \',\'x\')

y =

C1*exp(-x)+C2*exp(3*x)

加上初始条件:

y(0)=0

y(1)=1

可得到:

>> y=dsolve( \'D2y-2*Dy-3*y=0 \',\'y(0)=0\',\'y(1)=1\',\'x\')

y=

1/(exp(-1)-exp(3))*exp(-x)-1/(exp(-1)-exp(3))*exp(3*x)

>> y=simple(y) % this looks like a candidate for simplification

y=

(exp(-x)-exp(3*x))/(exp(-1)-exp(3))

>> pretty(y) % pretty it up

exp(-x)-exp(3 x)

- ---------------------

exp(3) -exp(-1)

小结

下列各表综合了符号数学工具箱的特性:

符号表达式的运算

eval

Pretty

Subs

Sym

Symadd

Symdiv

Symmul

Symop

Sympow

Symrat

Symsub

Symvar

符号到数值的转换

显示悦目的符号输出

替代子表达式

建立符号矩阵或表达式

符号加法

符号除法

符号乘法

符号运算

符号表达式的幂运算

有理近似

符号减法

求符号变量

符号表达式的简化

19

Collect

Expand

Factor

Simple

Simplify

symsum

合并同类项

展开

因式

求解最简形式

简化

和级数

符号多项式

Charpoly

Horner

Numden

poly2sym

sym2poly

特征多项式

嵌套多项式表示

分子或分母的提取

多项式向量到符号的转换

符号到多项式向量的转换

符号微积分

Diff

Int

Jordan

Taylor

微分

积分

约当标准形

泰勒级数展开

符号可变精度算术

Digits

Vpa

设置可变精度

可变精度计算

求解符号方程

Compose

Dsolve

Finverse

Linsolve

Solve

函数的复合

微分方程的求解

函数逆

齐次线性方程组的求解

代数方程的求解

符号线性代数

Charploy

Determ

Eigensys

Inverse

Jordan

Linsolve

Transpose

特征多项式

矩阵行列式的值

特征值和特征向量

矩阵逆

约当标准形

齐次线性方程组的解

矩阵的转置

离散信号的表示法

20

第三章 函数绘图

数据图形能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。

MATLAB可以表达出数据的二维,三维,甚至四维的图形。

第 1 节 二维图形

一、基本平面图形绘制命令:plot

功能 线性二维图。

格式 plot(X,’s’) X为实向量的时候,以该向量元素的下标为横坐标,元素值为纵坐标,

绘出一条连续曲线。

plot(X,Y) X,Y为同维向量时,绘制以X、Y元素为横、纵坐标的曲线。

X为向量,Y为一维或多维矩阵时,绘出多条不同颜色的曲线。X为

这些曲线共同的横坐标。

plot(Y):Y的维数为m,则plot(Y)等价于plot(x,Y),其中x=1:m

plot(X1,Y1,X2,Y2,…),其中Xi与Yi成对出现

plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2…) 将按顺序分别画出由三参数定义

Xi,Yi,LineSpeci的线条。其中参数LineSpeci指明了线条的类型,标记符号,

和画线用的颜色。

可混合使用三参数和二参数的形式:plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,LineSpec3)

plot(…,\'PropertyName\',PropertyValue,…) 对图形对象中指定的属性进行设置。

h = plot(…) 返回line图形对象句柄的一列向量,一线条对应一句柄值。

允许用户对线条定义的属性

1.线型

定义符 -

线型

-- :

点线

-.

点划线 实线(缺省值) 划线

2.线条宽度 ’LineWidth’

指定线条的宽度,取值为整数(单位为像素点)

3.颜色

定义符

颜色

R(red)

红色

G(green)

绿色

y(yellow)

b(blue)

兰色

k(black)

c(cyan)

青色

w(white) 定义符 M(magenta

)

颜色

4.标记类型

品红 黄色 黑色 白色

21

定义符

标记类型

定义符

标记类型

定义符

标记类型

+

加号

d

棱形

s

正方形

O(字母)

小圆圈

^

向上三角形

h

正六角星

*

星号

v

向下三角形

P

正五角星

.

实点

>

向右三角形

x

交叉号

<

向左三角形

5.标记大小:\'MarkerSize’

指定标记符号的大小尺寸,取值为整数(单位为像素)

6.标记面填充颜色\'MarkerFaceColor\'

指定用于填充标记符面的颜色。取值见上表。

7.标记周边颜色 \'MarkerEdgeColor\'

指定标记符颜色或者是标记符(小圆圈、正方形、棱形、正五角星、正六角星和四个

方向的三角形)周边线条的颜色。取值见上表。

坐标轴的设置

创建图形时,用户可以制定坐标的范围、数据间隔及坐标名称。用命令axis可以控制

坐标轴的刻度及形式。

axis[Xmin ,Xmax,Ymin,Ymax]

直角坐标图形的纵横比在默认的情况下与窗口纵横比相同,用axis可以控制图形纵横

比的格式如下:

axis aquare :将两个轴的长度设置为相等;

axis equal :将坐标轴的标记检举设置为相等;

axis equal tight :将图形以紧缩的方式显示。

例:

t=(pi*(0:1000)/1000);

y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);

plot(t,y1);axis([0,pi,-1,-1])

图形标志

图形标志包括图名、坐标轴名、图形注释和图例,常用格式如下:

Title(s) :书写图名;

Xlable(s) :横坐标轴名;

Ylable(s) :纵坐标轴名;

Legend(s1,s2,…) :绘制曲线所用线型、色彩或数据点形图例;

Text(xt,yt,s) :在图面(xt , yt)坐标处书写字符注释。

多子图

Matlab允许用户在同一图形框内布置几幅独立的子图。

subplot(m,n,k) %使m*n幅子图中的第k幅成为当前图。

图形中有m*n幅图,k是子图的编号。子图的序号原则是:左上方为第一幅,向右、

下依次排号。subplot产生的子图相互独立,所有绘图指令均可以在子图中应用。

参数LineSpec的说明:

参数LineSepc可以定义线条的三个属性:线型、标记符号和颜色。对线条的上述属性

22

的定义用字符串来定义,如:plot(x,y,\'-.or\'),表示画点划线(-.),在数据点(x,y)处画

出小圆圈(o),线和标记都用红色画出。注:字符串中的字母、符号可任意组合。若仅仅

指定了标记符,而没有指定非线型,则plot只在数据点画出标记符,如:plot(x,y,’d’)。

例1 >> t = 0:pi/20:2*pi;

plot(t,t.*cos(t),\'-.r*\')

hold on

plot(exp(t/100).*sin(t-pi/2),\'--mo\')

plot(sin(t-pi),\':bs\')

>>hold off

例2

>> t=1:0.1:10

plot(t,sin(2*t),\'-mo\',\'LineWidth\',2,...

\'MarkerEdgeColor\',\'k\',...

\'MarkerFaceColor\',[0.49,1,0.63],...

\'MarkerSize\',5)

二、一元函数y=f(x)的绘图命令 fplot

fplot采用自适应步长控制来画出函数function的示意图,在函数的变化激烈的区间,

采用小的步长,否则采用大的步长。总之,使计算量与时间最小,图形尽可能精确。

注意:必须是函数,可以是一个m-文件函数或者是一个包含符号变量的函数,

如:’sin(x)*exp(2*x)’,’[sin(x),cos(x)]’。

格式:fplot(\'function\',limits) 在指定的范围limits内画出一元函数图形。其中limits是

一个指定x-轴范围的向量[xmin xmax]或者是x轴和y轴的范围的向量[xmin

xmax ymin ymax]。

fplot(\'function\',limits,LineSpec) 用指定的线型LineSpec画出函数function。

fplot(\'function\',limits,tol) 用相对误差值为tol画出函数function。相对误差的缺

省值为2e-3。

fplot(\'function\',limits,tol,LineSpec) 用指定的相对误差值tol和指定的线型

LineSpec画出函数function的图形。

fplot(\'function\',limits,n) 当n>=1,则至少画出n+1个点(即至少把范围limits

分成n个小区间),最大步长不超过(xmax-xmin)/n。

fplot(‘function’,lims,…) 允许可选参数tol,n和LineSpec以任意组合方式输入。

[X,Y] = fplot(\'function\',limits,…) 返回横坐标与纵坐标的值给变量X和Y,此时

fplot不画出图形。若想画出,可用命令plot(X,Y)。

[…] = plot(\'function\',limits,tol,n,LineSpec,P1,P2,…) 允许用户直接给函数

function输入参数P1,P2等,其中函数functiond的定义形式为

y = function(x,P1,P2,…)

若想用缺省的tol,n或LineSpec值,只需将空矩阵([ ])传递给函数即可。

23

>>fplot(\'tanh\',[-2 2])

>>subplot(2,2,1);fplot(\'humps\',[0 1])

subplot(2,2,2);fplot(\'abs(exp(-j*x*(0:9))*ones(10,1))\',[0 2*pi])

subplot(2,1,2);fplot(\'[tan(x),sin(x),cos(x)]\',2*pi*[-1 1 -1 1])

三、快速函数作图: ezplot(Easy to use function plotter)

例如

>> y=\' 16*x^2+64*x+96 \' % expression to plot

y=

16*x^2+64*x+96

>> ezplot(y)

-16*x^2+64*x+96

200

0

-200

-400

-600

-800

-1000

-6-4-20

x

246

图3.1 符号函数16*x^2+64*x+96 (-2

≤x≤2

)

24

150

-16*x^2+64*x+96

100

50

0

-50

-100

0 1 2 3

x

4 5 6

图3.2 符号函数16*x^2+64*x+96 0≤x≤6

图3.1,ezplot绘制了定义域为-2

≤x≤2

的给定符号函数,如果感兴趣的时间是从0

到6。需要指定范围,即

>> ezplot(y,[0 6]) % plot y for 0≤x≤6

函数 ezplot格式:

ezplot(f):f(x) over the default domain: -2pi < x < 2pi

f(x,y) = 0 over the default domain –2pi < x < 2pi, -2pi < y < 2pi

ezplot(f,[min,max]):f(x) over min < x < max.

f(x,y) = 0 over min < x < max and min < y < max

ezplot(f,[xmin,xmax,ymin,ymax]):f(x,y) = 0 over xmin < x < xmax and ymin < y <

ymax.

ezplot(x,y):x = x(t) and y = y(t) over the default domain 0 < t < 2

ezplot(x,y,[tmin,tmax]):x = x(t) and y = y(t) over tmin < t < tmax

绘制多条曲线:采用 hold on 或者 Y 为 二维向量

定义myfun函数

function Y = myfun(x)

Y(:,1) = 200*sin(x(:))./x(:);

Y(:,2) = x(:).^2;

ezplot(\'myfun\',[-20 20]);

25

注:ezplot 等价于 fplot 加上 title 和 xlabel、ylable

>> fplot(\'myfun\',[-20 20])

title(\'myfun\') , xlabel(\'x\'), ylabel(\'y\')

四、读取二维灰度图像

I=imread(\'E:图像\')

第 2 节 三维图形

一、三维曲线、面填色命令

命令1 comet3

功能 三维空间中的彗星图。彗星图为一个三维的动画图像,彗星头(一个小圆圈)

沿着数据指定的轨道前进,彗星体为跟在彗星头后面的一段痕迹,彗星轨道为整个函数所

画的实曲线。注意一点的是,该彗星轨迹的显示模式EraseMode为none,所以用户不能打

印出彗星轨迹(只能得到一个小圆圈),且若用户调整窗口大小,则彗星会消失。

用法 comet3(z) 用向量z中的数据显示一个三维彗星

comet3(x,y,z) 显示一个彗星通过数据x,y,z确

定的三维曲线。

comet3(x,y,z,p) 指定彗星体的长度为:p*length

(y)。

例7-24

>>t = -20*pi:pi/50:20*pi;

>>comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t);

图形的结果为图7-24。

图7-24

命令2 fill3

功能 用指定的颜色填充三维多边形。阴影类型为平面型和Gouraud型。

用法 fill3(X,Y,Z,C) 填充由参数x,y和z确定多边形。若x,y或z为矩阵,fill3生

成n个多边形,其中n为矩阵的列数。在必要的时候,fill3会自动连接最

后一个节点和第一个节点。以便能形成封闭的多边形。参数c指定颜色,

这儿c为引用当前色图的下标向量或矩阵。若c为行向量,则c的维数必须

等于x的列数和y的列数,若c为列向量,则c的维数必须等于矩阵x的行

数和y 的行数。

fill3(X,Y,Z,ColorSpec) 用指定的颜色ColorSpec填充由x,y和z确定的多边形。

fill3(X1,Y1,Z1,C1,X2,Y2,Z2,C2,…) 对多边形的不同区域用不同的颜色进行填

充。

fill3(…,\'PropertyName\',PropertyValue) 允许用户对特定的patch属性进行设

置。

h = fill3(…) 返回patch图形对象的句柄向量,每一块(patch)对应一个句柄。

运算规则:

1.若X,Y,Z为同型的矩阵,fill3生成X,Y,Z中相同位置的元素确定的顶点,每

一列生成一个多边形。

2.若只有X,Y或Z为矩阵,则fill3由列向量参数生成可用的同型矩阵。

3.若用户对填充的颜色指定为ColorSpec,则fill3生成阴影类型为flat-shaded的多边

26

形,且设置块(patch)的属性FaceColor为RGB颜色形式的矩阵。

4.若用户用矩阵C指定颜色,命令fill3通过坐标轴属性Clim来调整C中的元素,在

引用当前色图之前,用于指定颜色坐标轴的参数比例。

5.若参数C为一行向量,命令fill3生成带平面阴影(flat-shaded)的多边形,同时设

置补片对象的面颜色(FaceColor)属性为flat。向量c中的每一元素成为每一补片对象的

颜色数据(CData)属性的值。

6.若参数C为一矩阵,命令fill3生成带内插颜色的多边形,同时设置多边形补片对象

的FaceColor属性为interp。命令fill3采用对多边形顶点色图的下标指定的颜色采用线性

内插算法,同时多边形的颜色采用对顶点颜色用内插算法得到的颜色。矩阵C的每一列元

素变成对应补片对象的Cdata属性值。

7.若参数C为一列向量,命令fill3先复制C的元素,使之成为所需维数的矩阵,再

按上面的方法6进行计算。

例7-25

>>X = 10*rand(4);Y=10*rand(4);Z=10*rand(4);

>>C = rand(4);

>>fill3(X,Y,Z,C)

图形结果可能为图7-25。

二、7.2.2 三维图形等高线

图7-25

命令1 contour

功能 曲面的等高线图

用法 contour(z) 把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲

线,平面的高度v是Matlab自动取的;

contour(x,y,z) (x,y)是平面z=0上点的坐标矩阵,z为相应点的高度值矩阵。效

果同上;

contour(z,n) 画出n条等高线;

contour(x,y,z,n) 画出n条等高线;

contour(z,v) 在指定的高度v上画出等高线;

contour(x,y,z,v) 同上;

[c,h] = contour(…) 返回如同contourc命令描述的等高矩阵c和线句柄或块句

柄列向量h,这些可作为clabel命令的输入参量,每条线对应一个句柄,句

柄中的userdata属性包含每条等高线的高度

值;

contour(…,’linespec’) 因为等高线是以当前的色

图中的颜色画的,且是作为块对象处理的,即

等高线是一般的线条,我们可象画普通线条一

样,可以指定等高线的颜色或者线形。

例7-26

图7-26

>>contour(peaks(40))

图形结果为图7-26。

命令2 clabel

功能 在二维等高线图中添加高度标签。在下列形式中,若有h出现,则会对标签进

行恰当的旋转,否则标签会竖直放置,且在恰当的位置显示个一个“+”号。

用法 clabel(C,h) 把标签旋转到恰当的角度,再插入到等高线中。只有等高线之间有

足够的空间时才加入,当然这决定于等高线的尺度。

27

clabel(C,h,v) 在指定的高度v上显示标签h,当然要对标签做恰当的处理。

clabel(C,h,\'manual\') 手动设置标签。用户用鼠标左键或空格键在最接近指定的

位置上放置标签,用键盘上的回车键结束该操作。当然会对标签做恰当的

处理。

clabel(C) 在从命令contour生成的等高线结构c的位置上添加标签。此时标签

的放置的位置是随机的。

clabel(C,v) 在给定的位置v上显示标签

clabel(C,\'manual\') 允许用户通过鼠标来给等高线

贴标签

例7-27

>>[x,y] = meshgrid(-2:.2:2);

>>z = x.*y.*exp(-x.^2-y.^2);

>>[C,h] = contour(x,y,z);

>>clabel(C,h);

图7-27

图形结果为图7-27。

命令3 contourc

功能 低级等高线图形计算命令。该命令计算等高线矩阵c,该矩阵可用于命令

contour,contour3和contourf等。矩阵z中的数值确定平面上的等高线高度值,等高线的

计算结果用由矩阵z维数决定的间隔的宽度。

用法 C = contourc(Z) 从矩阵z中计算等高矩阵,其中z的维数至少为2*2阶,等高

线为矩阵z中数值相等的单元。等高线的数目和相应的高度值是自动选择

的。

C = contourc(Z,n) 在矩阵z中计算出n个高度的等高线。

C = contourc(Z,v) 在矩阵z中计算出给定高度向量v上计算等高线,当然向量v

的维数决定了等高线的数目。若只要计算一条高度为a的等高线,输入:

contourc(Z,[a,a]);

C = contourc(x,y,Z) 在矩阵z中,参量x,y确定的坐标轴范围内计算等高线;

C = contourc(x,y,Z,n) 从矩阵Z中,参量x与y确定的坐标范围内画出n条等高

线;

C = contourc(x,y,Z,v) 从矩阵Z中,参量x与y确定的坐标范围内,画在v指定

的高度上指定的等高线。

命令4 contour3

功能 三维空间等高线图。该命令生成一个定义在矩形格栅上曲面的三维等高线图。

用法 contour3(Z) 画出三维空间角度观看矩阵z的等高线图,其中z的元素被认为是

距离xy平面的高度,矩阵z至少为2*2阶的。等高线的条数与高度是自动

选择的。若[m,n]=size(z),则x轴的范围为[1:n],y轴的范围为[1:m]。

contour3(Z,n) 画出由矩阵z确定的n条等高线的三维图。

contour3(Z,v) 在参量v指定的高度上画出三维等高线,当然等高线条数与向量

v 的维数相同;若想只画一条高度为h的等高线,输入:contour3(Z,[h,h])

contour3(X,Y,Z)、contour3(X,Y,Z,n)、contour3(X,Y,Z,v) 用X与Y定义x-轴与

y-轴的范围。若X为矩阵,则X(1,:)定义x-轴的范围;若Y为矩阵,则Y(:,1)

定义y-轴的范围;若X与Y同时为矩阵,则它们必须同型。不论为哪种使

用形式,所起的作用与命令surf相同。若X或Y有不规则的间距,contour3

还是使用规则的间距计算等高线,然后将数据转变给X或Y。

contour3(…,LineSpec) 用参量LineSpec指定的线型与颜色画等高线。

28

[C,h] = contour3(…) 画出图形,同时返回与命令contourc中相同的等高线矩阵

C,包含所有图形对象的句柄向量h;除非没有指定LineSpec参数,contour3

将生成patch图形对象,且当前的colormap属

性与caxis属性将控制颜色的显示。不论使用何

种形式,该命令都生成line图形对象。

例7-28

>>[X,Y] = meshgrid([-2:.25:2]);

>>Z = X.*exp(-X.^2-Y.^2);

>>contour3(X,Y,Z,30)

图形结果为图7-28。

图7-28

命令5 contourf

功能 填充二维等高线图。即先画出不同等高线,然后相邻的等高线之间用同一颜色

进行填充。填充用的颜色决定于当前的色图颜色。

用法 contourf(Z) 矩阵z的等高线图,其中z理解成距平面的高度。Z至少为2*2阶

的。等高线的条数与高度是自动选择的。

contourf(Z,n) 画出矩阵z的n条高度不同的等高线。

contourf(Z,v) 画出矩阵z的、由v指定的高度的等高线图。

contourf(X,Y,Z)、contourf(X,Y,Z,n)、contourf(X,Y,Z,v) 画出矩阵z的等高线图,

其中X与Y用于指定x-轴与y-轴的范围。若X与Y为矩阵,则必须与Z

同型。若X或Y有不规则的间距,contour3还是使用规则的间距计算等高

线,然后将数据转变给X或Y。

[C,h,CF] = contourf(…)画出图形,同时返回与命令contourc中相同的等高线矩

阵C,C也可被命令clabel使用;返回包含patch图形对象的句柄向量h;

返回一用于填充用的矩阵CF。

例7-29

>>contourf(peaks(30),20);

>>colormap gray

图形结果为图7-29。

命令6 pie3

功能 三维饼形图

图7-29

用法 pie3(X) 用x中的数据画一个三维饼形图。X

中的每一个元素代表三维饼形图中的一部分。

pie3(X,explode) x中的某一部分可以从三维饼形图中分离出来。explode是一个

与x同型的向量或矩阵,explode中非零的元素对应x中从饼形图中分离出

来的分量。

h = pie3(…) 返回一个分量为patch,surface和text图形句柄对象的向量。即每

一块对应一个句柄。

注意:命令pie3将x的每一个元素在所有元素的总和中所占的比例表达出来。若x中

的分量和小于1(则所有元素小于1),则认为x中的值指明三维饼形图的每一部分的大小。

例7-30

>>x = [1 3 0.5 2.5 2]

>>ex = [0 1 0 0 0]

>>pie3(x,ex)

图形结果为图7-30。

29

图7-30

三、7.2.3 曲面与网格图命令

命令1 mesh

功能 生成由X,Y和Z指定的网线面,由C指定的颜色的三维网格图。网格图是作

为视点由view(3)设定的surface图形对象。曲面的颜色与背景颜色相同(当要动画显示

不透明曲面时,这时可用命令hidden控制),或者当画一个标准的可透视的网线图时,曲

面的颜色就没有(命令shading控制渲染模式)。当前的色图决定线的颜色。

用法 mesh(X,Y,Z) 画出颜色由c指定的三维网格图,所以和曲面的高度相匹配,

1.若X与Y均为向量,length(X)=n,length(Y)=m,而[m,n]=size

(Z),空间中的点 (X(j),Y(I),Z(I,j)) 为所画曲面网线的交点,分别

地,X对应于z的列,Y对应于z的行。

2.若X与Y均为矩阵,则空间中的点 (X(I,j),Y(I,j),Z(I,j))为所画曲面的

网线的交点。

mesh(Z) 由[n,m] = size(Z)得,X =1:n与Y=1:m,其中z为定义在矩形

划分区域上的单值函数。

mesh(…,C) 用由矩阵c指定的颜色画网线网格图。Matlab对矩阵c中的数据进

行线性处理,以便从当前色图中获得有用的颜色。

mesh(…,PropertyName’,PropertyValue, …) 对指定的属性PropertyName设置

属性值PropertyValue,可以在同一语句中对多个属性进行设置。

h = mesh(…) 返回surface图形对象句柄。

运算规则:

1.数据X,Y和z的范围,或者是对当前轴的XLimMode,YLimMode和ZLimMode

属性的设置决定坐标轴的范围。命令aXis可对这些属性进行设置。

2.参量c的范围,或者是对当前轴的Clim和ClimMode属性的设置(可用命令caxis

进行设置),决定颜色的刻度化程度。刻度化颜色值作为引用当前色图的下标。

3.网格图显示命令生成由于把z的数据值用当前色图表现出来的颜色值。Matlab会自

动用最大值与最小值计算颜色的范围(可用命令caxis auto

进行设置),最小值用色图中的第一个颜色表现,最大值

用色图中的最后一个颜色表现。Matlab会对数据的中间值

执行一个线性变换,使数据能在当前的范围内显示出来。

例7-31

>>[X,Y] = meshgrid(-3:.125:3);

>>Z = peaks(X,Y);

>>mesh(X,Y,Z);

图形结果为图7-31。

命令2 surf

功能 在矩形区域内显示三维带阴影曲面图。

用法 surf(Z) 生成一个由矩阵z确定的三维带阴影的曲面图,其中 [m,n] = size(Z),

而X = 1:n,Y = 1:m。高度z为定义在一个几何矩形区域内的单值函数,

z同时指定曲面高度数据的颜色,所以颜色对于曲面高度是恰当的。

surf(X,Y,Z) 数据z同时为曲面高度,也是颜色数据。X和Y为定义X坐标轴和

Y坐标轴的曲面数据。若X与Y均为向量,length(X)=n,length(Y)

=m,而[m,n]=size(Z),在这种情况下,空间曲面上的节点为

(X(I),Y(j),Z(I,j))。

surf(X,Y,Z,C) 用指定的颜色c画出三维网格图。Matlab会自动对矩阵c中的数

30

图7-31

据进行线性变换,以获得当前色图中可用的颜色。

surf(…,’PropertyName’,PropertyValue) 对指定的属性PropertyName设置为属

性值PropertyValue

h = surf(…) 返回一个surface图形对象句柄给变量h。

运算规则:

1.严格地讲,一个参数曲面是由两个独立的变量I、j来定义的,它们在一个矩形区

域上连续变化。例如,a<=I<=b,c<=j<=d,三个变量X,Y,Z确定了曲面。曲面颜色由

第四参数矩阵C确定。

2.矩形定义域上的点有如下关系:

A(I-1,j)

|

B(I,j-1) ---- C(I,j) ---- D(I,j+1)

|

E(I+1,j)

这个矩形坐标方格对应于曲面上的有四条边的块,在空间的点的坐标为[X(☺,Y(☺,Z),

每个矩形内部的点根据矩形的下标和相邻的四个点连接;曲面上的点只有相邻的三个点,

曲面上四个角上的点只有两个相邻点,上面这些定义了一个四边形的网格图。

3.曲面颜色可以有两种方法来指定:指定每个节点的颜色或者是每一块的中心点颜色。

在这种一般的设置中,曲面不一定为变量X和Y的单值函数,进一步而言,有四边的曲面

块不一定为平面的,而可以用极坐标,柱面坐标和球面坐标定义曲面。

4.命令shading设置阴影模式。若模式为interp,C必须与X,Y,Z同型;它指定了

每个节点的颜色,曲面块内的颜色由附近几个点的颜色用双线性函数计算出来的。若模式

为facted(缺省模式)或flat,c(I,j)指定曲面块中的颜色:

A(I,j)----------- B (I,j+1)

| C(I,j) |

C(I+1,j) --------- D(I+1,j)

在这种情形下,C可以与X,Y,和Z同型,且它的最后一行和最后一列将被忽略,换

句话说,就是C的行数和列数可以比X,Y,Z少1。

5.命令surf将指定图形视角为view(3)。

6.数据X,Y,Z的范围或者通过对坐标轴的属性XlimMode,YlimMode和ZlimMode

的当前设置(可以通过命令axis来设置),将决定坐标轴的标签。

7.参数C的范围或者通过对坐标轴的属性Clim和

ClimMode的设置(可以通过命令caxis来设置),将决定颜色

刻度化。刻度化的颜色值将作为引用当前色图的下标。

例7-32

>>[X,Y,Z] = peaks(30);

>>surf(X,Y,Z)

>>colormap hsv

结果图形为图7-32。

图7-32

命令3 surfc

功能 在矩形区域内显示三维带阴影曲面图,且在曲面下面画出等高线。

用法 surfc(Z)、surfc(X,Y,Z)、 surfc(X,Y,Z,C)、

surfc(…,’PropertyName’,PropertyValue)、

surfc(…)、 h = surfc(…)

上面各个使用形式的曲面效果与命令surf的相

同,只不过是在曲面下面增加了曲面的等

高线而已。

例7-33

>>[X,Y,Z] = peaks(30);

31

图7-33

>>surfc(X,Y,Z)

>>colormap hsv

图形结果为图7-33。

命令4 surfl

功能 画带光照模式的三维曲面图。该命令显示一个带阴影的曲面,结合了周围的,

散射的和镜面反射的光照模式。想获得较平滑的颜色过度,要使用有线性强度变化的色图

(如:gray,copper,bone,pink等)。参数X,Y,Z确定的点定义了参数曲面的“里面”

和“外面”,若用户想曲面的“里面”有光照模式,只要使用:

surfl(X’,Y’,Z’)

用法 surfl(Z) 以向量z的元素生成一个三维的带阴影的曲面,其中阴影模式中的光源

的方位、光照系数为缺省值(见下面)。

surfl(X,Y,Z) 以矩阵X,Y,Z生成的一个三维的带阴影的曲面,其中阴影模式

中的光源的方位、光照系数为缺省值(见下面)。

surfl(…,’light’) 用一个matlab光照对象(light object)生成一个带颜色、带光

照的曲面,这与用缺省光照模式产生的效果不同。

surfl(…,’cdata’) 改变曲面颜色数据(color data),使曲面成为可反光的曲面。

surfl(…,s) 指定光源与曲面之间的方位s,其中s为一个二维向量[azimuth,

elevation],或者三维向量[sx,sy,sz]。缺省光源方位为从当前视角开始,

逆时针45℉(度)。

surfl(X,Y,Z,s,k) 指定反射常系数k,其中k为一个定义环境光(ambient light)

系数(0<=ka<=1)、漫反射(diffuse reflection)系数(0〈=kb〈=1〉、镜面反

射(specular reflection)系数(0〈=ks〈=1〉与镜面反射亮度(以相素为单位)

等的四维向量[ka,kd,ks,shine],缺省值为k=[0.55 0.6 0.4 10]。

h = surfl(…) 返回一个曲面图形句柄向量h。

例7-34

>>[X,Y] = meshgrid(-3:1/8:3);

>>Z = peaks(X,Y);

>>surfl(X,Y,Z);

>>shading interp

>>colormap(gray);

图形结果为图7-34。

图7-34

命令5 waterfall

功能 瀑布图

用法 waterfall(X,Y,Z) 用所给参数X、Y与Z的数据画一“瀑布”效果图。若X与Y

都是向量,则X与Z的列相对应,Y与Z的行相对应,即length(X)=Z的

列数,length(Y)=Z的行数。参数X与Y定义了x-轴与y-轴,Z定义了z-

轴的高度,Z同时确定了颜色,所以颜色能恰当地反映曲面的高度。若想

研究数据的列,可以输入:waterfall(Z’)或waterfall(X’,Y’,Z’)

waterfall(Z) 画出一瀑布图,其中缺省地有:X=1:Z的行数,Y=1:Z的行数,且

Z同时确定颜色,所以颜色能恰当地反映曲面高度。

waterfall(…,C) 用比例化的颜色值从当前色图中获得颜色,参量C决定颜色的

比例,为此,必须与Z同型。系统使用一线性变换,从当前色图中获得颜

色。

h = waterfall(…) 返回patch图形对象的句柄h,可用于画出图形。

例7-35

>>[X,Y,Z] = peaks(30);

>>waterfall(X,Y,Z)

32

图7-35

图形结果为图7-35。

命令6 cylinder

功能 生成圆柱图形。该命令生成一单位圆柱体的x-,y-,z-轴的坐标值。用户可以用

命令surf或命令mesh画出圆柱形对象,或者用没有输出参量的形式而立即画出图形。

用法 [X,Y,Z] = cylinder 返回一半径为1、高度为1的圆柱体的x-,y-,z-轴的坐标值,

圆柱体的圆周有20个距离相同的点。

[X,Y,Z] = cylinder® 返回一半径为r、高度为1的圆柱体的x-,y-,z-轴的坐标

值,圆柱体的圆周有20个距离相同的点。

[X,Y,Z] = cylinder(r,n) 返回一半径为r、高度为1的圆柱体的x-,y-,z-轴的坐

标值,圆柱体的圆周有指定的n个距离相同的

点。

cylinder(…) 没有任何的输出参量,直接画出圆柱

体。

例7-36

>>t = 0:pi/10:2*pi;

>>[X,Y,Z] = cylinder(2+(cos(t)).^2);

>>surf(X,Y,Z); axis square

图7-36

图形结果为图7-36。

命令7 sphere

功能 生成球体

用法 sphere 生成三维直角坐标系中的单位球体。该单位球体由20*20个面。

sphere(n) 在当前坐标系中画出有n*n个面的球体

[X,Y,Z] = sphere(n) 返回三个阶数为

(n+1)*(n+1)的,直角坐标系中的坐标矩

阵。该命令没有画图,只是返回矩阵。

用户可以用命令surf(X,Y,Z)或

mesh(X,Y,Z)画出球体。

例7-37

>>[X,Y,Z]=sphere;

>>mesh(X,Y,Z)

>>hidden off

图7-37

图形结果为图7-37。

四、7.2.4 三维数据的其他表现形式命令

命令1 pcolor

功能 伪彩色图。该图为一矩形单元的、由参数c定义了颜色的阵列,系统通过c中的

每相邻的四点定义的曲面补片而生成一伪彩色图。是从上面向下观看的“平面”曲面图。

若用户使用命令shading faceted或shading flat,则每一单元的固定颜色是与之相连的角的

颜色有关的。所以,C(i,j)定义了单元的地i行与地j列的颜色。C中的最后一行与最后一列

都没有用上。若用户使用命令shading interp,则每一单元的颜色是对它的四个顶点的颜色

进行一双线性插值后的颜色,这时c的所有元素都参加了运算。

用法 pcolor(C) 画一伪彩色图。C中的元素都线性地映射于当前色图下标。从C映射

到当前的色图是由命令colormap和caxis定义的。

pcolor(X,Y,C) 在参数x和y指定的位置上画一由C

确定的为彩色图。该图为一逻辑上为矩形、带二

维格栅的、顶点在[X(i,j),Y(i,j)]的图形(若X和

33

图7-38

Y为矩阵时)。参量X与Y为指定格栅线的向量或矩阵。若X与Y为向量,

则X对应于C的列,而y对应于C的行;若X与Y同为矩阵,则必须为同

型矩阵。该命令等价于命令:surf(X,Y,0,C),观察角度为:view([0,90])。

h = pcolor(…) 返回一surface图形对象句柄于h

例7-38

>>pcolor(magic(20))

>>colormap(gray(2))

>>axis ij;axis square

图形结果为图7-38。

命令2 quiver

功能 矢量图或速度图

用法 quiver(U,V) 在范围为x =1:n和y =1:m的坐标系中显示由U和V定义的向量,

而[m,n]=size(U)=size(V),这种形式是在一个几何矩形中画出U和V的,

quiver命令本身会自动地画出这些向量,使之不会重叠。

quiver(X,Y,U,V) 由向量X和Y中的分量的任意组合而成的向量与。若X与Y

都是向量length(X)=n,而length(Y)=m,而[m,n]=size(U)=size

(V),向量X对应于矩阵U、V的列向量,而向量Y对应于矩阵U、V的

行向量。

quiver(…,scale) 自动对向量的长度进行处理。使之不会重叠,当然可以对scale

进行取值,若scale=2,则向量长度伸长2倍,若scale=0,则如实画出向量

图。

quiver(…,LineSpec) 可以指定画矢量图用的线型,符号,颜色,quiver命令会

在原来的向量图上画出记号。

quiver(…,LineSpec,\'filled\') 对用LineSpec指定的

记号进行填充

h = quiver(…) 返回每个向量图的句柄

例7-39

>>[z,x,y]=peaks(30);

>>[Dx,Dy]=gradient(z,0.1,0.1);

>>quiver(x,y,Dx,Dy)

图7-39

图形结果为图7-39。

命令3 slice

功能 立体切片图。该命令显示通过立体图形的矩形切片图。

用法 slice(X,Y,Z,V,sx,sy,sz) 显示三元函数V=V(X,Y,Z)确定的超立体形在x-轴、y-轴

与z-轴方向上的若干点(对应若干平面。即若函数V=V(X,Y,Z)中有一变量

如X取一定值X0,则函数V=V(X0,Y,Z)变成一立体曲面(只不过是将该曲

面通过颜色表示高度V,从而显示于一平面而已。)的切片图,各点的坐标由

参量向量sx、sy与sz指定。参量X、参量Y与参量Z为三维数组,用于

指定立方体V的坐标。参量X、Y与Z必须有单调的、正交的间隔(如同

用命令meshgrid生成的一样)。在每一点上的颜色由对超立体 V的三维内

插值确定。

slice(V,sx,sy,sz) 显示三元函数V=V(X,Y,Z)确定的超立体形在x-轴、y-轴与z-轴

方向上的若干点(对应若干平面)的切片图,各点的坐标由数量向量sx、

sy与sz指定。其中V为三维数组(阶数为m*n*p),缺省地有:X = 1:m、

Y = 1:n、Z = 1:p。

slice(V,XI,YI,ZI) 显示参量矩阵XI、YI与ZI确定的、超立体图形的切面图。参

34

量XI、YI与ZI定义了一曲面,同时会在曲面的点上计算超立体V的值。

参量XI、YI与ZI必须为同型矩阵。

slice(X,Y,Z,V,XI,YI,ZI) 沿着由矩阵XI、YI与ZI定义的曲面画穿过超立体图形

V的切片。

slice(…,\'method\') 指定内插值的方法。‘method’为如下方法之一:‘linear’、

‘cubic’、‘nearest’:

‘linear’——指定使用三次线性内插值法(该状态为缺省的);

‘cubic’—— 指定使用三次立方内插值法;

‘nearest’——指定使用最近点内插值法。

h = slice(…) 返回一曲面图形对象的句柄向量h。

命令4 axis

功能 坐标轴的刻度与外在显示

用法 axis([xmin xmax ymin ymax]) 设置当前坐标轴的x-轴与y-轴的范围。

axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置当前坐标轴的x-轴、

y-轴与z-轴的范围,当前颜色刻度范围。该命令也同时设置当前坐标轴的属

性 Xlim、Ylim与Zlim为所给参数列表中的最大值和最小值。另外,坐

标轴属性XlimMode、YlimMode与ZlimMode设置为‘manual’。

v = axis 返回一包含x-轴、y-轴与z-轴的刻度因子的行向量,其中v为一四维或

六维向量,这取决于当前坐标为二维还是三维的。返回的值包含当前坐标

轴的XLim、Ylim与Zlim属性值。

axis auto 设置系统到它的缺省动作——自动计算当前轴的范围,这取决于输入

参量x,y与z的数据中的最大值与最小值。同时将当前坐标轴的属性

XlimMode、YlimMode与ZlimMode设置为‘auto’用户可以指定对某一

坐标轴进行自动操作。例如:

axis ’auto x’ 将自动计算x-轴的范围;

axis ’auto yz’ 将自动计算y-轴与z-轴的范围。

axis manual 、axis(axis) 把坐标固定在当前的范围,这样,若保持状态(hold)

为on,后面的图形仍用相同界限。该命令设置了属性XLimMode、属性

YLimMode与属性ZlimMode为manual。

axis tight 把坐标轴的范围定为数据的范围,即坐标轴中没有多余的部分。

axis fill 该命令用于将坐标轴的取值范围分别设置为绘图所用数据在相应方向

上的最大、最小值。

axis ij 使用矩阵坐标系:坐标原点在左上角、横坐标(j-轴)的值从左到右增加,

纵坐标(i-轴)的值从上到下增加。

axis xy使用笛卡儿坐标系(缺省):坐标原点在左下角、横坐标(x-轴)的值从

左到右增加,纵坐标(y-轴)的值从下到上增加。

axis equal 设置坐标轴的纵横比,使在每个方向的数据单位都相同。其中x-轴、

y-轴与z-轴将根据所给数据在各个方向的数据单位自动调整其纵横比。

axis image 效果与命令axis equal相同,只是图形区域刚好紧紧包围图象数据。

axis square 设置当前图形为正方形(或立方体形),系统将调整x-轴、y-轴与z-

轴,使它们有相同的长度,同时相应地自动调整数据单位之间的增加量。

axis normal 自动调整坐标轴的纵横比,还有用于填充图形区域的、显示于坐标

轴上的数据单位的纵横比。

表7-7显示由上面三个命令设置的坐标轴属性。

35

表7-7

命令

坐标轴属性

DataAspectRatioMode

PlotBoxAspectRatio

PlotBoxAspectRatioMode

Stretch-to-fill

axis equal

[1 1 1]

manual

[3 4 4]

禁止

axis

normal

没有设置

auto

没有设置

可行

axis square axis tightequal

没有设置

auto

[1 1 1]

禁止

[1 1 1]

Manual

Auto

禁止

axis vis3d 该命令将冻结坐标系此时的状态,以便进行旋转。

axis off 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设

置的对象。

axis on 显示坐标轴上的标记、单位和格栅。

[mode,visibility,direction] = axis(\'state\') 返回表明当前坐标轴的设置属性的三个

字符串,见表7-8。

表7-8

输出参量

Mode

Visibility

Direction

返回字符串

‘’auto’或

’manual’

‘’on’或’off’

‘’xy’或’ij’

说明

若XLimMode、YlimMode与ZlimMode都设置为auto,则

mode为auto;若XLimMode、YlimMode或者ZlimMode都

设置为manual,则mode为manual

例7-40

>>x = 0:.025:pi/2;

>>plot(x,exp(x).*sin(2*x),\'-m<\')

>>axis([0 pi/2 0 5])

图形结果为图7-40。

命令5 hidden

功能 在一网格图中显示隐含线条。隐含线条的显示,实

际上是显示那些从观察角度观看没有被其他物体遮住的线条。

图7-40

用法 hidden on 对当前图形打开隐含线条的显示状态,

使网格图后面的线条被前面的线条遮住。设置曲面图形对象的属性

FaceColor为坐标轴背景颜色。这是系统的缺

省操作。

hidden off 对当前图形关闭隐含线条的显示

hidden 在两种状态on与off之间切换

例7-41

>>mesh(peaks)

>>hidden off

图7-41

图形结果为图7-41。

命令6 shading

功能 设置颜色色调属性。该命令控制曲面与补片等的图形对象的颜色色调。同时设

置当前坐标轴中的所有曲面与补片图形对象的属性EdgeColor与FaceColor。命令shading

设置恰当的属性值,这取决于曲面或补片对象是表现网格图或实曲面。

用法 shading flat 使网格图上的每一线段与每一小面有一相同颜色,该颜色由线段的

末端的端点颜色确定;或由小面的、有小型的下标或索引的四个角的颜色确定。

shading faceted 带重叠的黑色网格线的平面色调模式。这是缺省的色调模式。

shading interp 在每一线段与曲面上显示不同的颜色,该颜色为通过在每一线段

两边的、或者为不同小曲面之间的色图的索引或真颜色

进行内插值得到的颜色。

36

图7-42

例7-42

>>sphere(16)

>>axis square

>>shading flat

>>title(\'Flat Shading\')

图形结果为图7-42。

命令7 caxis

功能 颜色坐标轴刻度。命令caxis控制着对应色图的数据值的映射图。它影响下面对

象之一的、用带索引的颜色数据(CData)与颜色数据映射(CDataMapping)控制的刻度

的图形对象surface、patches与images;它没有影响带用颜色数据(CData)或颜色数据映

射(CDataMapping)直接设置的颜色的图形对象surface、images或patches。该命令还改

变坐标轴图形对象的属性Clim与ClimMode。

用法 caxis([cmin cmax]) 用指定的最大值与最小值设置颜色范围。数据值中小于cmin

或大于cmax的,将分别地映射于cmin与cmax;处于cmin与cmax之间

的数据将线性地映射于当前色图。

caxis auto 让系统自动地计算数据的最大值与最小值对应的颜色范围。这是系统

的缺省动作。数据中的正无穷大(Inf)对应于最大颜色值;负无穷大(-Inf)

对应于最小颜色值;带颜色值设置为NaN的面或者边界将不显示。

caxis manual、caxis(caxis) 冻结当前颜色坐标轴的刻度范围。这样,当hold设

置为on时,可使后面的图形命令使用相同的颜色范围。

v = caxis 返回一包含当前正在使用的颜色范围的二维向量v=[cmin cmax]。

caxis(axes_handle,…) 使由参量axis_handle指定的坐标轴,而非当前坐标轴。

颜色坐标轴刻度工作原理:

使用带索引的颜色数据(Cdata)与颜色数据映射(CdataMapping)的图形

对象surface、patch与image将设置成刻度化的,在每次图形渲染时,将

映射颜色数据值为当前图形的颜色。当颜色数据值等于或小于cmin时,将

它映射为当前色图中的第一个颜色;当颜色数据值等于或大于cmax时,将

它映射为当前色图中的最后一个颜色;对于处于cmin与cmax之间的颜色

数据(例如c),系统将执行下列线性转换,以获得对应当前色图(它的长

度为m)中的颜色的索引(当前色图的行指

标index):

index = fix((C-min)/(cmax-cmin)*m)+1

例7-43

>>[X,Y,Z] = sphere;

>>C = Z;surf(X,Y,Z,C)

>>caxis([-1 3])

图7-43

图形结果为图7-43。

命令8 view

功能 指定立体图形的观察点。观察者(观察点)的位置决定了坐标轴的方向。用户

可以用方位角(azimuth)和仰角(elevation)一起,或者用空间中的一点来确定观察点的

位置。

用法 view(az,el)、view([az,el]) 给三维空间图形设置观察点的方位角。方位角az与仰

角el为这两个旋转角度:做一通过视点与z-轴的平面,与xy平面有一交线,

该交线与y-轴的反方向的、按逆时针方向(从z-轴的方向观察)计算的、

单位为度的夹角,就是观察点的方位角az。若角度为负值,则按顺时针方

向计算;在通过视点与z-轴的平面上,用一直线连接视点与坐标原点,该

37

直线与xy平面的夹角就是观察点的仰角el。若仰角为负值,则观察点转移

到曲面下面。

view([x,y,z]) 在笛卡儿坐标系中于点(x,y,z)设置视点。注意:输入参量只能是

方括号的向量形式,而非数学中的点的形式。

view(2) 设置缺省的二维形式视点。其中az=0,el=90,即从z-轴上方观看。

view(3) 设置缺省的三维形式视点。其中az=-37.5,el=30。

view(T) 根据转换矩阵T设置视点。其中T为4*4阶的矩阵,如同用命令viewmtx

生成的透视转换矩阵一样。

[az,el] = view 返回当前的方位角az与仰角el。

T = view 返回当前的4*4阶的转换矩阵T。

例7-44

>>peaks;

>>az = 0;el = 90;

>>view(az, el)

图形结果为图7-44。

图7-44

命令9 viewmtx

功能 视点转换矩阵。计算一个4*4阶的正交的或透视的转换矩阵,该矩阵将一四维

的、齐次的向量转换到一个二维的视平面上(如计算机平面上)。

用法 T = viewmtx(az,el) 返回一与视点的方位角az与仰角el(单位都为度)对应的正

交矩阵,并没有改变当前视点。

T = viewmtx(az,el,phi) 返回一透视的转换矩阵,其中参量phi是单位为度的透视

角度,为标准化立方体(单位为度)的对像视角角度与透视扭曲程度。

表7-9

Phi的值

0度

10度

25度

60度

说明

正交投影

类似以远距离投影

类似以普通投影

类似以广角投影

用户可以通过使用返回的矩阵,用命令view(T)改变视点的位置。该4*4阶的矩阵将变

换四维的、同次的向量成形式为(x,y,z,w)的非标准化的向量,其中w不等于1。正交化的x-

元素与y-元素组成的向量(x/w,y/w,z/w,1)为我们所需的二维向量。(注:一四维同次向量为在

对应的三维向量后面增加一个1。例如:[x,y,z,1]为对应于三维空间中的点[x,y,z]的四维向

量。)

T = viewmtx(az,el,phi,xc) 返回以在标准化的图形立方体中的点xc为目标点的透

视矩阵(就像相机正对着点xc一样),目标点xc为视角的中心点。用户可

以用一三维向量xc=[xc,yc,zc]指定该中心点,每一分量都在区间[0,1]上。

缺省值为xc=[0 0 0]。

命令10 surfnorm

功能 计算与显示三维曲面的法线。该命令计算用户命令surf中的曲面法线。

用法 surfnorm(Z)、surfnorm(X,Y,Z) 画出一曲面与它的法线图。其中矩阵Z用于指

定曲面的高度值;X与Y为向量或矩阵,用于定义曲面的x与y部分。

[Nx,Ny,Nz] = surform(…) 返回组成曲面的法线在三个坐标轴上的投影分量

Nx,Ny与Nz。

例7-45

>>[x,y,z] = cylinder(1:10);

>>surfnorm(y,x,z)

>>axis([-12 12 -12 12 -0.1 1])

38

图形结果为图7-45。

图7-45 曲面法线图

第 3 节 通用图形函数命令

一、7.3.1 图形对象句柄命令

命令1 figure

功能 创建一个新的图形对象。图形对象为在屏幕上单独的窗口,在窗口中可以输出

图形。

用法 figure 用缺省的属性值创建一个新的图形对象。

figure(\'PropertyName\',PropertyValue,…) 对指定的属性PropertyName用指定

的属性值PropertyValue(属性名与属性值成对出现)创建一个新的图形窗

口,对于那些没有指定的属性,则用缺省值。属性名与有效的属性值见下

表。

figure(h) 1. 若h为一个已经存在的图形的句柄,则figure(h)使由h标记的图形

成为当前图形,使它可见,且在屏幕上把它显示到所有图形之前。

当前图形为图像输出的地方。

2. 若h不是已经存在图形的句柄,但是为一整数,则该命令生成一图

形窗口,同时把该窗口的句柄赋值为h;若h不是一图形窗口的句柄,

也不是一整数,则返回一错误信息。

h = figure(…) 返回图形窗口对象的句柄给h。

表7-10

属性名

窗口位置

Position

属性说明

图形窗口的位置与大

有效属性值

有效值:四维向量[left,bottom,

width,height]

缺省值:决定于显示

有效值:inches(英寸)

centimeters(厘米)

normalized(标准化单位,认为窗口为一长宽都是1)

points(点)

pixels(像素)

characters(字符)

缺省值:pixels

有效值:ColorSpec(有效的颜色 参数)

缺省值:取决于颜色表(参见命令colordef)

有效值:none、figure

缺省值:figure

有效值:任意字符串

39

Units

用于解释属性Position

的单位

指定类型与外在显示

Color

Menubar

Name

窗口的背景颜色

转换图形窗口菜单条

的“开”与“关”

显示图形窗口的标题

缺省值:‘’(空字符串)

NumberTitle

Resize

SelectionHighlight

Visible

WindowStyle

控制色图

Colormap

Dithermap

DithermapMode

FixedColors

MinColormap

ShareColors

指定透明度

Alphamap

指定渲染模式

BackingStore

DoubleBuffer

Renderer

关于图形窗口的一般信息

Children

FileName

Parent

Selected

Tag

Type

UserData

RendererMode

关于当前状态的信息

CurrentAxes

CurrentCharacter

CurrentOject

CurrentPoint

在图形窗口中的当前

坐标轴的句柄

在图形窗口中最后一

个输入的字符

图形窗口中的当前对

象的句柄

图形窗口中最后单击

有效值:坐标轴句柄

有效值:单个字符

有效值:图形对象句柄

有效值:二维向量[x-coord,

显示于图形窗口中的

任意对象句柄

命令guide使用的文件

图形窗口的父对象:根

屏幕

是否显示窗口的“选

中”状态

用户指定的图形窗口

标签

图形对象的类型(只读

类型)

用户指定的数据

缺省的或用户指定的

渲染程序

有效值:句柄向量

有效值:字符串

有效值:总是0(即根屏幕)

有效值:on、off

缺省值:on

有效值:任意字符串

缺省值:\' \'(空字符串)

有效值:\'figure\'

有效值:任一矩阵

缺省值:[](空矩阵)

有效值:auto、manual

缺省值:auto

打开或关闭屏幕像素

缓冲区

对于简单的动画渲染

是否使用快速缓冲

用于屏幕和图片的渲

染模式

有效值:on、off

缺省值:on

有效值:on、off

缺省值:off

有效值:painters、zbuffer、OpenGL

缺省值:系统自动选择

图形窗口的α色图,用

于设定透明度。

有效值:m*1维向量,每一分量在[0 1]之间

缺省值:64*1维向量

图形窗口的色图

用于真颜色数据以伪

颜色显示的色图

是否使用系统生成的

抖动色图

不是从色图中获得的

颜色

系统颜色表中能使用

的最少颜色数

允许MATLAB共享系

统颜色表中的颜色

有效值:m*3阶的RGB颜色矩阵

缺省值:jet色图

有效值:m*3阶的RGB颜色矩阵

缺省值:有所有颜色的色图

有效值:auto、manual

缺省值:manual

有效值:m*3阶的RGB颜色矩阵

缺省值:无(只读模式)

有效值:任一标量

缺省值:64

有效值:on、off

缺省值:on

标题栏中是否显

示’Figure No. n’,其中

n为图形窗口的编号

指定图形窗口是否可

以通过鼠标改变大小

当图形窗口被选中时,

是否突出显示

确定图形窗口是否可

指定窗口为标准窗口

还是典型窗口

有效值:on、off

缺省值:on

有效值:on、off

缺省值:on

有效值:on、off

缺省值:on

有效值:on、off

缺省值:on

有效值:normal(标准窗口)、

modal(典型窗口)

缺省值:normal

40

SelectionType

回调程序的执行

BusyAction

ButtonDownFcn

CloseRequestFcn

CreateFcn

DeleteFcn

Interruptible

KeyPressFcn

ResizeFcn

UIContextMenu

WindowButtonDownFcn

WindowButtonMotionFc

n

WindowButtonUpFcn

访问对象的控制

IntegerHandle

HandleVisiblity

的按钮的位置

鼠标选取类型

指定如何处理中断调

用程序

当在窗口中空闲点按

下鼠标按钮时,执行的

回调程序

当执行命令关闭时,定

义一回调程序

当打开一图形窗口时,

定义一回调程序

当删除一图形窗口时,

定义一回调程序

定义一回调程序是否

可中断

当在图形窗口中按下

一键时,定义一回调程

当图形窗口改变大小

时,定义一回调程序

定义与图形窗口相关

的菜单

当在图形窗口中按下

鼠标时,定义一回调程

当将鼠标移进图形窗

口中时,定义一回调程

当在图形窗口中松开

按钮时,定义一回调程

指定使用整数或非整

数图形句柄

指定图形窗口句柄是

否可见

定义图形窗口是否能

变成当前对象(参见图

形窗口属性

CurrentObject)

在图形窗口中定义如

何显示另外的图形

y-coord]

有效值:normal、extended、alt、open

有效值:cancel、queue

缺省值:queue

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:closereq

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:on、off

缺省值:on(可以中断)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:属性UIContrextmenu的句柄

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:on、off

缺省值:on(整数句柄)

有效值:on、callback、off

缺省值:on

有效值:on、off

缺省值:on

有效值:replacechildren、add、replace

缺省值:add

有效值:crosshair、arrow、topr、watch、topl、

botl、botr、circle、cross、fleur、left、right、top、

fullcrosshair、bottom 、ibeam、custom

缺省值:arrow

有效值:16*16阶矩阵

缺省值:将鼠标设置为\'custom\'且可见

有效值:二维向量[row,column]

缺省值:[1 1]

HitTest

NextPlot

定义鼠标指针

Pointer 选取鼠标记号

PointerShapeCData

PointerShapeHotSpot

定义鼠标外形的数据

设置鼠标活跃的点

例7-46

>>scrsz = get(0,\'ScreenSize\');

>>figure(\'Position\',[1 scrsz(4)/2 scrsz(3)/2 scrsz(4)/2])

执行上面的语句,会在屏幕的左上角生成一没有任何符号的窗口。

命令2 line

功能 生成线(line)对象。命令line在当前坐标轴中生成一个线对象。用户可以指定

线的颜色,宽度,类型和标记符号等其他特性。

41

命令line 有两种形式:

1.自动循环使用颜色和类型。当用户用非正式语法来指定矩阵坐标数据:line(X,Y,Z),

Matlab将循环使用由坐标轴ColorOrder和LineStyle指定的颜色顺序和类型顺序。

2.纯粹低级操作。当用户用属性名和属性值调用命令line:

line(‘XData’,x,’YData’,y,’ZData’,z)

Matlab将在当前用缺省的颜色(参见命令colordef的使用)画出线对象。注意一点的

是,用户不能在命令line的低级形式中使用矩阵数据。

用法 line(X,Y) 在当前的坐标轴中画出由向量x和y定义的线条。若x与y为同型的

矩阵,则对于x,y的每一列画出一线条。

line(X,Y,Z) 在三维空间中画出由x,y,z定义的线条。

line(X,Y,Z,\'PropertyName\',PropertyValue,…) 画出由参数x,y,z确定的线条,

其中对指定属性PropertyName设置为PropertyValue,其他没有指定属性

用缺省值。属性LineStyle和Marker参见命令plot。

line(\'PropertyName\',PropertyValue,…) 对属性用相应的输入参数来设置而画出

线条。这是命令line的低级使用形式,此时不接受矩阵参数。除了该情形,

其他形式都接受矩阵参数。

h = line(…) 返回每一条线的线对象对应的句柄向量。

表7-11

属性名

定义对象的数据

Xdata

Ydata

Zdata

说明

定义线条的x-轴坐标参量

定义线条的y-轴坐标参量

定义线条的z-轴坐标参量

有效属性值

有效值:向量或矩阵

缺省值:[0 1]

有效值:向量或矩阵

缺省值:[0 1]

有效值:向量或矩阵

缺省值:[0 1]

有效值:-、--、:、、-.、 none

缺省值:-(实线)

有效值:一标量

缺省值:0.5磅

有效值:13种类型之一

缺省值:none

有效值: auto、none、 ColorSpec

缺省值:auto

有效值:标量(磅)

缺省值:6(磅)

有效值:on、off

缺省值:on

有效值:normal、none、

xor、background

缺省值:normal

有效值:on、off

缺省值:on

有效值:on、off

缺省值:on

有效值:ColorSpec

有效值:on、off、callback

缺省值:on

有效值:on、off

缺省值:on

定义线型与数据点标记符

LineStyle

LineWidth

Marker

MarkerEdgeColor

MarkerFaceColor

MarkerSize

控制线条的显示

Clipping

EraseMode

SelectionHighlight

Visible

Color

对象访问的控制

HandleVisibility

HitTest

坐标轴矩形区域是否可剪辑

定义显示与擦除线条的方法(对

于动画显示)

当线条被选中时,是否突出显示

定义线条是否可见

定义线条颜色

定义线条句柄对其他函数是否可

定义线条能否成为当前对象

42

定义线条的类型

定义线条的宽度(以磅为单位)

定义标记数据点的标记符号

定义标记颜色或可填充标记的边

界颜色

定义封闭形标记的填充颜色

定义标记大小

关于线条的一般信息

Children 线条没有子对象

Parent 线条对象的父对象为坐标轴对象

Selected

Tag

Type

UserData

是否显示线条的“选中”状态

用户定义的标签

图形对象的类型(只读类型)

用户定义的数据

有效值:[](空矩阵)

有效值:坐标轴句柄

有效值:on、off

缺省值:on

有效值:任一字符串

缺省值:’’(空字符串)

有效值:\'line\'

有效值:任一矩阵

缺省值:[](空矩阵)

有效值:cancel、queue

缺省值:queue

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:字符串

缺省值:\' \'(空字符串)

有效值:on、off

缺省值:on(可中断)

有效值:UIContextMenu的句柄

与回调程序执行有关的属性

BusyAction

ButtonDownFcn

CreateFcn

DeleteFcn

Interruptible

UIContextMenu

定义如何处理回调中断程序

当在线条上按下鼠标时,定义一

回调程序

当生成线条时,定义一回调程序

当删除线条时,定义一回调程序

定义回调程序是否可中断

定义与线条相关的菜单

例7-47

>>t = 0:pi/20:2*pi;

>>hline1 = plot(t,exp(t).*sin(t),\'k\');

>>hline2 = line(t+.06,exp(t).*sin(t),\'LineWidth\',4,\'Color\',[.8 .8 .8]);

>>set(gca,\'Children\',[hline1 hline2])

生成图形为图7-46。

图7-46 命令line画的函数图

例7-48

生成随机直线图:

>>line(rand(4,2),rand(4,2),rand(4,1))

>>line(rand(1,4),rand(1,4),rand(1,4))

>>line(rand(4,1),rand(4,1),rand(4,1))

>>line(rand(2,4),rand(2,4),rand(1,4))

>>line(rand(4,2),rand(4,2),rand(4,1))

生成图形为图7-47。

命令3 patch

功能 生成补片图形对象。该命令为生成补片图形对象

图7-47 随机直线图

的低级图形函数。补片为一个或多个多边形,多边形的顶点

为坐标中的点。用户可以指定补片的颜色与光照模式。

用法 patch(X,Y,C) 在当前坐标轴中增加二维带填充模式的补片。参量X,Y确定顶点

的位置。若X,Y为矩阵(同型或不同型),系统按列生成多个多边形。若x,

y没有定义一封闭的多边形,则命令自动地将多边形封闭。参量x与y可以

定义凹的或自身交叉的多边形。可是,一个不可分隔的补片的边界自身交

叉,则不能完整填充。在这种情况下,最好是将多边形分解成几个小的、

43

自身没有交叉的多边形。参量c指定每一补片的颜色,它可以为简单的

ColorSpec,每面一颜色或每一顶点一颜色。若c为三维列向量,它将被认

为是一直接指定的RGB颜色。

patch(X,Y,Z,C) 生成三维的补片对象。

patch(FV) 用结构FV生成一补片。结构FV包含这些域名vertices,faces和可

选的facevertecdata,这些域名对应于补片的Vertices属性、Faces属性、

FaceVertexCData属性。

patch(…,C,\'PropertyName\',PropertyValue…) 在二维(X,Y)或三维(X,Y,Z)空间

中对补片指定的属性PropertyName设置为PropertyValue。

patch(\'PropertyName\',PropertyValue…) 对所有指定的多个属性PropertyName

设置为相应的值PropertyValue。该命令形式可以使用户免除颜色的指定,

因为系统将使用缺省的面颜色和边界颜色,除非用户准确地对属性

FaceColor与EdgeColor进行设置。该命令形式也允许用户通过对属性Faces

与Vertices的设置来代替x-,y-与z-轴的输入。

handle = patch(…) 返回命令patch生成的补片对象句柄。

说明 函数patch不象其他的高级的区域生成函数,例如函数fill或area,它没有检测

图形窗口与坐标轴的属性NextPlot的设置情形。它只是简单地在当前坐标轴中添加补片对

象而已。

有两种指定颜色的补片属性名:

(1)Cdata——当指定x-,y-与z-轴坐标(XData,YData,ZData)时使用;

(2)FaceVertexCData——当指定多边形的顶点与连接矩阵时使用。

以上两个属性接受颜色数据作为索引颜色或者是真颜色(RGB)。其中索引颜色数据 能

代表当前色图的直接索引或者代表映射到整个色图的线性数据的比例数值。

命令4 surface

功能 生成面对象。该命令是生成面图形对象的低级函数。面对象为由矩阵元素的A

(I,j)所在的行下标I为x-坐标,所在的列下标j为y-坐标,元素值为z-坐标确定的点生

成的空间多边形。

用法 surface(Z) 画出由矩阵z确定的曲面,其中z为定义在一几何矩形区域上的单值

函数。

surface(Z,C) 画出颜色由c指定的、面由z指定的空间曲面。

surface(X,Y,Z) 曲面由参数x,y,z确定,颜色参数c=z,因此颜色能恰当地反

映曲面的高度。

surface(X,Y,Z,C) 曲面由参数x,y,z确定,颜色由参数c确定。

Surface(x,y,Z) 参数x与y为向量,若[m,n]=size(z),则要求length(x)=n,

length(y)=m,面上的点由(x(j),y(i),z(I,j))确定。

Surface(x,y,Z,C) 曲面确定如上情形,颜色由参数c确定。

surface(…\'PropertyName\',PropertyValue,…) 对指定的曲面属性PropertyName

指定为PropertyValue,对曲面进行细微控制。

h = surface(…) 返回生成面对象的句柄。

命令5 image

功能 显示图片对象。该命令通过对矩阵c中每一个元素(每一元素作为引用图形色

图下标或直接给出RGB值)的解释而生成一个图片对象。Image命令有两种使用格式:

1.一个调用命令newplot的高级函数,可以确定在何处放置图片与坐标轴的范围为刚

好围住图片;使刚生成的图片放置在坐标轴的刻度线与格栅线之上;属性Ydir设置为

44

rervse;属性View为[0 90]。

2.一个增加图片到当前坐标轴的低级命令,而没有调用命令newplot,在低级使用形

式中,只能对指定属性进行设置操作。

用户在命令的输入参量中可以输入属性名/属性值,结构数组,细胞数组等。

用法 image(C) 把C作为一图片进行显示。C中的每一个元素指定了一个“图片”矩

形中的相应部分的颜色。

image(x,y,C) 在(x,y)确定的位置上画C的元素。其中x,y都为2维矩阵,分别

指定x轴与y轴的范围,其效果与image(C)相同,只不过是进行了恰当的

比例缩放。

image(x,y,C,\'PropertyName\',PropertyValue,…) 该形式为指定属性名/属性值的

高级使用形式,在执行该命令之前,先执行命令newplot。

image(\'PropertyName\',PropertyValue,…) 该形式为低级使用形式,它只接受属

性名/属性值的输入。

handle = image(…) 返回刚生成的图片对象的句

柄。用户可以从上面的任何形式的调用后获得

图片句柄。

例7-49

>>load clown

>>image(X,\'CDataMapping\',\'scaled\')

>>colormap(map)

图7-48

图形结果为图7-48。

命令6 uicontrol

功能 生成用户控制图形对象(用户界面控制)。也通过该命令运行图形用户界面。当

对象被选中时,一般会执行相应的操作。系统支持多种控件,每一种都有不同的作用:

 校验框——当单击检验框时,会执行一操作。该组件对于提供用户多个独立的选

择是很有用的。要激活一校验框,只需用鼠标单击该组件即可,且选中的状态在

组件上显示出来。

 可编辑文本框——允许用户输入与修改文本文字的区域。当用户想把文字作为

输入时,可使用该组件。若一可编辑文本框有焦点,则单击文本框的菜单栏不会

执行任何操作。因此,在单击菜单条后,语句get(edit_handle,’String’)并没有返回

当前编辑框中的内容。因为系统必须执行回调函数来改变属性 string的值,即使

屏幕上显示的文字已经改变。

 框架——该组件为一封闭的、可见的、图形窗口区域。框架能使一用户图形界面

中相关的控制组件能容易理解。框架没有相关的回调程序。只有控制组件能在框

架中显示。框架不是透明的,因此用户定义的组件先后顺序决定了组件是否被框

架遮住或可见。属性Stacking order决定了控制组件的显示顺序:第一个定义的组

件最先显示,后面定义的控制组件则覆盖已经存在的组件。若用户要用一框架包

围一些组件,则必须第一个定义框架。

 列表框——显示一些项目的列表(用命令string设置),且允许用户选择一个或多

个项目。属性Min与Max控制着选择的模式。属性Value显示可选择的项目与包

含着字符串列表中项目的索引;对于选择了多个项目则用向量表示。在任何的能

改变属性Value值的、鼠标松开的操作之后,系统MATLAB将马上执行列表框的

回调函数。因此,用户有必要增加一“Done”按钮,用于推迟当要多次选择项目

时的操作。在执行列表框回调函数Callback属性之前,列表框中项目的选择有单

击或双击之分,对应于将图形窗口属性SelectionType设置为normal或open。

45

弹出菜单——当组件被按下时,打开且显示一选择列表(用命令string设置)。当

没有打开时,该组件显示当前的选择项。该组件对于用户想给其他用户提供一系

列的互斥的选择项,又不想占用太多的区域。

 普通按钮——当该组件被按下时,将执行一操作。要激活一按钮,只需在按钮上

按下鼠标按钮。

 单选按钮——该组件与校验框相类似,但它包含几个互斥的、而且相关的选项(例

如在任意时刻,只能选择一个状态)。要激活某一单选按钮,只需在该组件上按下

鼠标即可。被选中的组件同时显示出来。

 滑块——该组件允许用户通过移动某一范围之内的滑块来输入一指定的数值。用

户要移动一滑块,只需在滑块上按下鼠标不放,且在滑块方向上移动;或者是在

滑槽内单击鼠标;或者是单击滑块条上的箭头。当松开鼠标后,滑块所在位置将

与一数值对应。用户可以设置滑块的最大值、最小值与当前值等。

 静态文本框——显示文本行。静态文本经常作为其他控制对象标签,以提供其他

用户相关信息,或者是显示一滑块的数值。其他用户不能交互地改变静态文本,

因此对于静态文本,没有相关的回调函数。

 触发按钮——当该组件被单击且显示出它们的状态(on或者off)时,控制是否执

行回调函数。

用法 handle = uicontrol(parent) 在父对象parent上生成一用户图形控制界面。用户

界面控制对象都是图形窗口的子对象,所以当窗口中没有坐标轴时,同样

可以放置控制组件于图形窗口中。

handle = uicontrol(…,\'PropertyName\',PropertyValue,…) 参量PropertyName为

属性名,参量PropertyValue可为结构数组或者为单元数组,同时随意地返

回刚生成的对象的句柄。当然用户可以通过命令set与get来设置与询问生

成对象的属性值。

附:表7-12列出所有的用于命令uicontrol对象的属性名。每一属性名当作一描述该属

性的链接。

表7-12

属性名

控制控件类型与显示

BackgroundColor

Cdata

ForegroundColor

SelectionHighlight

String

Visible

属性名含义

对象的背景颜色

显示于对象之上的真颜色图片

文本字体的颜色

当对象被选中时突出显示

用户控制界面的标签,也是列表框与

弹出菜单中的项目

用户界面控制是否可见

属性值

有效值:ColorSpec

缺省值:与系统有关

有效值:矩阵

有效值:ColorSpec

缺省值:[0 0 0](黑色)

有效值:on、off

缺省值:on

有效值:任意有效的字符串

有效值:on、off

缺省值:on

有效值:on、inactive、off

缺省值:on

有效值:图形窗口标量句柄

有效值:on、off

关于控件对象的一般信息

Children 用户界面控制界面没有子对象

Enable

Parent

Selected

用户界面控制是否可用

用户界面控制对象的父对象

对象是否为选中状态

46

SliderStep 滑块步长尺度

Style 用户界面控制对象的类型

Tag

TooltipString

Type

UserData

控制控件对象的位置

Position

Units

控制字体与标签

FontAngle

FontName

FontSize

FontUnits

FontWeight

HorizontalAlignment

String

控制回调函数的执行

BusyAction

ButtonDownFcn

Callback

CreateFcn

DeleteFcn

Interruptible

UIContextMenu

由用户指定的对象的标记符

对象的工具提示

图形对象的类型

用户指定的数据

用户界面控制对象的大小与位置

解释属性position向量的单位

缺省值:off

有效值:二维向量

缺省值:[0.001 0.1]

有效值:pushbutton、edit、

togglebutton、slider、text、

radiobutton、popupmenu 、listbox、

frame

缺省值:pushbutton

有效值:任意有效字符串

有效值:任意有效字符串

有效值:字符串(只读)

缺省值:uicontrol

有效值:矩阵

有效值:位置矩形

缺省值:[20 20 60 20]

有效值:pixels、inches、character、

normalized、points、centimeters

缺省值:pixels

有效值:normal、italic、oblique

缺省值:normal

有效值:字符串

缺省值:与系统有关

有效值:一标量

缺省值:与系统有关

有效值:pixels、normalized 、inches、

centimeters、points

缺省值:points

有效值:light、normal、demi、bold

缺省值:normal

有效值:left、center、left

缺省值:决定于用户界面控制的对象

有效值:字符串

有效值:cancel、queue

缺省值:queue

有效值:字符串

有效值:字符串

有效值:字符串

有效值:字符串

有效值:on、off

缺省值:on

有效值:句柄

字符的倾斜度

字体系列名称

字体大小

字体大小单位

文本字体的磅值

标签字符串的对齐方式

用户控制界面的标签,也是列表框与

弹出菜单中的项目

回调函数中断方式

当按钮按下时执行的回调函数

控制操作

在对象生成过程中执行的回调函数

在对象删除过程中执行的回调函数

回调函数中断的模式

与界面控制中的对象相关的菜单(如

按下鼠标右键)

关于当前状态的一般信息

第一个显示于列表框中的项目的索

ListboxTop

Max

Min

Value

控制组件的访问

HandleVisibility

HitTest

有效值:标量

缺省值:[1]

有效值:标量

最大值(与用户界面控制对象有关)

缺省值:与系统有关

有效值:标量

最小值(与用户界面控制对象有关)

缺省值:与系统有关

有效值:标量或向量

用户界面控制对象的当前值

缺省值:与系统有关

句柄是否可从命令窗口中与GUIs中

访问

组件是否可由鼠标单击选中

有效值:on、callback、off

缺省值:on

有效值:on、off

缺省值:on

命令7 uimenu

47

功能 生成图形窗口的菜单中的层次的菜单与下一级子菜单。即增加新的菜单于已经

存在的菜单后面,当一菜单项被选中时,该菜单项与它的下一级菜单也将显示。也可用该

命令生成与组件相关的菜单。

用法 handle = uimenu(\'PropertyName\',PropertyValue,…) 在当前图形窗口菜单条上

用指定的属性PropertyName与相应的属性值PropertyValue创建一菜单,同

时将该菜单的句柄赋给handle。其中两个输入参量可以是结构数组或者是单

元数组。用户界面菜单的回调函数属性定义了当用户激活菜单项时,进行的

响应操作。

uimenu(\'PropertyName\',PropertyValue,…) 效果同上,但不返回句柄值。

handle = uimenu(parent,\'PropertyName\',PropertyValue,…) 生成一父菜单的子

菜单,或者是生成由parent指定的相关菜单中的菜单项目。若parent不是另

外的用户界面菜单对象或用户界面相关菜单对象,而是一图形窗口,则系统

将生成该图形窗口菜单条上的新的菜单。同时将生成的菜单赋值给句柄

handle。

uimenu(parent,\'PropertyName\',PropertyValue,…) 效果同上,但不返回菜单的

句柄。

附:表7-13列出了所有对uimenu对象有用的属性,分别按功能进行了分类。每一属

性名作为该属性描述的索引。

表7-13

属性名

控制控件类型与显示

Checked

ForegroundColor

Label

Separator

SelectionHighlight

Visible

关于对象的一般信息

Acceleratro

Children

Enable

Parent

Tag

Type

UserData

控制对象的位置

Position

控制回调程序的执行

BusyAction

ButtoDownFcn

Callback

CreateFcn

DeleteFcn

Interruptible

回调程序的中断

按钮按下回调程序

控制操作

在对象生成期间执行的回调程序

在对象删除期间执行的回调程序

回调程序中断模式

48

有效值:cancel、queue

缺省值:queue

有效值:字符串

有效值:字符串

有效值:字符串

有效值:字符串

有效值:on、off

缺省值:on

属性名描述

菜单检查记号

文本的颜色

菜单标签

分隔线模式

对象选中时是否突出显示

用户界面菜单是否可见

键盘等价字符

子菜单的句柄

用户界面菜单是否可用

用户界面菜单的父对象

用户指定的对象标记符

图形对象类型

用户指定数据

用户界面菜单的相对位置

属性值

有效值:on、off

缺省值:off

有效值:ColorSpec

缺省值:黑色[0 0 0]

有效值:任何字符串

有效值:on、off

缺省值:off

有效值:on、off

缺省值:on

有效值:on、off

缺省值:on

有效值:任何的字符

有效值:句柄向量

有效值:on、off

缺省值:on

有效值:句柄

有效值:任何字符串

有效值:字符串read-only

缺省值:uimenu

有效值:任何矩阵

有效值:标量

缺省值:[1]

控制对象的访问

HandleVisibility

HitTest

是否可从命令行上访问图形用户

界面

是否可用鼠标选择

有效值:on、callback、off

缺省值:on

有效值:on、off

缺省值:on

二、7.3.2 轴的产生和控制命令

命令1 axes

功能 创建坐标轴图形对象。该命令是创建坐标轴图形对象的低级函数命令。

用法 axes 在当前图形窗口中用缺省的属性值创建一坐标轴图形对象。

axes(\'PropertyName\',PropertyValue,…) 用参量\'PropertyName\'指定的属性名与

用参量PropertyValue指定的属性值创建一坐标轴。对于没有指定的属性

名,系统则使用缺省的属性值。

axes(h) 使已经存在的坐标轴h成为当前的坐标轴。同时使坐标轴h为图形窗口

中的所有子对象属性(Children property)的第一坐标轴,也使图形窗口的

CurrentAxes属性为h。当前坐标轴是图形函数image、line、patch、surface

与text等命令输出图形对象的目的地。

h = axes(…) 返回已经创建的坐标轴对象的句柄。

命令2 cla

功能 清除当前坐标轴。该命令在命令窗口中执行与在回调程序中执行效果是一样的,

即它不能区别由callback设置的属性HandleVisibility,也就是说,当它从一回调程序中执

行时,命令cla仅仅删除属性HandleVisibility为on的图形对象。

用法 cla 清除当前坐标轴中所有句柄为不隐藏(例如,图形对象属性HandleVisibility

设置为on)的图形对象。

cla reset 无条件地清除当前坐标轴中所有图形对象,且重新设置坐标轴的属性,

(除了属性Position和Units)。

命令3 gca

功能 获取当前坐标轴句柄。

用法 h=gca 返回当前图形窗口中的坐标轴句柄。若坐标轴不存在,系统则生成一坐

标轴同时返回它的句柄。用户不想得到上面的结果,可以输入get(gcf,’CurrentAxes’)。

当前坐标轴为用户创建坐标轴以下子对象的目的地。有许多图形命令可以在当前坐标

轴中画出图形对象,如:plot,text,surf等。改变了当前窗口,相应地改变了当前坐标轴。

三、图形句柄操作命令

命令1 gco

功能 返回当前对象的句柄。“当前对象”为最后用鼠标单击的对象,除了命令uimenus

之外。若鼠标没有单击到一图形对象之下的子对象,则该图形对象为“当前对象”。系统会

把当前图形对象的句柄存放于图形的属性CurrentObject之中。当前图形窗口中的当前对象

并非总是那些它们的回调函数,而是正在执行的对象。其他函数的回调中断函数可以改变

当前对象或者甚至是当前图形窗口。一些回调函数,如生成命令CreateFcn、删除命令

DeleteFcn与用户界面菜单命令Callback等就没有改变当前图形窗口或者当前对象。

用法 h = gco 返回当前对象的句柄给h。

h = gco(figure_handle) 返回指定窗口figure_handle中的当前对象的值。

命令2 get

功能 获取对象属性。

49

用法 get(h) 返回由句柄h指定的图形对象的所有属性与相应的当前属性值;

get(h,\'PropertyName\') 返回由句柄h指定的图形对象的指定属性PropertyName

的属性值。

= get(H,) 返回由m个图形对象

的n个属性值组成的m*n阶的细胞数组,其中m=length(H),且n为指定

的属性细胞数组中包含的属性名个数。

a = get(h) 返回一结构,其中该结构的域名为该对象的属性名,结构的域名值为

相应属性的当前值。H必须为标量。若用户没有指定输出参量,则系统将

信息显示于屏幕之上。

a = get(0,\'Factory\') 返回所有能由用户设置的属性的缺省定义值。输出参量a为

一结构数组,该结构的域名为对象的属性名,域名值为相应属性的当前值。

若用户没有指定输出参量,则系统将信息显示于屏幕之上。

a = get(0,\'FactoryObjectTypePropertyName\') 返回指定对象类型的指定的属性

的缺省属性值。输入参量FactoryObjectTypePropertyName为一关键字,

由字符Factory与对象类型(如:Figure)还有属性名(如:Color)组成:

FactoryFigureColor

a = get(h,\'Default\') 返回由句柄h指定的对象的所有缺省属性值。输出参量a为

一结构,该结构的域名为缺省值对应的属性名。若用户没有指定输出参量,

则系统将该结构信息显示于屏幕。

a = get(h,\'DefaultObjectTypePropertyName\') 返回对象类型的指定属性的缺省

属性值。输入参量DefaultObjectTypePropertyName为一关键字,该字由字

符Default与对象类型名(例如:Figure)还有具体的属性名(例如:Color)

组成:DefaultFigureColor

例7-50

若想获得定义于屏幕之上的图形对象属性LineWidth的缺省属性值,输入:

get(0,\'DefaultLineLineWidth\')

命令3 set

功能 设置对象的属性。

用法 set(H,\'PropertyName\',PropertyValue,…) 用属性值\'PropertyValue\'设置关于用

参量H标志的对象(一个或多个)的属性名\'PropertyName\'(一个或多个)。

H可以为一句柄的向量。在这种情形下,命令set可以设置所有对象的属性

值。

set(H,a) 用指定的属性值设置由H标志的对象的属性。其中a为一结构数组,

该结构数组的域名为对象的属性名,域名值为相应属性名的属性值。

set(H,pn,pv…) 对由H指定的所有对象中指定的细胞数组属性名pn设置为相应

的细胞数组属性值pv。

set(H,pn,) 对于每m个图形对象设置n个属性值,其中

m=length(H),n为包含属性名的细胞数组pn中包含的属性名个数。即允许

用户对每一对象的指定的属性设置不同的属性值。

a= set(h) 返回句柄h中允许用户设置的属性名与可能的属性值。输出参量a为

一结构数组,其域名为对象的属性名,域名值为相应的属性名对应的属性

值。若没有指定输出参量a,则系统自动将信息显示于屏幕,h必须为标量。

a= set(0,\'Factory\') 返回那些用户可以设置缺省值的所有对象的属性名,同时显

示可能的属性值,输出参量a为一结构数组,其域名为对象的属性名,域

50

名值为相应的属性名对应的属性值,若没有指定输出参量a,则系统自动将

信息显示于屏幕。

a= set(0,\'FactoryObjectTypePropertyName\')返回指定根对象(0)类型中指定的

属性名ObjectTypePropertyName的所有可能的属性值。输入参量是由固定

的关键字Factory、对象类型(如axes)与属性名(如position等)组成。

a= set(h,\'Default\') 返回由h标记的对象上缺省设置的值,其中h必须是标量。

a= set(h,\'DefaultObjectTypePropertyName\') 返回指定对象h的类型中指定的属

性名ObjectTypePropertyName的所有可能的属性值。输入参量是由固定的

关键字Factory、对象类型(如axes)与属性名(如position等)组成。

命令4 reset

功能 重新设置图形对象的属性为它们的缺省值。

用法 reset(h) 重新设置由句柄h指定的图形对象的属性为系统为它们设置的初始值。

若h为一图形figure,该命令不能重新设置属性Position,Units,PaperPosition和PaperUnits;

若h为一坐标轴axes,该命令不能重新设置属性Position和Units。

例7-51

reset(gca) %重新设置当前坐标轴的属性。

reset(gcf) %重新设置当前图形的属性。

命令5 delete

功能 删除文件或图形对象。作为一可供选择的函数,用户可从当前目录浏览器

(Current Directory browser)中删除文件。要打开该浏览器,从MATLAB桌面上的View菜

单中选择Current Directory命令。

用法 delete filename 从磁盘上删除指定的文件filename。参量filename可以是绝对

路径或与当前路径相关的路径名。其中可以包括通配符(*)。

delete(h) 删除由句柄h指定的图形对象。该命令无条件地、直接地删除对象,

甚至是图形窗口。

delete(\'filename\') 这是第一种情形的函数形式。当文件名包含于字符串filename

中时,使用函数形式。

例:

delete(‘D:MATLABR12work*.m’) % 将删除指定目录上的所有.m文件。

命令6 findobj

功能 定位图形对象且返回它们的句柄。用户可用特定的属性值与沿着指定的层次分

支来限定搜索条件。

用法 h = findobj返回根对象与它的所有的子孙对象句柄。

h = findobj(\'PropertyName\',PropertyValue,…) 返回属性名PropertyName具有

属性值PropertyValue的所有图形对象。用户可指定一对或多对PN与PV

值,对此,findobj返回满足所有条件的那些对象。

h = findobj(objhandles,…) 限定搜索的对象为列表于objhandles中的对象与它

们子孙对象。

h = findobj(objhandles,\'flat\',\'PropertyName\',PropertyValue,…) 限定搜索对象

为objhandles中列出的对象,而不包含它们的子孙对象。

四、7.3.4 图形窗口的控制命令

命令1 subplot

功能 生成与控制多个坐标轴。把当前图形窗口分隔成几个矩形部分,不同的部分是

51

按行方向以数字进行标号的。每一部分有一坐标轴,后面的图形输出于当前的部分中。

用法 subplot(m,n,p) 将一图形窗口分成m*n个小窗口,在第p个小窗口中创建一坐

标轴。则新的坐标轴成为当前坐标轴。若p为一向量,则创建一坐标轴,

包含所有罗列在p中的小窗口。

subplot(h) 使句柄h对应的坐标轴称为当前的,用于后面图形的输出显示。

subplot(\'Position\',[left bottom width height]) 在由4个元素指定的位置上创建一

坐标轴。位置元素的单位为归一化单位。

h = subplot(…) 返回一新坐标的句柄于h。

命令2 hold

功能 保持当前图形窗口中的图形。该命令是决定是否在当前坐标轴中只能增加新的

图形对象还是覆盖原有图形对象。测试保持状态命令为ishold。该命令可以设置当前坐标轴

与当前图形的属性NextPlot。若一图形窗口中有多个坐标轴,则每个坐标轴有自己的保持

状态。

用法 hold on 保留当前图形与当前坐标轴的属性值,后面的图形命令只能在当前存在

的坐标轴中增加图形,即设置当前坐标轴属性NextPlot为add。当必要的

时候,坐标轴的一些属性在增加新图时还是要进行相应的改变。例如,当

新图形的数据范围超出了当前坐标轴的范围,则命令会自动地改变坐标轴

的范围,使能显示新图形。

hold off 在画新图形之前,重新设置坐标轴的属性为缺省值。off是命令hold命

令的缺省值。设置当前坐标轴的属性NextPlot为replace。

hold 在on与off之间转换。即在增加图形与覆盖图形之间切换。当坐标轴不存

在时,则生成一坐标轴。同时使当前坐标轴属性NextPlot在add与replace

之间切换。

命令3 gcf

功能 获得当前图形窗口的句柄。

用法 h = gcf 返回当前图形窗口的句柄。当前窗口为由命令plot、title与surf等得到

的结果。若不存在图形窗口,则系统自动地生成一个,并返回它的句柄。若用户想当图形

窗口不存在时,也不创建新的,则输入:get(0,\'CurrentFigure\')

命令4 clf

功能 清除当前图形窗口。该命令在命令窗口中执行与在回调程序中执行效果是一样

的,即它不能区别由callback设置的属性HandleVisibility,也就是说,当它从一回调程序

中执行时,命令clf仅仅删除属性HandleVisibility为on的图形对象。

用法 clf 清除所有当前图形窗口与窗口中的所有那些句柄为不隐藏(例如它们的属性

HandleVisibility为on)的图形对象。

clf reset 无条件地清除当前图形窗口中所有的图形对象,且重新设置所有图形窗

口属性为缺省值,除了属性Position,Units,PaperPosition,PaperUnits。

命令5 close

功能 删除指定的图形窗口。

用法 close 删除当前的图形窗口。

close(h) 删除由句柄h指定的图形窗口。若h为一向量或矩阵,则close全部删

除其中每一分量指定的图形句柄。

close name 删除指定名字name的窗口。

close all 删除所有没有隐藏的图形。

close all hidden 删除所有具有隐藏的图形。

status = close(…) 若成功地删除了指定的对象则返回status=1,否则返回0。

命令6 newplot

52

功能 做好开始画新图形对象的准备。在高级图形m-文件的开始使用该命令,用于确

定在哪一个图形窗口与坐标轴中输出图形。调用命令newplot能改变当前窗口与坐标轴。基

本上,当要在已经存在的窗口与坐标轴中画图,有三个选项可选:

1.没有改变任何属性与删除任何对象,直接在当前坐标轴中增加新的图形对象;

2.在画图形的对象之前,删除所有存在于当前坐标轴中的,句柄为非隐藏的对象;

3.在画图形的对象之前,无条件删除所有的存在于当前坐标轴中的对象(不管句柄是

否为隐藏),同时设置大部分的属性为缺省值;

4.首先,newplot读取当前图形的属性NextPlot的属性值(关于该属性的含义参见figure

或axes的属性表),再执行相应的动作;

5.然后,newplot确定在哪一个窗口中画图,它读取当前图形的属性NextPlot的属性

值,执行相应的操作。

用法 newplot 画好图形窗口与坐标轴,后面的图形命令就可以在该坐标轴内画图。

h = newplot 效果如上,且返回当前坐标轴的句柄给h。

第 4 节 颜色与光照模式命令

一、颜色控制命令

命令1 colormap

功能 设置或获取当前色图。色图为一个m*3的、元素在0到1之间的实数的矩阵,

每一行为定义一个颜色的RGB向量。色图矩阵的第k行定义了第k个颜色,其中

map(k,:)=[r(k) g(k) b(k)]指定了组成该颜色中红色、绿色、兰色的强度。

用法 colormap(map) 通过矩阵map设置色图。若矩阵map中的元素不在[0 1]区间之

内,则返回一个错误。在目录color中的m-文件能够生成许多色图,每一个m-文件能够接

受颜色数作为函数参数,例如命令colormap(hsv(64))生成了有64种颜色的hsv色图。若用

户没有指定颜色数,例如命令colormap(hsv),生成与当前色图中颜色数相同的hsv色图。

MATLAB支持的色图见表7-14。

表7-14

色图名称

Cool

Bone

Flag

Jet

Copper

Hsv

Hot

Gray

Pink

Prim

Lines

White

Colorcube

Autumn

Spring

Summer

Winter

包含的颜色范围

青蓝和洋红的色度

带一点蓝色的灰度

交替为红色、白色、蓝色和黑色

Hsv的一种变形(以兰色开始和结束)

线性铜色度

色彩饱和值(以红色开始和结束)

从黑色到黄色到白色

线性灰度

粉红的彩色度

三棱镜。交替为红色、橘黄色、黄色、绿色和天蓝色

线性色图

全白色图

增强立方色图

红色黄色阴影色图

洋红黄色阴影色图

绿色黄色阴影色图

兰色绿色阴影色图

例7-52

colormap(\'default\') 设置当前色图为缺省色图。

cmap = colormap 获取当前色图矩阵。

命令2 bone

53

功能 生成带淡兰色的灰度刻度化的色图。

用法 bone(m) 返回个一个阶数为m*3的包含“bone”的色图。

bone 返回一个与当前色图行数相同的色图。

命令3 cool

功能 生成带阴影的青色和品红的色图。

用法 cool(m) 返回一个阶数为m*3的包含“cool”的色图。

cool 返回一个与当前色图行数相同的色图。

命令4 copper

功能 生成线性铜色色图。

用法 copper(m)返回一个阶数为m*3的包含“copper”的色图。

copper 返回一个与当前色图行数相同的色图。

命令5 flag

功能 生成一个颜色顺序为红、白、兰、黑的色图。

用法 flag(m)返回一个阶数为m*3的包含“flag”的色图。增加m的值,会增加色

图的颗粒程度。

flag 返回一个与当前色图函数相同的色图。

命令6 gray

功能 生成一个线性灰度化的色图。

用法 gray(m)返回个一个阶数为m*3的包含灰度化的的色图。

gray 返回一个与当前色图函数相同的色图。

命令7 hot

功能 生成一个颜色顺序为黑、红、黄、白的色图。

用法 hot(m)返回个一个阶数为m*3的包含“hot”的色图。

hot 返回一个与当前色图函数相同的色图。

命令8 hsv

功能 生成一个包含色度-饱和度值的色图。一个hsv色图包含各种饱和色度颜色的色

度的成分。其颜色从红色到黄色、绿色、青色、蓝色、品红,最后返回红色。该色图对于

显示周期函数很有用处。

用法 hsv(m)返回个一个阶数为m*3的包含hsv的色图。

hsv 返回一个与当前色图函数相同的色图。

命令9 jet

功能 不同于hsv色图的另外一种色图。

用法 jet(m)返回个一个阶数为m*3的,与hsv(m)不同的色图,用于显示NCSA

流体激光图片。

jet 返回一个与当前色图函数相同的色图。

命令10 pink

功能 生成一个带柔和阴影粉红色图。

用法 pink(m)返回一个阶数为m*3的包含“pink”的色图。

pink 返回一个与当前色图函数相同的色图。

命令11 prism

功能:生成一个三棱镜色图。如同hsv色图一样,prism色图中的颜色使用顺序是一样

的,不同的是,命令prism重复使用它的六中颜色,而命令hsv是连续地变换它的颜色。

用法 prism(m)返回一个阶数为m*3的包含六种循环使用的颜色:红色、橙色、黄

色、绿色、蓝色、紫色。

54

prism 这种没有任何输入输出参量的形式,改变当前坐标轴中的线对象的颜色

为三棱镜中的颜色。

二、7.4.2 色图控制命令

命令1 brighten

功能 增亮或变暗色图。

用法 brighten(beta) 增亮或变暗当前的色图。若0

则变暗色图。改变的色图将代替原来的色图,但本质上是相同的颜色。

brighten(h,beta) 对指定的句柄对象h中的子对象进行操作。

newmap = brighten(beta) 该命令没有改变当前图形的亮度,而是返回变化后的

色图给newmap。

newmap = brighten(cmap,beta) 该命令没有改变指定色图cmap的亮度,而是返

回变化后的色图给newmap。

命令2 colorbar

功能 显示能指定颜色刻度的颜色条。且调整当前坐标轴,以适应当前的颜色条。

用法 colorbar 更新最近生成的颜色条。或若当前坐标轴没有一颜色条,则在右边显

示一垂直的颜色条。

colorbar(\'vert\') 增加一垂直的颜色条到当前的坐标轴。

colorbar(\'horiz\') 增加一水平的颜色条到当前的坐标轴。

colorbar(h) 用坐标轴h来生成一颜色条。若坐标轴的宽度大于高度,则颜色条

是水平放置的。

h = colorbar(…)返回一颜色条句柄h,该句柄是一坐标轴对象。

colorbar(…,\'peer\',axes_handle) 生成一与坐标轴axes-handle有关的颜色条,代

替当前的坐标轴。

命令3 contrast

功能 提高灰度色图的对比度。该命令可以增强图像的对比度。

用法 cmap = contrast(X) 返回一灰度色图,该色图与当前色图有相同的维数。参量

cmap为生成的灰度色图。

cmap = contrast(X,m) 返回维数为m*3的灰度色图cmap。

例7-53

>>load clown;

>>cmap = contrast(X);

>>image(X);

>>colormap(cmap);

命令4 rgbplot

功能 画出色图。

用法 rgbplot(cmap) 画出维数为m*3的色图矩阵cmap的每一列,矩阵的第一列为红

色强度,第二列为绿色强度,第三列为蓝色强度。

命令5 diffuse

功能 漫反射率。

用法 R = diffuse(Nx,Ny,Nz,S) 返回曲面的漫反射率向量[Nx,Ny,Nz],S为一三维向量,

用于定义光源的方向;S也可以为球面坐标系中的二维向量[Theta,Phi]。

Lambert定律:R = cos(PST),其中PST为曲面法线与光源方向之间夹角。

命令6 specular

功能 镜面反射率。

55

用法 R = specular(Nx,Ny,Nz,S,V,spread) 返回一曲面的镜面反射率向量[Nx,Ny,Nz],

向量参量S与V分别用于指定光源位置与观察点的位置。它们可以为三维直角坐标系向量

[x,y,z]或者为二维球面向量[Theta,Phi]。当标准向量的方向为(S+V)/2,则镜面的高光效果最

强。第六个参量spread为镜面反射扩散系数。

命令7 surfl

功能 三维带光照模式的阴影图。图形的色泽取决于曲面的漫反射、镜面反射与环境

光照模式。

用法 surfl(…)效果与命令surf(…)基本上一样,除了它受光源影响的曲面之外。

surfl(Z)、surfl(X,Y,Z)、surfl(Z,S)、surfl(X,Y,Z,S)、surfl(X,Y,Z,S,K) 这些都是

有效的使用形式。若参数中有S,则为一三维向量[Sx,Sy,Sz],用于指定光

源的方向。S也可视为点坐标系下的二维向量[AZ,EL]。S的缺省值为从当

前观察方向逆时针旋转45度。使用命令组cla;hold on;view(AZ,EL);

surfl(…);hold off等可画出视角方向为(AZ,EL)的带光照模式的曲面图。第

五参数K=[ka,kd,ks,

spread]指定环境光、漫反射光、镜面反射光、扩散系数等的强弱。

surfl(…,\'light\') 用LIGHT对象生成一带颜色的、带光照模式的曲面。该命令可

以生成与用缺省光照模式不同效果的曲面。

surfl(…,\'cdata\') 指定的曲面的反射光的颜色为cdata。

H = surfl(…) 返回曲面与光源的句柄。

13.2 极小化

作图除了提供视觉信息外,还常常需要确定一个函数的其它更多的特殊属性。在许多

应用中,特别感兴趣的是确定函数的极值,即最大值(峰值)和最小值(谷值)。数学上,

可通过确定函数导数(斜率)为零的点,解析上求出这些极值点。检验humps的图形在峰

值和谷值点上的斜率就很容易理解这个事实。显然,如果定义的函数简单,则这种方法常

常奏效。然而,即使很多容易求导的函数,也常常很难找到导数为零的点。在这种情况下,

以及很难或不可能解析上求得导数的情况下,必须数值上寻找函数的极值点。MATLAB提

供了两个完成此功能的函数fmin和fmins。这两个函数分别寻找一维或n维函数的最小值。

这里仅讨论fmin。有关fmins的详细信息,参阅《MATLAB参考指南》。因为f(x)的最大

值等于-f(x)的最小值,所以,上述fmin和fmins可用来求最大值和最小值。如果还不清楚,

把上述图形倒过来看,在这个状态下,峰值变成了谷值,而谷值则变成了峰值。

为了解释求解一维函数的最小值和最大值,再考虑上述例子。从图13.2可知,在

x

max

=0.7附近有一个最大值,并且在x

min

=4附近有一个最小值。而这些点的解析值为:

x

max

/40.785

x

min

5/4393.

。为了方便,用文本编辑器编写一个脚本M

文件,并用fmin寻出数值上极值点,给出函数主体如下:

56

% ex_fmin.m

fn=‘ 2*exp(-x)*sin(x) ‘;

xmin=fmin(fn , 2 , 5)

emin=5*pi / 4-xmin

x=xmin;

ymin=eval(fn)

fx=‘ -2*exp(-x)*sin(x) ‘;

xmax=fmin(fx , 0 , 3)

emax=pi / 4-xmax

x=xmax;

ymax=eval(fn)

% define function for min

% search over range 2

% find error

% need x since fn has x as its variable

% evaluate at xmin

% define for max:note minus sign

% search over range 0

% find error

% need x since fn has x as its variable

% evaluate at xmax

下面是M文件的运行结果:

>>ex-fmin

xmin =

3.9270

emin =

1.4523e-006

ymin =

-0.0279

xmax =

0.7854

emax =

-1.3781e-005

ymax =

0.6448

这些结果与上述图形非常吻合。注意,fmin的工作方式很像fplot。要计算的函数可用

一个函数M文件表达,或者只给出一个x为自变量的字符串。上述例子就是使用后一种方

法。这个例子也使用了函数eval,它获取一个字符串,并解释它,如同在MATLAB提示符

下输入该字符串。由于要计算的函数以x为自变量的字符串形式给出,那么设置x等于xmin

和xmax,允许eval计算该函数,找到ymin和ymax。

最后,特别注意,求数值上的最小值包含一个搜索过程,fmin不断计算函数值,寻求

其最小值。如果计算的函数需要很大的计算量,或者该函数在搜索区间不止一个最小值,

则该搜索过程所花的时间比较长。在有些情况下,搜索过程根本找不到结果。当fmin找不

到最小值时,它会停止运行并提供解释。

与函数fmin一样,函数fmins搜索最小值。不过,fmins搜索向量的标量函数的最小

值。即fmins寻找

min

f(x)

x

57

这里x是函数f(.)的向量参数,函数f(.)返回标量值。函数fmins利用单纯形法求最小值,它

不需要精确的梯度计算。任何一种优化工具箱中具有更多扩展的优化算法

13.3 求零点

正如人们对寻找函数的极点感兴趣一样,有时寻找函数过零或等于其它常数的点也非

常重要。一般试图用解析的方法寻找这类点非常困难,而且很多时候是不可能的。在上述

函数humps的图中(如图13.3所示),该函数在x=1.2附近过零。

FPLOT OF HUMPS

100

80

60

40

20

0

-20

00.511.52

图13.3 humps函数的图形

MATLAB再一次提供了该问题的数值解法。函数fzero寻找一维函数的零点。为了说

明该函数的使用,让我们再运用humps例子。

>>xzero=fzero(‘ humps ‘ , 1.2) % look for a zero near 1.2

xzero=

1.2995

>>yzero=humps(xzero , 1.2) % evaluate at xzero

yzero=

3.5527e-15

所以,humps的零点接近于1.3。如前所述,寻找零点的过程可能失败。如果fzero没有找

到零点,它将停止运行并提供解释。

当调用函数fzero时,必须给出该函数的名称。但由于某种原因,它不能接受以x为

自变量的字符串来描述的函数。这样,即使在fplot和fmin中都具有的这个特性,fzero将

不工作。

58

fzero不仅能寻找零点,它还可以寻找函数等于任何常数值的点。仅仅要求一个简单的

再定义。例如,为了寻找f(x)=c的点,定义函数g(x)=f(x)-c,然后,在fzero中使用g(x),

就会找出g(x)为零的x值,它发生在f(x)=c时。

13.4 积分

一个函数的积分或面积也是它的另一个有用的属性。MATLAT提供了在有限区间内,

数值计算某函数下的面积的三种函数:trap2 , quad和quad8。函数trapz通过计算若干梯

形面积的和来近似某函数的积分,这些梯形如图13.4所示,是通过使用函数humps的数据

点形成。

图13.4 粗略的梯形逼近曲线下的面积示意图

从图中可明显地看出,单个梯形的面积在某一段欠估计了函数真正的面积,而在其它

段又过估计了函数的真正面积。如同线性插值,当梯形数目越多时,函数的近似面积越准

确。例如,在图13.4中,如果我们大致增加一倍数目的梯形,我们得到如下页(如图13.5)

所示的更好的近似结果。

59

图13.5 较好的梯形逼近曲线下的面积示意图

对如上所示的两个曲线,用trapz在区间-1

>>x=-1 : 0.17 : 2; % rough approximation

>>y=humps(x);

>>area=trapz(x , y) % call trapz just like the plot command

area =

25.9174

>>x=-1 : 0.07 : 2; % better approximation

>>y=humps(x);

>>area=trapz(x , y)

area =

26.6243

自然地,上述两个结果不同。基于对图形的观察,粗略近似可能低估了实际面积。除

非特别精确,没有准则说明哪种近似效果更好。很明显,如果人们能够以某种方式改变单

个梯形的宽度,以适应函数的特性,即当函数变化快时,使得梯形的宽度变窄,这样就能

够得到更精确的结果。

MATLAB的函数quad和quad8是基于数学上的正方形概念来计算函数的面积,这些

积分函数的操作方式一样。为获得更准确的结果,两个函数在所需的区间都要计算被积函

数。此外,与简单的梯形比较,这两个函数进行更高阶的近似,而且quad8比quad更精确。

这两个函数的调用方法与fzero相同,即

>>area=quad(‘ humps ‘ , -1 , 2) % find area between -1 and 2

area =

26.3450

>>area=quad8(‘ humps ‘ , -1 , 2)

60

area =

26.3450

注意,这两个函数返回完全相同的估计面积,而且这个估计值在两个trapz面积的估计

值之间。有关MATLAB的积分函数的其它信息,参阅《MATLAB参考指南》或在线帮助。

13.5 微分

与积分相反,数值微分非常困难。积分描述了一个函数的整体或宏观性质,而微分则

描述一个函数在一点处的斜率,这是函数的微观性质。因此积分对函数的形状在小范围内

的改变不敏感。而微分却很敏感。一个函数小的变化,容易产生相邻点的斜率的大的改变。

由于微分这个固有的困难,所以尽可能避免数值微分,特别是对实验获得的数据进行

微分。在这种情况下,最好用最小二乘曲线拟合这种数据,然后对所得到的多项式进行微

分。或用另一种方法,对该数据进行三次样条拟合,然后寻找如第11章所讨论的样条微分。

例如,再次考虑第11章曲线拟合的例子。

>>x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]

>>y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; %

data

>>n=2; % order of fit

>>p=polyfit(x , y , n) % find polynomial coefficients

p =

-9.8108 20.1293 -0.0317

>>xi=linspace(0 , 1 , 100);

>>z=polyval(p , xi); % evaluate polynomial

>>plot(x , y , ‘ o \' , x , y , xi , z , \' : \')

>>xlabel(‘ x ‘) , ylabel(‘ y=f(x) ‘) , title(‘ Second Order Curve Fitting ‘)

在这种情况下,运用多项式微分函数polyder求得微分。

>>pd=polyder(p)

pd =

-19.6217 20.1293

61

图13.6 二次曲线拟合

由于一个多

y9.8108x

2

201293.x0.0317

的微分是dy/dx=-19.6217x+20.1293。

项式的微分是另一个低一阶的多项式,所以还可以计算并画出该函数的微分。

>>z=polyval(pd , xi); % evaluate derivative

>>plot(xi , z)

>>xlabel(‘ x ‘) , ylabel(‘ dy/dx ‘) , title(‘ Derivative of a curve Fit Polynimial ‘)

(微分曲线如图13.7所示)

Derivative of a curve Fit Polynimial

25

20

15

d

y

/

d

x

10

5

0

00.20.4

x

0.60.81

62

图13.7 曲线拟合多项式微分

在这种情况下,拟合的多项式为二阶,使其微分为一阶多项式。这样,微分为一条直

线,它意味该微分与x成线性变化。

给定一些描述某函数的数据,MATLAB提供了一个计算其非常粗略的微分的函数。这

个函数命名为diff,它计算数组中元素间的差分。因为微分定义为:

dy

dx

lim

h0

f(xh)f(x)

(xh)(x)

则y=f(x)的微分可近似为:

dyf(xh)f(x)

这里h>0

dx(xh)(x)

它是y的有限差分除以x的有限差分。因为diff计算数组元素间的差分,所以在MATLAB

中,可近似求得函数的微分。继续前一个例子:

>>dy=diff(y) ./ diff(x); % compute differences and use array division

>>xd=x(1 : length(x)-1); % create new x axis since dy is shorter than y

>>plot(xd , dy);

>>title(‘ Approximate Derivative Using DIFF ‘)

>>ylabel(‘ dy/dx ‘) , xlabel(‘ x ‘)

Approximate Derivative Using DIFF

30

25

20

15

10

5

0

-5

d

y

/

d

x

00.20.4

x

0.60.81

图13.8 用diff得到的近似微分

63

由于diff计算数组元素间的差分,所以,其所得输出比原数组少了一个元素。这样,

画微分曲线时,必须舍弃x数组中的一个元素。当舍弃x的第一个元素时,上述过程给出

向后差分近似,而舍弃x的最后一个元素,则给出向前差分近似。比较上述两条曲线,显

而易见,用有限差分近似微分会导致很差的结果,特别是被噪声污染了的数据。

13.6 微分方程

一般微分方程式描述系统内部变量的变化率如何受系统内部变量和外部激励,如输入,

的影响。当常微分方程式能够解析求解时,可用MATLAB的符号工具箱中的功能找到精确

解。在本书的后面将介绍该工具箱的一些特点。

在微分方程难以获得解析解的情况下,可以方便地在数值上求解。为了说明起见,考

虑描述振荡器的经典的范得波(Var der Pol)微分方程。

d

2

x

2

dx

(1x)x0

dt

dt

2

与所有的数值求解微分方程组的方法一样,高阶微分方程式必须等价地变换成一阶微

分方程组。对于上述微分方程,通过重新定义两个新的变量,来实现这种变换。

令y

1

=x 且 y

2

=dy/dx

则 dy1/dt=y

2

dy

2

/dt(1y

2

)y

1

根据这个微分方程组,可用MATLAB的函数ode23和ode45求出系统随时间变化的

运动情况。调用这些函数时,需要编写一个函数M文件,给定当前时间及y1和y2的当前

值,该函数返回上述导数值。MATLAB中,这些导数由一个列向量给出。在本例中,这个

列向量为yprime。同样,y1和y2合并写成列向量y。所得函数M文件是:

function yprime=vdpol(t , y);

% VDPOL(t , y) returns derivatives of the Van der Pol equation:

%

% x ‘‘-mu *(1-x ^2)*x ‘+x=0 (‘ = d/dx , ‘‘ = d^2/dx^2)

%

% let y(1)=x and y(2)=x‘

%

% then y(1) ‘ = y(2)

% y(2) ‘ = MU*(1-y(1)^2)*y(2)-y(1)

global MU % choose 0

64

yprime=[y(2) MU*(1-y(1)^2)*y(2)-y(1)]; % output must be a column

给定这个完整地描述微分方程的函数,计算结果如下:

>>global MU % define MU as a global variable in the Command Workspace

>>MU=2; % set global parameter to desired value

>>[t , y]=ode23(‘ vdpol ‘ , 0 , 30 , [1 ; 0]); % to=0 , tf=30 , yo=[1 ; 0]

>>y1=y( : , 1); % first column is y(1) versus time points in t

>>y2=y( : , 2); % second column is y(2)

>>plot(t , y1 , t , y2 , ‘ -- ‘)

>>xlabel(‘ Time , Second ‘) , ylabel(‘ Y(1) and Y(2) ‘)

>>title(‘ Van der Pol Solution for mu=2 ‘)

所得的图见图13.9。

图13.9当mu=2时的范得波方程的运动曲线

在图13.9中,y2(虚线)是y1(实线)的导数。传递给ode23的参数由ode23(f_name ,

to , tf , yo , to1)描述。这里f_name是计算导数的M文件函数的字符串名,to是初始时间,

tf是终止时间,yo是初始条件向量。可选择的参数to1(缺省值to1=1e-3)是所需的相对精

度。在上例中,起始时间是第0秒,终止时间是第30秒,初始条件为y=[1;0]。两个输出参

数是列向量t和矩阵y,其中向量t包含了估计响应的时间点,而矩阵y的列数等于微分方

程组的个数(本例为2),且其行数与t相同。t中的时间点不是等间隔的,因为为了保持所

需的相对精度,积分算法改变了步长。

函数ode45的使用与ode23完全一样。两个函数的差别在于必须与所用的内部算法相

关。两个函数都运用了基本的龙格-库塔(Runge-Kutta)数值积分法的变形。ode23运用一个

组合得2/3阶龙格-库塔-芬尔格(Runge-Kutta-Fehlerg)算法,而ode45运用组合的4/5阶龙

格-库塔-芬尔格算法。一般地,ode45可取较多的时间步。所以,要保持与ode23相同误差

65

时,在to和tf之间可取较少的时间步。然而,在同一时间,ode23每时间步至少调用f_name

3次,而ode45每时间步至少调用f_name 6次。

正如使用高阶多项式内插常常得不到最好的结果一样,ode45也不总是比ode23好。

如果ode45产生的结果,对作图间隔太大,则必须在更细的时间区间,对数据进行内插,

比如用函数interp1。这个附加时间点会使ode23更有效。作为一条普遍规则,在所计算的

导数中,如有重复的不连续点,为保持精度致使高阶算法减少时间步长,这时低阶算法更

有效。正是由于这个原因,电子电路分析按缺省,就用一阶算法编程,并且最多提供二阶

算法来解决暂态时间响应问题。此外,通过对tol设置更小的值,要达到更高的精度,没有

必要使绝对误差更小。tol设置每时间步的相对精度,不一定引起绝对误差减少。

总之,不要盲目使用数值方法。对于给定的问题,在决定最好的方法之前,要试一试

各种可能的方法。有关微分方程数值解法的更进一步信息,请参考数值分析方面的书籍。

有些参考书还提供了一些关于算法选择和如何处理那些时间常数变化范围大的病态方程的

非常实用的信息。

13.7 M文件举例

这里所介绍的《精通MATLAB工具箱》中的M文件可近似求解由采样值给出的函数

的积分和微分。这里假定这些函数本身不存在,且独立变量也许不是线性间隔。例如,已

装载到MATLAB中要分析的数据来源于实验测试。

对于所包含的数据缺乏函数描述,有许多种积分和微分的方法。如前所述,人们可以

用最小二乘多项式拟合数据,然后在多项式的描述上进行操作。另一种方法是寻找数据的

三次样条表示,然后运用《精通MATLAB工具箱》中的函数spintgrl和spderiv来分别寻

找积分和微分的样条表示。这里所介绍的方法提供了另一种更简单的方法。积分用梯形规

则计算。用加权中心差分计算微分。此外,将函数设计成在矩阵形式下工作,矩阵的列代

表各与自变量有关的因变量。

正如这章前面所述,MATLAB函数trapz计算在某有限区间的梯形积分。这里我们寻

找的积分是自变量为x的函数。即如果y=f(x),我们寻找:

x

f(x)dx

S(x)

x1

式中的x1是向量x的第一个元素。用梯形规则,这个积分近似为:

S(x

k

)

0.5(y

i

y

i1

)(x

i

x

i1

)

且S(x

1

)=0

i1

k

这样,第k个数据点的积分是上述梯形面积的累加和。函数mmintgrl实现的这个算法

如下:

function z=mmintgrl(x , y)

% MMINTgrl Compute Integral using Trapezoidal Rule.

66

% MMINTGRL(X , Y) computes the integral of the function y=f(x) given the

% data in X and Y. X must be a vector , but Y may be a column oriented

% data matrix. The length of X must equal the length of Y if Y is a

% vector , or it must equal the number of rows in Y if Y is a matrix.

%

% X need not be equally spaced. The trapezoidal algorithm is used.

%

% See also mmderiv

% Copyrigth (c) 1996 by Prentice-Hall , Inc.

flag=0; % falg is True if y is a row

x=x( : ); nx=length(x); % make x a column

[ry , cy]=size(y);

if ry==1&cy==nx , y=y .\' ; ry=cy ; cy=1 ; flag=1 ; end

if nx~=ry , error(\' X and Y not the right size \') , end

dx=x(2 : nx)-x(1 : nx-1); % width of each trapezoid

dx=dx( : , ones(1 , cy)); % duplicate for each column in y

yave=(y(2 : ry , : )+y(1 : ry-1 , :))/2; % average of heights

z=[zeros(1 , cy); cumsum(dx .* yave)]; % Use cumsum to find area

if flag , z=z\'; end % if y was a row , return a row

在介绍上述函数的使用之前,考虑微分。在这种情况下,人们感兴趣的就是刚给定数

据点的近似斜率。这里介绍一种下述的中心差分,而不是简单的向前或向后差分:

图13.10 加权中心差分方法

从图13.11可知,在第k个点的近似微分是:

67

D(x

k

)(1

k

)M

k

(

k

)M

k1

式中

k

x

k

x

k1

x

k1

x

k1

并且M

k

是连接y

k-1

到y

k

的直线的斜率。这样,第k点的微分是相邻两点间斜率的加权平

均,离该点越近的点权越重。在第一个和最后一个数据点上,不能简单按照上述方法进行

处理,因为这两个点都没有伴随的直线段。对于这些数据点,需要用另外的方法。这里所

采取的方法是用二次多项式拟合前3个点(或最后3个点),并且计算这个多项式第一个(或

最后一个)点的微分。函数mmderiv实现的这个算法如下:

function z=mmderiv(x , y)

% MMDERIV Compute Derivative Using Weighted Central Differences.

% MMDERIV(X , Y) computes the derivative of the function y=f(x) given the

% data in X and Y. X must be a vector , but Y may be a column oriented

% data matrix. The length of X must equal the length of Y if Y is a

% vector , or it must equal the number of rows in Y if Y is a matrix.

%

% X need not be equally ed central difference are used.

% Quadratic approximation is used at the endpoints.

%

% See also mmintgrl

% Copyrigth (c) 1996 by Prentice-Hall , Inc.

flag=0; % flag is True if y is a row

x=x( : ); nx=length(x); % make x a column

[ry , cy]=size(y);

if ry==1&cy==nx , y=y .\'; ry=cy; cy=1; flag=1; end

if nx~=ry , error(\' X and Y not the right size \') , end

if nx<3 , error(\' X and Y must have st least three elements \') , end

dx=x(2 : nx)-x(1 : nx-1); % first difference in x

dx=dx+(dx==0)*eps; % make infinite slopes finite

dxx=x(3 : nx)-x(1 : nx-2); % second difference in x

dxx=dxx+(dxx==0)*eps; % make infinite slopes finite

alpha=dx(1 : nx-2) ./ dxx % central difference weight

alpha=alpha( : , ones(1 , cy)); % duplicate for each column in y

dy=y(2 : ry , :)-y(1 : ry-1 , : ); % first difference in y

dx=dx( : , ones(1 , cy)); % duplicate dx for each column in y

% now apply weighting to dy

z=alpha .* dy(2:ry-1 , :) ./ dx(2 : nx-1 , : )+(1-alpha) .* dy(1 : ry-2 , : ) ./ dx(1 : nx-2 , : );

68

z1=zeros(1 , cy)>=z1;

for i=1 : cy % fit quadratic at endpoints of each column

p1=polyfit(x(1 : 3) , y(1 : 3 , i) , 2); % quadratic at first point

z1(i)=2*p1(1)*x(1)+p1(2); % evalute poly derivative

pn=polyfit(x(nx-2 : nx) , y(ry-2 : ry , i) , 2); % quadratic at last point

zn(i)=2*pn(1)*x(nx)+pn(2); % evaluate poly derivative

end

z=[z1; z; zn];

if flag , z=z\'; end % if y was a row , return a row

最后,给出一个例子:

>>x=linspace(0 , 2*pi , 30)

>>y=sin(x); % create data

>>yi=mmintgrl(x , y); % find integral

>>yd=mmderiv(x , y); % find derivative

>>plot(x , y , x , yi , ‘ - ‘ , x , yd , ‘ : ‘) % plot results

注意这个积分定性地证明了等式:

sin(x)dx1cos(x)

0

x

而微分定性地证明了等式:

d

sin(x)cos(x)

dx

69

图13.11 y=sin(x)极其积分、微分曲线

13.8 小结

表13.1总结了本章所讨论的函数。

表13.1

数值分析函数

fplot(‘ fname ‘ , [lb ub])

fmin(‘ fname ‘ , [lb ub])

fimis(‘ fname ‘ , xo)

fzero(‘ fname ‘ , xo)

trapz(x , y)

diff(x)

[t , y]=ode23(‘ fname ‘ , to , tf , yo)

[t , y]=ode45(‘ fname ‘ , to , tf , yo)

绘出上下限之间的函数

寻找上下限内的标量最小值

寻找xo附近的向量最小值

寻找xo附近的标量函数的零点

给定数据点x和y,计算y=f(x)下的梯形面积

积分。

数组元素间的差分

用2阶/3阶龙格-库塔算法解微分方程组

用4阶/5阶龙格-库塔算法解微分方程组

第四章 概率统计

本章介绍MATLAB在概率统计中的若干命令和使用格式,这些命令存放于Statistics

Toolbox中。这部分函数的主要形式为:

通用函数:函数名(\'name\',参数表)

专用函数:Name函数名(参数表)

常见分布函数名

\'beta\'

\'bino\'

\'chi2\'

\'exp\'

\'f\'

\'gam\'

\'geo\'

\'hyge\'

\'logn\'

\'nbin\'

\'ncf\'

\'nct\'

\'ncx2\'

\'norm\'

\'poiss\'

\'rayl\'

\'t\'

\'unif\'

\'unid\'

\'weib\'

name的取值

\'Beta\'

\'Binomial\'

\'Chisquare\'

\'Exponential\'

\'F\'

\'Gamma\'

\'Geometric\'

\'Hypergeometric\'

\'Lognormal\'

\'Negative Binomial\'

\'Noncentral F\'

\'Noncentral t\'

\'Noncentral Chi-square\'

\'Normal\'

\'Poisson\'

\'Rayleigh\'

\'T\'

\'Uniform\'

\'Discrete Uniform\'

\'Weibull\'

70

函数说明

Beta分布

二项分布

卡方分布

指数分布

F分布

GAMMA分布

几何分布

超几何分布

对数正态分布

负二项式分布

非中心F分布

非中心t分布

非中心卡方分布

正态分布

泊松分布

瑞利分布

T分布

均匀分布

离散均匀分布

Weibull分布

第 1 节 随机数的产生

一、通用函数

命令 求指定分布的随机数

函数 random

格式 y = random(\'name\',A1,A2,A3,m,n) %name的取值见上表;A1,A2,A3为分

布的参数;m,n指定随机数的行和列

例: 产生12(3行4列)个均值为2,标准差为0.3的正态分布随机数

>> y=random(\'norm\',2,0.3,3,4)

y =

2.3567 2.0524 1.8235 2.0342

1.9887 1.9440 2.6550 2.3200

2.0982 2.2177 1.9591 2.0178

二、常用的专用函数

1. 正态分布的随机数据的产生

命令 参数为μ、σ的正态分布的随机数据

函数 normrnd

格式 R = normrnd(MU,SIGMA) %返回均值为MU,标准差为SIGMA的正态分布

的随机数据,R可以是向量或矩阵。

R = normrnd(MU,SIGMA,m) %m指定随机数的个数,与R同维数。

R = normrnd(MU,SIGMA,m,n) %m,n分别表示R的行数和列数

>> R=normrnd(10,0.5,[2,3]) %mu为10,sigma为0.5的2行3列个正态随机数

R =

9.7837 10.0627 9.4268

9.1672 10.1438 10.5955

2.常见分布的随机数产生函数

常见分布的随机数的使用格式与上面相同

随机数产生专用函数表

函数名

Unifrnd

Unidrnd

Exprnd

Normrnd

chi2rnd

Trnd

Frnd

Gamrnd

Betarnd

Lognrnd

Nbinrnd

Ncfrnd

Nctrnd

Ncx2rnd

调用形式

unifrnd ( A,B,m,n)

unidrnd(N,m,n)

exprnd(Lambda,m,n)

normrnd(MU,SIGMA,m,n)

chi2rnd(N,m,n)

trnd(N,m,n)

frnd(N

1

, N

2

,m,n)

gamrnd(A, B,m,n)

betarnd(A, B,m,n)

lognrnd(MU, SIGMA,m,n)

nbinrnd(R, P,m,n)

ncfrnd(N

1

, N

2,

delta,m,n)

nctrnd(N, delta,m,n)

ncx2rnd(N, delta,m,n)

注 释

[A,B]上均匀分布(连续) 随机数

均匀分布(离散)随机数

参数为Lambda的指数分布随机数

参数为MU,SIGMA的正态分布随机数

自由度为N的卡方分布随机数

自由度为N的t分布随机数

第一自由度为N

1

,第二自由度为N

2

的F分布随机数

参数为A, B的

分布随机数

参数为A, B的

分布随机数

参数为MU, SIGMA的对数正态分布随机数

参数为R,P的负二项式分布随机数

参数为N

1

,N

2

,delta的非中心F分布随机数

参数为N,delta的非中心t分布随机数

参数为N,delta的非中心卡方分布随机数

71

Raylrnd

Weibrnd

Binornd

Geornd

Hygernd

Poissrnd

raylrnd(B,m,n)

weibrnd(A, B,m,n)

binornd(N,P,m,n)

geornd(P,m,n)

hygernd(M,K,N,m,n)

poissrnd(Lambda,m,n)

参数为B的瑞利分布随机数

参数为A, B的韦伯分布随机数

参数为N, p的二项分布随机数

参数为 p的几何分布随机数

参数为 M,K,N的超几何分布随机数

参数为Lambda的泊松分布随机数

第 2 节 随机变量的概率密度函数

一、通用函数

命令 通用函数计算概率密度函数值

函数 pdf

格式

Y=pdf(name,K,A)

Y=pdf(name,K,A,B)

Y=pdf(name,K,A,B,C)

说明 返回在X=K处、参数为A、B、C的概率密度值,对于不同的分布,参数个数

是不同;name为分布函数名,其取值如表4-2。

例如二项分布:设一次试验,事件A发生的概率为p,那么,在n次独立重复试验中,

事件A恰好发生K次的概率P_K为:P_K=P{X=K}=pdf(\'bino\',K,n,p)

例:计算正态分布N(0,1)的随机变量X在点0.6578的密度函数值。

解:

>> pdf(\'norm\',0.6578,0,1)

ans =

0.3213

二、常见的专用函数

1. 二项分布的概率值

函数 binopdf

格式 binopdf (k, n, p) %等同于

pdf(

bino

K,n,p)

, p — 每次试验事件A发生的

概率;K—事件A发生K次;n—试验总次数

2. 泊松分布的概率值

函数 poisspdf

格式 poisspdf(k, Lambda) %等同于

pdf(

poiss

,K,Lamda)

3. 正态分布的概率值

函数 normpdf(K,mu,sigma) %计算参数为μ=mu,σ=sigma的正态分布密度函数

在K处的值

4.计算概率密度函数的专用函数

专用函数计算概率密度函数表

函数名

Unifpdf

unidpdf

Exppdf

调用形式

unifpdf (x, a, b)

Unidpdf(x,n)

exppdf(x, Lambda)

normpdf(x, mu,

normpdf

sigma)

chi2pdf chi2pdf(x, n)

Tpdf tpdf(x, n)

Fpdf fpdf(x, n

1

, n

2

)

gampdf gampdf(x, a, b)

注 释

[a,b]上均匀分布(连续)概率密度在X=x处的函数值

均匀分布(离散)概率密度函数值

参数为Lambda的指数分布概率密度函数值

参数为mu,sigma的正态分布概率密度函数值

自由度为n的卡方分布概率密度函数值

自由度为n的t分布概率密度函数值

第一自由度为n

1

,第二自由度为n

2

的F分布概率密度函数值

参数为a, b的

分布概率密度函数值

72

betapdf

lognpdf

nbinpdf

Ncfpdf

Nctpdf

ncx2pdf

raylpdf

weibpdf

binopdf

geopdf

hygepdf

poisspdf

betapdf(x, a, b)

lognpdf(x, mu,

sigma)

nbinpdf(x, R, P)

ncfpdf(x, n

1

, n

2,

delta)

nctpdf(x, n, delta)

ncx2pdf(x, n, delta)

raylpdf(x, b)

weibpdf(x, a, b)

binopdf(x,n,p)

geopdf(x,p)

hygepdf(x,M,K,N)

poisspdf(x,Lambda)

参数为a, b的

分布概率密度函数值

参数为mu, sigma的对数正态分布概率密度函数值

参数为R,P的负二项式分布概率密度函数值

参数为n

1

,n

2

,delta的非中心F分布概率密度函数值

参数为n,delta的非中心t分布概率密度函数值

参数为n,delta的非中心卡方分布概率密度函数值

参数为b的瑞利分布概率密度函数值

参数为a, b的韦伯分布概率密度函数值

参数为n, p的二项分布的概率密度函数值

参数为 p的几何分布的概率密度函数值

参数为 M,K,N的超几何分布的概率密度函数值

参数为Lambda的泊松分布的概率密度函数值

第 3 节 随机变量的分布函数

一、通用函数

命令 通用函数cdf用来计算随机变量

XK

的概率之和(累积概率值)

函数 cdf

格式

cdf(

name

,K,A)

cdf(

name

,K,A,B)

cdf(

name

,K,A,B,C)

说明 返回以name为分布、随机变量X≤K的概率之和的累积概率值

例 求标准正态分布随机变量X落在区间(-∞,0.4)内的概率(该值就是概率统计教材

中的附表:标准正态数值表)。

解:

>> cdf(\'norm\',0.4,0,1)

ans =

0.6554

二、专用函数

1. 二项分布的累积概率值

函数 binocdf

格式 binocdf (k, n, p) %n为试验总次数,p为每次试验事件A发生的概率,k为n

次试验中事件A发生的次数,该命令返回n次试验中事件

A恰好发生k次的概率。

2. 正态分布的累积概率值

函数 normcdf

格式 normcdf(

x,mu,sigma

) %返回F(x)=



p(t)dt

的值,mu、sigma为正态分布

的两个参数

例 设X~N(3, 2

2

(1)求

P{2X5},P{4X10},P{X2},P{X3}

(2)确定c,使得

P{Xc}P{Xc}

解(1) p1=

P{2X5}

p2=

P{4X10}

p3=

P{X2}1P{X2}

73

x

p4=

P{X3}1P{X3}

则有:

>>p1=normcdf(5,3,2)-normcdf(2,3,2)

p1 =

0.5328

>>p2=normcdf(10,3,2)-normcdf(-4,3,2)

p2 =

0.9995

>>p3=1-normcdf(2,3,2)-normcdf(-2,3,2)

p3 =

0.6853

>>p4=1-normcdf(3,3,2)

p4 =

0.5000

3.专用函数

专用函数的概率分布函数

函数名

unifcdf

unidcdf

expcdf

调用形式

unifcdf (x, a, b)

unidcdf(x,n)

expcdf(x, Lambda)

normcdf(x, mu,

normcdf

sigma)

chi2cdf chi2cdf(x, n)

tcdf tcdf(x, n)

fcdf fcdf(x, n

1

, n

2

)

gamcdf gamcdf(x, a, b)

betacdf betacdf(x, a, b)

logncdf logncdf(x, mu, sigma)

nbincdf nbincdf(x, R, P)

ncfcdf ncfcdf(x, n

1

, n

2,

delta)

nctcdf nctcdf(x, n, delta)

ncx2cdf ncx2cdf(x, n, delta)

raylcdf raylcdf(x, b)

weibcdf weibcdf(x, a, b)

binocdf binocdf(x,n,p)

geocdf geocdf(x,p)

hygecdf hygecdf(x,M,K,N)

poisscdf poisscdf(x,Lambda)

注 释

[a,b]上均匀分布(连续)累积分布函数值 F(x)=P{X≤x}

均匀分布(离散)累积分布函数值 F(x)=P{X≤x}

参数为Lambda的指数分布累积分布函数值 F(x)=P{X≤x}

参数为mu,sigma的正态分布累积分布函数值 F(x)=P{X≤x}

自由度为n的卡方分布累积分布函数值 F(x)=P{X≤x}

自由度为n的t分布累积分布函数值 F(x)=P{X≤x}

第一自由度为n

1

,第二自由度为n

2

的F分布累积分布函数值

参数为a, b的

分布累积分布函数值 F(x)=P{X≤x}

参数为a, b的

分布累积分布函数值 F(x)=P{X≤x}

参数为mu, sigma的对数正态分布累积分布函数值

参数为R,P的负二项式分布概累积分布函数值 F(x)=P{X≤x}

参数为n

1

,n

2

,delta的非中心F分布累积分布函数值

参数为n,delta的非中心t分布累积分布函数值 F(x)=P{X≤x}

参数为n,delta的非中心卡方分布累积分布函数值

参数为b的瑞利分布累积分布函数值 F(x)=P{X≤x}

参数为a, b的韦伯分布累积分布函数值 F(x)=P{X≤x}

参数为n, p的二项分布的累积分布函数值 F(x)=P{X≤x}

参数为 p的几何分布的累积分布函数值 F(x)=P{X≤x}

参数为 M,K,N的超几何分布的累积分布函数值

参数为Lambda的泊松分布的累积分布函数值 F(x)=P{X≤x}

说明 累积概率函数就是分布函数F(x)=P{X≤x}在x处的值。

第 4 节4.4 随机变量的逆累积分布函数

MATLAB中的逆累积分布函数是已知

F(x)P{Xx}

,求x。

一、通用函数

命令 icdf 计算逆累积分布函数

格式

icdf(

name

,P,a

1

,a

2

,a

3

)

说明 返回分布为name,参数为

a

1

,a

2

,a

3

,累积概率值为P的临界值

如果

Pcdf(

name

,x,a

1

,a

2

,a

3

)

,则

xicdf(

name

,P,a

1

,a

2

,a

3

)

例 在标准正态分布表中,若已知

(x)

=0.975,求x

解:

>> x=icdf(\'norm\',0.975,0,1)

x =

1.9600

74

二、专用函数

1.命令 正态分布逆累积分布函数

函数 norminv

格式 X=norminv(p,mu,sigma) %p为累积概率值,mu为均值,sigma为标准差,

X为临界值,满足:p=P{X≤x}。

例 设

X~N(3,2

2

)

,确定c使得

P{Xc}P{Xc}

解:由

P{Xc}P{Xc}

得,

P{Xc}P{Xc}

=0.5,所以

>>X=norminv(0.5, 3, 2)

X=

3

2.常用专用函数

常用临界值函数表

函数名

unifinv

unidinv

expinv

norminv

chi2inv

tinv

finv

gaminv

betainv

logninv

nbininv

ncfinv

nctinv

ncx2inv

raylinv

weibinv

binoinv

geoinv

hygeinv

poissinv

调用形式

x=unifinv (p, a, b)

x=unidinv (p,n)

x=expinv (p, Lambda)

x=Norminv(x,mu,sigma)

x=chi2inv (x, n)

x=tinv (x, n)

x=finv (x, n

1

, n

2

)

x=gaminv (x, a, b)

x=betainv (x, a, b)

x=logninv (x, mu, sigma)

x=nbininv (x, R, P)

x=ncfinv (x, n

1

, n

2,

delta)

x=nctinv (x, n, delta)

x=ncx2inv (x, n, delta)

x=raylinv (x, b)

x=weibinv (x, a, b)

x=binoinv (x,n,p)

x=geoinv (x,p)

x=hygeinv (x,M,K,N)

x=poissinv (x,Lambda)

注 释

均匀分布(连续)逆累积分布函数(P=P{X≤x},求x)

均匀分布(离散)逆累积分布函数,x为临界值

指数分布逆累积分布函数

正态分布逆累积分布函数

卡方分布逆累积分布函数

T分布累积分布函数

F分布逆累积分布函数

分布逆累积分布函数

分布逆累积分布函数

对数正态分布逆累积分布函数

负二项式分布逆累积分布函数

非中心F分布逆累积分布函数

非中心t分布逆累积分布函数

非中心卡方分布逆累积分布函数

瑞利分布逆累积分布函数

韦伯分布逆累积分布函数

二项分布的逆累积分布函数

几何分布的逆累积分布函数

超几何分布的逆累积分布函数

泊松分布的逆累积分布函数

例4-28 公共汽车门的高度是按成年男子与车门顶碰头的机会不超过1%设计的。设男

子身高X(单位:cm)服从正态分布N(175,36),求车门的最低高度。

解:设h为车门高度,X为身高

求满足条件

P{Xh}0.01

的h,即

P{Xh}0.99

,所以

>>h=norminv(0.99, 175, 6)

h =

188.9581

第 5 节 随机变量的数字特征

一、均值

1. 利用mean求算术平均值

格式 mean(X) %X为向量,返回X中各元素的平均值

mean(A) %A为矩阵,返回A中各列元素的平均值构成的向量

mean(A,dim) %在给出的维数内的平均值

75

说明 X为向量时,算术平均值的数学含义是

x

1

x

i

,即样本均值。

n

i1

>> A=[1 3 4 5;2 3 4 6;1 3 1 5]

A =

1 3 4 5

2 3 4 6

1 3 1 5

>> mean(A)

ans =

1.3333 3.0000 3.0000 5.3333

n

2. 忽略NaN计算算术平均值

格式 nanmean(X) %X为向量,返回X中除NaN外元素的算术平均值。

nanmean(A) %A为矩阵,返回A中各列除NaN外元素的算术平均值向量。

>> A=[1 2 3;nan 5 2;3 7 nan]

A =

1 2 3

NaN 5 2

3 7 NaN

>> nanmean(A)

ans =

2.0000 4.6667 2.5000

二、数据比较

1. 排序

格式 Y=sort(X) %X为向量,返回X按由小到大排序后的向量。

Y=sort(A) %A为矩阵,返回A的各列按由小到大排序后的矩阵。

[Y,I]=sort(A) % Y为排序的结果,I中元素表示Y中对应元素在A中位置。

sort(A,dim) %在给定的维数dim内排序

说明 若X为复数,则通过|X|排序。

>> A=[1 2 3;4 5 2;3 7 0]

A =

1 2 3

4 5 2

3 7 0

>> sort(A)

ans =

1 2 0

3 5 2

4 7 3

>> [Y,I]=sort(A)

Y =

1 2 0

3 5 2

4 7 3

I =

1 1 3

3 2 2

2 3 1

2. 按行方式排序

函数 sortrows

格式 Y=sortrows(A) %A为矩阵,返回矩阵Y,Y按A的第1列由小到大,

76

以行方式排序后生成的矩阵。

Y=sortrows(A, col) %按指定列col由小到大进行排序

[Y,I]=sortrows(A, col) % Y为排序的结果,I表示Y中第col列元素在A中位

置。

说明 若X为复数,则通过|X|的大小排序。

>> A=[1 2 3;4 5 2;3 7 0]

A =

1 2 3

4 5 2

3 7 0

>> sortrows(A)

ans =

1 2 3

3 7 0

4 5 2

3. 求最大值与最小值之差

函数 range

格式 Y=range(X) %X为向量,返回X中的最大值与最小值之差。

Y=range(A) %A为矩阵,返回A中各列元素的最大值与最小值之差。

例4-38

>> A=[1 2 3;4 5 2;3 7 0]

A =

1 2 3

4 5 2

3 7 0

>> Y=range(A)

Y =

3 5 3

三、数学期望

1. 计算样本均值

函数 mean

格式 用法与前面一样

例:随机抽取6个滚珠测得直径如下:(直径:mm)

14.70 15.21 14.90 14.91 15.32 15.32

试求样本平均值

解:

>>X=[14.70 15.21 14.90 14.91 15.32 15.32];

>>mean(X) %计算样本均值

则结果如下:

ans =

15.0600

2. 由分布律计算均值

利用sum函数计算:格式sum(A)

例:设随机变量X的分布律为:

X

P

-2

0.3

-1

0.1

0

0.2

1

0.1

2

0.3

求E (X) E(X

2

-1)

解:在Matlab编辑器中建立M文件如下:

X=[-2 -1 0 1 2];

p=[0.3 0.1 0.2 0.1 0.3];

EX=sum(X.*p)

Y=X.^2-1

77

EY=sum(Y.*p)

运行后结果如下:

EX =

0

Y =

3 0 -1 0 3

EY =

1.6000

四、方差

1. 求样本方差

函数 var

格式 D=var(X) %var(X)=

s

2

1

(x

i

X)

2

,若X为向量,则返回向量的样本方

n1

i1

n

差。

D=var(A) %A为矩阵,则D为A的列向量的样本方差构成的行向量。

D=var(X, 1) %返回向量(矩阵)X的简单方差(即置前因子为

1

的方差)

n

D=var(X, w) %返回向量(矩阵)X的以w为权重的方差

2. 求标准差

函数 std

格式 std(X) %返回向量(矩阵)X的样本标准差(置前因子为

1

)即:

n1

1

n

std(x

i

X)

2

n1

i1

std(X,1) %返回向量(矩阵)X的标准差(置前因子为

1

n

std(X, 0) %与std (X)相同

std(X, flag, dim) %返回向量(矩阵)中维数为dim的标准差值,其中flag=0

时,置前因子为

1

;否则置前因子为

1

n

n1

例4-41 求下列样本的样本方差和样本标准差,方差和标准差

14.70 15.21 14.90 15.32 15.32

解:

>>X=[14.7 15.21 14.9 14.91 15.32 15.32];

>>DX=var(X,1) %方差

DX =

0.0559

>>sigma=std(X,1) %标准差

sigma =

0.2364

>>DX1=var(X) %样本方差

DX1 =

0.0671

>>sigma1=std(X) %样本标准差

sigma1 =

0.2590

78

五、常见分布的期望和方差专用函数(stat结尾)

1. 均匀分布(连续)的期望和方差

函数 unifstat

格式 [M,V] = unifstat(A,B) %A、B为标量时,就是区间上均匀分布的期望和方差,

A、B也可为向量或矩阵,则M、V也是向量或矩阵。

>>a = 1:6; b = 2.*a;

>>[M,V] = unifstat(a,b)

M =

1.5000 3.0000 4.5000 6.0000 7.5000 9.0000

V =

0.0833 0.3333 0.7500 1.3333 2.0833 3.0000

2. 正态分布的期望和方差

函数 normstat

格式 [M,V] = normstat(MU,SIGMA) %MU、SIGMA可为标量也可为向量或矩

阵,则M=MU,V=SIGMA

2

>> n=1:4;

>> [M,V]=normstat(n\'*n,n\'*n)

M =

1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

V =

1 4 9 16

4 16 36 64

9 36 81 144

16 64 144 256

3. 二项分布的均值和方差

函数 binostat

格式 [M,V] = binostat(N,P) %N,P为二项分布的两个参数,可为标量也可为向量

或矩阵。

>>n = logspace(1,5,5)

n =

10 100 1000 10000 100000

>>[M,V] = binostat(n,1./n)

M =

1 1 1 1 1

V =

0.9000 0.9900 0.9990 0.9999 1.0000

>>[m,v] = binostat(n,1/2)

m =

5 50 500 5000 50000

v =

1.0e+04 *

0.0003 0.0025 0.0250 0.2500 2.5000

4. 常见分布的期望和方差函数

常见分布的均值和方差

函数名

Unifstat

unidstat

Expstat

normstat

调用形式

[M,V]=unifstat ( a, b)

[M,V]=unidstat (n)

[M,V]=expstat (p, Lambda)

[M,V]=normstat(mu,sigma)

注 释

均匀分布(连续)的期望和方差,M为期望,V为方差

均匀分布(离散)的期望和方差

指数分布的期望和方差

正态分布的期望和方差

79

chi2stat

tstat

fstat

gamstat

betastat

lognstat

nbinstat

ncfstat

nctstat

ncx2stat

raylstat

Weibstat

Binostat

Geostat

hygestat

Poisstat

[M,V]=chi2stat (x, n)

[M,V]=tstat ( n)

[M,V]=fstat ( n

1

, n

2

)

[M,V]=gamstat ( a, b)

[M,V]=betastat ( a, b)

[M,V]=lognstat ( mu, sigma)

[M,V]=nbinstat ( R, P)

[M,V]=ncfstat ( n

1

, n

2,

delta)

[M,V]=nctstat ( n, delta)

[M,V]=ncx2stat ( n, delta)

[M,V]=raylstat ( b)

[M,V]=weibstat ( a, b)

[M,V]=binostat (n,p)

[M,V]=geostat (p)

[M,V]=hygestat (M,K,N)

[M,V]=poisstat (Lambda)

卡方分布的期望和方差

t分布的期望和方差

F分布的期望和方差

分布的期望和方差

分布的期望和方差

对数正态分布的期望和方差

负二项式分布的期望和方差

非中心F分布的期望和方差

非中心t分布的期望和方差

非中心卡方分布的期望和方差

瑞利分布的期望和方差

韦伯分布的期望和方差

二项分布的期望和方差

几何分布的期望和方差

超几何分布的期望和方差

泊松分布的期望和方差

第 6 节 参数估计

一、通用函数

函数 mle

格式 phat=mle

(

dist

,X)

%返回用dist指定分布的最大似然估计值

[phat, pci]=mle

(

dist

,X)

%置信度为95%

[phat, pci]=mle

(

dist

,X,alpha)

%置信度由alpha确定

[phat, pci]=mle

(

dist

,X,alpha,pl)

%仅用于二项分布,pl为试验次数。

说明 dist为分布函数名,如:beta(

分布)、bino(二项分布)等,X为数据样本,

alpha为显著水平α,

(1)100%

为置信度。

>> X=binornd(20,0.75) %产生二项分布的随机数

X =

16

>> [p,pci]=mle(\'bino\',X,0.05,20) %求概率的估计值和置信区间,置信度为95%

p =

0.8000

pci =

0.5634

0.9427

二、专用函数

1. 正态分布的参数估计

函数 normfit

格式 [muhat,sigmahat,muci,sigmaci] = normfit(X)

[muhat,sigmahat,muci,sigmaci] = normfit(X,alpha)

说明 muhat,sigmahat分别为正态分布的参数μ和σ的估计值,muci,sigmaci分别为

置信区间,其置信度为

(1)100%

;alpha给出显著水平α,缺省时默认为0.05,即置信

度为95%。

例 有两组(每组100个元素)正态随机数据,其均值为10,均方差为2,求95%的置信

区间和参数估计值。

80

解:

>>r = normrnd (10,2,100,2); %产生两列正态随机数据

>>[mu,sigma,muci,sigmaci] = normfit(r)

则结果为

mu =

10.1455 10.0527 %各列的均值的估计值

sigma =

1.9072 2.1256 %各列的均方差的估计值

muci =

9.7652 9.6288

10.5258 10.4766

sigmaci =

1.6745 1.8663

2.2155 2.4693

说明 muci,sigmaci中各列分别为原随机数据各列估计值的置信区间,置信度为95%。

例 分别使用金球和铂球测定引力常数

(1)用金球测定观察值为:6.683 6.681 6.676 6.678 6.679 6.672

(2)用铂球测定观察值为:6.661 6.661 6.667 6.667 6.664

设测定值总体为

N(,

2

)

,μ和σ为未知。对(1)、(2)两种情况分别求μ和σ的置信度

为0.9的置信区间。

解:建立M文件:LX0833.m

X=[6.683 6.681 6.676 6.678 6.679 6.672];

Y=[6.661 6.661 6.667 6.667 6.664];

[mu,sigma,muci,sigmaci]=normfit(X,0.1) %金球测定的估计

[MU,SIGMA,MUCI,SIGMACI]=normfit(Y,0.1) %铂球测定的估计

运行后结果显示如下:

mu =

6.6782

sigma =

0.0039

muci =

6.6750

6.6813

sigmaci =

0.0026

0.0081

MU =

6.6640

SIGMA =

0.0030

MUCI =

6.6611

6.6669

SIGMACI =

0.0019

0.0071

由上可知,金球测定的μ估计值为6.6782,置信区间为[

6.6750

6.6813

];

σ的估计值为0.0039,置信区间为[0.0026,0.0081]。

泊球测定的μ估计值为

6.6640

,置信区间为[

6.6611

6.6669

];

σ的估计值为0.0030,置信区间为[0.0019,0.0071]。

2.常见参数估计专用函数

参数估计函数

调 用 形 式

PHAT= binofit(X, N)

Binofit [PHAT, PCI] = binofit(X,N)

[PHAT, PCI]= binofit (X, N, ALPHA)

Lambdahat=poissfit(X)

Poissfit

[Lambdahat, Lambdaci] = poissfit(X)

81

函数名 函 数 说 明

二项分布的概率的最大似然估计

置信度为95%的参数估计和置信区间

返回水平α的参数估计和置信区间

泊松分布的参数的最大似然估计

置信度为95%的参数估计和置信区间

normfit

betafit

unifit

expfit

gamfit

weibfit

Mle

[Lambdahat, Lambdaci]= poissfit (X, ALPHA) 返回水平α的λ参数和置信区间

[muhat,sigmahat,muci,sigmaci] = normfit(X)

正态分布的最大似然估计,置信度为95%

[muhat,sigmahat,muci,sigmaci] = normfit(X,

返回水平α的期望、方差值和置信区间

ALPHA)

PHAT =betafit (X) 返回β分布参数a和 b的最大似然估计

[PHAT, PCI]= betafit (X, ALPHA) 返回最大似然估计值和水平α的置信区间

[ahat,bhat] = unifit(X) 均匀分布参数的最大似然估计

[ahat,bhat,ACI,BCI] = unifit(X) 置信度为95%的参数估计和置信区间

[ahat,bhat,ACI,BCI]=unifit(X, ALPHA) 返回水平α的参数估计和置信区间

muhat =expfit(X) 指数分布参数的最大似然估计

[muhat,muci] = expfit(X) 置信度为95%的参数估计和置信区间

[muhat,muci] = expfit(X,alpha) 返回水平α的参数估计和置信区间

phat =gamfit(X) γ分布参数的最大似然估计

[phat,pci] = gamfit(X) 置信度为95%的参数估计和置信区间

[phat,pci] = gamfit(X,alpha) 返回最大似然估计值和水平α的置信区间

phat = weibfit(X) 韦伯分布参数的最大似然估计

[phat,pci] = weibfit(X) 置信度为95%的参数估计和置信区间

[phat,pci] = weibfit(X,alpha) 返回水平α的参数估计及其区间估计

phat = mle(\'dist\',data) 分布函数名为dist的最大似然估计

[phat,pci] = mle(\'dist\',data) 置信度为95%的参数估计和置信区间

[phat,pci] = mle(\'dist\',data,alpha) 返回水平α的最大似然估计值和置信区间

[phat,pci] = mle(\'dist\',data,alpha,p1) 仅用于二项分布,pl为试验总次数

说明 各函数返回已给数据向量X的参数最大似然估计值和置信度为(1-α)×100%

的置信区间。α的默认值为0.05,即置信度为95%。

第 7 节 假设检验

一、

2

已知,单个正态总体的均值μ的假设检验(U检验法)

函数 ztest

格式 h = ztest(x,m,sigma) % x为正态总体的样本,m为均值μ

0

,sigma为标准差,

显著性水平为0.05(默认值)

h = ztest(x,m,sigma,alpha) %显著性水平为alpha

[h,sig,ci,zval] = ztest(x,m,sigma,alpha,tail) %sig为观察值的概率,当sig为小

概率时则对原假设提出质疑,ci为真正均值μ的1-alpha

置信区间,zval为统计量的值。

说明 若h=0,表示在显著性水平alpha下,不能拒绝原假设;

若h=1,表示在显著性水平alpha下,可以拒绝原假设。

原假设:

H

0

:

0

m

若tail=0,表示备择假设:

H

1

:

0

m

(默认,双边检验);

tail=1,表示备择假设:

H

1

:

0

m

(单边检验);

tail=-1,表示备择假设:

H

1

:

0

m

(单边检验)。

例 某车间用一台包装机包装葡萄糖,包得的袋装糖重是一个随机变量,它服从正态分

布。当机器正常时,其均值为0.5公斤,标准差为0.015。某日开工后检验包装机是否正常,

随机地抽取所包装的糖9袋,称得净重为(公斤)

0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.52, 0.515, 0.512

问机器是否正常?

解:总体μ和σ已知,该问题是当

2

为已知时,在水平

0.05

下,根据样本值判断

μ=0.5还是

0.5

。为此提出假设:

原假设:

H

0

:

0

0.5

备择假设:

H

1

:0.5

82

>> X=[0.497,0.506,0.518,0.524,0.498,0.511,0.52,0.515,0.512];

>> [h,sig,ci,zval]=ztest(X,0.5,0.015,0.05,0)

结果显示为

h =

1

sig =

0.0248 %样本观察值的概率

ci =

0.5014 0.5210 %置信区间,均值0.5在此区间之外

zval =

2.2444 %统计量的值

结果表明:h=1,说明在水平

0.05

下,可拒绝原假设,即认为包装机工作不正常。

二、

2

未知,单个正态总体的均值μ的假设检验( t检验法)

函数 ttest

格式 h = ttest(x,m) % x为正态总体的样本,m为均值μ

0

,显著性水平为0.05

h = ttest(x,m,alpha) %alpha为给定显著性水平

[h,sig,ci] = ttest(x,m,alpha,tail) %sig为观察值的概率,当sig为小概率时则对

原假设提出质疑,ci为真正均值μ的1-alpha置信区间。

说明 若h=0,表示在显著性水平alpha下,不能拒绝原假设;

若h=1,表示在显著性水平alpha下,可以拒绝原假设。

原假设:

H

0

:

0

m

若 tail=0,表示备择假设:

H

1

:

0

m

(默认,双边检验);

tail=1,表示备择假设:

H

1

:

0

m

(单边检验);

tail=-1,表示备择假设:

H

1

:

0

m

(单边检验)。

例 某种电子元件的寿命X(以小时计)服从正态分布,

、σ

2

均未知。现测得16

只元件的寿命如下

159 280 101 212 224 379 179 264 222 362 168 250

149 260 485 170

问是否有理由认为元件的平均寿命大于225(小时)?

解:未知

2

,在水平

0.05

下检验假设:

H

0



0

225

H

1

225

>> X=[159 280 101 212 224 379 179 264 222 362 168 250 149 260 485 170];

>> [h,sig,ci]=ttest(X,225,0.05,1)

结果显示为:

h =

0

sig =

0.2570

ci =

198.2321 Inf %均值225在该置信区间内

结果表明:H=0表示在水平

0.05

下应该接受原假设

H

0

,即认为元件的平均寿命不

大于225小时。

三、两个正态总体均值差的检验(t检验)

两个正态总体方差未知但等方差时,比较两正态总体样本均值的假设检验

函数 ttest2

格式 [h,sig,ci]=ttest2(X,Y) %X,Y为两个正态总体的样本,显著性水平为0.05

[h,sig,ci]=ttest2(X,Y,alpha) %alpha为显著性水平

[h,sig,ci]=ttest2(X,Y,alpha,tail) %sig为当原假设为真时得到观察值的概率,当

83

sig为小概率时则对原假设提出质疑,ci为真正

均值μ的1-alpha置信区间。

说明 若h=0,表示在显著性水平alpha下,不能拒绝原假设;

若h=1,表示在显著性水平alpha下,可以拒绝原假设。

原假设:

H

0

:

1



2

, (

1

为X为期望值,

2

为Y的期望值)

若 tail=0,表示备择假设:

H

1

:

1



2

(默认,双边检验);

tail=1,表示备择假设:

H

1

:

1



2

(单边检验);

tail=-1,表示备择假设:

H

1

:

1



2

(单边检验)。

例 在平炉上进行一项试验以确定改变操作方法的建议是否会增加钢的产率,试验是

在同一只平炉上进行的。每炼一炉钢时除操作方法外,其他条件都尽可能做到相同。先用

标准方法炼一炉,然后用建议的新方法炼一炉,以后交替进行,各炼10炉,其产率分别为

(1)标准方法:78.1 72.4 76.2 74.3 77.4 78.4 76.0 75.5 76.7 77.3

(2)新方法: 79.1 81.0 77.3 79.1 80.0 79.1 79.1 77.3 80.2 82.1

设这两个样本相互独立,且分别来自正态总体

N(

1

,

2

)

N(

2

,

2

)

1

2

2

未知。问建议的新操作方法能否提高产率?(取α=0.05)

解:两个总体方差不变时,在水平

0.05

下检验假设:

H

0

1



2

H

1

1



2

>> X=[78.1 72.4 76.2 74.3 77.4 78.4 76.0 75.5 76.7 77.3];

>>Y=[79.1 81.0 77.3 79.1 80.0 79.1 79.1 77.3 80.2 82.1];

>> [h,sig,ci]=ttest2(X,Y,0.05,-1)

结果显示为:

h =

1

sig =

2.1759e-004 %说明两个总体均值相等的概率很小

ci =

-Inf -1.9083

结果表明:H=1表示在水平

0.05

下,应该拒绝原假设,即认为建议的新操作方法

提高了产率,因此,比原方法好。

第 8 节 回归分析

回归分析是用统计数据寻求变量间关系的近似表达式……经验公式

一、ployfit函数进行回归分析

格式:ployfit(X,Y,n) %n=1为线性回归分析;n=2为抛物线回归分析

第 9 节 概率统计作图

一、做概率分布函数图形的通用函数

函数 cdfplot

格式 cdfplot(X) %作样本X(向量)的累积分布函数图形

h = cdfplot(X) %h返回曲线的句柄

[h,stats] = cdfplot(X) %stats表示样本的一些特征

例4-50

Empirical CDF

1

F

(

x

)

>> X=normrnd (0,1,50,1);

>> [h,stats]=cdfplot(X)

h =

3.0013

84

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0

-2-1.5-1-0.50

x

0.511.52

stats =

min: -1.8740 %样本最小值

max: 1.6924 %最大值

mean: 0.0565 %平均值

median: 0.1032 %中间值(50%处的数据)

std: 0.7559 %样本标准差

二、做概率分布函数图形的专用函数

1. 绘制正态分布概率图形

函数 normplot

格式 normplot(X) %若X为向量,则显示正态分布概率图形,若X为矩阵,则显

示每一列的正态分布概率图形。

h = normplot(X) %返回绘图直线的句柄

说明 样本数据在图中用“+”显示;如果数据来自正态分布,则图形显示为直线,而

其它分布可能在图中产生弯曲。

例4-53

>> X=normrnd(0,1,50,1);

>> normplot(X)

图4-12

三、最小二乘拟合直线

函数 lsline

格式 lsline %最小二乘拟合直线

h = lsline %h为直线的句柄

例4-51

>> X = [2 3.4 5.6 8 11 12.3 13.8 16 18.8 19.9]\';

>> plot(X,\'+\')

>> lsline

20

18

16

14

12

10

8

6

4

2

0

246810

四、绘制多项式曲线

函数 refcurve

格式 h = refcurve(p) %在图中加入一条多项式曲线,h为曲线的句柄,p为多项式

系数向量,p=[p1,p2, p3,…,pn],其中p1为最高幂项系数。

例 火箭的高度与时间图形,加入一条理论高度曲线,火箭初速为100m/秒。

>>h = [85 162 230 289 339 381 413 437 452 458 456 440 400 356];

>>plot(h,\'+\')

>>refcurve([-4.9 100 0])

85

五、给当前图形加一条参考线

函数 refline

格式 refline(slope,intercept) % slope表示直线斜率,intercept表示截距

refline(slope) slope=[a b],图中加一条直线:y=b+ax。

例4-56

>>y = [3.2 2.6 3.1 3.4 2.4 2.9 3.0 3.3 3.2 2.1 2.6]\';

>>plot(y,\'+\')

>>refline(0,3)

六、样本的概率图形

函数 capaplot

格式 p = capaplot(data,specs) %data为所给样本数据,specs指定范围,p表示在

指定范围内的概率。

说明 该函数返回来自于估计分布的随机变量落在指定范围内的概率

>> data=normrnd (0,1,30,1);

>> p=capaplot(data,[-2,2])

p =

0.9199

七、附加有正态密度曲线的直方图

函数 histfit

格式 histfit(data) %data为向量,返回直方

和正态曲线。

histfit(data,nbins) % nbins指定bar的个数,

86

缺省时为data中数据个数的平方根。

例4-59

>>r = normrnd (10,1,100,1);

>>histfit(r)

八、在指定的界线之间画正态密度曲线

函数 normspec

格式 p = normspec(specs,mu,sigma) %specs指定界线,mu,sigma为正态分布的参

数p 为样本落在上、下界之间的概率。

>>normspec([10 Inf],11.5,1.25)

87


更多推荐

函数,图形,颜色