最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

MATLAB应用 MATLAB数据及运算

来源:动视网 责编:小OO 时间:2025-09-29 22:00:50
文档

MATLAB应用 MATLAB数据及运算

第2章MATLAB数据及运算2.1变量及其操作一、变量命名规则1.变量名、函数名对字母大小写是敏感的myfile与MyFile表示不同的变量sin是MATLAB定义的正弦函数名,但SIN、Sin都不是2.变量名的第一个字符必须是英文字母3.变量名最多可包含63个字符(英文、数字和下划线)4.变量名中不能包含空格、标点my_exemple12是合法的变量名,12exemple、_exemple12、myexemple12、my.exemple12是非法变量名二、MATLAB默认的预定义变量每当M
推荐度:
导读第2章MATLAB数据及运算2.1变量及其操作一、变量命名规则1.变量名、函数名对字母大小写是敏感的myfile与MyFile表示不同的变量sin是MATLAB定义的正弦函数名,但SIN、Sin都不是2.变量名的第一个字符必须是英文字母3.变量名最多可包含63个字符(英文、数字和下划线)4.变量名中不能包含空格、标点my_exemple12是合法的变量名,12exemple、_exemple12、myexemple12、my.exemple12是非法变量名二、MATLAB默认的预定义变量每当M
第2章 MATLAB数据及运算

2.1 变量及其操作

一、变量命名规则

1.变量名、函数名对字母大小写是敏感的

myfile与MyFile表示不同的变量

sin是MATLAB定义的正弦函数名,但SIN、Sin都不是

2.变量名的第一个字符必须是英文字母

3.变量名最多可包含63个字符(英文、数字和下划线)

4.变量名中不能包含空格、标点

my_exemple12是合法的变量名,12exemple、_exemple12、my exemple12、my.exemple12是非法变量名

二、MATLAB默认的预定义变量

每当MATLAB启动时,不经定义和赋值就会产生一些变量,称为MATLAB默认的预定义变量

这些变量都可以重新赋值。但最好不要对这些变量名重新赋值

预定义变量含义预定义变量含义
ans计算结果的缺省变量名nargin函数输入参数个数
eps机器零阈值(机器的浮点运算误差限)

narout函数输出参数个数
Inf或inf

无穷大,如1/0

realmax最大正浮点数
i或j

虚数单位realmin最小正浮点数
pi圆周率π

lasterr存放最新的错误信息
NaN或nan

不是一个数(Not a Number),如0/0,∞/∞

lastwarn存放最新的警告信息
例1  用键盘在MATLAB指令窗中输入以下内容

eps

eps —— 机器的浮点运算误差限。PC机上eps的默认值为 2.2204×10-16 ,若某个量的绝对值小于eps,则可以认为这个量为0。

例2  用键盘在MATLAB指令窗中输入以下内容

1/0,1.e1000,log(0)

Inf —— 无穷大量 + ∞ 的MATLAB表示,也可以写成inf 。同样地,- ∞ 可以表示为 - Inf 。在 MATLAB 程序执行时,即使遇到了以 0 为除数的运算,也不会终止程序的运行,而只给出一个“除0”警告,并将结果赋成Inf ,这样的定义方式符合 IEEE 的标准。从数值运算编程角度看,这样的实现形式明显优于C语言。

例3  用键盘在MATLAB指令窗中输入以下内容

0/0,inf/inf,inf*0

注意

在MATLAB中,即使遇到以0为除数的运算,程序也不会终止运行。这时只给出一个警告,并将结果赋给inf或NaN

NaN —— 不定式( not a number ) ,通常由 0 / 0 运算、Inf / Inf 及其他可能的运算得出。 NaN 是一个很奇特的量,如 NaN 与Inf 的乘积仍为 NaN 。

例4  用键盘在MATLAB指令窗中输入以下内容

n= realmax,n= 1.7977e+309

例5  用键盘在MATLAB指令窗中输入以下内容

m= realmin,m=2.2251e-309

i 和 j —— 若i或j量不被改写,则它们表示纯虚数量j 。但在 MATLAB 程序编写过程中经常事先改写这两个变量的值,比如在循环过程中常用这两个变量来表示循环变量。如果想恢复该变量,则可以用语句 i = sqrt(-1)设置,即对 -1 求平方根。

三、MATLAB运算符和表达式

运算符

操作数学表达式MATLAB运算符

MATLAB表达式

a+b+a+b
a-b-a-b
a b

*a*b
a b

/或\

a/b或b\a

ab

^a^b
注意

所有运算都定义在复数域上

例1  用键盘在MATLAB指令窗中输入以下内容

u=sqrt(-4)

注意

对于方根,运算只给出处于第1象限的解

例2  用左除(\\)和右除(/)计算表达式的值

用键盘在MATLAB指令窗中输入以下内容

(5+cos(47*pi/180))/(1+sqrt(7)-2*i)、(1+sqrt(7)-2*i) \(5+cos(180 \\47*pi))

注意

对于标量,左除(\\)或右除(/)所得到的结果是一样的

对于矩阵,左除(\\)和右除(/)所得到的结果是不一样的

    AX=B → A-1AX= A-1B → X=A-1B=A\\B,

XA=B → XA A-1=B A-1 →X= BA-1= B/A

表达式

表达式由变量名、运算符、函数名组成

表达式按优先级和自左向右的顺序运算

优先级从高向低的排序是:指数运算、乘除运算、加减运算

括号可以改变运算的顺序

赋值符“=”和运算符的两侧允许有空格

复数和复数矩阵

MATLAB把复数看成一个整体来处理(不像其它程序,把实部和虚部分开处理)

虚数单位用预定义变量i或j表示

复数z=a+bi=reiθ直角坐标表示与极坐标表示之间的转换

real(z):给出复数z的实部a=rcosθ

imag(z):给出复数z的虚部b=rsinθ

abs(z):给出复数z的模r=sqrt(a2+b2)

angle(z):以弧度为单位给出复数z的相角θ=arctg(b/a)

例1 写出复数表达式,计算

用键盘在MATLAB指令窗中输入以下内容

z1= 3 + 4i  %书写格式1

z2 = 1 + 2 * i        %书写格式2

z3=2*exp(i*pi/6)  %书写格式2

z=z1*z2/z3   

注意

%是注释号,在它后面及回车之前的输入部分是非执行的注释

在格式1中,4i表示一个完整的虚数,4和i之间不能有空格

在格式2中,i被看作一个预定义变量参与运算

格式1的运算速度要比格式2快,宜于在循环中采用

例2  复数矩阵的生成及运算 

    用键盘在MATLAB指令窗中输入以下内容

A=[1,3;2,4]-[5,8;6,9]i

A=[1,3;2,4]-[5,8;6,9]*i

B=[1+5i,2+6i;3+8*i,4+9*i]  

