matlab讲义第四章
第四章 MATLAB课件(2)

部函数(Build—in Functions)创建。
figure创建图形窗口
调用格式: h=figure(n) n为窗口序号
例:创建1号窗口,返回句柄。 h=figure(1) h= 1 返回值为窗口号数
axes 创建轴对象
h=axes( ‘position’, [left, bottom, width, height] ) 定义轴对象的位置与大小 line 创建线对象 h=line( x, y, z) 如果不指定z, 则在x, y平面上 划线。
界面控制(Uicontrol):图形窗口的子代,独立于轴。创建用户界面 控制对象,使得用户可采用鼠标在图形上作功能选择,并返回句柄。 界面菜单(Uimenu): 图形窗口的子代,独立于轴。创建用户界面菜 单对象,允许用户在图形窗口的上方建立菜单。
窗口对象
1 0.8 0.6 0.4 0.2 0
轴对象
>>lin2=line(sin(20*x),cos(20*x),’LineStyle’,’:’,’Color’,’b’) %用0.5号细虚蓝线画弦。此线句柄存放于lin2。 fig = 1 ax = 0.0013 lin1 = 157.0011 lin2 = 157.0012
例:创建三维网线图时设置对象品性 >> fig_2=figure; >> ax=axes('Box','on','View',[-37.5,30],'Nextplot','replace'); >> [x,y,z]=peaks(25); >> surfh=surface(x,y,z,'Facecolor','w','LineWidth',2,'Edgecolor','k'); 说明:由于在设置中 “Facecolor”设为“w”,这实 际上是高层指令mesh所画 的网线图。此图的网线比 较租。
MATLAB讲稿——第四章.ppt

P [an an1 a1 a0 ]
二、 多项式行向量的生成方法 1、直接输入法
将多项式的各项系数依降幂次序排放在行 向量的元素位置上。
缺项系数输为0。
2、利用指令生成法 指令 P=poly(AR)
说明:(1)若AR是方阵,则多项式P就是该方阵的 特征多项式;
(2)若AR是行向量,即
AR [ar1 ar2
再例:
>> R=[-0.5 -0.3+0.4i -0.3-0.4i] %根向量
R=
-0.5000
-0.3000 + 0.4000i -0.3000 - 0.4000i
>> P=poly(R) % R的特征多项式
P=
1.0000 1.1000 0.5500 0.1250
>> PPR=poly2str(P,'x') %用习惯的方式显示多项式
例:
>> A=[1 4 7;3 11 6;5 32 68]; >> PA=poly(A) %A的特征多项式
PA =
1.0000 -80.0000 588.0000 -147.0000 >> PPA=poly2str(PA,'s') %用习惯的方式显示多项式
PPA =
s^3 - 80 s^2 + 588 s - 147
PPR =
x^3 + 1.1 x^2 + 0.55 x + 0.125
4.2 多项式运算函数及调用格式
举例
(s2 2)(s 4)(s 1)
例:求
s3 s 1
的“商”和“余”多项式。
>> p1=conv([1 0 2],conv([1 4],[1 1])); %计算分子多
MATLAB-第四章

3 变量的作用域
tips:尽量不使用全局变量! tips
第四章 MATLAB的编程基础
三、函数相关知识
4 函数的参数传递
按值传递机制
第四章 MATLAB的编程基础
三、函数相关知识
4 函数的参数传递
按值传递机制:当一个函数调用发生时, 按值传递机制:当一个函数调用发生时, MATLAB 将会复制实参生成一个副本,然后 将会复制实参生成一个副本, 把它们传递给函数。这次复制是非常重要的, 把它们传递给函数。这次复制是非常重要的, 因为它意味着虽然函数修改了输入参数, 因为它意味着虽然函数修改了输入参数,但 它并没有影响到调用者的原值。 它并没有影响到调用者的原值。 防止了因函数修改变量而导致的严重错误。 防止了因函数修改变量而导致的严重错误。
while 表达式 循环体 end
例:使用while循环计算1+2+3+…+100 使用while循环计算1+2+3+…+100 while循环计算
第四章 MATLAB的编程基础
一、MATLAB的三种控制结构
clear sum=0; i=0; while i<100 i=i+1; sum=sum+i; end sum
第四章 MATLAB的编程基础
三、函数相关知识
4 函数的参数传递 sample.m function out = sample(a, b)
fprintf('In Sample,before compute: a = %f, b = %f \n',a,b);
第四章 MATLAB的编程基础
二、其他流程控制语句 1 . break 和 continue语句 * break语句用于立即跳出含该 语句用于立即跳出含该break语 语句用于立即跳出含该 语 句的循环语句。 句的循环语句。 * continue语句用于提前结束当前循环。 语句用于提前结束当前循环。 语句用于提前结束当前循环
matlab第四章课件

4.1.1 M文件的分类
M文件是由若干 Matlab 命令组合在一起构成的,它可 以完成某些操作,也可以实现某种算法
事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言编写的 M文件 用户也可以结合自己的工作需要,开发自己的程序或工具箱
M文件根据调用方式的不同可以分为两类: Script file:命令文件/脚本文件 Function file:函数文件
例2 输入x,y的值,并将它们的值互换后输出(swap.m)。 x=input('Input x please.'); y=input('Input y please.'); z=x; x=y; y=z; disp(x); disp(y); 例3 求一元二次方程ax2 +bx+c=0的根(root.m)。 a=input('a=?'); b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]; disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);
例如:
s=0; a=[12 13 14;15 16 17;18 19 20;21 22 23] for k=a s=s+k; end disp(s); 该程序的功能是求矩阵各行元素之和,执行结果是: 39 48 57 66
while语句
while expr (条件) statement(循环体语句) end 若expr成立,则执行循环体的内容,执行后 再判断条件是否为真,如果不成立则跳出循环体。
matlab第四讲PPT课件

