绘图与曲线拟合.docx
- 文档编号:26077220
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:27
- 大小:194.96KB
绘图与曲线拟合.docx
《绘图与曲线拟合.docx》由会员分享,可在线阅读,更多相关《绘图与曲线拟合.docx(27页珍藏版)》请在冰豆网上搜索。
绘图与曲线拟合
一。
二维数据曲线图
1.1绘制单根二维曲线
plot函数的基本调用格式为:
plot(x,y)
其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。
例1-1在0≤x≤2p区间内,绘制曲线
y=2e-0.5xcos(4πx)
程序如下:
x=0:
pi/100:
2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y)
例1-2绘制曲线。
程序如下:
t=0:
0.1:
2*pi;
x=t.*sin(3*t);
y=t.*sin(t).*sin(t);
plot(x,y);
plot函数最简单的调用格式是只包含一个输入参数:
plot(x)
在这种情况下,当x是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。
1.2绘制多根二维曲线
1.plot函数的输入参数是矩阵形式
(1)当x是向量,y是有一维与x同维的矩阵时,则绘制出多根不同颜色的曲线。
曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。
(2)当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
(3)对只包含一个输入参数的plot函数,当输入参数是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数。
当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。
2.含多个输入参数的plot函数
调用格式为:
plot(x1,y1,x2,y2,…,xn,yn)
(1)当输入参数都为向量时,x1和y1,x2和y2,…,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。
每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。
(2)当输入参数有矩阵形式时,配对的x,y按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
例1-3分析下列程序绘制的曲线。
x1=linspace(0,2*pi,100);%用于产生x1,x2之间的N点行矢量。
其中x1、x2、N分别为起始值、中止值、元素个数。
若缺省N,默认点数为100
x2=linspace(0,3*pi,100);
x3=linspace(0,4*pi,100);
y1=sin(x1);
y2=1+sin(x2);
y3=2+sin(x3);
x=[x1;x2;x3]';
y=[y1;y2;y3]';
plot(x,y,x1,y1-1)
3.具有两个纵坐标标度的图形
在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。
调用格式为:
plotyy(x1,y1,x2,y2)
其中x1,y1对应一条曲线,x2,y2对应另一条曲线。
横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。
例1-4用不同标度在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。
程序如下:
x=0:
pi/100:
2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
plotyy(x,y1,x,y2);
4.图形保持
holdon/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。
例1-5采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。
程序如下:
x=0:
pi/100:
2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1)
holdon
y2=2*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
holdoff
1.3设置曲线样式
MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号,它们可以组合使用。
例如,“b-.”表示蓝色点划线,“y:
d”表示黄色虚线并用菱形符标记数据点。
当选项省略时,MATLAB规定,线型一律用实线,颜色将根据曲线的先后顺序依次。
要设置曲线样式可以在plot函数中加绘图选项,其调用格式为:
plot(x1,y1,选项1,x2,y2,选项2,…,xn,yn,选项n)
例1-6在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx),标记两曲线交叉点。
程序如下:
x=linspace(0,2*pi,1000);
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
k=find(abs(y1-y2)<1e-2);%查找y1与y2相等点(近似相等)的下标
x1=x(k);%取y1与y2相等点的x坐标
y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);%求y1与y2值相等点的y坐标
plot(x,y1,x,y2,'k:
',x1,y3,'bp');
1.4图形标注与坐标控制
1.图形标注
有关图形标注函数的调用格式为:
title(图形名称)
xlabel(x轴说明)
ylabel(y轴说明)
text(x,y,图形说明)
legend(图例1,图例2,…)
函数中的说明文字,除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。
例如,text(0.3,0.5,‘sin({\omega}t+{\beta})’)将得到标注效果sin(ωt+β)。
例1-7在0≤x≤2p区间内,绘制曲线y1=2e-0.5x和y2=cos(4πx),并给图形添加图形标注。
程序如下:
x=0:
pi/100:
2*pi;
y1=2*exp(-0.5*x);
y2=cos(4*pi*x);
plot(x,y1,x,y2)
title('xfrom0to2{\pi}');%加图形标题
xlabel('VariableX');%加X轴说明
ylabel('VariableY');%加Y轴说明
text(0.8,1.5,'曲线y1=2e^{-0.5x}');%在指定位置添加图形说明
text(2.5,1.1,'曲线y2=cos(4{\pi}x)');
legend(‘y1’,‘y2’)%加图例
2.坐标控制
axis函数的调用格式为:
axis([xminxmaxyminymaxzminzmax])
axis函数功能丰富,常用的格式还有:
axisequal:
纵、横坐标轴采用等长刻度。
axissquare:
产生正方形坐标系(缺省为矩形)。
axisauto:
使用缺省设置。
axisoff:
取消坐标轴。
axison:
显示坐标轴。
给坐标加网格线用grid命令来控制。
gridon/off命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。
给坐标加边框用box命令来控制。
boxon/off命令控制是加还是不加边框线,不带参数的box命令在两种状态之间进行切换。
例1-8在同一坐标中,可以绘制3个同心圆,并加坐标控制。
程序如下:
t=0:
0.01:
2*pi;
x=exp(i*t);
y=[x;2*x;3*x]';
plot(y)
gridon;%加网格线
boxon;%加坐标边框
axisequal%坐标轴采用等刻度
1.5图形的可视化编辑
MATLAB6.5版本在图形窗口中提供了可视化的图形编辑工具,利用图形窗口菜单栏或工具栏中的有关命令可以完成对窗口中各种图形对象的编辑处理。
在图形窗口上有一个菜单栏和工具栏。
菜单栏包含File、Edit、View、Insert、Tools、Window和Help共7个菜单项,工具栏包含11个命令按钮。
1.6对函数自适应采样的绘图函数
fplot函数的调用格式为:
fplot(fname,lims,tol,选项)
其中fname为函数名,以字符串形式出现,lims为x的取值范围,tol为相对允许误差,其系统默认值为2e-3。
选项定义与plot函数相同。
例1-9用fplot函数绘制f(x)=cos(tan(πx))的曲线。
命令如下:
fplot('cos(tan(pi*x))',[0,1],1e-4)
1.7图形窗口的分割
subplot函数的调用格式为:
subplot(m,n,p)
该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。
在每一个绘图区允许以不同的坐标系单独绘制图形。
例5-10在图形窗口中,以子图形式同时绘制多根曲线。
二。
其他二维图形
2.1其他坐标系下的二维数据曲线图
1.对数坐标图形
MATLAB提供了绘制对数和半对数坐标曲线的函数,调用格式为:
semilogx(x1,y1,选项1,x2,y2,选项2,…)
semilogy(x1,y1,选项1,x2,y2,选项2,…)
loglog(x1,y1,选项1,x2,y2,选项2,…)
其中常用的是semilogy函数,即后标为x的是在x轴取对数,为y的是y轴坐标取对数。
loglog是xy轴都取对数。
例子,
clc;clear;closeall;
x=0:
.1:
10;
y=2*x+3;
subplot(211);%subplot(m,n,p)或者subplot(mnp)。
subplot是将多个图画到一个平面上的工具。
其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一列的,一共m行,如果m=2就是表示2行图。
p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。
plot(x,y);
gridon
subplot(212);
semilogy(x,y);
gridon%表示在画图的时候添加网格线。
2.极坐标图
polar函数用来绘制极坐标图,其调用格式为:
polar(theta,rho,选项)
其中theta为极坐标极角,rho为极坐标矢径,选项的内容与plot函数相似。
例1-12绘制r=sin(t)cos(t)的极坐标图,并标记数据点。
程序如下:
t=0:
pi/50:
2*pi;
r=sin(t).*cos(t);
polar(t,r,'-*');
2.2二维统计分析图
在MATLAB中,二维统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:
bar(x,y,选项)
stairs(x,y,选项)
stem(x,y,选项)
fill(x1,y1,选项1,x2,y2,选项2,…)
例1-13分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。
程序如下:
x=0:
pi/10:
2*pi;
y=2*sin(x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y,''g'')');axis([0,7,-2,2]);
subplot(2,2,2);stairs(x,y,'b');
title('stairs(x,y,''b'')');axis([0,7,-2,2]);
subplot(2,2,3);stem(x,y,'k');
title('stem(x,y,''k'')');axis([0,7,-2,2]);
subplot(2,2,4);fill(x,y,'y');
title('fill(x,y,''y'')');axis([0,7,-2,2]);
MATLAB提供的统计分析绘图函数还有很多,例如,用来表示各元素占总和的百分比的饼图、复数的相量图等等。
例1-14绘制图形:
(1)某企业全年各季度的产值(单位:
万元)分别为:
2347,1827,2043,3025,试用饼图作统计分析。
(2)绘制复数的相量图:
7+2.9i、2-3i和-1.5-6i。
程序如下:
subplot(1,2,1);
pie([2347,1827,2043,3025]);
title('饼图');
legend('一季度','二季度','三季度','四季度');
subplot(1,2,2);
compass([7+2.9i,2-3i,-1.5-6i]);
title('相量图');
三。
隐函数绘图
MATLAB提供了一个ezplot函数绘制隐函数图形,下面介绍其用法。
(1)对于函数f=f(x),ezplot函数的调用格式为:
ezplot(f):
在默认区间-2π ezplot(f,[a,b]): 在区间a (2)对于隐函数f=f(x,y),ezplot函数的调用格式为: ezplot(f): 在默认区间-2π ezplot(f,[xmin,xmax,ymin,ymax]): 在区间xmin ezplot(f,[a,b]): 在区间a (3)对于参数方程x=x(t)和y=y(t),ezplot函数的调用格式为: ezplot(x,y): 在默认区间0 ezplot(x,y,[tmin,tmax]): 在区间tmin 例1-15隐函数绘图应用举例。 程序如下: subplot(2,2,1); ezplot('x^2+y^2-9');axisequal subplot(2,2,2); ezplot('x^3+y^3-5*x*y+1/5') subplot(2,2,3); ezplot('cos(tan(pi*x))',[0,1]) subplot(2,2,4); ezplot('8*cos(t)','4*sqrt (2)*sin(t)',[0,2*pi]) 四。 三维图形 4.1三维曲线 plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同。 当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。 当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵列数。 例1-16绘制三维曲线。 程序如下: t=0: pi/100: 20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z); title('Linein3-DSpace'); xlabel('X');ylabel('Y');zlabel('Z'); gridon; 4.2三维曲面 1.产生三维数据 在MATLAB中,利用meshgrid函数产生平面区域内的网格坐标矩阵。 其格式为: x=a: d1: b;y=c: d2: d; [X,Y]=meshgrid(x,y); 语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素的个数,矩阵Y的每一列都是向量y,列数等于向量x的元素的个数。 2.绘制三维曲面的函数 surf函数和mesh函数的调用格式为: mesh(x,y,z,c) surf(x,y,z,c) 一般情况下,x,y,z是维数相同的矩阵。 x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。 函数类别指令说明 网状图 mesh, ezmesh 绘制立体网状图 meshc, ezmeshc 绘制带有等高线的网状图 meshz 绘制带有“围裙”的网状图 曲面图 surf, ezsurf 立体曲面图 surfc, ezsurfc 绘制带有等高线的曲面图 surfl 绘制带有光源的曲面图 曲线图 plot3, ezplot3 绘制立体曲线图 底层函数 surface Surf函数用到的底层指令 line3 plot3函数用到的底层指令 等高线 contour3 绘制等高线 水流效果 waterfall 在x方向或y方向产生水流效果影像表示 pcolor 在二维平面中以颜色表示曲面的高度 例1-17绘制三维曲面图z=sin(x+sin(y))-x/10。 程序如下: [x,y]=meshgrid(0: 0.25: 4*pi); z=sin(x+sin(y))-x/10; mesh(x,y,z); axis([04*pi04*pi-2.51]); 此外,还有带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz。 其用法与mesh类似,不同的是meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。 例1-18在xy平面内选择区域[-8,8]×[-8,8],绘制4种三维曲面图。 程序如下: [x,y]=meshgrid(-8: 0.5: 8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2,2,1); mesh(x,y,z); title('mesh(x,y,z)') subplot(2,2,2); meshc(x,y,z); title('meshc(x,y,z)') subplot(2,2,3); meshz(x,y,z) title('meshz(x,y,z)') subplot(2,2,4); surf(x,y,z); title('surf(x,y,z)') 3.标准三维曲面 sphere函数的调用格式为: [x,y,z]=sphere(n) cylinder函数的调用格式为: [x,y,z]=cylinder(R,n) MATLAB还有一个peaks函数,称为多峰函数,常用于三维曲面的演示。 可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。 例1-19绘制标准三维曲面图形。 程序如下: t=0: pi/20: 2*pi; [x,y,z]=cylinder(2+sin(t),30);%圆柱化 subplot(2,2,1); surf(x,y,z); subplot(2,2,2); [x,y,z]=sphere;%球化 surf(x,y,z); subplot(2,1,2); [x,y,z]=peaks(30);多峰函数 surf(x,y,z); 4.3其他三维图形 在介绍二维图形时,曾提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,使用的函数分别是bar3、stem3、pie3和fill3。 bar3函数绘制三维条形图,常用格式为: bar3(y) bar3(x,y) stem3函数绘制离散序列数据的三维杆图,常用格式为: stem3(z) stem3(x,y,z) pie3函数绘制三维饼图,常用格式为: pie3(x) fill3函数等效于三维函数fill,可在三维空间内绘制出填充过的多边形,常用格式为: fill3(x,y,z,c) 例1-20绘制三维图形: (1)绘制魔方阵的三维条形图。 (2)以三维杆图形式绘制曲线y=2sin(x)。 (3)已知x=[2347,1827,2043,3025],绘制饼图。 (4)用随机的顶点坐标值画出五个黄色三角形。 程序如下: subplot(2,2,1); bar3(magic(4)) subplot(2,2,2); y=2*sin(0: pi/10: 2*pi); stem3(y); subplot(2,2,3); pie3([2347,1827,2043,3025]); subplot(2,2,4); fill3(rand(3,5),rand(3,5),rand(3,5),'y') 例1-21绘制多峰函数的瀑布图和等高线图。 程序如下: subplot(1,2,1); [X,Y,Z]=peaks(30); waterfall(X,Y,Z) xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis'); subplot(1,2,2); contour3(X,Y,Z,12,'k');%其中12代表高度的等级数 xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis'); 隐函数三维曲面 用matlab画隐函数曲面matlab是一款功能强大的通用工程数学软件。 利用matlab的作图功能可以轻而易举地绘制出各种复杂函数图形。 利用ezplot甚至可以直接绘制隐函数曲线F(x,y)=0而无需将其写成y=f(x)的形式。 然而十分可惜的是与之对应的ezsurf和ezmesh却对隐函数曲面F(x,y,z)=0的绘制无能为力。 那么matlab究竟有没有用来绘制诸如F(x,y,z)=0的命令呢? 答案毫无疑问是肯定的。 事实上利用matlab的等值面函数isosurface就可以轻松搞定。 关于isosurface的具体用法大家可以自己参看help。 下面两个函数就是我利用isosurface编写的通用隐函数曲面绘制命令。 1.隐函数曲面网格图函数implicitmesh functionh=implicitmesh(f,xlimit,ylimit,zlimit,gd) %implicitmesh(f,span,gd): 画隐函数曲面f(x,y,z)=0的网格图,%各坐标范围均限定在span=[lb,ub], %网格数为gd,默认为25 %可以分别设置,如[20,25,30],分别代表xyz方向的网格数 %implicitmesh(f,xspan,yspan,zspan,gd): 画隐函数曲面f(x,y,z)=0, %各坐标范围分别限定在xspan,yspan,zspan %h=implicitmesh(...): 画隐函数曲面并输出句柄 例一: implicitmesh(inline('x.*y+z.^2'),[-55])%注意*\^一定要设成点运算 例二: f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。 implicitmesh(f,[-11],[30,20,10]) 例三: f=@(x,y,z)(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3; g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09; impl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 绘图 曲线拟合
![提示](https://static.bdocx.com/images/bang_tan.gif)