C=A*B  

注意

格式1仅用于复数标量的表达,不能表达复数矩阵

例3 求上例复数矩阵C的实部、虚部、模和相角

   用键盘在MATLAB指令窗中输入以下内容

   C_real=real(C)

C_imag=imag(C)

C_magnitude=abs(C)

C_phase=angle(C)*180/pi            %以度为单位计算相角

四、MATLAB的数据结构

    数据型、符号型、字符串型、数组、单元数组、类

数据型:可以单独输入,也可以赋值给数值变量

符号型:可用于公式推导,得到数学问题解析解

字符串型:C语言中字符串是用双引号括起来的,而MATLAB字符串是用单引号括起来的

1.数据型:

    双精度浮点数,占8字节(位),指数11位,尾数53位,符号1位。 

在一般情况下,数据的存储和计算都是以双精度进行的。

但是,可以用format命令改变数据在屏幕上的显示格式

指令含义
format

format short

通常保证小数点后4位有效数字;对于大于1000的实数,用5位有效数字的科学记数形式显示

format long

15位数字表示

format short e

5位科学记数表示

format long e

15位科学记数表示

format short g

从format short和format short e中自动选择最佳记数方式(缺省设置)

format long g

从format long和format long e中自动选择最佳记数方式

format rat

近似有理数表示
format hex

16进制表示

format bank

(金融)元、角、分表示
format +

正数、负数和零分别用+、-和空格表示
例1:用format和format short格式显示π的数值

输入:format(或format short) 回车

输入:pi 回车

例2:用format和format short格式显示1000π的数值

输入:format(或format short) 回车

输入:1000*pi 回车

例3:分别用format long、format short e、format long e、format short g、format long g、format rat和format bank格式显示π的数值

例4:用format +格式分别显示π、π-2π和π-π的数值

五、MATLAB常用函数

三角函数

函数名称数学表达MATLAB表达

正弦sinsin
反正弦arcsinasin
余弦coscos
反余弦arccos

acos

正切tgtan
反正切

arctg

atan

余切ctgcot
反余切arcctgacot

正割secsec
反正割

arcsec

asec

余割csccsc
反余割

arccsc

acsc

双曲函数

函数名称数学表达MATLAB表达

双曲正弦shsinh
反双曲正弦

Arsh

asinh

双曲余弦

ch

cosh

反双曲余弦

Arch

acosh

双曲正切

th

tan
反双曲正切

Arth

atan
双曲余切cthcoth

反双曲余切Arcthacoth

双曲正割

sech

sech

反双曲正割

Arsech

asech

双曲余割

csch

csch

反双曲余割

Arcsch

acsch

指数函数

函数名称数学表达MATLAB表达

自然指数函数ex

exp(x)
自然对数函数lnlog
常用对数函数log10

log10
以2为底的对数函数

log2

log2

2的幂函数

2x

pow2(x)
平方根函数x1/2

sqrt(x)
复数函数

MATLAB表达

含义MATLAB表达

含义MATLAB表达

含义
abs模,或绝对值

conj复数共轭real复数实部
angle相角(弧度)imag复数虚部
例:求-π的绝对值

输入:abs(-pi)

圆整函数和求余函数

函数名称MATLAB表达

含义
向+∞圆整函数(天花板函数)

ceil不小于自变量的最小整数ceil(π)=?

ceil(-π)=?

向0圆整函数

fix向0方向取整数

fix(π)=?

fix(-π)=?

向-∞圆整函数(地板函数)

floor不大于自变量的最大整数floor(π)=?

floor(-π)=?

模除求余函数mod(x,y)y不等于0时,mod(x,y)=x- y*floor(x/y);

y=0时,mod(x,y)=x

求余数函数rem(x,y)y不等于0时,rem(x,y)=x- y*fix(x/y);

y=0时,rem(x,y)=NaN

向最近整数圆整函数

round四舍五入到最邻近的整数round(π)=?, round(-π)=?, round(6.5)=?

符号函数signx<0,sign(x)=-1;x=0,sign(x)=0;x>0,sign(x)=1
注意

1.若a为正整数,ceil, fix, floor, round函数之间的区别如图

2.对于模除求余函数mod(x,y)和求余数函数rem(x,y),

y=rem(13,3)=1

y=mod(13,3) = 1

y=rem(-13,-3) = -1

y=mod(-13,-3) = -1

y=rem(-13,3) = -1

y=mod(-13,3) = 2

y=rem(13,-3) = 1

y=mod(13,-3) = -2

rem(x,y)的符号与x相同,mod(x,y)的符号与y相同

当x、y的符号相同时,rem(x,y)=mod(x,y)

例1:当x=5,y=3,求rem(x,y)和mod(x,y)

1.先输入:x-y*fix(x/y),再输入rem(x,y),比较结果

2.先输入:x-y*floor(x/y),再输入mod(x,y),比较结果

例2:当x=-5,y=3,求rem(x,y)和mod(x,y)

rem

Purpose Remainder after division

Syntax R = rem(X,Y)

如果Y ~= 0, R = rem(X,Y) 给出 X - n.*Y,这里n = fix(X./Y). 

如果Y不是一个整数,而且商X./Y 是在一个整数的四舍五入的误差内, 那么n就是那个整数。根据惯例, rem(X,0)是NaN。输入X and Y 必须是相同维数的实矩阵, 或实标量。

只要X和Y同号, rem(X,Y)给出和mod(X,Y)一样的结果。但是, 对于正的X和Y, rem(-X,Y) = mod(-X,Y)-Y

Rem函数给出一个在0和sign(X)*abs(Y)之间的结果。如果Y为0, rem给出NaN。

mod 

Purpose Modulus after division

Syntax M = mod(X,Y)

Definition mod(x,y) is x mod y.

如果Y ~= 0, M = mod(X,Y)给出X - n.*Y,这里n = floor(X./Y) .

如果Y不是一个整数,而且商X./Y 是在一个整数的四舍五入的误差内, 那么n就是那个整数。根据惯例, mod(X,0)是X.。输入X and Y 必须是相同维数的实矩阵, 或实标量。

只要X和Y同号,, 函数mod(X,Y) 给出和rem(X,Y) 一样的结果。但是, 对于正的X和Y,mod(-X,Y) = rem(-X,Y)+Y

mod函数对于同余关系是有用的: 

当且仅当mod(x,m) == mod(y,m),X和y是同余的(congruent被一个模数所分成的差额) (mod m).

例3:当x1 = -pi,x2 = 0,x3 = pi时,求sign(x1),sign(x2),sign(x3)

2.2 数值数组及其运算

由MATLAB软件构成的“矩阵”在外观形状和数据结构上与数学意义上的矩阵是及其相似的

但MATLAB中的矩阵在操作上具有二重性