如需在同一窗口中布置独立的子图,则可在plot命令前加 上subplot命令将一个窗口划分为多个区域,每个区域一幅 子图。
语法:
subplot(m,n,k) 前图
%使m*n幅子图中的第k幅成为当
子图排列次序:先向右后向下
例:画4个子图
>>x=0:0.1:2*pi subplot(2,2,1) %分割为2*2个子图,左上方为当前图
(2)步骤2一般在图形较多的情况下,需要 指定图形窗口、子图时使用。
(3)除步骤1、2、3的其他步骤,可根据需 要改变前后次序。
4.1.3 多个图形绘制的方法
指定图形窗口
前面介绍的plot命令,绘制图形都是在默认 的Figure No.1窗口中,重复使用plot命令时, 后绘制的图形就将前面绘制的图形覆盖了。
plot(x,sin(x)) subplot(2,2,2) %右上方为当前图
plot(x,cos(x))
subplot(2,2,3) plot(x,sin(3*x))
subplot(224) 略逗号
plot(x,cos(3*x))
%左下方为当前图 %右下方为当前图,省
绘图后使用clf命令清除图形窗。 例:>>clf
(2)如果x是矩阵,而y是向量,则y的长度必须等于x的行 数或列数,绘制的方法与前述方法相似。
(3)如果x和y都是矩阵,则大小必须相同,将矩阵x的每列 和y的每列画一条曲线。
例:>>x1=[1 2 3]
y1=[1 2 3;4 5 6]
plot(x1,y1)
%每行1条曲线,第一条包含
(1,1)(2,2)(3,3),第二条包含(1,4)(2,5)(3,6)
用plot(x1,y1,x2,y2,…)命令绘制多条曲线
matlab第四章

