骚男 姜韬 个人资料:matlab绘图

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 01:02:52
MATLAB 的扩展性和机制独立的画图功能是一个极其重要的功能.这个功能使数据画图
变得十分简单.画一个数据图,首先要创建两个向量,由x, y 构成,然后使用plot 函数.
例如,假设我们要画出函数y=x2-10x+10 的图象,定义域为[0,10].只需要3 个语句就可
以画出此图.第二句用于计算y 值(注意我们用的是数组运算符,所以可以对x 的元素一一运
算.).最后打印出此图.
x=0:1:10;
y=x.^2-10*x+15;
plot(x,y);
当执行到plot 函时,MATLAB 调用图象窗口,并显示图象.如图图2.4.
20
表2.8 常见的MATLAB 函数
函数 描述
数学函数
abs(x) 计算x 的绝对值
acos(x) 计算x 的反余弦函数
angle(x) 计算复数x 的幅角
asin(x) 计算x 的反正弦函数值
atan(x) 计算x 的反正切函数值
atan2(y,x) tan??-2(y/x)
cos(x) cosx
exp(x) ex
log(x) logex
[value,index]=max(x) 返回x 中的最大值,和它所处的位置
[value,index]=min(x) 返回x 中的最小值,和它所处的位置
mod(x,y) 余数
sin(x) sinx
sqrt(x) x 的平方根
tan(x) tanx
rounding(取整)函数
ceil(x)
fix(x)
round(x)
字符转换函数
char(x) 将矩阵中的数转化为字符,矩阵中的元素就不大于127
double(x) 将子符串转化为矩阵
int2str(x) 将整数x 转化为字符串形式
num2str(x) 将带小数点的数转化为一个字符型数组
str2num(x) 将字符串转化为数
2.11.1 简单的xy 画图的应用
正如我们所看到的,在MATLAB 中画图是十分容易的.只要任何一对向量的长度相同,那
图2.4 定义域为(0,10)的y=x2-10x+15 的图象.
21
么它就可以就能可视化地画出来.但是这还不是最后的结果,因为它还没有标题,坐标轴标签,
网格线.
给图增加标题和坐标轴标签将会用到title, xlabel, ylable 函数。调用每个函数时将会有一
个字符串,这个字符串包含了图象标题和坐标轴标签的信息。用grid 命令可使网格线出现
或消失在图象中,grid on 代表在图象中出现网格线,grid off 代表去除网格线。例如下面的
语句将会产生带有标题,标签和网格线的函数图象。结果如图2.5 所示。
x=0:1:10;
y=x.^2-10*x+15;
plot(x,y);
title ('Plot of y=x.^2-10*x+15');
xlabel ('x');
ylabel ('y');
grid on;
2.11.2 打印图象
一个图象一旦建立,我们就可以用 print 命令在打印机上打印出这幅图,也可以单击图
象窗口的打印图标或者在文件菜单中选择打印项打印。
print 命令的一般形式如下:
print <选项> <文件名>
如果没有文件名,这个命令就会命令打印机打印当前图片。如果带有文件名,那么这个
命令就会打印这个图片到指定的文件。有许多的选项指定输出到文件或打印机的格式。一个
最重要的选项是-dtiff.这个选项指定输出图片的格式是标签影像档案格式(TIFF)。因为在
PC,Mac 和UNIX 平台上的文字处理软件都支持这种格式。这就使得在文档中插入MATLAB
图象变得十分的简单。下面这个命令将会创建一个TIFF 格式的当前图象的图片,并保存在
一个叫my_image.tif 的文件中
print –dtiff my_image.tif
图2.5 带有网格线,标签的画图
22
你也可以选择图象窗口中的“file/export”选项来创建tiff 图片。
2.11.3 联合作图
在同一坐标内作出多个函数的图象的情况是十分常见的。假如,你要在同一坐标轴内作
出f(x)=sin2x 和他的微分函数的图象。它的微分式为
x x
dt
d sin 2 = 2cos2 (2.4)
在同一坐标系内打印两个函数,我们必须产生一系列的x 值和每一个函数分别对应的y
值。然后利用这些值画出图象,plot 函数的格式如下所示:
x=0:pi/100:2*pi;
y1=sin(2*x);
y2=2*cos(2*x);
plot (x,y1,x,y2);
所得图像如图图2.6 所示。
2.11.4 线的颜色,线的形式,符号形式和图例
MATLAB 允许程序员选择轨迹的颜色,轨迹的形式,和符号的类型.在X,Y 向量参数后带
有这些属性的字符串的plot 函数,可以选择这些细节.
这些属性字符串包括三个方面,
第一方面指定轨迹的颜色,
第二方面指定符号的类型,
第三方面指定线的类型.
各种颜色,符号和线的类型将在表2.9 中显示.
表2.9 图象的颜色,标记(符号)类型,线型
颜色 标记类型 线型
y 黄色 . 点 - 实线
m 品红色 o 圈 : 点线
c 青绿色 x ×号 -. 画点线
r 红色 s 正方形 -- 虚线
g 绿色 d 菱形
图2.6 y1=sin(2*x) y2=2cos(2*x)的图象。
23
颜色 标记类型 线型
b 蓝色 v 倒三角
w 白色 ^ 正三角
k 黑色 > 三角(向右)
< 三角(向左)
p 五角星
h 六线形