既可以按数学中的矩阵运算规则操作

又可以按照MATLAB软件自己定义的规则操作

具有这样特性的“矩阵”—数组

按MATLAB软件自己定义的规则进行的运算—数组运算

数组可分为1维、2维、3维,甚至更数

一、一维数组(矩阵)的创建

1.逐个元素输入法

例:输入

    x=[2  pi/2  sqrt(3)  3+5i]

2.冒号生成法

通过设定步长生成一维数组

x=a:inc:b

a是数组的第1个元素。inc是采样点之间的间隔,即步长。

如果(b-a)是步长inc的整数倍,则生成的数组的最后一个元素是b

如果(b-a)不是步长inc的整数倍,则生成的数组的最后一个元素小于b

a、inc、b之间必须用冒号“:”分隔

例1:取步长为0.2,在[0,π]区间生成一个1维数组

输入:x1=0:0.2:pi  %注意最后一个生成元素是不是π

输入:x1(5)      % 显示数组x1的第5个元素

inc可以省略。省略时,inc默认为1

例2:取步长为1,在[0,π]区间生成一个1维数组

    输入:x2=0:pi  

步长inc可以是正数,也可以是负数

当步长inc取正数时,要保证a当步长inc取负数时,要保证a>b

例3:取步长为1,在[0,π]区间逆向生成一个1维数组

输入:x3=pi:-1:0  %注意比较本例与例1中数组的第1个元素

输入:x3=0:-1:pi  %注意结果

例4:取步长为0.1,在[0,2π]区间画出正弦曲线

输入:x4=0:0.1:2*pi;  %在[0,2π]区间生成一个1维数组

输入:y=sin(x4);  %建立正弦函数

输入:plot (x4, y)  %画出y-x曲线

3.定数线性采样法

在给定的总点数下,均匀采样生成一维数组

x=linspace(a,b,n)

a和b分别是数组的第1个和最后一个元素,n是采样总点数(包括a和b)

步长=(b-a)/(n-1)

相当于x=a: (b-a)/(n-1):b

例3:在[0,π]区间生成具有16个均匀采样点的一维数组

输入:x4=linspace(0,pi,16)  %注意最后一个元素是不是π

4.定数对数采样法

在给定的总点数下,通过常用对数采样生成一维数组

x=logspace(a,b,n)

数组的第1个元素是10a,最后一个元素是10b。n是采样总点数(包括a和b)。步长=10(b-a)/(n-1)

例:输入:logspace(1,6,6)

二、二维数组(矩阵) 

    特点:具有行和列

例:A=[1:3;4:6;7:9]    % 3×3数组(矩阵)

二维数组(矩阵)元素的标识

“全下标”标识

“单下标”标识

例:产生一个5阶的魔方数组,并显示全下标第2行第4列的元素和单下标第14个元素

输入:D=magic(5)   % magic为MATLAB提供的魔方数组(矩阵)函数

输入:D(2,4), D(14)

三、数组运算和矩阵运算

加减运算

设两个行数和列数相同矩阵A=(aij)m n和B=(bij)m n。

它们相加和相减,分别得到新的矩阵A+B和A-B。

它们的行数和列数与原来的矩阵相同, 

新的矩阵的元素等于原来矩阵的元素的相加或相减

A+B=( aij n+bij)m n,A-B=( aij-bij)m n。

MATLAB软件构成的数组(“矩阵”)可以实现矩阵的加减运算

例 设,,求,

输入:A=[1,-2;0,1;-1,3], B=[0,2;-1,1;2,5]

输入:C=A+B, D=A-B

注意:

对于数学意义上的矩阵来说,只有两个矩阵的行数和列数相同时,才能进行加减运算

对于非一行一列的矩阵,不能与标量相加减

但是,对于MATLAB软件来说,允许数组(“矩阵”)与标量相加减,这时就是数组加减运算。

数组与标量相加或相减,相当于数组中的每个元素与标量相加或相减

设s为一个标量,A=(aij)m n为一个非一行一列的矩阵,那么

s+A生成与A同行同列的数组

而且新数组的每一元素等于原来元素与标量之和

s+A=( s+aij)m n

s-A或A-s也生成与A同行同列的数组

s-A=( s-aij)m n,A-s=(aij-s)m n

例 s=3,求E=s+A, F=s-A, G=A-s

乘法运算

在数学上,两个矩阵相乘,第一个矩阵的列数必须等于第二个矩阵的行数,

设A=(aij)m t,B=(bij)t n,它们相乘生成新矩阵C=AB

新矩阵的行数等于第一个矩阵的行数,新矩阵的列数等于第二个矩阵的列行数,C=(cij)m n。

新矩阵的元素按下面规则构成:

在MATLAB中,可以实现这种运算,C=A*B。

例 设,,求 

输入:A1=[3,-2;1,0;-1,-3], B1=[1,2,0,4;5,-2,-1,0]

输入:C1=A1*B1

此外,在MATLAB中,还可以实现下面的乘积运算,这在数学上没有定义

设A=(aij)m n,B=(bij)m n,它们的行数和列数相同,

那么A.*B生成一个新的数组,其行数和列数与原来数组相同,新数组的元素等于原来数组相应元素的乘积,称为数组乘积运算。

A.*B=(aij bij)m n

例 设,,求, 

输入:A=[1,-2;0,1;-1,3], B=[0,2;-1,1;2,5]

输入:C=A.*B

在数学上,一个标量与矩阵的乘积对于矩阵的每个元素与这个标量的乘积

sA=(saij)m n

在MATLAB中,可以实现这种运算,C=s*A。

此外,s.*A也给出同样的结果

例 求C=s*A,D=s.*A

除法运算

对于矩阵,分左除(\\)和右除(/)两种,而且所得到的结果是不一样的

    AX=B → A-1AX= A-1B → X=A-1B=A\\B,

XA=B → XA A-1=B A-1 →X= BA-1= B/A

此外,在MATLAB中,还可以实现一种数组除法运算

设A=(aij)m n,B=(bij)m n,它们的行数和列数相同

B./A或A.\\B给出与原数组行和列相同的数组

而且它们的结果都是一样的,等于两个数组相应元素的分别相除

B. / A  ( A. \ B )  = ( bij / aij ) m n

例 设,,求,,

在MATLAB中,还可以实现一种标量除以数组的运算

s. / A  ( A. \ s )= (s / aij) m n

转置

设A=(aij)m n

在数学上,表示矩阵的共轭转置

在MATLAB中,矩阵的共轭转置仍然用A’表示

此外,在MATLAB中,还可以实现下面的数组转置

A.’=(aji)n m,为非共轭转置

它与矩阵的共轭转置的关系为:A.’=conj(A’)

例 设z = [1+2i 3+4i],求z’及z.’

四、数组的关系和逻辑运算

关系(比较)运算