2、>> t1=0:0.1:4*pi;>> t2=pi:0.1:3*pi;>> plotyy(t1,sin(t1),t2,2*cos(2*t2))>>4、>> t=0:0.1:2;>> y1=sin(2*pi*t)y1 =Columns 1 through 90 0.5878 0.9511 0.9511 0.5878 0.0000 -0.5878 -0.9511 -0.9511Columns 10 through 18-0.5878 -0.0000 0.5878 0.9511 0.9511 0.5878 0.0000 -0.5878Columns 19 through 21-0.9511 -0.5878 -0.0000>> y2=cos(2*pi*t)y2 =Columns 1 through 91.0000 0.8090 0.3090 -0.3090 -0.8090 -1.0000 -0.8090 -0.3090 0.3090Columns 10 through 180.8090 1.0000 0.8090 0.3090 -0.3090 -0.8090 -1.0000 -0.8090 -0.3090Columns 19 through 210.3090 0.8090 1.0000>> y3=exp(-4*t)y3 =Columns 1 through 91.0000 0.6703 0.4493 0.3012 0.2019 0.1353 0.0907 0.0608 0.0408Columns 10 through 180.0273 0.0183 0.0123 0.0082 0.0055 0.0037 0.0025 0.0017 0.0011Columns 19 through 210.0007 0.0005 0.0003>> plot(t,y1,'b-')>> hold on>> plot(t,y2,'g:')>> plot(t,y1,'b-');>> plot(t,y3,'r')>> title('正弦、余弦和指数曲线')>> xlable('t(0-2)')??? Undefined command/function 'xlable'.>> xlabel('t(0-2)')>> text(1.2,y3,'指数函数')??? Error using ==> textX and Y must be the same length.>> text(1.2,exp(-4*1.2),'指数函数')>> text(0,0,'幅值')>> text(1.5,sin(2*pi*1.5),'正弦函数') >> text(0.8,cos(2*pi*0.8),'余弦函数')5、>> x=-2:0.1:2x =Columns 1 through 9-2.0000 -1.9000 -1.8000 -1.7000 -1.6000 -1.5000 -1.4000 -1.3000 -1.2000Columns 10 through 18-1.1000 -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 -0.3000Columns 19 through 27-0.2000 -0.1000 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000Columns 28 through 360.7000 0.8000 0.9000 1.0000 1.1000 1.2000 1.3000 1.40001.5000Columns 37 through 411.6000 1.7000 1.8000 1.90002.0000>> y=-2:0.1:2y =Columns 1 through 9-2.0000 -1.9000 -1.8000 -1.7000 -1.6000 -1.5000 -1.4000 -1.3000 -1.2000Columns 10 through 18-1.1000 -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 -0.3000Columns 19 through 27-0.2000 -0.1000 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000Columns 28 through 360.7000 0.8000 0.9000 1.0000 1.1000 1.2000 1.3000 1.40001.5000Columns 37 through 411.6000 1.7000 1.8000 1.90002.0000>> [X,Y]=meshgrid(x,y)>> Z=X*exp(-X^2-y^2)??? Error using ==> mpowerMatrix must be square.>> Z=X*exp(-X^2-Y^2)Z =1.0e-014 *Columns 1 through 90.9104 -0.2220 -0.4885 -0.1332 0.0888 -0.7994 -0.0888 -0.2665 0.0888Columns 10 through 180.3553 -0.2220 0.0444 -0.4885 -0.0888 0.4441 0.0444 -0.7994 -0.1332Columns 19 through 27-0.7994 0.3553 0.3553 0.3553 0.4441 -0.9326 -0.2665 -0.0888 -0.7994Columns 28 through 36-0.0444 0.0888 -0.0888 -0.3553 0.3553 0.0444 -0.7994 -0.0888 -0.2665Columns 37 through 41-0.4885 -0.9770 0.1776 -0.3553 0.7105>> plot3(X,Y,Z)>> surf(X,Y,Z)>> X(10:20,10:20)=nanX =Columns 1 through 9-2.0000 -1.9000 -1.8000 -1.7000 -1.6000 -1.5000 -1.4000 -1.3000 -1.2000Columns 10 through 18-1.1000 -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 -0.3000NaN NaN NaN NaN NaN NaN NaN NaN NaNNaN NaN NaN NaN NaN NaN NaN NaN NaNNaN NaN NaN NaN NaN NaN NaN NaN NaNNaN NaN NaN NaN NaN NaN NaN NaN NaN-1.1000 -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 -0.3000Columns 19 through 27-0.2000 -0.1000 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000Columns 28 through 360.7000 0.8000 0.9000 1.0000 1.1000 1.2000 1.3000 1.40001.5000Columns 37 through 411.6000 1.7000 1.8000 1.90002.0000>> surf(X,Y,Z)10、>> y=[60 90 110 120 100 95]y =60 90 110 120 100 95 >> x=1:6x =1 2 3 4 5 6 >> bar(x,y)> pie(y,explode,{'一月','二月','三月','四月','五月','六月'}) ??? Undefined function or variable 'explode'.>> explode=[0 0 0 0 0 1]explode =0 0 0 0 0 1>> pie(y,explode,{'一月','二月','三月','四月','五月','六月'})>> y2=[50 80 90 100 100 90]y2 =50 80 90 100 100 90 >> y5=[y;y2]y5 =60 90 110 120 100 9550 80 90 100 100 90 >> bar3(y5)13、。
Matlab讲义-第四章Matlab语言程序设计基础2-10