这些属性字符串可以任意的混合使用.如果有多个函数,每个函数都有它自己的属性字符
串.
例如,函数y=x2-10x+15 的图象,曲线为红色的虚线,重要的数值用蓝色的小圆圈表示.
x=0:1:10;
y=x.^2 -10.*x +15;
plot(x,y,'r--',x,y,'bo');
我们可以用legend 来制作图例。它的基本的形式如下
legend('string1','string2',...,pos)
其中string1,string2 等等是与轨迹标签名,而pos 是一个整数,用来指定图例的位置。
这些整数所代表的意义在表2.10 中的列出。用legend off 命令将能去除多余的图例。一个完
整的图象例子将会显示图2.7 中,产生这个图象的语句如下所示。图2.7 在同一坐标系内,
显示了f(x)=sin2x 和它的微分函数的图象,用黑实线代表f(x),用红虚线代表它的微分函数。
图中有标题,坐标轴标签和网格线。
x=0:pi/100:2*pi;
y1=sin(2*x);
y2=2*cos(2*x);
plot(x,y1,'k-',x,y2,'b--');
title(' Plot of f(x)=sin(2x) and its derivative');
xlabel('x');
ylabel('y');
24
legend('f(x)','d/dx f(x)')
grid on;
2.11.5 对数尺度
打印数据既可以用对数尺度,也可以用线性尺度。在x,y 轴上使用这两种尺度的一种或两种
可以组合形成4 种不同的坐标系。每一种组合者有一个特定的函数。
1.plot 函数的x,y 均用线性尺度
2.semilog 函数x 轴用对数尺度,y 轴将用线性尺度
3.semiloge 函数x 轴用线性尺度,y 轴用对数尺度
4.loglog 函数两坐标轴将会都用对数尺度。
这四个函数在意义上是等价的,只是坐标轴的类型不同。每一个图象的例子如图2.8 所
示。
图2.7 在同一坐标系内,显示了f(x)=sin2x 和它的微分函数的图象
25
表2.10 在legend 命令中pos 的值
值 意义
0 自动寻找最佳位置,至少不与数据冲突
1 在图象的右上角
2 在图象的左上角
3 在图象的左下角
4 在图象的右下角
-1 在图象的右边
2.12 例子
下面的例子将向大家介绍如何用 MATLAB 解决问题。
例2.3
(温度转换)设计一个MATLAB 程序,读取一个华氏温度的输入,输出开尔文温度。
答案
华氏温度和开尔文温度的转换关系式可在物理学课本中找到。其关系式为:
( ) 32.0 273.15
9
( ) 5 + ??


T 开尔文= ? T 摄氏度? (2.5)
在物理学参考书中举了一些例子,我们可以用来检验我们程序是否正确。例如
华氏度(oC) 开尔文(K)
沸水的温度 212 373.15
冰水混合物的温度 -110 194.26
我们设计程序的步骤如下
1.提示用户键入华氏温度值
2.读取输入值
3.通过关系式转换为开氏温度
4.输出结果,结束
我们将会用input 函数输入华氏温度,用fprintf 函数输出结果。
% Script file:temp_conversion.m
图2.8 四种不同画图函数的对比。
26
%
% Purpose:
% To convert an input temperature from degrees Fahrenheit to
% an output temperature in kelvins.
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========= ================
% 12/01/97 S.J.Chapman Original code
%
%Define variables:
% temp_f --Temperature in degrees Fahrenheit
% temp_k --Temperature in kelvins
%Prompt the user for the input temperature.
temp_f=input('Enter the temperature in degrees Fahrenheit:');
%Converttokelvins.
temp_k=(5/9)*(temp_f-32)+273.15;
%Writeouttheresult.
fprintf('%6.2f degrees Fahrenheit = %6.2f kelvins.\n',...
temp_f,temp_k);
我们输入上面的例子中的华氏温度值,以检测程序的正确性。注意用户的输入值已用黑
体字标出。
>> temp_conversion
Enter the temperature in degrees Fahrenheit:212
212.00 degrees Fahrenheit = 373.15 kelvins.
>> temp_conversion
Enter the temperature in degrees Fahrenheit:-110
-110.00 degrees Fahrenheit = 194.26 kelvins.
这个结果和物理教科书的结果相同。在本程序中,我们重复出带单位的输入值和输出值.
只有带上单们神经质输出才有意义.
按照惯例,任何输入变量和输出变量的单位都应打印出来.
好的编程习惯
当你读取和写入数据时,使用适当的单位