关系运算符

指令含义
<小于
<=小于等于
>大于
>=大于等于
==等于
~=不等于
注意

1.等式成立时,表示逻辑真,输出为1

等式不成立时,表示逻辑假,输出为0

2.当两个非标量数组进行比较时

两个数组的维数必须相同

比较是在两个数组的对应元素之间进行

比较的结果是与原来维数相同的数组

3.标量可以与非标量数组进行比较

比较是在标量和数组的每一个元素之间进行

比较的结果是与非标量数组维数相同的数组

例 设A=1:9,B=10-A,求r0=(A<4),r1=(A==B), r2=(A~=B)

逻辑运算

指令函数含义
A&Band(A,B)
A|Bor(A,B)
~Anot(A)
注意

1.等式成立时,表示逻辑真,输出为1

等式不成立时,表示逻辑假,输出为0

2.当两个非标量数组进行逻辑运算时

两个数组的维数必须相同

逻辑运算是在两个数组的对应元素之间进行

逻辑运算的结果是与原来维数相同的数组

3.标量可以与非标量数组进行比较

逻辑运算是在标量和数组的每一个元素之间进行

逻辑运算的结果是与非标量数组维数相同的数组

例1 设A=[0,1,1,0,1], B=[1,1,0,0,1],求A&B, A|B, ~A

注意

对数组或标量进行逻辑运算时,非零数当做逻辑1处理

例2 将上例的A分别改为A=[0,3.5,1,0,1]、A=[0,0.5,1,0,1],求A&B, A|B, ~A

注意

逻辑运算的优先级从高到低排序是:~、&、|

例3 设A=[0,1,1,0,1], B=[1,1,0,0,1],C=[0,1,0,1,0],求~A|B, A|~B和A&B|C, A|B&C

注意

在关系运算和逻辑运算同时存在时,逻辑非优先,关系运算次之,其次是逻辑与,逻辑或排在最后

例3 设A=-3:3,求L1=~(A>0),L2=~A>0,L3=~A ,L4=A>-2&A<1 

先决逻辑运算

先决逻辑运算用于逻辑表达式的运算

与数组逻辑运算不同,只有运算量是标量时,先决逻辑运算才有意义

先决与&&、先决或||

先决与:(expression 1)&&(expression 2)

当(expression 1)=1时

再对(expression 2)进行逻辑运算

然后对(expression 1)与(expression 2)执行“与”运算

当(expression 1)=0时

不再对(expression 2)进行逻辑运算

立即给出“逻辑假”的结果

例1 设a=6, 当b=0, b=2, b=1时,分别判断(b~=0)&&(a/b>5)

注意

乘除运算优先于关系运算

例2 设a=6, 当b=0时,判断(b==0)&&(a/b>5)

先决或:(expression 1)||(expression 2)

当(expression 1)=0时

再对(expression 2)进行逻辑运算

然后对(expression 1)与(expression 2)执行“或”运算

当(expression 1)=1时

不再对(expression 2)进行逻辑运算

立即给出“逻辑真”的结果

例3 设a=6, 当b=0, b=1, b=-1时,分别判断(b==0)||(a/b>0)

注意

先决与&&优先于先决或||,它们排在其它运算之后

例4 设a=6,b=-2, 判断 (b~=0)|| (a/b>0)&&(a/b>5)

关系与逻辑函数

函数名功能
xor(A,B)

,异或运算“exclusive or”。当两个数组对应元素同为0或同为非0,相应元素取0,否则取1

any(A)

如果A是向量(一维数组),只要向量中有一个元素不为0,结果为1,否则为0

如果A是矩阵(二维数组),any(A)把每一列元素作为向量处理,给出对多个向量判断的结果

all(A)

如果A是向量(一维数组),向量中所有元素不为0时,结果为1;否则为0

如果A是矩阵(二维数组),any(A)把每一列元素作为向量处理,给出对多个向量判断的结果

例1 A = [0 0 pi eps], B = [0 -2.4 0 1],求C = xor(A,B)

注意,eps虽然显示为0,实际上是非0

例2 A = [1,2,3;4,5,6;7,8,0],求B=any(A)、C=any(A>=5)

例3 A = [1,2,0;4,5,0;7,8,0],求B=any(A)

例4 A = [1,2,3;4,5,6;7,8,0],求B=all(A)、C=all(A>=5)

例4 A = [1,2,3;4,5,6;7,8,9],求B=all(A)

五、数组(矩阵)操作技巧

1.测试函数find

设A是一数组,k = find(A)

给出数组A非0元素的单下标。

如果数组没有非0元素,则给出一个空矩阵

例1 设A = [11  0  33  0  55],求find(A)、find(A == 0)、find(0 < A& A < 10*pi)

例2 设A = [11  0  33  0  55]’,求find(A)

例3 设A = [1,2,3;4,5,6;7,8,0],求find(A>5)

设A是一数组,[n,m] = find(A) 

给出数组A非0元素的全下标

例4 设M = magic(3),求[n,m] = find(M>7)

2.数组大小的判别

对于简单的数组,可以通过观察来判别它的维数和每一维的长度

对于复杂的数组,要通过size命令或length命令观察来判别它的维数和每一维的长度

size

d = size(A) 给出数组A每一维的长度

例1 设A=[0:0.2:pi;0:0.4:2*pi],求size(A)

[m,n] = size(A) 以变量m和n分别给出A每一维的长度

例2 设A=[0:0.2:pi;0:0.4:2*pi],求[m,n] = size(A)

length(A) 给出数组A中所有维的最大长度

即:length(A)= max(size(A))

例3 设A=[0:0.2:pi;0:0.4:2*pi],求length(A)

3.数组操作函数

reshape

在数组总元素数不变得前提下,改变各维的大小

B = reshape(A,m,n) 

从数组A按列取出元素构成m行n列数组B

例3 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求B = reshape(A,2,6)

B = reshape(A,m,n..,[],...)

这里,占位符[]表示一个未明确显示的维的长度,它和其余维的长度乘积等于数组A各维长度的乘积

例4 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求B = reshape(A,2,[]),C = reshape(A,1,[]),D = reshape(A,4,[]),E = reshape(A,2,3,[])

repmat

按指定维的数目铺放模块数组

B = repmat(A,m,n)或B = repmat(A,[m n])

将数组A作为整体按m行n列堆放

例5将eye(2) 作为整体按3行4列堆放

输入:B = repmat(eye(2),3,4)

4.数组的寻访与赋值

一维数组的寻访与赋值

例1 设x=[0.9501, 0.2311, 0.6068, 0.4860, 0.13],求x(3),x([1 2 5]),x(1:3),x(3:end),x(3:-1:1),x(find(x>0.5)),x([1 2 3 4 4 3 2 1])

    注意

    end是一维数组的长度,即最大下标

    寻访什么样的子数组,取决于数组x(index)中的下标index

    下标index可以是单个正整数或正整数数组,但index中的每个元素的取值必须在闭区间[1,end]内