函数m文件保存的文件名必须与其函数名相同;
输入参数用小括号括起来,输出参数则用方括号括 起来,如果参数多于1个,用逗号隔开;当函数无输 出参数时,输出参数项空缺或者用空的中括号表示。 必须由其它m文件来调用
4.3.2ቤተ መጻሕፍቲ ባይዱ数文件
function [area, volume]=area_volume(r)
if data(k)==0 BPSKCode(k)=1; else BPSKCode(k)=-1; end end
【练习】按要求绘制如下曲线并加标记。
data=[1 0 1];
二进制传输码元 1
横坐标:t
0.8
0.6
起始值:步长:终止值 0.4
0
dt length(data) 0.2
dt=0.01;
end
if 条件式1 语句组1;
else 语句组3;
end
% 注意:elseif中间无空格
if 条件式1 语句组1 ;
elseif 条件式2 语句组2
else 语句组3;
end
执行过程:条件式的结果为真执行相应的语句组
1或全1
注意: 条件式的结果为真执行相应的语句组
结果?
全1矩阵
非全1矩阵
clc,clear x=-3:0; if x>=-3 & x<=0
脚本是对工作空间中的现有数据进行操作,或 创建一个新数据,而且脚本所创建的任一变量在 脚本运行完都保留在工作空间中以便进一步使用。
clc,clear S=0; for x=2:2:100
S=S+x; end S
脚本文件举例
【例】:Lx1.m-键盘提示输入半径,计算一个球 的表面积和体积
MATLAB课件第四章

x
程序流控制命令
Input命令
input命令提示用户从键盘输入数值,字符串或表达 式,并接受其输入。
常用格式:a=input(‘please input a number:’)
disp命令
disp命令将表达式执行结果显示在屏幕上 常用格式: disp(x)
例:编写函数文件mmin,使该文件输出两个变量,第一 一个变量返回矩阵中的单个最小值。第二个输出参量, 返回单个最小值的行和列的下标。
function [m , i]=mmin(a) % MMIN Matrix minimum value. % MMIN(A) returns the minimum value in the matrix A % [M,I] = MMIN(A) in addition returns the indices of % the minimum value in I = [row col]. % Copyright (c) 1996 by Prentice Hall,Inc. if nargout==2, % return indices [m , i]=min(a) ; [m , ic]=min(m) ; i=[i(ic) ic] ; else m=min(min(a)); end
linspace函数
function y = linspace(d1, d2, n) %LINSPACE Linearly spaced vector. % LINSPACE(X1, X2) generates a row vector of
100 linearly % equally spaced points between X1 and X2. if nargin == 2 n = 100; end y = [d1+(0:n-2)*(d2-d1)/(floor(n)-1) d2];
Matlab第四章详细讲解

