1.1基本数值运算
在MATLAB下进行基本数算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如:
>>(5*2+1.3-0.8)*10/25 小提示: ans = \">>\"是MATLAB的提示符号4.2000 (Prompt),但在PC中文视窗系统 MATLAB会将运算结果直接存入一变数ans, 下,由於编码方式不同,此提示符号代表MATLAB运算後的答案 (Answer),并显示 常会消失不见,但这并不会影响到其数值於萤幕上。(为简便起见,在下述各例中, MATLAB的运算结果。 我们不再印出MATLAB的提示号。)
我们也可将上述运算式的结果设定给另一个变数x: x = (5*2+1.3-0.8)*10^2/25 小提示: x = MATLAB将所有变数均存成42 double的形式,所以不需经过变数 此时MATLAB会直接显示x的值。由上例可知, 宣告(Variable declaration)。MATLAB认识所有一般常用到的加(+)、减(-)、 MATLAB同时也会自动进行记忆乘(*)、除(/)的数算符号,以及幂次运算(^)。 体的使用和回收,而不必像 C语这些功能使的MATLAB易学易用,使用者可专心 言,必须由使用者一一指定。 致力於撰写程式,而不必被软体枝节问题所干扰。若
不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;) 即可,如下例:
y = sin(10)*exp(-0.3*4^2);
若要显示变数y的值,直接键入y即可: >>y y = -0.0045
在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数。
1.2基本数学函数
1.2.1 MATLAB常用的基本数学函数 abs(x):变量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方
real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数
1
Matlab的应用 round(x):四舍五入至最近整数
fix(x):无论正负,舍去小数至最近整数
floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示
rats(x):将实数x化为多项分数展开 sign(x):符号函数 (Signum function)。 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 rem(x,y):求x除以y的馀数
(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数
log(x):以e为底的对数,即自然对数或 log2(x):以2为底的对数 log10(x):以10为底的对数
1.2.2 MATLAB常用的三角函数 sin(x):正弦函数 cos(x):馀弦函数 tan(x):正切函数 asin(x):反正弦函数 acos(x):反馀弦函数 atan(x):反正切函数
atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数
下表即为MATLAB常用到的永久常数。
1.2.3 MATLAB的永久常数 i或j:基本虚数单位(即)
eps:系统的浮点(Floating-point)精确度 inf:无限大, 例如1/0
nan或NaN:非数值(Not a number),例如0/0
2
Matlab的应用 pi:圆周率( 3.1415926...)
realmax:系统所能表示的最大数值 realmin:系统所能表示的最小数值 nargin: 函数的输入引数个数 nargin: 函数的输出引数个数
第2章 矩阵及其基本运算
MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。
2.1 矩阵的表示
2.1.1 数值矩阵的生成 1.实数值矩阵输入
MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。
不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如:
>> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time =
11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43; 4.37 5.98] X_Data = 2.43 3.43 4.37 5.98
>> vect_a = [1 2 3 4 5] vect_a =
1 2 3 4 5
>> Matrix_B = [1 2 3; 2 3 4; 3 4 5]
Matrix_B = 1 2 3 2 3 4 3 4 5
>> Null_M = [ ] %生成一个空矩阵 2.复数矩阵输入
复数矩阵有两种生成方式: 第一种方式
3
Matlab的应用 例1-1
>> a=2.7;b=13/25;
>> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1] C=
1.0000 5.4000 + 0.5200i 0.84 0.7071 5.3000 4.5000 第2种方式 例1-2
>> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16] R =
1 2 3 4 5 6 M =
11 12 13 14 15 16 >> CN=R+i*M CN =
1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i
1.1.2 特殊矩阵的生成 命令 全零阵 函数 zeros
格式 B = zeros(n) %生成n×n全零阵 B = zeros(m,n) %生成m×n全零阵 B = zeros([m n]) %生成m×n全零阵
B = zeros(size(A)) %生成与矩阵A相同大小的全零阵 命令 单位阵 函数 eye
格式 Y = eye(n) %生成n×n单位阵 Y = eye(m,n) %生成m×n单位阵
Y = eye(size(A)) %生成与矩阵A相同大小的单位阵 命令 全1阵 函数 ones
格式 Y = ones(n) %生成n×n全1阵 Y = ones(m,n) %生成m×n全1阵 Y = ones([m n]) %生成m×n全1阵 Y = ones(d1,d2,d3„) %生成d1×d2×d3ׄ全1阵或数组 Y = ones([d1 d2 d3„]) %生成d1×d2×d3ׄ全1阵或数组 Y = ones(size(A)) %生成与矩阵A相同大小的全1阵
4
Matlab的应用 命令 均匀分布随机矩阵 函数 rand
格式 Y = rand(n) %生成n×n随机矩阵,其元素在(0,1)内 Y = rand(m,n) %生成m×n随机矩阵 Y = rand([m n]) %生成m×n随机矩阵 Y = rand(m,n,p,„) %生成m×n×pׄ随机矩阵或数组 Y = rand([m n p„]) %生成m×n×pׄ随机矩阵或数组 例1-9 产生一个3×4随机矩阵 >> R=rand(3,4) R =
0.9501 0.4860 0.4565 0.4447 0.2311 0.13 0.0185 0.61 0.6068 0.7621 0.8214 0.7919
例1-10 产生一个在区间[10, 20]内均匀分布的4阶随机矩阵 >> a=10;b=20;
>> x=a+(b-a)*rand(4) x =
19.2181 19.37 10.57 11.38 17.3821 19.1690 13.5287 12.0277 11.7627 14.1027 18.1317 11.9872 14.0571 18.9365 10.0986 16.0379
1.2 矩阵运算
1.2.1 加、减运算 运算符:“+”和“-”分别为加、减运算符。
运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。例1-22
>>A=[1, 1, 1; 1, 2, 3; 1, 3, 6] >>B=[8, 1, 6; 3, 5, 7; 4, 9, 2] >>A+B=A+B >>A-B=A-B
结果显示:A+B= 9 2 7 4 7 10 5 12 8 A-B=
-7 0 -5 -2 -3 -4 -3 -6 4 1.2.2 乘法
5
Matlab的应用 运算符:*
运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23
>>X= [2 3 4 5; 1 2 2 1]; >>Y=[0 1 1; 1 1 0; 0 0 1; 1 0 0]; Z=X*Y
结果显示为: Z=
8 5 6 3 3 3
2.矩阵的数乘:数乘矩阵 上例中:a=2*X 则显示:a = 4 6 8 10 2 4 4 2
向量的点乘(内积):维数相同的两个向量的点乘。数组乘法:A.*B表示A与B对应元素相乘。 3.向量点积 函数 dot
格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。
C = dot(A,B,dim) %在dim维数中给出A与B的点积 例 >>X=[-1 0 2]; >>Y=[-2 -1 1]; >>Z=dot(X, Y) 则显示:Z = 4
还可用另一种算法: sum(X.*Y) ans= 4
4.向量叉乘
在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中,用函数cross实现。 函数 cross
6
Matlab的应用 格式 C = cross(A,B) %若A、B为向量,则返回A与B的叉乘,即C=A×B,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3×n矩阵,其中的列是A与B对应列的叉积,A、B都是3×n矩阵。
C = cross(A,B,dim) %在dim维数中给出向量A与B的叉积。A和B必须具有相同的维数,size(A,dim)和size(B,dim)必须是3。
例1-24 计算垂直于向量(1, 2, 3)和(4, 5, 6)的向量。 >>a=[1 2 3]; >>b=[4 5 6]; >>c=cross(a,b) 结果显示: c=
-3 6 -3
可得垂直于向量(1, 2, 3)和(4, 5, 6)的向量为±(-3, 6, -3) 5.混合积
混合积由以上两函数实现:
例1-25 计算向量a=(1, 2, 3)、b=(4, 5, 6)和c=(-3, 6, -3) 的混合积a(bc)
解:
>>a=[1 2 3]; b=[4 5 6]; c=[-3 6 -3]; >>x=dot(a, cross(b, c)) 结果显示:x =
注意:先叉乘后点乘,顺序不可颠倒。 1.2.3 除法运算
Matlab提供了两种除法运算:左除(\\)和右除(/)。一般情况下,x=a\\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。
例:a=[1 2 3; 4 2 6; 7 4 9] b=[4; 1; 2]; x=a\\b
则显示:x= -1.5000
2.0000 0.5000
如果a为非奇异矩阵,则a\\b和b/a可通过a的逆矩阵与b阵得到: a\\b = inv(a)*b b/a = b*inv(a) 数组除法:
A./B表示A中元素与B中元素对应相除。 1.2.4 矩阵乘方 运算符:^ 运算规则:
7
Matlab的应用 当A为方阵,P为大于0的整数时,A^P表示A的P次方,即A自乘P次;P为小于0的整数时,A^P表示A-1的P次方。
pd11V1其中V为A的特征向量,(2)当A为方阵,p为非整数时,则A^PVpdnnd11为特征值对角矩阵。如果有重根,以上指令不成立。 dnnpd111(3)标量的矩阵乘方PA,标量的矩阵乘方定义为PAVV式中V,D取自特征值
dpnn分解AV=AD。
pa11pa1n(4)标量的数组乘方P.^A,标量的数组乘方定义为P.^A数组乘方:A.^P:表示
am1appmnA的每个元素的P次乘方。
1.2.5 矩阵转置 运算符:′
运算规则:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。 若A为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。 若仅希望转置,则用如下命令:A.′。 1.2.6 方阵的行列式 函数 det
格式 d = det(X) %返回方阵X的多项式的值 例1-42
>> A=[1 2 3;4 5 6;7 8 9] A =
1 2 3 4 5 6 7 8 9 >> D=det(A) D = 0 1.2.7 逆 命令 逆 函数 inv
格式 Y=inv(X) %求方阵X的逆矩阵。若X为奇异阵或近似奇异阵,将给出警告信息。
8
Matlab的应用 123例1-43 求A221的逆矩阵
343>>A=[1 2 3; 2 2 1; 3 4 3];
>>Y=inv(A)或Y=A^(-1) 则结果显示为 Y =
1.0000 3.0000 -2.0000 -1.5000 -3.0000 2.5000 1.0000 1.0000 -1.0000 1.2.8 矩阵的秩 函数 rank
格式 k = rank (A) %求矩阵A的秩 k = rank (A,tol) %tol为给定误差 1.2.9 矩阵元素个数的确定 函数 numel
格式 n = numel(a) %计算矩阵A中元素的个数 例1-65
>> A=[1 2 3 4;5 6 7 8]; >> n=numel(A) n = 8
1.3 线性方程的组的求解
我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:
若系数矩阵的秩r=n(n为方程组中未知变量的个数),则有唯一解; 若系数矩阵的秩r 1.3.1 求线性方程组的唯一解或特解(第一类问题) 这类问题的求法分为两类:一类主要用于解低阶稠密矩阵 —— 直接法;另一类是解大型稀疏矩阵 —— 迭代法。 1.利用矩阵除法求线性方程组的特解(或一个解) 方程:AX=b 解法:X=A\\b 9 Matlab的应用 5x16x2x5x6x123x25x36x4例1-76 求方程组x35x46x5x45x5解: >>A=[5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5]; B=[1 0 0 0 1]'; R_A=rank(A) %求秩 X=A\\B %求解 运行后结果如下 R_A = 5 X = 2.2662 -1.7218 1.0571 -0.5940 0.3188 这就是方程组的解。 100的解。 01第3章 数据分析 3.1 插值、拟合 插值法是实用的数值方法,是函数逼近的重要方法。在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值。用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。寻找这样的函数φ(x),办法是很多的。φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数。函数类的不同,自然地有不同的逼近效果。在许多应用中,通常要用一个解析函数(一、二元函数)来描述观测数据。 根据测量数据的类型: 1.测量值是准确的,没有误差。 10 Matlab的应用 2.测量值与真实值有误差。 这时对应地有两种处理观测数据方法: 1.插值或曲线拟合。 2.回归分析(假定数据测量是精确时,一般用插值法,否则用曲线拟合)。 MATLAB中提供了众多的数据处理命令。有插值命令,有拟合命令,有查表命令。 3.1.1 插值命令 命令1 interp1 功能 一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。各个参量之间的关系示意图为图2-14。 Y:原始数据点 Yi:插值点 f(x) x:原始数据点 xi:插值点 图3-1 数据点与插值点关系示意图 格式 yi = interp1(x,Y,xi) %返回插值向量yi,每一元素对应于参量xi,同时由向量x与 Y的内插值决定。参量x指定数据Y的点。若Y为一矩阵,则按Y的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。 yi = interp1(Y,xi) %假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。 yi = interp1(x,Y,xi,method) %用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline用它们执行三次样条函数插值; ’pchip’:分段三次Hermite插值。对于该方法,命令interp1调用函数pchip,用于对向量x与y执行分段三次内插值。该方法保留单调性与数据的外形; ’cubic’:与’pchip’操作相同; 例2-31 >>x = 0:10; y = x.*sin(x); >>xx = 0:.25:10; yy = interp1(x,y,xx); >>plot(x,y,'kd',xx,yy) 插值图形为图3-2。 例2-32 >> year = 1900:10:2010; >> product = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 11 Matlab的应用 226.505 249.633 256.344 267.3 ]; >>p1995 = interp1(year,product,1995) >>x = 1900:1:2010; >>y = interp1(year,product,x,'pchip'); >>plot(year,product,'o',x,y) 插值结果为: p1995 = 252.9885 插值图形为图3-3。 图3-2 一元函数插值图形 图3-3 离散数据的一维插值图 命令2 interp2 功能 二维数据内插值(表格查找) 格式 ZI = interp2(X,Y,Z,XI,YI) %返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、 或同型矩阵)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi与Yi,此时,输出向量Zi与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y与Z确定的二维函数Z=f(X,Y)。参量X与Y必须是单调的,且相同的划分格式,就像由命令meshgrid生成的一样。若Xi与Yi中有在X与Y范围之外的点,则相应地返回nan(Not a Number)。 ZI = interp2(Z,XI,YI) %缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。 ZI = interp2(Z,n) %作n次递归计算,在Z的每两个元素之间插入它们的二维插值,这样,Z的阶数将不断增加。interp2(Z)等价于interp2(z,1)。 ZI = interp2(X,Y,Z,XI,YI,method) %用指定的算法method计算二维插值: ’linear’:双线性插值算法(缺省算法); ’nearest’:最临近插值; ’spline’:三次样条插值; ’cubic’:双三次插值。 例2-33: >>[X,Y] = meshgrid(-3:.25:3); >>Z = peaks(X,Y); >>[XI,YI] = meshgrid(-3:.125:3); >>ZZ = interp2(X,Y,Z,XI,YI); 图3-4 二维插值图 12 Matlab的应用 >>surfl(X,Y,Z);hold on; >>surfl(XI,YI,ZZ+15) >>axis([-3 3 -3 3 -5 20]);shading flat >>hold off 插值图形为图3-4。 例2-34 >>years = 1950:10:1990; >>service = 10:10:30; >>wage = [150.697 199.592 187.625 179.323 195.072 250.287 203.212 179.092 322.767 226.505 153.706 426.730 249.633 120.281 598.243]; >>w = interp2(service,years,wage,15,1975) 插值结果为: w = 190.6288 2005-3-10 命令3 spline 功能 三次样条数据插值 格式 yy = spline(x,y,xx) %对于给定的离散的测量数据x,y(称为断点),要寻找一个三项多项式yp(x),以逼近每对数据(x,y)点间的曲线。过两点(xi,yi)和(xi1,yi1)只能确定一条直线,而通过一点的三次多项式曲线有无穷多条。为使通过中间断点的三次多项式曲线具有唯一性,要增加两个条件(因为三次多项式有4个系数): 1.三次多项式在点(xi,yi)处有: pi(xi)pi(xi); (xi1); 2.三次多项式在点(xi1,yi1)处有:pi(xi1)pi3.p(x)在点(xi,yi)处的斜率是连续的(为了使三次多项式具有良好的解析性,加上的条件); 4.p(x)在点(xi,yi)处的曲率是连续的; 对于第一个和最后一个多项式,人为地规定如下条件: (x) (x)p ①.p12(x)p1(x) ②.pnn 上述两个条件称为非结点(not-a-knot)条件。综合上述内容,可知对数据拟合的三次样条函数 13 Matlab的应用 p(x)是一个分段的三次多项式: x1xx2p1(x)x2xx3p(x) p(x)2,其中每段pi(x)都是三次多项式。 xnxxn1pn(x) 该命令用三次样条插值计算出由向量x与y确定的一元函数y=f(x)在点xx处的值。若参量y是一矩阵,则以y的每一列和x配对,再分别计算由它们确定的函数在点xx处的值。则yy是一阶数为length(xx)*size(y,2)的矩阵。 pp = spline(x,y) %返回由向量x与y确定的分段样条多项式的系数矩阵pp,它可用于命令ppval、unmkpp的计算。 例2-36 对离散地分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算: >>x = [0 2 4 5 8 12 12.8 17.2 19.9 20]; y = exp(x).*sin(x); >>xx = 0:.25:20; >>yy = spline(x,y,xx); >>plot(x,y,'o',xx,yy) 插值图形结果为图3-5。 图3-5 三次样条插值 命令4 interpn 功能 n维数据插值(查表) 格式 VI = interpn(X1,X2,,„,Xn,V,Y1,Y2,„,Yn) %返回由参量X1,X2,…,Xn,V确定的n元函数V=V(X1,X2,…,Xn)在点(Y1,Y2,…,Yn)处的插值。参量Y1,Y2,…,Yn是同型的矩阵或向量。若Y1,Y2,…,Yn是向量,则可以是不同长度,不同方向(行或列)的向量。它们将通过命令ndgrid生成同型的矩阵,再作计算。若点(Y1,Y2,…,Yn)中有位于点(X1,X2,…,Xn)之外的点,则相应地返回特殊变量NaN。 VI = interpn(V,Y1,Y2,„,Yn) %缺省地,X1=1:size(V,1),X2=1:size(V,2),…,Xn=1:size(V,n),再按上面的情形计算。 VI = interpn(V,ntimes) %作ntimes次递归计算,在V的每两个元素之间插入它们的n维插值。这样,V的阶数将不断增加。interpn(V)等价于interpn(V,1)。 VI = interpn(„,method) %用指定的算法method计算: ‘linear’:线性插值(缺省算法); ‘cubic’:三次插值; ‘spline’:三次样条插值法; 14 Matlab的应用 ‘nearest’:最邻近插值算法。 第4章 绘图与图形处理 人们很难从一大堆原始的数据中发现它们的含义,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB可以表达出数据的二维,三维,甚至四维的图形。通过图形的线型,立面,色彩,光线,视角等属性的控制,可把数据的内在特征表现得淋漓尽致。下面我们分别介绍图形的命令。 4.1 二维图形 4.1.1 基本平面图形命令 命令1 plot 功能 线性二维图。在线条多于一条时,若用户没有指定使用颜色,则plot循环使用由当前坐标轴颜色顺序属性(current axes ColorOrder property)定义的颜色,以区别不同的线条。在用完上述属性值后,plot又循环使用由坐标轴线型顺序属性(axes LineStyleOrder property)定义的线型,以区别不同的线条。 用法 plot(X,Y) 当X,Y均为实数向量,且为同维向量(可以不是同型向量),X=[x(i)],Y=[y(i)], 则plot(X,Y)先描出点(x(i),y(i)),然后用直线依次相连;若X,Y为复数向量,则不考虑虚数部分。若X,Y均为同维同型实数矩阵,X = [X(i)],Y = [Y(i)],其中X(i),Y(i)为列向量,则plot(X,Y)依次画出plot(X(i),Y(i)),矩阵有几列就有几条线;若X,Y中一个为向量,另一个为矩阵,且向量的维数等于矩阵的行数或者列数,则矩阵按向量的方向分解成几个向量,再与向量配对分别画出,矩阵可分解成几个向量就有几条线;在上述的几种使用形式中,若有复数出现,则复数的虚数部分将不被考虑。 plot(Y) 若Y为实数向量,Y的维数为m,则plot(Y)等价于plot(X,Y),其中x=1:m;若y为实数矩阵,则把y按列的方向分解成几个列向量,而y 的行数为n,则plot(Y)等价于plot(X,Y)其中x=[1;2;…;n];在上述的几种使用形式中,若有复数出现,则复数的虚数部分将不被考虑。 plot(X1,Y1,X2,Y2,…),其中Xi与Yi成对出现,plot(X1,Y1,X2,Y2,…)将分别按顺序取两数据Xi与Yi进行画图。若其中仅仅有Xi或Yi是矩阵,其余的为向量,向量维数与矩阵的维数匹配,则按匹配的方向来分解矩阵,再分别将配对的向量画出。 plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2„) 将按顺序分别画出由三参数定义Xi,Yi,LineSpeci的线条。其中参数LineSpeci指明了线条的类型,标记符号,和画线用的颜色。在plot 命令中我们可以混合使用三参数和二参数的形式: plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,LineSpec3) plot(„,'PropertyName',PropertyValue,„) 对所有的用plot生成的line图形对象中指定的属性进行恰当的设置。 h = plot(„) 返回line图形对象句柄的一列向量,一线条对应一句柄值。 说明 参数LineSpec 功能 定义线的属性。Maltab允许用户对线条定义如下的特性: 1.线型 15 Matlab的应用 表7-1 定义符 线型 - -- : 点线 -. 点划线 实线(缺省值) 划线 2.线条宽度 指定线条的宽度,取值为整数(单位为像素点) 3.颜色 表7-2 定义符 颜色 定义符 颜色 4.标记类型 表7-3 定义符 标记类型 定义符 标记类型 定义符 标记类型 + 加号 d 棱形 s 正方形 o(字母) 小圆圈 ^ 向上三角形 h 正六角星 * 星号 v 向下三角形 P 正五角星 . 实点 > 向右三角形 x 交叉号 < 向左三角形 R(red) 红色 品红 G(green) 绿色 黄色 b(blue) 兰色 k(black) 黑色 c(cyan) 青色 w(white) 白色 M(magenta) y(yellow) 5.标记大小 指定标记符号的大小尺寸,取值为整数(单位为像素) 6.标记面填充颜色 指定用于填充标记符面的颜色。取值在上表。 7.标记周边颜色 指定标记符颜色或者是标记符(小圆圈、正方形、棱形、正五角星、正六角星和四个方向的三角形)周边线条的颜色。取值在上表。 在所有的能产生线条的命令中,参数LineSepc可以定义线条的下面三个属性:线型、标记符号、颜色进行设置。对线条的上述属性的定义可用字符串来定义,如:plot(x,y,'-.or') 结合x和y,画出点划线(-.),在数据点(x,y)处画出小圆圈(o),线和标记都用红色画出。其中定义符(即字符串)中的字母、符号可任意组合。若没有定义符,则画图命令plot自动用缺省值进行画图。若仅仅指定了标记符,而非线型,则plot只在数据点画出标记符。如:plot(x,y,’d’) 例3-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 图形结果为图4-1。 16 Matlab的应用 例3-2 >>plot(t,sin(2*t),'-mo', 'LineWidth',2,'MarkerEdgeColor','k',„ 'MarkerFaceColor',[.49 1 .63],'MarkerSize',12) 图形结果为图4-2。 图4-1 二维曲线图 图4-2 二维图形的绘制 4.1.2 二维图形注释命令 命令1 grid 功能 给二维或三维图形的坐标面增加分隔线。该命令会对当前坐标轴的Xgrid,Ygrid,Zgrid的属性有影响。 用法 grid on 给当前的坐标轴增加分隔线。 grid off 从当前的坐标轴中去掉分隔线。 grid 转换分隔线的显示与否的状态。 grid(axes_handle,on|off) 对指定的坐标轴axes_handle是否显示分隔线。 命令2 gtext 功能 在当前二维图形中用鼠标放置文字。当光标进入图形窗口时,会变成一个大十字,表明系统正等待用户的动作。 用法 gtext('string') 当光标位于一个图形窗口内时,等待用户单击鼠标或键盘。若按下鼠标或键盘,则在光标的位置放置给定的文字“string” h = gtext('string') 当用户在鼠标指定的位置放置文字“string”后,返回一个text图形对象句柄给h。 命令3 legend 功能 在图形上添加图例。该命令对有多种图形对象类型(线条图,条形图,饼形图等)的窗口中显示一个图例。对于每一线条,图例会在用户给定的文字标签旁显示线条的线型,标记符号和颜色等。当所画的是区域(patch或surface对象)时,图例会在文字旁显示表面颜色。Matlab在一个坐标轴中仅仅显示一个图例。图例的位置有几个因素决定,像遮挡的对象等,用户可以用鼠标拖动图例到恰当的位置,双击标签可以进入标签编辑状态。 用法 legend('string1','string2',„) 用指定的文字string在当前坐标轴中对所给数据的每一部分显示一个图例。 legend(h,'string1','string2',„) 用指定的文字string在一个包含于句柄向量h中的图形显示图例。用给定的数据对相应的图形对象加上图例。 legend(string_matrix) 用字符矩阵参量string_matrix的每一行字符串作为标签。 17 Matlab的应用 legend(h,string_matrix) 用字符矩阵参量string_matrix的每一行字符串作为标签给包含于句柄向量h中的相应的图形对象加标签。 legend(axes_handle,„) 给由句柄axes_handle指定的坐标轴显示图例。 legend('off') 从当前的坐标轴,或是由axes-handle指定的坐标轴中除掉图例。 legend(axes_handle,'off') 从由axes_handle指定的坐标轴中除掉图例。 legend_handle = legend 返回当前坐标轴中的图例句柄,若坐标轴中没有图例存在,则返回空向量。 legend 对当前图形中所有的图例进行刷新。 legend(legend_handle) 对由句柄legend_handle指定的图例进行刷新。 legend(„,pos) 在指定的位置pos放置图例见表3-5。 表3-5 Pos取值 图例位置 Pos取值 图例位置 pos=-1 坐标轴之外的右边 pos=2 坐标轴的左上角 pos=0 坐标轴之内,有可能遮挡部分图形 pos=3 在坐标轴的左下角 Pos=1 坐标轴的右上角(缺省位置) pos=4 坐标轴的右下角 h = legend(„) 返回图例的句柄向量。 [legend_handle,object_handles] = legend(„) 返回图例句柄,该句柄为坐标轴定义于图例中的图形对象、line对象、text对象的句柄。这些句柄允许用户对每个对象进行详细的操作。 例3-22 >>x = -pi:pi/20:pi; >>plot(x,(cos(x)).^2,'rd',x,asin(x),'-.b') >>h = legend('cos2x','asin',2); 图4-3 图形结果为图4-3。 命令4 title 功能 给当前轴加上标题。每个axes图形对象可以有一个标题。标题定位于axes的上方正。 用法 title('string') 在当前坐标轴上方正放置字符串string作为标题 title(fname) 先执行能返回字符串的函数fname,然后在当前轴上方正放置返回的字符串作为标题 title(„,'PropertyName',PropertyValue,„) 对由命令title生成的text图形对象的属性进行设置 h = title(„) 返回作为标题的text对象句柄。 命令5 text 功能 在当前轴中创建text对象。函数text是创建text图形句柄的低级函数。可用该函数在图形中指定的位置上显示字符串。 用法 text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string text(x,y,z,'string') 在三维图形空间中的指定位置(x,y,z)上显示字符串string text(x,y,z,’string’.'PropertyName',PropertyValue„) 对引号中的文字string定位于用坐标轴指定的位置,且对指定的属性进行设置。表7-6给出文字属性名、含义及属性值。 18 Matlab的应用 表7-6 属性名 定义字符串 Editing Interpretation String 放置字符串 Extent text对象的范围(位置与大小) 有效值:[left, bottom, width, height] 能否对文字进行编辑 TeX字符是否可用 字符串(包括TeX字符串) 有效值:on、off 缺省值:off 有效值:tex、none 缺省值:tex 有效值:可见字符串 属性说明 属性值 HorizontalAlignment 有效值:left(文本外框左边对齐,缺省对齐方式)、center(文本外框中间对文字水平方向的对齐方式 齐)、right(文本外框右边对齐) 缺省值:left 文字范围的位置 文字对象的方位角度 有效值:[x,y,z]直角坐标系 缺省值:[](空矩阵) 有效值:标量(单位为度) 缺省值:0 有效值:pixels (屏幕上的像素点)、normalized (把屏幕看成一个长、宽为1的矩形)、inches(英寸)、centimeters(厘米)、points (图象点)、data 缺省值:data Position Rotation Units 文字范围与位置的单位 VerticalAlignment 有效值:top (文本外框顶上对齐)、cap(文本字符顶上对齐)、middle(文本文字垂直方向的对齐方式 外框中间对齐)、baseline(文本字符底线齐)、bottom(文本外框底线对齐) 缺省值:middle 有效值:normal(正常字体)、italic(斜体字)、oblique(斜角字) 缺省值:normal 有效值:用户系统支持的字体名或者字符串FixedWidth。 缺省值为 Helvetica 有效值:结合字体单位的数值 缺省值为:10 points 指定文字字体 FontAngle 设置斜体文字模式 FontName 设置文字字体名称 FontSize 文字字体大小 19 Matlab的应用 FontUnits 有效值:points (1点=1/72英寸)、normalized(把父对象坐标轴作为一单位长的一个整体;当改变坐标轴的尺设置属性FontSize的单位 寸时,系统会自动改变字体的大小)、inches (英寸)、Centimeters(厘米)、Pixels(像素) 缺省值:points 设置文字字体的粗细 有效值:light(细字体)、normal(正常字体)、demi(黑体字)、Bold(黑体字) 缺省值:normal 有效值:on、off on:当文本超出坐标轴的矩形时,超出的部分不显示; off:当文本超出坐标轴的矩形时,超出的部分显示。 缺省值:off 有效值:normal、none、 xor、 background 缺省值:normal 有效值:on、off 缺省值:on 有效值:on、off 缺省值:on 有效的颜色值:ColorSpec 有效值:on、callback、off 缺省值:on 有效值:on、off 缺省值:on FontWeight 控制文字外观 Clipping 设置坐标轴中矩形的剪辑模式 EraseMode 设置显示与擦除文字的模式。这些模式对生成动画系列与改进文字的显示效果很有好处。 设置选中文字是否突出显示 设置文字是否可见 设置文字颜色 设置文字对象句柄对其他函数是否可见 设置文字对象能否成为当前对象(见图形CurrentObject属性) 文字对象的子对象(文字对象没有子对象) 文字对象的父对象(通常为axes对象) 设置文字是否显示出“选中”状态 SelectionHighlight Visible Color 控制对文字对象的访问 HandleVisibility HitTest 文字对象的一般信息 Children Parent Seleted 有效值:[](即空矩阵) 有效值:axes的句柄 有效值:on、off 缺省值:off 20 Matlab的应用 Tag Type UserData 控制回调例行执行程序 BusyAction 设置用户指定的标签 设置图形对象的类型(只读类型) 设置用户指定数据 有效值:任何字符串 缺省值:’’(即空字符串) 有效值:字符串’text’ 有效值:任何矩阵 缺省值:[](即空矩阵) 有效值:cancel、queue 缺省值:queue 有效值:字符串 缺省值:' '(空字符串) 有效值:字符串 缺省值:' '(空字符串) 设置如何处理对文字回调过程中断的句柄 设置当鼠标在文字上单击时,程序做出的反应(即执行回调程序) 设置当文字被创建时,程序做出的反应(即执行的回调程序) 设置当文字被删除(通过关闭或删除操作)时,程序做出的反应(即执行的回调程序) 设置回调过程是否可中断 ButtonDownFcn CreateFcn DeleteFcn 有效值:字符串 缺省值:' '(空字符串) 有效值:on、off 缺省值:on(能中断) Interruptible UIContextMenu 设置与文字相关的菜单项 有效值:用户相关菜单句柄 h = text(„) 返回文字对象句柄的列向量,每一对象对应一句柄。该命令的其他使用形式中,将随意地返回这个输出参量。 例3-23 >>plot(0:pi/20:2*pi,sin(0:pi/20:2*pi)) >>text(pi,0,’Zeros Point’) >>grid on 图形结果为图4-4。 命令6 xlabel、ylabel 图4-4 功能 给x、y轴贴上标签 用法 xlabel('string')、 ylabel(‘string’) 给当前轴对象中的x、y轴贴标签;注意:若再次执行xlabel或ylabel命令,则新的标签会覆盖旧的标签。 xlabel(fname)、ylabel(fname) 先执行函数fname,其返回一个字符串,然后在x、y轴旁边显示出来; xlabel(„,'PropertyName',PropertyValue,„)、ylabel(„,’PropertyName’, PropertyValue)指定轴对象中的要控制的属性名和要改变的属性值,这些都是由xlabel或ylabel创建的text图形对象的成对值; h = xlabel(„)、h = ylabel(„)返回作为标签的text对象的句柄。 21 Matlab的应用 第5章 Matlab流程控制 5.1 分支结构if,else,elseif,end 单分支结构: y=0; If y>0 y=y+1; End 也可写成一行形式: if y>0,y=y+1;end 双分支结构: Y=0; If y>=0 Y=y+1; Else Y=y-1; end y=10;x=0; If y>0 x=x+1; Elseif x>10 y=y-100; end 5.2循环结构for/end 和while/end 5.2.1 for循环结构(for-loop),其基本形式为: for 变量= 矩阵 运算式; end 其中变数的值会被依次设定为矩阵的每一行,来执行介於for和end之间的运算式。因 此,若无意外情况,运算式执行的次数会等於矩阵的行数。 Y=0; Y=0; For x=[1,0.5,-1,2] t=0;x=[-10,20,13,-4]; For I=1:100 For x=10:0.5:21 Y=x^2+x-1 For I=1:length(x) Y=y+i Y=y+1; End t=t+x(i); End End end 5.2.2 for循环结构的嵌套,其基本形式为: for 变量= 矩阵; 计算一个二维矩阵的所有元素之和: for 变量= 矩阵; a=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]; 运算式1; t=0; end For i=1:4 … For j=1:4 运算式n; t=t+a(i,j); end End End 22 Matlab的应用 5.2.3 while循环结构,其基本形式为: while 条件式 运算式; end 也就是说,只要条件示成立,运算式就会一再被执行。例如先前产生调和数列的例子,我们可用while循环结构改写如下: y=0; y=0; y=0; y=0; i=1 For i=1:100 For x=10:0.5:21 x=10; while i<=100 y=y+i; y=y+1; While x<=21 y=y+i; End End y=y+1; i=i+1; x=x+0.5; End End For x=[1,0.5,-1,2] x=[1,0.5,-1,2]; Y=x^2+x-1 while i<=4 End y=x(i)^2+x(i)-1 i=i+1; end t=0;x=[-10,20,13,-4]; t=0;x=[-10,20,13,-4];i=0; For I=1:length(x) while i<=length(x) t=t+x(i); t=t+x(i); end i=i+1; end 第6章 建立m文件 若要一次执行大量的MATLAB命令,可将这些命令存放於一个副档名为m的档案,并在MATLAB提示号下键入此档案的主档名即可。此种包含MATLAB命令的档案都以m为副档名,因此通称M档案(M-files)。 6.1 建立一个简单的m文件 %一个简单的m文件hello.m Clear all X=1; Y=1 X+y 23 Matlab的应用 严格来说,M档案可再细分为命令集(Scripts)及函数(Functions)。前述的test.m即为命令集,其效用和将命令逐一输入完全一样,因此若在命令集可以直接使用工作空间的变数,而且在命令集中设定的变数,也都在工作空间中看得到。函数则需要用到输入引数(Inputarguments)和输出引数(Output arguments)来传递资讯,这就像是C语言的函数,或是FORTRAN语言的副程序(Subroutines)。 6.2 建立一个表示函数的m文件 若要计算一个正整数的阶乘(Factorial),我们可以写一个如下的MATLAB函数并将之存档於fact.m: function output = fact(n) % FACT Calculate factorial of a given positive integer. output = 1; for i = 1:n, output = output*i; end 其中fact是函数名,n是输入变量,output是输出变量,而i则是此函数用到的暂时变量。要使用此函数,直接键入函数名及适当输入变量值即可: y = fact(5) y = 120 (当然,在执行fact之前,你必须先进入fact.m所在的目录。)在执行fact(5)时,MATLAB会跳入一个下层的暂时工作空间(Temperary workspace),将变数n的值设定为5,然後进行各项函数的内部运算,所有内部运算所产生的变数(包含输入引数n、暂时变数i,以及输出引数 output)都存在此暂时工作空间中。运算完毕後,MATLAB会将最後输出引数output的值设定给上层的变数y,并将清除此暂时工作空间及其所含的所有变数。换句话说,在呼叫函数时,你只能经由输入引数来控制函数的输入,经由输出引数来得到函数的输出,但所有的暂时变数都会随着函数的结束而消失,你并无法得到它们的值。小提示:有关阶乘函数前面(及後面)用到的阶乘函数只是纯粹用来说明MATLAB的函数观念。若实际要计算一个正整数n的阶乘(即n!)时,可直接写成prod(1:n),或是直接呼叫gamma函数:gamma(n-1)。 MATLAB的函数也可以是递式的(Recursive),也就是说,一个函数可以呼叫它本身。举例来说,n! =n*(n-1)!,因此前面的阶乘函数可以改成递式的写法: function output = fact(n) % FACT Calculate factorial of a given positive integerrecursively. if n = 1, % Terminating condition output = 1; return; end output = n*fact(n-1); 24 Matlab的应用 在写一个递函数时,一定要包含结束条件(Terminating condition),否则此函数将会一再呼叫自己,永远不会停止,直到电脑的记忆体被耗尽为止。以上例而言,n==1即满足结束条件,此时我们直接将output设为1,而不再呼叫此函数本身。 25 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务