例2,将上例的x数组的第3个元素重新赋值为0

x(3)=0

例3,将当前的x数组的第1和第4个元素重新赋值为1

x([1 4])=[1 1]

二维数组的寻访与赋值

A(r,c),由A的“r指定行”和“c指定列”上的元素组成

例1 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A(2,3)

例2 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A([2,3],[1,3]),A([2,3],3)

注意,方括号的作用

设数组Sa的行宽和列长与A(r,c) 的行宽和列长相同

则可以以双下标方式将Sa赋值给A(r,c),A(r,c)=Sa

例3 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],Sa=[20,30;40,50],求A([2,3],[1,3])=Sa

A(r,:),由A的“r指定行”和“全部列”上的元素组成

例2 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A(2,:),A([2 3],:)

A(:,c),由A的“全部行”和“c指定列”上的元素组成

例3 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A(:,3),A(:,[2 4])

例3 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A(:,[2 4 1])=ones(3)

左右两边的数组的行宽和列长必须相同

A(q),“单下标寻访”,由A的列按自左向右、首尾相接排序

例4 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A(7)

A(:),“单下标全元素”寻访,由A的各列按自左向右、首尾相接生成“一维长列”

例5 设A=[1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12],求A(:)

设s是数组,而且它的元素是从数组A的单下标中选取

A(s),“单下标寻访”,生成由“s”指定的数组

并且数组A(s)的维数与长度与数组s相同

例6 设s=[2 3 5],B=[16,2,3,13;5,11,10,8;9,7,6,12],求B(s)

例7 设t=[7 5;9 2],B=[16,2,3,13;5,11,10,8;9,7,6,12],求B(t)

设L是逻辑数组(其元素为1或0),且与数组A的维数和长度相同

A(L)给出逻辑数组L中由“1”元素选出A的对应元素,并按单下标次序排成列

例8 A=zeros(2,5); A(:)=-4:5,L=abs(A)>3,求X=A(L)

2.3 符号对象

2. 3.1 建立符号对象

MATLAB除了具有数值计算功能外,还具有符号计算功能。

MATLAB提供了一种符号数据类型,这种数据类型是用sym或syms函数定义的,相应的定义对象称为符号对象。

MATLAB提供的两个建立符号对象的函数sym和syms的用法不同。

1.建立符号变量和符号常量

 (1) sym函数

sym函数用来建立单个符号量,一般调用格式为:

符号量名=sym('符号字符串')

该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。

a=sym('a')将建立符号变量,它与非符号变量是不同的。

非符号变量在参与运算前是需要赋值的。变量的运算实际上是针对所赋的值运算,运算的结果是与变量类型对应的值。而对于符号变量,在运算前不需要赋值,其运算结果是一个表达式。

例1  a=sym('a'); b= sym('b'); c= sym('c');   %定义符号变量a、b、c

x=5; y=-6; z=11;                    %定义数值变量x、y、z

w=a*a+b*b+c*c                    %符号运算

w=x*x+y*y+z*z                    %数值运算

whos                             %查看内存变量

这里,w开始是符号变量,重新赋值后,成为数值变量。

应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。

下面的例子用于比较符号常量与数值常量在代数运算时的差别。

例2 

pi1= sym('pi'); k1= sym('8'); k2= sym('3');     %定义符号常量

pi2= pi; r1= 8; r2= 3;                      %定义数值常量

sin(pi1/3)                               %符号计算

sin(pi2/3)                               %数值计算

sqrt(k1+sqrt(k2))                         %符号计算

sqrt(r1+sqrt(r2))                          %数值计算

用符号常量计算所得到的结果是精确的数学表达式

而数值计算的结果往往是近似的有限小数

(2) syms函数

函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:

syms  符号变量名1 符号变量名2 … 符号变量名n

用这种格式定义符号变量时不要在变量名上加字符串分界符(‘),变量之间用空格而不要用逗号分隔。

例 用syms函数定义符号变量a、b、c、d

syms a b c d

whos                             %查看内存变量

例3  a=sym('a'); b= sym('b'); c= sym('c');   %定义符号变量a、b、c

x=5; y=-6; z=11;                    %定义数值变量x、y、z

w=a*a+b*b+c*c                    %符号运算

w=x*x+y*y+z*z                    %数值运算

whos                             %查看内存变量

这里,w开始是符号变量,重新赋值后,成为数值变量。

应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。

下面的例子用于比较符号常量与数值常量在代数运算时的差别。

2.建立符号表达式

含有符号对象的表达式称为符号表达式。

建立符号表达式有以下3种方法:

(1)利用单引号来生成符号表达式。

例1  y= '1/sqrt(2*x)'                %生成一般的符号表达式

f= 'cos(x^2)-sin(2*x)=0'         %生成符号方程

(2)用sym函数建立符号表达式。

例2 U= sym('3*x^2-5*y+2*x*y+6')     %建立符号表达式“3*x^2-5*y+2*x*y+6”

M=sym('[a, b; c,d]')              %生成符号矩阵

(3) 使用已经定义的符号变量组成符号表达式。

例3 syms x y

V=3*x^2-5*y+2*x*y+6

2. 3.2 符号表达式运算

1.符号表达式的四则运算

符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul和symdiv来实现,幂运算可以由sympow来实现。

运算结果仍然是符号表达式

例1 f='2*x^2+3*x-5'          %定义符号表达式

g='x^2-x+7'

symadd(f,g)             %求f+g

symsub(f,g)             %求f-g

symmul(f,g)             %求F*g

symdiv(f,g)             %求f/g

sympow(f, '3*x')            %求f^(3x)

此外,也可以用+、-、*、/、^运算实现符号运算

例2 syms x y z;

f=2*x+x^2*x-5*x+x^3+exp(2)

f=2*x/(5*x)

f=(x*x-y*y)/(x-y)

2.符号表达式的提取分子和分母运算

如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:

[n,d]=numden(s)

该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。

例1  a=sym(0.333)       %数字加与不加单引号结果一样,都是符号常量

[n, d]=numden(a)

numden函数是在符号表达式有理化后提取分子和分母

例2  g=sym('(x^2+3)/(2*x-1)+3*x/(x-1)')

     [n, d]=numden(g)

如果符号表达式s是一个符号数组,[n,d]=numden(s)函数给出两个新数组n和d。其中n是分子数组,d是分母数组。

例3  h= sym('[3/2, (2*x+1)/3; a/x+a/y, 3*x+4]')

 [n, d]=numden(h)

3.符号表达式的因式分解与展开

MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:

factor(s):对符号表达式s分解因式。

expand(s):对符号表达式s进行展开。