v11 v21 V = v12 v22
λ 1 v11 A .v1 = λ 1 v1 = λ 1 v12
λ 2 v 21 A.v 2 = λ 2 v 2 = λ 2 v 22
A .v1
A .v 2
a11 a12 v11 v21 a11v11 + a12v12 a11v21 + a12v22 A*V = v v = a v + a v a v + a v a21 a22 12 22 21 11 22 12 21 21 22 22
2 − at
f ( t ) = (sin
t )e
−b=fzero(fun ,x0 ,option,p1,p2)
%(1)使用字符串表示被处理函数 P1=0.1;P2=0.5;
%按泛函指令要求,这里参数必须用P1,P2表示
y_C='sin(x).^2.*exp(-P1*x)-P2*abs(x)';
1、求函数的零点 (1)字符串表达式 q=quad(fun,a,b) 2、数值积分 (2)内联函数 3、解微分方程 q=quadl(fun,a,b) (3)“M函数文件”的函数句柄
[t,y]=ode45(fun ,tspan,y0)
4.3.1 求函数的零点
例:求以下函数的零点。
零点初始 猜测值
向函数fun传 递的参数
4.4 多项式和卷积
4、多项式的根
功能:计算多 项式P的根。
R=roots(P)
p1 x + p2 x
n
n −1
+ ... + pn x + p
-27 ];
MATLAB第四章(刘卫国编)

25
例4.9 求定积分。 以梯形法为例,程序如下: a=0;b=3*pi; n=1000; h=(b-a)/n; x=a; s=0; f0=exp(-0.5*x)*sin(x+pi/6); for i=1:n x=x+h; f1=exp(-0.5*x)*sin(x+pi/6); s=s+(f0+f1)*h/2; f0=f1; end s
例4.13 求[100,200]之间第一个能被21整除 的整数。 程序如下: for n=100:200 if rem(n,21)~=0 continue end break end n
2
例4.1 建立一个命令文件将变量a,b的值互换,然后 运行该命令文件。 程序1: 首先建立命令文件并以文件名exch.m存盘: clear; a=1:10; b=[11,12,13,14;15,16,17,18]; c=a;a=b;b=c; a b 然后在MATLAB的命令窗口中输入exch,将会执行 该命令文件。
16
当表达式的值等于表达式1的值时,执行 语句组1, 当表达式的值等于表达式2的值时,执行 语句组2,…, 当表达式的值等于表达式m的值时,执 行语句组m, 当表达式的值不等于case所列的表达式 的值时,执行语句组n。 当任意一个分支的语句执行完后,直接 执行switch语句的下一句。
17
例4.5 某商场对顾客所购买的商品实行打折 销售,标准如下(商品价格用price来表示): price<200 没有折扣 200≤price<500 3%折扣 500≤price<1000 5%折扣 1000≤price<2500 8%折扣 2500≤price<5000 10%折扣 5000≤price 14%折扣 输入所售商品的价格,求其实际销售价格。
MATLAB讲义第4讲

