MATLAB绘图.docx
- 文档编号:5650165
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:60
- 大小:757.39KB
MATLAB绘图.docx
《MATLAB绘图.docx》由会员分享,可在线阅读,更多相关《MATLAB绘图.docx(60页珍藏版)》请在冰点文库上搜索。
MATLAB绘图
第三章有关数学处理软件运用介绍
可以运用于科学计算的数学软件有很多,比较著名的通用大型数学应用软件有MATLAB、Maple、MATHCAD、MATHEMATICA几种。
本章主要介绍MATLAB的运用,并简单介绍MATHCAD。
第1节MATLAB简介
MATLAB是当今国际上公认的在科技领域方面最为优秀的应用软件和开发环境。
在欧美各高等院校,MATLAB已经成为应用线性代数、自动控制理论、数据统计、数字信号处理、时间序列分析、动态系统仿真、图形处理等高级课程的基本数学工具,是攻读学士的大学生、硕士生、博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB已经超出实验室,并广泛用于研究和解决具体的工程问题。
最初MATLAD是新墨西哥大学的CleveMoler70年代给学生开线性代数课程时编写的LINPACK和EISPACK的接口程序,意思是“矩阵实验室”。
1984年成立的MathWorks公司正式把MATLAB推向市场,现在已经成为一个系列产品:
“MATLAB”主包和各种可选的“工具包(Toolbox)”。
主包中有数百个高度优化的内部函数。
而几十个工具包又分为两类:
功能性工具包和学科性工具包。
功能性工具包主要用来扩充MATLAB的数值分析、矩阵运算、数字信号处理、符号计算功能、图形建模仿真功能、文字处理功能、与硬件实时交互功能。
这种工具包能用于多种学科。
而学科性工具包是专业性比较强的,如优化工具包(OptimizationToolbox)、控制工具包(ControlToolbox)、通信工具包(CommunicationToolbox)、图象处理工具包(ImageProcessingToolbox)、统计工具包(StatisticToolbox)等。
是一种功能强、效率高便于进行科学和工程计算的交互式软件包。
MATLAB的有可靠的数值和符号计算能力、简单易学的程序语言、强大的图形和可视化功能,用为数众多的应用工具包,大大降低了对使用者的数学基础和计算机语言知识的要求,所以它的确为一高效的科研助手。
(一)、数值和符号计算功能
数值计算功能建立在矩阵和数组之上,包括:
矩阵的创建和保存,数值矩阵代数、乘方运算和分解,数组运算,矩阵操作,多项式和有理分式运算,数理统计分析、差分和数值导数,用于求积分、优化和微分方程的数值解和功能函数等。
在此环境下所解问题的Matlab语言表述形式和其数学表达形式相同,不需要按传统的方法编程。
线性方程组求解的例子:
a=[2–11;103;521;]%输入系数矩阵
a=
2-11
103
521
?
b=[3;10;12;]
b=
3
10
12
?
c=inv(a)%系数矩阵求逆
c=
0.2500-0.12500.1250
-0.58330.12500.2083
-0.08330.3750-0.0417
?
c*b%求解
ans=
1.0000
2.0000
3.0000
或者简单地:
?
a\b
ans=
1
2
3
或:
某谱峰数据记录数据:
y=[0.550.630.750.870.941.001.111.191.331.381.411.421.391.331.251.16...
1.080.970.880.790.680.570.51]
s=trapz(y)
s=22.6600%计算出峰面积。
符号计算有两个特点:
符号解和任意精度数值解。
MATLAB4.0及以后版本有此功能,包括矩阵运算、微积分、多项式和有理分式运算、代数方程、微分方程、图论、数论等等。
例:
求函数f(x)=sinx2(x)的微分和积分。
f=’sin(x)^2’;%定义函数f(x)
dfdx=symdiff(f);%求导的指令
intf=int(f);%求积分的指令
下面是显示的计算结果:
dfdx=
2*sin(x)*cos(x)
intf=
-1/2*sin(x)*cos(x)+1/2*x
(二)、MATLAB语言
除了指令行操作的直接交互使用方式外,MATLAB有它自己的编程语言。
它是一种面向科学与工程计算的高级语言,允许用数学形式的语言编写程序,且比Basic、Fortran和C等语言更加接近我们书写计算公式的思维方式,用Matlab编写程序犹如在演算纸上排列出公式与求解问题。
因此,Matlab语言也可通俗地称为演算纸式科学算法语言。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的习惯形式十分相似,简单易学。
求解问题比用高级语言编程简捷很多,尽管执行效率较低,但编程效率、程序的可读性、可移植性非常高。
MATLAB可以实现C语言的几乎全部功能,包括WINDOWS的图形界面的设计。
Matlab语言象Basic、Fortran和C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变地照搬到数组间的运算,有些如算术运算符只要增加“·”就可用于数组间的运算,另外,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。
在此基础上,高版本的Matlab已逐步扩展到科学及工程计算的其它领域。
因此,不久的将来,它一定能名符其实地成为“万能演算纸式的”科学算法语言。
MATLAB已经不仅是“矩阵实验室”,而已成为一种具有广泛应用前景的全新的计算机高级语言。
(三)、图形和可视化功能
利用MATLAB可以轻易地绘制二维、三维曲线,三维曲面,并可进行图形和坐标的标识、坐标控制、图形的迭绘、视角和光照设计、色彩精细控制等及动画的绘制。
MATLAB还提供了对图形对象和图形句柄操作的“LowelLwvel”指令,使用户可对图形进行各种操作。
Matlab的绘图是十分方便的,它有一系列绘图函数(命令),例如线性坐标、对数坐标,半对数坐标及极坐标,均只需调用不同的绘图函数(命令),在图上标出图题、XY轴标注,格(栅)绘制也只需调用相应的命令,简单易行。
另外,在调用绘图函数时调整自变量可绘出不变颜色的点、线、复线或多重线。
这种为科学研究着想的设计是通用的编程语言所不及的。
例:
绘一条二维曲线。
t=0:
pi/50:
4*pi;%定义横轴向量
y=exp(t/2).*sin(3*t);计算纵轴向量y
plot(t,y)%绘制二维图形
例:
绘三维图形
x=-8:
0.5:
8;
y=x’;%定义x-y坐标
X=ones(size(y))*x;
Y=y*ones(size(x));
R=sqrt(X.^2+Y.^2)+eps;eps是机器零,防止被0除的现象
Z=sin(R)./R;
Mesh(Z);
(四)、应用工具包
通过MATLAB语言,MATLAB具备了它最重要、最受人欢迎的特点——开放性。
除内部函数外,所有MATLAB主包文件和各工具包文件都来是可改的源文件。
用户通过对源文件的修改,或加入自己编写的文件去构成新的专用工具包。
高版本的Matlab语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而且Matlab的库函数同用户文件在形成上一样,所以用户文件也可作为Matlab的库函数来调用。
因而,用户可以根据自己的需要方便地建立和扩充新的库函数,以便提高Matlab使用效率和扩充它的功能。
另外,为了充分利用Fortran、C等语言的资源,包括用户已编好的Fortran,C语言程序,通过建立Me调文件的形式,混合编程,方便地调用有关的Fortran,C语言的子程序。
Matlab语言是一种解释执行的语言(在没被专门的工具编译之前),它灵活、方便,其调试程序手段丰富,调试速度快,需要学习时间少。
人们用任何一种语言编写程序和调试程序一般都要经过四个步骤:
编辑、编译、连接以及执行和调试。
各个步骤之间是顺序关系,编程的过程就是在它们之间作瀑布型的循环。
Matlab语言与其它语言相比,较好地解决了上述问题,把编辑、编译、连接和执行融为一体。
它能在同一画面上进行灵活操作快速排除输入程序中的书写错误、语法错误以至语意错误,从而加快了用户编写、修改和调试程序的速度,可以说在编程和调试过程中它是一种比VB还要简单的语言。
具体地说,Matlab运行时,如直接在命令行输入Mailab语句(命令),包括调用M文件的语句,每输入一条语句,就立即对其进行处理,完成绩译、连接和运行的全过程。
又如,将Matlab源程序编辑为M文件,由于Mat1ab磁盘文件也是M文件,所以编辑后的源文件就可直接运行,而不需进行编译和连接。
在运行M文件时,如果有错,计算机屏幕上会给出详细的出锗信息,用户经修改后再执行,直到正确为止。
所以可以说,Mat1ab语言不仅是一种语言,广义上讲是一种该语言开发系统,即语言调试系统。
MATLAB的运行环境:
MATLAB4.0以上要求在WINDOWS下运行。
原则上讲386、486的机器,4MB以上内存,VGA显示,16MB硬盘都可以了。
当然,配置高些运行顺利些。
Mat1ab语言中最基本最重要的成分是函数,其一般形式为「a,6,c……]=fun(d,e,f,……),即一个函数由函数名,输入变量d,e,f,……和输出变量a,b,c……组成,同一函数名F,不同数目的输入变量(包括无输入变量)及不同数目的输出变量,代表着不同的含义(有点像面向对象中的多态性。
这不仅使Matlab的库函数功能更丰富,而大大减少了需要的磁盘空间,使得Matlab编写的M文件简单、短小而高效。
总之,Matlab语言的设计思想可以说代表了当前计算机高级语言的发展方向。
我们相信,在不断使用中,读者会发现它的巨大潜力。
第2节Matlab数据处理基本操作
在Matlab中的基本运算单元是矩阵。
单个的数据又称标量或1×1的矩阵,单行或单列的矩阵(一行或一列数据的组合)称为向量(行向量或列向量)。
如实验室大气压力p为754mmHg,p即为为标量。
实验中测得的一系列数据,如不同时刻t对应某物理量y,t和y即为2个向量。
如果t和y放在一起(第一列为时间,第二列为y),用data来表示,则data就为2列的矩阵,行数为t或y的个数(它们必须相等)。
1.为了处理数据,首先需要输入数据。
Matlab中有多种数据输入的方法,这里只介绍最基本的方法。
(1)在Matlab中直接输入
标量:
p=754;
向量:
t=[5,10,15,21,25,30]。
如果是行向量,数据之间用空格或“,”分隔。
如果是列向量,数据间之间用“;”分隔。
矩阵:
每行的数据之间用空格或“,”分隔,分列时用“;”。
在输入向量或矩阵时,“[”、“]”(方括)是必须的。
如果在语句最后加入“;”作为输入结束,则回车后输入的结果不回显,否则将回显。
(2)从文件读入
对于数据量大的数据,或由外部程序产生的,或由计算机自动采集的数据,常常是以文件的形式存在。
Matlab可以从文件读入数据,读取数据的方法与数据存储的格式有关。
这里只介绍一种读取ASCII数据的方法。
如果这种文件已经存在,使用下述的方法即可读取。
我们也可以使用任一种纯文本编辑器,输入数据,形成ASCII的数据文件:
如果有2个以上的向量,每一向量为一列(或一行),数据之间用“,”或空格分开。
例如热敏电阻的电阻值随温度的变化。
-2545.69
-2035.21
-1527.41
-1021.54
-517.08
013.66
511.01
………(以下数据略)
若文件名为data_1.txt(文件名不能用中文,也不能以数字开头,扩展名不限),保存在c:
\report下。
在Matlab中要使用时,使用命令调入数据:
loadc:
\report\data_1.txt
以上数据将以data_1为名的2列矩阵被调入Matlab工作空间。
输入data_1并回车,将显示出调入数据的情况。
从方便和习惯出发,我们用向量T和R来处理数据,分别存放温度和电阻的数据:
T=data_1(:
1);%将第一列数据(温度)存放在向量T中;
R=data_1(:
2);%将第二列数据(电阻)存放在向量R中。
如果在data_.txt中的数据是按“行”方式存放的(第一行为温度,第二行为电阻),则操作应当是:
T=data_1(1,:
);%第一行数据放在T中。
R=data_1(2,:
);%第二行数据放在R中。
括号内的参数是行和列的表达式,其中用“,”区分行和列,“,”之前表示行,“,”之后表示列。
对于行(或列)的具体值用“n1:
n2”的形式,表示从第n1行(列)到第n2行(列),如省略n1、n2表示全部行(列)。
也可以用.m文件准备上面的数据:
用纯文本编辑器(如记事本),编辑以下内容。
p=754;
t=[有关数据];
y=[有关数据];
例如,保存为data_2.m(文件名要求同前)。
使用时,在Matlab中输入:
data_2,即将p、t、y数据调入工件空间。
注意此文件应保存在Matlab的搜索路径内(一般在Matlab目录以下)。
如果保存在用户自己的工作目录,如d:
\mywork,则应在调用此数据之前先运行cdd:
\mywork,或将该目录加入到Matlab的搜索路径中:
path(path,'d:
\mywork')。
2.有关数据分析函数
在Matlab里的数据分析是面向列矩阵而进行的。
常用Matlab统计函数列于下表:
表b-1-1常用数据分析函数
corrcoef(x)
求相关系数
sort(x)
按升序排列
cov(x)
协方差矩阵
std(x)
列的标准偏差
cumprod(x)
列累计积
sum(x)
各列的元素和
cumsum(x)
列累计和
max(x)
各列的最大值
diff(x)
计算元素之间差
min(x)
各列的最小值
mean(x)
均值或列的平均值
prod(x)
列元素的积
median(x)
列的中值
我们可以很方便地运用它们,省却了手工操作。
如:
mt=mean(t),求出t(t为列向量)的平均值并赋于mt。
又如,若x为存放某一物理量多次测量的结果的向量,std(x)计算出这些数据的标准偏差。
3.Matlab中的运算
在Matlab中输入运算表达式就可以进行运算。
例如:
>>(5*2+1.3-0.8)*10/25
ans=
4.2000
标量之间、标量与向量、标量与矩阵之间的运算符与一般高级语言中相同。
加
减
乘
右除
左除
乘方
+
-
*
/
\
^
如:
p1=p/760
向量之间运算不用对每个数据进行操作,只需输入向量运算的表达式,即可完成所有对应元素的运算,被运算的两向量必须具有相同的结构。
但上述运算符中的“*”、“/”、“^”前应加“.”,即为:
“.*”、“./”、“.^”,否则,是按矩阵的运算规则进行。
T1=1./(T+273.2)%将摄氏温度转变绝对温度的倒数。
矩阵的运算按其运算规定,但在实验数据处理中不多使用,这里从略。
如采用向量的运算符,则也是对应元素之间进行运算。
在运算时可以使用括号,但只能是“圆”括号。
运算中可以使用各种函数,如:
sqrt()、log()(自然对数)、log10()(常用对数)、sin()等等。
其它常用数学函数见附录。
R1=log(R);%电阻值取自然对数(ln)。
运算顺序同一般数学规定。
第3节数据处理结果可视化——Matlab的图形功能
用图形来表达实验数据,能清楚地显示出数据的规律和内在本质。
而Matlab有很强的图形处理功能。
1.绘图语句及图形窗口的选择和建立
绘图语句plot或plot3等直接产生一个图形窗口,并把该窗口当做当前输出窗口。
格式为:
plot(x1,y1,'参数',x2,y2,'参数',…)。
xi、yi为表达自变量与函数的值的向量,它们必须为同类向量,并且元素个数相等。
第三项单引号中的参数为线型、标记、颜色的表达式,可以忽略,也可只标明个别参数。
忽略的参数系统将使用默认值。
在同一坐标系统中画多个图形,只需在同一plot命令中依次输入每个图形的自变量、函数和绘图参数即可。
subplot(m,n,i)产生一个m行n列的m×n个小图形窗口,选择第i个小窗口为当前输出窗口,i在1~m×n之间。
例:
fori=1:
4;
subplot(2,2,i);
plot(sin([0:
0.1:
8*pi]/i));
title(i);
end;
以上程序需作成.m文件,在Matlab中调用,依次在每个小窗口中画正弦函数
。
相当于以下语句:
子窗口绘图
subplot(2,2,1);plot(sin([0:
0.1:
8*pi]/1));
title
(1);
subplot(2,2,2);plot(sin([0:
0.1:
8*pi]/2));title
(2);
subplot(2,2,3);plot(sin([0:
0.1:
8*pi]/3));title(3);
subplot(2,2,4);plot(sin([0:
0.1:
8*pi]/4));title(4);
2.选择不同的坐标系统
绘二维图形的坐标系可以设定为不同的系统以适应不同的需要。
plot:
xy坐标都是线性坐标系;
loglog:
xy坐标都是对数坐标系;
semilogx:
x坐标轴是对数坐标系;
semilogy:
y坐标轴是对数坐标系;
plotyy:
有两个y坐标轴,一个在左边,一个在右边。
以上绘图命令的使用方法同plot。
Polar(TH,R):
使用极坐标,其中TH为极角,R为极轴。
可以使用坐标转换函数,进行坐标转换。
cart2pol:
笛卡尔坐标转换为极坐标或圆柱坐标
cart2sph:
笛卡尔坐标转换为球坐标
pol2cart:
极坐标或圆柱坐标转换为笛卡尔坐标
sph2cart:
球坐标转换为笛卡尔坐标。
使用方法,例如:
[TH,R]=cart2pol(x,y),或[TH,R,Z]=cart2pol(x,y,z)
3.绘图参数选择
如果没有特别指明,plot函数将用实线来连接数据点,如有不同的数据画在同一图中将自动使用不同的颜色。
用户也可以指定图线的其它类型和颜色。
绘图参数
点或线的颜色
标记点的形式
线型
'y'(黄)
'.'(点)
'-'(实线)
m'(紫红)
'o'(圆圈)
':
'(点线)
'c'(青)
'x'(叉)
'-.'(点划线)
'r'(红)
'+'
'–'(虚线)
'g'(绿)
'*'
'b'(兰)
's'(正方形)
'w'(白)
'd'(菱形)
'k'(黑)
'v'(向下三角形)
'^'(向上三角形)
'<'(向左三角形)
'>'(向右三角形)
'p'(五角星)
'h'(六角形)
如未给出绘图参数,MATLAB自动对不同图分配不同的颜色,数据点之间用线段连接。
4.数轴的数据范围设置
在plot等绘图函数中,有根据输出的数据自动设定数轴界限的功能,但有时手动的调节也还是必不可少的。
axis([xmin,xmax,ymin,ymax])
设定了两个数轴的范围,其中可以用Inf,-Inf来让Matlab自动寻找合适的界限。
5.图形的标注
title:
标注图形的标题。
例:
title(‘反应进度’)
legend:
标注图例。
例:
lengend(‘测量点’,’拟合曲线’);其位置与plot中位置对应。
xlabel:
对x轴标注。
例:
xlabel(‘时间’)
ylabel:
对y轴标注。
例:
ylabel(‘电导’)
text:
在指定位置写上文字内容。
例:
text(2,4,’实验温度:
25’)
gtext:
用鼠标给文字指定位置。
gridon;给图形加网格线。
常用的绘制3D图的命令有:
plot3(x1,y1,z1,’参数’,x2,y2,z2,’参数’,….)
mesh(x,y,z,c)用网格的形式绘图,第4个参数是颜色。
Surf(x,y,z,c)用阴影的方式绘图。
第4节拟合和插值
拟合和插值在实验数据处理中是非常重要的,特别是拟合,用最小二乘法求直线的斜率和截距是数据处理中常用的、最准确的方法。
外推法、标准工作曲线法都是这方面的运用。
但由于运算量很大,长期以来用作图法来得到所需要的结果,其人为误差是不可避免的。
如果是非线性的情况则更为困难,并很难得到所拟合变量间的函数关系的解析式,也影响了对所研究问题的进一步深入,如果用Matlab处理则非常方便。
1.拟合
1.1在Matlab中,用函数polyfit求解关于一元最小二乘曲线拟合问题。
使用polyfit(x,y,n),x,y为要拟合的数据,n为希望最佳拟合数据的多项式的阶次。
如果我们选择n=1,得到最简单的线性近似,通常称为线性回归。
如果我们选择n=2作为阶次,得到一个2阶多项式。
有时,我们还需将数据作一些变换后再进行拟合。
如可能,一般转变为直线关系来处理。
例:
拟合热敏电阻R-T曲线
如上一节所述,R-T数据已存放在文件中。
在Matlab中用命令方式一步步地操作:
loadc:
\report\rt1.txt%将数据调入名为rt1的矩阵;
rt1%查看rt1的内容;
T=rt1(:
1)+273.15%将rt1的第一列温度数据转换为绝对温度并置于向量T;
热敏感电阻R-T关系
R=rt1(:
2)%将rt1的第二列电阻数据置于向量R;
为了直观地看到R-T关系,可画出图形:
plot(T,R,’+’)%看R-T曲线,用“+”号表示数据点(图b-1-4)。
R-T的关系,理论上应为:
R=aeb/T。
故先对理论公式作一点变换:
取对数,lnR=lna+b/T,然后相应处理数据:
R1=log(R)%R的值取自然对数(ln),
T1=1./T%T值求倒数,注意有一个“.”;
p1=polyfit(T1,R1,1)%T与lnR进行线性拟合,求出拟合多项式的系数,p1为1行2列的矩阵,p1
(1)为一次项系数(b),p1
(2)为常数项(lna);
p1=
1.0e+003*
3.2791-0.0094
就是说,我们以表达式
R1=3.2791×103T1-9.4即lnR=3.2791×103/T-9.4表示电阻和温度的关系。
R2=polyval(p1,T1)%计算拟合的函数值,再在同一图上比较拟合值与测试值的区别:
plot(T1,R2,T1,R1,’+’)
legend(‘拟合曲线’,’测试值’)%图例,拟合结果用实线表示,测试数据用“+”标出。
可以看出拟合结果是满意的。
lnR~1/T拟合结果
最后,可以将完整的结果做成Matlab的m文件,就可以直接调用了。
m文件的内容即为上述的命令行的集合,以ASCII形式存放,扩展名为m。
为了让图形更完善,可以添加关于坐标轴、标题、文字、网格线等。
拟合的R-T关系可以用于使用热敏电阻测温度的场合中,测定其电阻,可得出被测系统的温度,T=b/(lnR-lna)。
在这个例子中,b=3.2791×103,lna=9.4。
在对实验数据进行拟合时,决定自变量与函数的关系的原则首先是根据理论上是什么
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 绘图