collect(s):对符号表达式s合并同类项。

collect(s,v):对符号表达式s按变量v合并同类项。

例  syms a b x y;

A=a^3-b^3;

factor(A)             %对A分解因式

s=(-7*x^2-8*y^2)*(-x^2+3*y^2);

expand(s)           %对s展开

collect(s,x)          %对符号表达式s按变量x合并同类项(此例无同类项)

factor(sym('420'))      %对符号整数分解因式

注意,factor(s)中的s必须为符号,不能是数值

4.符号表达式的化简

MATLAB提供的对符号表达式化简的函数有:

simplify(s)、simple(s)

simplify(s):应用函数规则对s进行化简。

例1.化简  (应该为)

syms x y

s=log(2*x/y)

simplify(s)

例2.化简   (应该为)

syms a

s=(1-a^2)/(1-a)

simplify(s)

simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。这种函数可以试用几种不同的化简工具,然后在结果表达式中选择含有最少字符的那种形式。

例1.化简   (应该为)

syms x y

s=(x^2+y^2) ^2+(x^2-y^2) ^2

simple(s)

5.符号表达式与数值表达式之间的转换

利用函数sym可以将数值表达式变换成它的符号表达式。

例1.

sym(1.5)           %注意与建立单个符号量a=sym('a')的区别

sym(3.14)

利用函数numeric或eval可以将符号表达式变换成数值表达式。

例1.

phi='(1+sqrt(5))/2'

numeric(phi)

例2.

eval('234/5')

6.符号表达式中变量的确定

MATLAB中的符号可以表示符号变量和符号常量。函数findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:

findsym(s,n)

函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。

例:

syms x a y z b;               %定义5个符号变量

s1=3*x+y;s2=a*y+b;          %定义2个符号表达式

findsym(s1)                 %返回s1中的全部符号变量

findsym(s2,2)                %返回s2中的2个符号变量

findsym(5*x+2)

c=sym('3')                    %定义符号常量c

findsym(a*x+b*y+c)            %符号常量c应该不在结果中

在求函数的极限、导数和积分时,如果用户没有定义自变量,MATLAB将按离字母x最近的原则确定默认变量。可以用findsym(s,1)查找系统的默认变量。

syms x a y w z b;

findsym(a*y+b*w,1)

findsym(a*z+b*w,1)

findsym(a*5+b,1)

2.4  MATLAB基本绘图

2.4.1 二维图形

图形可视化是MATLAB的一大特色

MATLAB的基本绘图函数是plot

plot(x,y)形式

已知自变量x取一组数值x1、x2、…xn,相应的函数y(x)也取一组数值y(x1)、y(x2)、…y(xn),

那么,plot(x,y)就用二维图形表示它们之间的函数关系

例1:取步长为0.1,在[0,2π]区间画出正弦曲线

x=0:0.1:2*pi;  %在[0,2π]区间生成一个1维数组

y=sin(x);  %建立正弦函数

plot (x, y)  %画出y-x曲线

注意

1.绘图是在一定的取值范围内进行

2.当自变量和函数都是向量时,它们的维数必须相同,而且必须同为行向量或同为列向量

3.plot生成的图形可以保存为.fig文件

例2:取步长为0.5,在[0,2π]区间画出正弦曲线

 x1=0:0.5:2*pi;  %在[0,2π]区间生成一个1维数组

y1=sin(x1);  %建立正弦函数

plot (x1, y1)  %画出y1-x1曲线

注意

对区间分割的越细,计算的点就越多,就能真实逼近函数的连续变化,但是计算时间就越长

如果自变量的采样点不够多,就可能没有真实反映原函数

例3:关闭图形窗口,分别将例1和例2中最后的语句改为

figure, plot (x, y)  %画出y-x曲线

figure, plot (x1, y1)  %画出y1-x1曲线

注意

figure可以.生成的图形窗口

例4:绘制y=sin(tgx)- tg (sinx)在x [-π,π]区间内的曲线

先以0.05为步长构造x向量

x=[-pi:0.05:pi];

y=sin(tan(x))- tan(sin(x));

figure ,plot(x,y)

在x [-1.8,-1.2]和x [1.2,1.8]两个子区间内的曲线比较粗糙

在这两个子区间增加取样点

x=[-pi:0.05:-1.81,-1.8:0.001:-1.2,-1.195:0.05:1.2, 1.201:0.001:1.8,1.81:0.05:pi];

y=sin(tan(x))- tan(sin(x));

figure ,plot(x,y)

例5:绘制饱和非线性特性曲线,取x [-2,2]区间,步长为0.02。

    符号函数 

x=[-2:0.02:2];

y=1.1* sign(x).*(abs(x)>1.1)+x.*(abs(x)<=1.1);

plot(x,y)

注意

在分段描述的函数中,不要将子区间重复表示

如上例,不能写成y=1.1* sign(x).*(abs(x)>=1.1)+x.*(abs(x)<=1.1);

这样,相加的两项中都在x=1.1取值,这在MATLAB中虽然是允许的,但它不符合题意

plot(x,y,’s’)形式

这里s表示曲线的色彩、线型和数据点型

在MATLAB中,对线型和色彩的设置值如下

线型符号-:-.--
含义实线虚线点划线双划线
色彩符号bgrcmykw
含义绿品红
在缺省情况下,

曲线一律用“实线”线型

只有一条曲线时,色彩是蓝色;多条曲线存在时,色彩表中的次序给出

例6:将上例的曲线画成红色虚线

plot(x,y,’r:’)

数据点型

在MATLAB中,也可以用点来表示函数的图形

MATLAB的数据点型设置如下

符号含义符号含义
.实心黑点d菱形符diamond

+十字符h六角星符hexagram

*八线符o空心圆圈
^朝上三角符p五角星符pentagram

<朝左三角符s方块符square

>朝右三角符x叉字符
v朝下三角符
例1:取步长为0.1,在[0,2π]区间画出正弦曲线

x=0:0.1:2*pi;  %在[0,2π]区间生成一个1维数组

y=sin(x);  %建立正弦函数

plot (x, y,’-.rd’)  %画出y-x曲线

注意,s中色彩、线型和数据点型符号对次序不敏感

实际上,这些设置可以在.fig文件中,通过“edit”菜单→“Current Object Properties…”(或点击“edit plot” 工具,点击曲线)→“line style”、“line color”、“style”修改

在plot(x,y)函数形式中,x和y可以是向量,也可以是矩阵。

当x和y是矩阵时,它们必须同维同阶。

这时将得到多条曲线

其中一条曲线表示y的第1列向量是x第1列向量的函数关系、另一条曲线表示y的第2列向量是x第2列向量的函数关系…等等

曲线的条数等于矩阵的列数

例6:在同一坐标中同时绘制正弦和余弦两条曲线