2013-9-17
Matlab Language
7
例3.3 绘制复杂曲线
用图形表示连续调制波形 及其包络线。 t=(0:pi/100:pi)’; %长度为101的时间采样列向量 y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 y2=sin(t).*sin(9*t); %长度为101的调制波列向量 t3=pi*(0:9)/9;
t=(0:pi/100:pi)'; %长度为101的时间采样列向量 y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 y2=sin(t).*sin(9*t); %长度为101的调制波列向量 t3=pi*(0:9)/9; y3=sin(t3).*sin(9*t3); plot(t,y1,'r:’) hold on plot(t,y2,'b‘) plot(t3,y3,'bo') axis([0,pi,-1,1]) %控制轴的范围 hold off
2013-9-17
(2)plot(x, y)
(3)plot(x1, y1, x2, y2, …)
Matlab Language
5
例3.1使用直角坐标系
0.5 x sin(2 x) 在[0,2π]区间内,绘制曲线 y 2e
x = 0:pi/100:2*pi; y = 2*exp(-0.5*x).*sin(2*pi*x); plot(x,y)
2013-9-17
Matlab Language
22
例3.11绘制y=1-exp(-0.3*t).*cos(0.7*t)
t=6*pi*(0:100)/100; y=1-exp(-0.3*t).*cos(0.7*t); tt=t(find(abs(y-1)>0.05)); ts=max(tt); plot(t,y,'r-'); grid on; axis([0,6*pi,0.6,max(y)]); title('y=1-exp(-\alpha*t)*cos(\omega*t)'); hold on; plot(ts,0.95,'bo'); hold off; set(gca,'xtick',[2*pi,4*pi,6*pi],'ytick',[0.95,1,1.05,max(y)]); grid on;
Matlab基础第四章

4.1二维曲线的绘制
4. plot(x,y)绘制混合式曲线
当plot(x,y)命令中的参数x和y是向量或矩阵时,分别有以下几 种情况:
(1)如果x是向量,而y是矩阵,则x的长度与矩阵y的
行数或列数必须相等,如果x的长度与y的行数相等,则向量x与 矩阵y的每列向量对应画一条曲线;如果x的长度与y的列数相等 ,向量x与y的每行向量画一条曲线,如果y是方阵,则x和y的行 数和列数都相等,将向量x与矩阵y的每列向量画一条曲线;
【例】 x=0:0.1:20*pi; plot3(x,sin(x),cos(x)) %按系统默认设置绘图
4.3 对数坐标和极坐标图
1. 对数坐标图形 语法:semilogx(x,y,'参数') %绘制x为对数坐标的曲线 semilogy(x,y,‘参数’) %绘制y为对数坐标的曲线 loglog(x,y,'参数') %绘制x、y都为对数坐标的曲线
2 3 4
5
图形注释: 图名、坐标名、图例、文字说明
4.1.3 多个图形绘制的方法
1. 指定图形窗口 figure(n)
%产生新图形窗口 说明:如果该窗口不存在,则产生新图形窗口并设置为当前图 形窗口,该窗口名为“Figure No.n”,而不关闭其它窗口。
2. 同一窗口多个子图 subplot(m,n,k)
: -. --
语法: plot(x,y,’s’)
说明:s为类型说明字符串参数;s字符串可以是线段类型、颜色和数据点形 三种类型的符号之数据点形
【例】用不同线段类型、颜色和数据 点形画出sinx和cosx曲线,如图所示。 x=0:0.1:2*pi; plot(x,sin(x),'r-.') %用红色点划线画出曲线 hold on plot(x,cos(x),'b:o') %用蓝色圆圈画出曲线,用点线连接
MATLAB讲义第四章汇总

矩阵转置 符号“’”实现矩阵的转置操作。对于实数矩阵,“’” 表示矩阵转置,对于复数矩阵,“’”实现共轭转置。对 于复数矩阵,如果想要实现非共轭转置,可以使用符号 “.’”。 矩阵乘方
第6页
2019年1月16日
MATLAB 2006a 简明教程
清华大学出版社
特殊矩阵生成 (1/2)
函数 [] zeros eye ones 功能 生成空白矩阵 生成全0矩阵 生成单位矩阵 生成全1矩阵
第15页
2019年1月16日
MATLAB 2006a 简明教程
清华大学出版社
LU 分解
矩阵的 LU 分解将一个方阵表示为一个下三 角置换矩阵和一个上三角矩阵乘积的形式。 如,其中为下三角置换矩阵,为上三角矩 阵。MATLAB 中 LU 分解可以通过函数 lu 实现。通过矩阵的 LU 分解,可以实现线性 方程组的快速求解。 另外矩阵的 LU 分解可用于矩阵快速求逆和 求行列式,有 det(A) = det(L)*det(U) 和 inv(A) = inv(U)*inv(L)。
2019年1月16日
第18页
MATLAB 2006a 简明教程
清华大学出版社
矩阵指数函数和幂函数
矩阵的正整数幂
如果 A 为方阵,p 为正整数,则 A^p 表示 p 个 A 相乘。
矩阵的负数幂与分数幂
如果 A 为非奇异方阵,则 A^(-p) 等价于 inv(A)^p。
MATLAB 中,允许对矩阵进行分数幂运算,运算结果 依赖于矩阵特征值的分布情况。 矩阵指数运算
MATLAB MATLAB 2006a 2006a 简明教程 简明教程
清华大学出版社 清华大学出版社
第4章 MATLAB 的数学运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图4.11 函数PEAKS的带洞孔曲面图
MATLAB的surf也有两个同种函数:surfc,它画出具有 基本等值线的曲面图。surfl,它画出一个有亮度的曲面 图。例如:
» [X,Y,Z]=peaks(30); » surfc(X,Y,Z) % surf plot with contour plot » grid,xlabel('x-axis'),ylabel('yaxis'),zlabel('z-axis') » title('SURFC of PEAKS')
图4.3 正弦曲线图
利用在x-y平面的矩形网格点上的z轴坐标值,MATLAB 定义了一个网格曲面。MATLAB通过将邻接的点用直线连接起 来形成网状曲面 ,其结果好象在数据点有结点的鱼网。例 如,用MATLAB的函数peaks可以画一个简单的曲面。 » [X,Y,Z]=peaks(30); » mesh(X,Y,Z) » grid on » xlabel('x-axis'),ylabel('y-axis'),zlabel('zaxis') » title('MESH of PEAKS')
图4.4 函数PEAKS的网格图
在显示器上要注意到线的颜色与网格的高度有关。一般情况下, 函数mesh有可选的参量来控制绘图中所用的颜色。关于MATLAB如何 使用、改变颜色在下面讨论。在任何情况下,由于颜色用于增加图 形有效的第四维,这样使用的颜色被称做伪彩色。 上图所示,网格线条之间的区域是不透明的。MATLAB命令 hidden控制网格图的这个特性。例如,用MATLAB的函数sphere产生 两个球面如下: » [X,Y,Z]=sphere(12); » subplot(1,2,1) » mesh(X,Y,Z),title('Opaque') » hidden on; » axis off; » subplot(1,2,2),title('Transparent'); » mesh(X,Y,Z); » hidden off; » axis off;
图4.17 函数PEAKS的伪彩色图
与surf函数相似,可以使用函数shading进行颜色内插。
» [X,Y,Z]=peaks(30); » pcolor(X,Y,Z); » shading interp » hold on » contour(X,Y,Z,20,'k') % add 20 contour lines in black » xlabel('X-axis'),ylabel('Y-axis') » title('PCOLOR and CONTOUR of PEAKS') » hold off
第四章 三维绘图
4.1 基本的三维绘图命令 4.2 三维图形显示的基本技巧 4.3 颜色的使用
4.1 基本的三维绘图命令
MATLAB提供了各种各样的显示三维图形函数。 plot3命令将绘制二维图形的函数plot的特性扩展到三 维空间。函数格式除了包括第三维的信息(Z方向)之外, 与二维函数plot相同。 plot3一般语法调用格式是: plot3(x1,y1,z1,S1,x2,y2,z2,S2,…) xn,yn和zn是向量或矩阵,Sn是可选的字符串,用来指定 颜色、标记符号和(或)线形。 plot3可用来画一个单变量的三维函数。
如下为一个三维螺旋线例子: » t=0:pi/50:10*pi; » plot3(sin(t),cos(t),t) » title('Helix'),xlabel('sint(t)'),ylabel('cos(t)'),zlabel('t') » text(0,0,0,'Origin') » grid on » v = axis v = -1 1 -1 1 0 40
图4.6 meshc函数绘制的网 格图和基本等值线图
图4.7
meshz函数绘制的
带零平面的网格图
函数surf是重要的绘制曲面图函数,除了各线条之间 的空档(称作补片)用颜Байду номын сангаас填充以外,和网格图看起来是 一样的。函数surf使用和函数mesh相同的调用语法。
» [X,Y,Z]=peaks(30); » surf(X,Y,Z) » grid,xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis') » title('SURF of PEAKS')
4.13 函数PEAKS的带光线照明曲面图
MATLAB提供了另一种基本的三维图形,即三维等值 线图。通过函数contour3来绘制。
» [x,y,z]=peaks(30); » contour3(X,Y,Z,16) % draw sixteen contour lines » grid,xlabel('x-axis'),ylabel('yaxis'),zlabel('z-axis') » title('CONTOUR3 of PEAKS')
图4.9 函数PEAKS的平滑加彩色曲面图
如上所示平滑加色彩的例子中,每一补片仍保存着单 一的颜色,但各块连接处的黑线已去掉。 » shading interp
图4.10 函数PEAKS的插值加彩色曲面图
在MATLAB中,这是通过在所期望的洞孔的所在位置,将数据置为特 定的NaN来实现。由于NaN没有任何值,所有的MATLAB作图函数都忽略 NaN的数据点,在该点出现的地方留下一个洞孔。例子如下:
图4.12 函数PEAKS的曲面图和基本等值线图
» [X,Y,Z]=peaks(30); » surfl (X,Y,Z) % surf plot with lighting » shading interp % surfl plots look best with interp shading » colormap pink % they also look better with shades of a single color » grid,xlabel('X-axis'),ylabel('Yaxis'),zlabel('Z-axis') » title(' SURFL OF PEAKS')
图4.16 函数PEAKS的等值线图
pcolor函数是surf的二维等效函数,采用伪彩色显 示色块。 » [X,Y,Z]=peaks(30); » pcolor(X,Y,Z); % surf plot view from above » xlabel('X-axis'),ylabel('Y-axis') » title('PCOLOR of PEAKS')
二维图形的所有基本特性在三维中仍都存在。axis命令扩展到三维 返回Z轴界限(0和40),在数轴向量中增加两个元素。函数zlabel用来 指定z轴的数据名称,函数grid在图底绘制三维网格。 函数text(x,y,z,'string')在由三维坐标x,y,z所指定的位置放一 个字符串。
图4.1 螺旋线图
图4.8 surf函数绘制PEAKS的曲面图
曲面图的一些特性正好和网格图相反。它的线条是黑 色的,线条之间的补片有颜色;在网格图里,线条有颜色。 在曲面图里,每块就象一块染色玻璃窗口或物体,黑 线便是各单色染色玻璃块之间的连接。除此以外,MATLAB 还提供了平滑加颜色和插值加颜色功能。这可以通过调用 函数shading来实现。
图4.15 函数PEAKS的三维等值线图
有些情况下,希望得到三维数据的二维表示。可通过 MATLAB的contour函数实现。 » [X,Y,Z]=peaks(30); » contour(X,Y,Z,16) % draw sixteen contour lines » xlabel('X-axis'),ylabel('Y-axis') » title('CONTOUR of PEAKS')
子图和多图形窗口可以直接应用到三维图形中。通过指定plot 命令的多个参量或使用hold命令,可以把多条直线或曲线重叠画出。 增加维数的plot3命令可以使多个二维图形沿一个轴排列起来, 而不是直接将二维图形叠到另一个的上面。 » x=linspace(0,3*pi); % x-axis data » z1=sin(x); % plot in x-z plane » z2=sin(2*x); » z3=sin(3*x); » y1=zeros(size(x)); % spread out along y-axis » y3=zeros(size(x)); % by giving each different yaxis values » y2=y3; » plot3(x,y1,z1,x,y2,z2,x,y3,z3); » grid » xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis') » title('sin(x),sin(2x),sin(3x)')
图4.5 左边球是不透明的(线被隐蔽),右边球是透明的(线未被隐蔽)
MATLAB的mesh有两个同种函数:meshc,它画网格图 和基本的等值线图;meshz,它画包含零平面的网格图。
» [X,Y,Z]=peaks(30); » meshc(X,Y,Z) % mesh plot with underlying contour plot » title('MESHC of PEAKS') » meshz(X,Y,Z) % mesh plot with zero plane » tiTle('MESH of PEAKS') » title('MESH of PEAKS') » hidden off % make mesh transparent so minimums can be seen