t= linspace(0,2*pi,100);  

x=linspace(a,b,n),a和b分别是数组的第1个和最后一个元素,n是采样总点数(包括a和b),步长=(b-a)/(n-1))

x=[t; t]';         

y=[sin(t); cos(t)]';  

plot(x,y)

问题:如果不转置,会出现什么问题?

plot(x1,y1,x2,y2,…xn,yn)形式

当x1,y1,x2,y2,…xn,yn为向量时,x1和y1、x2和y2、…xn和yn分别组成向量对。每一组向量的长度可以不同。每一组向量可以绘制一条曲线,这样可以绘制多条曲线。

例9 用不同线型和颜色在同一坐标内绘制曲线y=2e-0.5xsin(2πx)及其包络线

x=(0:pi/100:2*pi)’; 

y1=2*exp(-0.5*x)*[1,-1];

y2=2*exp(-0.5*x).*sin(2*pi*x);

x1=(0:12)/2; y3=2*exp(-0.5*x1).*sin(2*pi*x1);  %其值为0

plot(x,y1,’k:’,x,y2,’b--’,x1,y3,’rp’);

双纵坐标函数plotyy

同时绘制具有不同纵坐标刻度的两个图形

plotyy(x1,y1,x2,y2)

x1,y1对应一条曲线,x2,y2对应另一条曲线,它们的横坐标刻度相同。纵坐标分左右两个,左边用于x1,y1,右边用于x2,y2

例10 用不同刻度在同一坐标内绘制曲线y1=2e-0.5xsin(2πx)及其包络线

x1=0:pi/100:2*pi;

x2=0:pi/100:3*pi;

y1= exp(-0.5*x1).*sin(2*pi*x1);

y2= 1.5*exp(-0.1*x2).*sin(x2);

plotyy(x1,y1,x2,y2);

注意,这时不能像plot函数那样对曲线属性进行设置,

如果要设置曲线的色彩、线型和数据点型符号,应使用句柄图形控制来完成

图形标识

坐标轴控制函数axis

基本形式:axis([xmin,xmax,ymin,ymax])

例11 用图形表示连续调制波形 及其包络线。

t=(0:pi/100:pi)';                

y1=sin(t)*[1,-1];                

y2=sin(t).*sin(9*t);               

t3=pi*(0:9)/9;                    

y3=sin(t3).*sin(9*t3);

figure, plot(t,y1,t,y2,t3,y3,'mo')    

然后再把最后的语句改成

figure, plot(t,y1,t,y2,t3,y3,'mo'); axis([0,pi,-0.8,0.8])             

观察区别

图形名称:title

基本形式:title(S)

S可以取字符串。

字符串是与数值不同的一种数据类型,它用单引号对括起来

例12 将上个语句改为

figure, plot(t,y1,t,y2,t3,y3,'mo');title('连续调制波形')

坐标轴名称:xlabel、ylabel

基本形式:xlabel(S)、ylabel(S)

例12 将上个语句改为

figure, plot(t,y1,t,y2,t3,y3,'mo'); axis([0,pi,-1,1]);title('连续调制波形'); xlabel('x坐标'), ylabel('y坐标')

曲线图例:legend

用于区分各条曲线

基本形式:legend(S1,S2…)

S1,S2…分别对应按先后次序生成的曲线

例12 将上个语句改为

figure, plot(t,y1,t,y2,t3,y3,'mo'); axis([0,pi,-1,1]);title('连续调制波形'); xlabel('x坐标'), ylabel('y坐标');legend('包络线1','包络线2','调制波','零点')

坐标注释:text

基本形式:text(xt,yt,S)

表示在(xt,yt)坐标处书写字符注释

例12 将上个语句改为

figure, plot(t,y1,t,y2,t3,y3,'mo'); axis([0,pi,-1,1]);title('连续调制波形'); xlabel('x坐标'), ylabel('y坐标');legend('包络线1','包络线2','调制波','零点');text(17*pi/100, sin(17*pi/100), 'y=sin(t)'),text(67*pi/100, sin(67*pi/100).*sin(9*67*pi/100), 'y=sin(t)*sin(2t)')

分格线:grid

grid on,画出分格线

grid off,不画出分格线

grid:在以上两个命令之间切换

例1:取步长为0.1,在[0,2π]区间画出正弦曲线,画出分格线

x=0:0.1:2*pi;  %在[0,2π]区间生成一个1维数组

y=sin(x);  %建立正弦函数

plot (x, y)  %画出y-x曲线

grid on

继续输入下面命令,观察图形窗口的变化

grid off

grid

grid

图形保持:hold

例1 在上例中,继续画出余弦曲线,观察图形变化

y1=cos(x);  %建立余弦函数

plot (x, y1)  %画出y1-x曲线

为了保持以存在的图形,应采用hold函数

hold on,启动图形保持功能

hold off,关闭图形保持功能

hold,在以上两个命令之间切换

例2 在上例中,启动图形保持功能,观察图形变化

plot (x, y)  %画出y-x曲线

hold on

plot (x, y1)  %画出y1-x曲线

继续输入下面命令,观察图形窗口的变化

hold off

plot (x, y1)  %画出y1-x曲线

hold

plot (x, y)  %画出y-x曲线

子图:subplopt

在绘图过程中,经常需要将几个图形画在同一个窗口中。

这些单个的图形称为子图。

调用格式:subplot(m,n,p)

它把一个图形窗口分割成m n个子绘图区,p表示子绘图区的编号,编号次序按行从左至右(这与数组和矩阵的编号不同)

例1 在4个子图中绘制不同的三角函数图

x=0:0.1*pi:2*pi;

subplot(2,2,1); plot(x,sin(x),'-*'); title('sin(x)');

subplot(2,2,2); plot(x,cos(x),'-o'); title('cos(x)'); axis([0,2*pi,-1.5,1.5]);

subplot(2,2,3); plot(x,sin(x).*cos(x),'-x'); title('sin(x).*cos(x)'); xlabel('x轴');

subplot(2,2,4); plot(x,sin(x)+ cos(x),'-h'); title('sin(x)+ cos(x)'); grid on;

注意,axis、hold、title、xlabel、ylabel、grid等函数是针对子图操作的

极坐标图:polar

基本形式:polar(theta,rho)或polar(theta,rho,s)

theta 为极角,rho为矢径,s为图形设置选项

例1 绘制ρ=sin(2θ)cos(2θ)的极坐标图

theta=0:0.01:2*pi; rho= sin(2*theta).*cos(2*theta);

polar(theta,rho,'k')

   

对数坐标图:loglog

x、y轴均采用为常用对数刻度

半对数坐标图:semilogx

x轴采用常用对数刻度,y轴保持线性刻度

半对数坐标图:semilogy

y轴采用常用对数刻度,x轴保持线性刻度

例1 绘制y=10x2的对数坐标图,并与直角线性坐标图进行比较

x=0:0.1:10; y=10*x.*x;

subplot(2,2,1),plot(x,y);title('plot(x,y)');grid on;

subplot(2,2,2); semilogx (x,y); title('semilogx (x,y)');grid on;

subplot(2,2,3); semilogy(x,y); title('semilogy(x,y)');grid on;

subplot(2,2,4); loglog (x,y); title(' loglog (x,y)');grid on;

饼状图:pie

用来表示各元素占总和的百分比

pie(X)

pie(X,explode)

X为一向量,一个饼图的某一部分对应向量X的某一个元素。explode有“特别引人注目”的意思,它是与X同长度的向量,它的元素取1或0。当某个元素取1时,与X对应的区域就突出

例1 某次考试,优秀、良好、中等、及格、不及格的人数分别为7、17、23、19、5,用饼图进行统计分析

X=[7,17,23,19,5];

figure,pie(X);

title('饼图'); legend('优秀', '良好', '中等', '及格', '不及格');

explode=[1,0,1,0,0];

figure,pie(X,explode);

隐函数绘制

隐函数就是满足方程f(x,y)=0的x和y之间的关系式。

当x和y之间的关系不能用显式表达时,就无法定义一个x向量,也就无法求出相应的y向量。从而不能用plot(x,y)绘制曲线。

ezplot可以直接绘制隐函数曲线

调用格式:ezplot(‘隐函数表达式')

例1 绘制隐函数f(x,y)=x2sin(x+y2)+y2ex+y+5cos(x2+y)=0的曲线

ezplot('x^2.*sin(x+y^2)+y^2.*exp(x+y)+5*cos(x^2+y)')

这是一个多值函数。

曲线的x取值范围(-6,6)由系统自动选取。

可以通过下面方式改变定义域

ezplot('x^2.*sin(x+y^2)+y^2.*exp(x+y)+5*cos(x^2+y)',[-10,10])

2.4.2 三维图形

三维曲线

三维曲线的基本绘图函数是plot3

调用格式:

plot3(x,y,z)

x,y,z为3个维数相同的向量。plot3(x,y,z)画出这些向量所表示的曲线。

plot3(X,Y,Z)

X,Y,Z为3个阶数相同的矩阵。plot3(X,Y,Z)这3个矩阵的列向量所表示的曲线

plot3(X,Y,Z,s)

s为线型、颜色、数据点型等字符串

plot3(x1,y1,z1,s1, x2,y2,z2,s2….)

组合绘图格式

plot3函数实际上是plot函数的3维扩展。与plot相比,只是增加了一个维数,其它都相同。

例1 绘制y=sin(x),z=cos(x)的曲线

x=0:pi/50:10*pi; y=sin(x); z=cos(x);

plot3(x,y,z);

例2 绘制x=8cost,y=4sint,z=-4sint,()的曲线

t=0:pi/50:2*pi;

x=8*cos(t); y=4*sqrt(2)*sin(t); z=-4*sqrt(2)*sin(t);

plot3(x,y,z, 'p');

title('Line in 3-D Space'); text(0,0,0, 'oringin');

xlabel('x'); ylabel('y'); zlabel('z');grid on;

三维曲面

函数z=f(x,y)表示3维曲面

在matlab中,z=f(x,y)不可能连续地取值

因此,所谓的曲面是由密集间隔的离散点构成。

或者说,曲面是由密集的间隔曲线构成,而曲线又是由一长串离散点构成

3维曲面函数

mesh(X,Y,Z,C)  

C是指定各点用色的矩阵。mesh用于绘制3维网格图

surf(X,Y,Z,C)

用于绘制3维曲面图

例2 用3维曲面表现函数z=sinycosx

1.用mesh函数画

x=0:0.1:2*pi;

[X,Y]=meshgrid(x);

Z=sin(Y).*cos(X);

figure,mesh(X,Y,Z);

xlabel('x-axis'), ylabel('y-axis'), zlabel('z-axis');

title('mesh');

2.用surf函数画

x=0:0.1:2*pi;

[X,Y]=meshgrid(x);

Z=sin(Y).*cos(X);

figure,surf(X,Y,Z);

xlabel('x-axis'), ylabel('y-axis'), zlabel('z-axis');

title('surf');

3.用plot3函数画

x=0:0.1:2*pi;

[X,Y]=meshgrid(x);

Z=sin(Y).*cos(X);

figure,plot3(X,Y,Z);

xlabel('x-axis'), ylabel('y-axis'), zlabel('z-axis');

title('plot3');

注意

在mesh(X,Y,Z,S)和surf(X,Y,Z,S)的函数中,一般情况下,X、Y、Z是维数相同的矩阵。C是指定各点用色的矩阵。当C缺省时,C=Z。这时,颜色的设定正比于图形的高度,这样可以得到层次分明的3维图形。

在网格图(mesh)中,线条有颜色,线条间的补面无颜色

在曲面图(surf)中,线条和线条间的补面都有颜色

用plot3绘制的3维曲面实际上是由3维曲线组合而成。

与mesh函数相似的函数还有meshc和meshz

   

meshc:带等高线的3维网络曲面函数。

除具有mesh函数的功能外,还在xy平面上绘制曲面在z轴方向的等高线

meshz:带底座的3维网络曲面函数。

除具有mesh函数的功能外,还在xy平面上绘制曲面的底座

与surf函数相似的函数还有surfc和surfl

surfc:带等高线的曲面函数

surfl:具有光照效果的曲面函数

例3 在xy平面内选择区域[-8,8]  [-8,8],绘制函数的上述4种3维曲面图

x=-8:0.5:8;

[X,Y]=meshgrid(x);

Z=sin(sqrt(X.^2+Y.^2))./ sqrt(X.^2+Y.^2+eps);  %为什么加eps?eps是机器零阈值(机器的浮点运算误差限)

figure;meshc(X,Y,Z);title(' meshc(X,Y,Z)')

figure;meshz(X,Y,Z);title(' meshz(X,Y,Z)')

figure;surfc(X,Y,Z);title('surfc(X,Y,Z)')

figure;surfl(X,Y,Z);title('surfl(X,Y,Z)')

文档

MATLAB应用 MATLAB数据及运算

第2章MATLAB数据及运算2.1变量及其操作一、变量命名规则1.变量名、函数名对字母大小写是敏感的myfile与MyFile表示不同的变量sin是MATLAB定义的正弦函数名,但SIN、Sin都不是2.变量名的第一个字符必须是英文字母3.变量名最多可包含63个字符(英文、数字和下划线)4.变量名中不能包含空格、标点my_exemple12是合法的变量名,12exemple、_exemple12、myexemple12、my.exemple12是非法变量名二、MATLAB默认的预定义变量每当M
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top