在作图应用中的若干问题.ppt

上传人:本田雅阁 文档编号:2733579 上传时间:2019-05-09 格式:PPT 页数:110 大小:2.95MB
返回 下载 相关 举报
在作图应用中的若干问题.ppt_第1页
第1页 / 共110页
在作图应用中的若干问题.ppt_第2页
第2页 / 共110页
在作图应用中的若干问题.ppt_第3页
第3页 / 共110页
在作图应用中的若干问题.ppt_第4页
第4页 / 共110页
在作图应用中的若干问题.ppt_第5页
第5页 / 共110页
点击查看更多>>
资源描述

《在作图应用中的若干问题.ppt》由会员分享,可在线阅读,更多相关《在作图应用中的若干问题.ppt(110页珍藏版)》请在三一文库上搜索。

1、1,MATLAB在作图应用中的若干问题,充分的利用这个软件 刘正君 http:/ zjliu,2,几种软件,MATLAB MATHEMATICA MAPLE ORIGIN MATHCAD,3,软件介绍,Mathematica是由S. Wolfram领导开发的,它 有强大的数值计算和符号计算能力。 Maple不但具有精确的数值处理功能,而且具有无以伦比的符号计算功能。Maple的符号计算能力还是MathCAD和MATLAB等软件的符号处理的核心。,4,软件介绍,Origin有很强的画图能力,在曲线拟合、图形编辑等方面很好。 MathCAD是一个交互式的数学系统软件,集文本编辑、数学计算、程序编辑

2、和仿真于一体。MathCAD也可以看作是一个功能强大的计算器,其规则简单。,5,网络资源,对于MATLAB除了MathWorks公司主(这 里提供很多信息,如:新的程序包、新闻, 版本的信息等)。而一些论坛是相互交流的平 台,如: http:/ MATLAB board http:/www.smth.org MathTools board http:/www.matlab- MATLAB大观园,6,1.画图函数句柄的使用,每个画图函数含有的输入参数是很多的,然而我们在看函数的帮助(help)的时候,所能得到的只是一些基本的信息。我们利用 dd = function_name(x,y,z,);

3、dt=get(dd) dt就含有了这个函数的全部使用信息。 请看下面的例子:,7,8,9,2.从句柄中获取、修改信息,有时为了需要,我们需要对所得的图像进行编辑,如加入题注、字体修改、改动线型以及坐标轴范围的改动等。另外从图像上也可以获得一些信息,如数据等。 使用句柄可以完成上面的要求。 然而句柄的缺点就是处理少数的图形时,它花费的时间要常些。在处理大量的图形的时候,就可以显示出它的方便了。 下面的例子是获得图形数据的例子:,10,11,3.一些常用的句柄,gcf 当前图形(figure)的句柄; gca 当前坐标轴(axes)的句柄; gco 当前对象(object)的句柄; 注:当前对象有

4、时需要人为地确定一下,这个操作我们 可以用鼠标去确定,点击一下要确定的对象(这个对象可以是一条曲线、一个标注)就可以了。,12,4.利用句柄修改图形,这里常用的两个函数是get和set。 get 是获得相应的句柄信息; set 是进行设定; gcbo :返回当前指向正在被调用的对象的句柄 findobj 可以查找图形对象 在使用set设定的时候,注意参数的类型,如字符型、double型、还有结构数组等。,13,5.双Y轴曲线的绘制,以下是做两个函数: y1=sin(x); 0H,Ha,Hb=plotyy(0:.1:2*pi,sin(0:.1:2*pi),0:.1:2*pi,exp(0:.1:2

5、*pi); legend(Ha,Hb,sin(x),exp(x),0) set(Ha,linestyle,:) 图形如下:,14,15,6.双Y轴图形的标注,在前面的画图语句中: H,Ha,Hb=plotyy(0:.1:2*pi,sin(0:.1:2*pi),0:.1:2*pi,exp(0:.1:2*pi); 这里的H,Ha,Hb就是相应的句柄; 我们可以用get(*)获得它们的信息,这里面H是一个 1x2的double array型数据。我们直接get(H)是不可以的, 这样get(H(1)就可以了,得到的结果如下:,16,17,7.双Y轴曲线的标注,上面的三屏显示中我们注意一下用红条标出的

6、一行语句: YLabel = 107.001 而我们知道函数ylabel是一个坐标轴标注的函数,而这里它确实作为一个plotyy函数的一条信息,实际上它是一个子句柄。 写下如下两行语句: d1=get(H(1),ylabel); get(d1) 会得到如下的一些信息:,18,19,20,8.双Y轴曲线的坐标标注,我们注意到MATLAB命令窗的画兰颜色的 那一行, String = 这是加入文本信息的一个参数选项。 为此我设计了如下的语句:,21,8.双Y轴曲线的坐标标注,所用的几行语句: d1=get(H(1),ylabel); set(d1,string,sin(x); d2=get(H(2

7、),ylabel); set(d2,string,exp(x); xlabel(x zjliu) 得到的图形如下:,22,23,9.绘制图上图,有时为了需要,需要在图上画图,可能是为了局部放大,或其他目的。 看如下这段程序: figure; t=0.1:.1:2*pi;y=sin(t)+exp(t); plot(t,y,-); title(绘制底图) axes(position,0.25,0.45,0.4,0.3) plot(t,sin(t),r:,t,cos(t),g-.) title(绘制图上图,fontName,楷体_GB2312,. fontsize,20,color,Magenta)

8、 xlim(0 2*pi); 效果见下页:,24,25,26,27,10.多子图的绘制,有时为了比较,需要将几幅图形以阵列的形式画出来,这时就要用到subplot函数。这是一个2x2图形阵列的分布绘制的小程序: t=linspace(0,2*pi,200); figure; subplot(221) plot(t,sin(t) subplot(222) plot(t,cos(t) subplot(223) plot(t,tan(t) subplot(224) plot(t,cot(t) 绘制的结果如下:,28,29,10.多子图的绘制,有时画图的时候,阵列并不是mxn这样的情况,比如说第一行是

9、两幅图;而第二行是一幅图,这时我们就要变通的使用subplot函数了,请看这个例子: t=linspace(0,2*pi,200); figure; subplot(221); plot(t,sin(t) subplot(222); plot(t,cos(t) subplot(212); plot(t,tan(t) 其结果如下:,30,31,10.多子图的绘制,有时用subplot函数来分布图形阵列是可能图形的定位让我们感到不是很理想,这时还有一个办法可以采用,就是利用axes函数来“随心所欲”的定位。看这个例子: t=linspace(0,2*pi,200); figure; axes(po

10、sition,0.1,0.5,0.3,0.4) plot(t,sin(t) axes(position,0.6,0.1,0.3,0.4) plot(t,cos(t) 结果如下:,32,33,11.图形标注的一些问题,常用的几个标注的函数是: text; xlabel (ylabel, zlabel); title 在标注的时候字体,位置以及方向等可以使用MATLAB自己默认的,也可以自己去设定。,34,11.图形标注的一些问题,下面以xlabel为例,讲一下常见的几个问题: xlabel(thit); %标注上脚标 xlabel(Y_Lib); %标注下脚标 花括号的作用是使多个字符都处于相同

11、的状态。 xlabel(zjliu,on BBS); %多行标注 效果见下图:,35,36,12.图形的保存,我们可以直接在figure框上选取相应的菜单条进行图形保存,可是在运行时间很长的程序中用命令实现图形的“自动”保存,会节省我们的时间,带来方便。相应的语句是: h=figure; saveas(h,zjliu,jpg); saveas(gcf, output, bmp); 在MATLAB中支持的图片格式很多,有.bmp, .jpg, .tif, .eps 等格式。,37,13.图形的边框设置,画出的图形四周的坐标轴常见有两种情况,可用如下的语句来切换: set(gca,box,off)

12、; set(gca,box,on); 效果见下图:,38,39,14.坐标轴方向的修改,MATLAB中默认的坐标轴方向是(二维情况): Y轴:向上; X轴:向右。 这里将用下面一段程序实现坐标轴的方向 调整,40,14.坐标轴方向的修改,t=0:.1:1.2; figure; hg=plot(t,t.2,r) set(hg,Marker,h) set(gca,YDir,reverse); % 坐标轴反向 set(gca,XAxisLocation,top); % 刻度移位 set(gca,box,off) set(gca,color,none) po=0.13 0.06 0.775 0.815

13、; set(gca,position,po); tz=text(0.8,0.3,y=x2) set(tz,fontsize,18) xlabel(x,fontsize,18) ylabel(y,fontsize,18) 效果见下图:,41,42,15.坐标值的修改,有时为了需要,对画出的曲线需要修改坐标轴的坐标,下面列举一下几种情况: (1)除去刻度 方法1:编辑图的axis属性,可以去掉坐标值 方法2:语句实现 A=cell(1,6); set(gca,YTickLabel,A);set(gca,XTickLabel,A) 效果见下图:,43,44,15.坐标值的修改,(2)修改坐标 语句实

14、现: 我们用axes句柄的xticklabel (或yticklabel) 这一项就可以了。 看下面这一段程序:,45,15.坐标值的修改,figure; subplot(121) t=1e-4:1e-6:3e-4; plot(t,log10(t),r) tr=text(1.4e-4,-3.6,y=log_10(x) set(tr,fontsize,16) subplot(122) t=1e-4:1e-6:3e-4; plot(t,log10(t) tr=text(1.4e-4,-3.6,y=log_10(x) set(tr,fontsize,16) aa=get(gca,xticklabel

15、); set(gca,xticklabel,aa) 效果见下图:,46,47,16.放大所画的图形,MATLAB所画出的图形是其默认的大小,我们也可以对图形的大小进行重新设定: set(gcf,position,x0 y0 xL yL); set(gcf,outerposition, get(0,screensize); % 最大化,48,17.改变图形的长宽比例,有时为了美观,需要改变一下图形的长宽比例,用如下的语句就可以了: set(gca,position,x0,y0,xL,yL) x0,y0 表示axes的位置; xL,yL表示axes的长和宽。,49,18.坐标轴标注的角度调整,有时

16、需要对坐标轴标注的文字方向进行调整,如下处理即可: a=xlabel() set(a,Rotation,35) 效果见下图:,50,51,19.问题解答1,问题1: 对图中特定一个区域,有没有方法可以实现:把鼠标放在该区域的任何位置时,在鼠标附近或者图的某一位置可以自动显示该区域的中心坐标。 张晓娟,52,19.问题解答1,程序如下,这个问题在MATLAB 中利用GUI解决。,53,54,55,56,19.问题解答1,执行效果见下图:,57,58,20.曲线拟合,二维曲线的拟合 李社,59,20.曲线拟合,相关函数: polyfit; %多项式拟合 lsline %最小二乘拟和曲线 fit p

17、olyfit函数是依据最小二乘的原理去 拟合数据,60,20.曲线拟合, X = 2 3.4 5.6 8 11 12.3 13.8 16 18.8 19.9; plot(X,+) lsline 结果如下:,可用 H=lsline; get(H) 来获得相应的信息,61,20.曲线拟合,polyfit函数的使用(请看如下示例):, x=1:5; xk=1:0.01:5 y=3.5 4.6 5.5 3.2 2; p=polyfit(x,y,2) p= -0.5571 2.9029 1.1800 yk=polyval(p,xk); plot(x,y,+,xk,yk) ylim1.5 6 xlim(0

18、 6),结果如右图:,62,21.分形蝴蝶 (from BBS),如下简单的程序即可生成: t=1:10000; p=0.2*sin(3*t)+sin(4*t)+2*sin(5*t)+1.9*sin(7*t)-0.2*sin(9*t)+sin(11*t); polar(t,p) 结果如右图:,63,22.图形拷贝,这里使用copyobj函数,希望能给批量 画图带来方便,看下面的例子:,64,65,23.对数刻度曲线图的绘制,用loglog函数可以实现双对数坐标轴的绘制,例子: subplot(121) t=0:.1:3*pi; loglog(2+cos(t),2+sin(t) subplot(

19、122) plot(2+cos(t),2+sin(t) set(gca,YScale,log) set(gca,XScale,log) set(gca,Xdir,Reverse) 所得图形见下图:,66,67,24.对数刻度曲线图的绘制,semilogy函数可以绘出半对数刻度曲线图,就是Y轴是对数坐标,而X轴是正常的坐标,它的使用同plot函数。 画出的图形如右图: 而semilogx函数得到的图形就是X轴取对数了。,68,25.用鼠标在图上标注文字,gtext函数可以实现用鼠标来确定标注文字的位置,在命令窗这样输入就可以了: gtext(BBS) 同时还可以这样的设定字号: ff=gtext

20、(BBS,FontSize,20) get(ff)可以获得gtext函数的更多参数信息 效果如下图所示:,69,70,71,26.数据光滑,smooth3函数可以使三维数据光滑化, 下面这个例子是从help smooth3中得到 的。,72,73,27.由函数表达式作图,已知一个“函数”的解析表达形式,然后根据这个 函数画出图形。 _王海峰 这个在求解超越方程时可以起到“预测”的作用。 ezplot可以实现标题所示的目的,相关的函 数还有: ezcontour;ezcontourf;ezmesh;ezmeshc; ezplot3; ezpolar; ezsurf; ezsurfc,74,27.

21、由函数表达式作图,以ezplot函数为例介绍这类函数的使用:,75,76,28.解超越方程的一个方法,在不同专业中一般会遇到不同的超越方程,有的甚至很复杂。例如一个方程 f(x)=0;可以用plot函数画出y=f(x)这个 函数的曲线,找到它的零点大概位置, 再用二分法,获得更精确的数值解。 下面给出一个例子:,77,% 90 - x - 4.5- 45*atan(x) x=-100:.1:100; f=90-x-4.5-45*atan(x); figure;plot(x,f); xa=-100; xb=100; fa=90-xa-4.5-45*atan(xa); fb=90-xb-4.5-4

22、5*atan(xb); while abs(fa-fb)1e-8; x=(xa+xb)/2; f=90-x-4.5-45*atan(x); if fb*f0; fb=f; xb=x; else fa=f; xa=x; end end text(20,100,x= num2str(xa),fontsize,22);set(gca,fontsize,18),程序,78,result,79,解方程的函数,solve fsolve roots fzero,80,29.灰度网格图(question from BBS),81,可行的方法,1、使用fill函数循环填充 2、使用imshow或image函数

23、下面给出使用imshow函数的结果,82,程序,A=(1-rand(6,8)*255; figure; imshow(A,) ; % image(A) % get color set(gca,ydir,normal) set(gca,Position,0.129688 0.049688 0.820234 0.840625) hg=colorbar; set(get(hg,Title),String,HIT) dd=m/s; ss=get(hg,yticklabel); dd=repmat(dd,size(ss,1),1); set(hg,yticklabel,ss,dd) set(gca,vi

24、sible,on) box off set(gca,TickDir,in) %坐标刻度方向,83,84,85,30.三维物体打孔,X,Y,Z=sphere(99); ii=find(X.2+Y.2)0.3); Z(ii)=NaN; figure; h1=surf(X,Y,Z); colormap(spring) shading interp rotate(h1,-20 2.2,75.1),86,图,87,31.改变坐标轴刻度间距,这里使用gca句柄中xtick(ytick,ztick)的数值来 完成目的,88,89,32.MATLAB 的动画功能,有些问题如果能用一个动画来演示,能 表现出一个

25、动态的过程。下面这个例子源于 avifile函数的帮助的里面的一个例子,程序见 下页:,90,32.MATLAB 的动画功能,fig=figure; mov = avifile(exampleb.avi) x=linspace(0,10,256);len=length(x); y=5*sin(x)+3*randn(1,len); h=line(color,y,LineWidth,2,erasemode,xor); for i=1:200 axis(0,10,-15,15) set(h,xdata,x,ydata,y); set(gca,Color,b); drawnow; grid on pa

26、use(0.01); y=y 5*sin(10+i*x(2)+3*randn(1); y=y(2:len+1); title(模拟心电图); F = getframe(gcf); mov = addframe(mov,F); end mov = close(mov);,91,32.MATLAB 的动画功能,动 画 演 示,92,32.MATLAB 的动画功能,再做一个转动的小球的动画,程序如下:,93,32.MATLAB 的动画功能,fig=figure; mov = avifile(examplea.avi) x = -pi:.2:3*pi; for i=1:length(x) X,Y,Z

27、= SPHERE(100); surf(X+6*sin(x(i),Y+6*cos(x(i),Z) hold on surf(Z,X+6*sin(x(i)+pi/3),Y+6*cos(x(i)+pi/3) surf(X+6*sin(x(i)+2*pi/3),Z,Y+6*cos(x(i)+2*pi/3) plot3(6*sin(x x(1),6*cos(x x(1),zeros(1,length(x)+1),r) plot3(zeros(1,length(x)+1),6*sin(x x(1),6*cos(x x(1),b) plot3(6*sin(x x(1),zeros(1,length(x)+

28、1),6*cos(x x(1),m) hold off axis(-8 8 -8 8 -8 8) set(gca,Position,0.07 0.02 0.905 0.905) title(小球运行在轨道上) F = getframe(gca); mov = addframe(mov,F); end mov = close(mov);,94,32.MATLAB 的动画功能,动 画 演 示,95,32.MATLAB 的动画功能,这个动画相应程序有200行左右,在这 里就不贴了,96,33.MATLAB中的声音,通过下面的几个语句听一下matlab得到的 声音: load handel; soun

29、d(y,Fs);wavwrite(y,Fs,handel.wav) load chirp; sound(y,Fs);wavwrite(y,Fs,chirp.wav) load gong; sound(y,Fs);wavwrite(y,Fs,gong.wav) load laughter;sound(y,Fs);wavwrite(y,Fs,laughter.wav) load splat; sound(y,Fs);wavwrite(y,Fs,splat.wav) load train; sound(y,Fs);wavwrite(y,Fs,train.wav),97,33.MATLAB中的声音,g

30、ong,98,laughter,99,handel,100,chirp,101,splat,102,train,103,34.使用MATLAB看电影,matlab和vc,vb,delphi一样好,同样支持各 种软件协议,我们运用现在流行的activex技 术就可以达到播放功能。直接在matlab中引用 Windows Media Player 的 ActiveX ,写简单的 几行代码就可以了,104,程序,% matlab播放视频文件(MTV:海阔天空) close all hf=figure(Position,120 70 600 500); h=actxcontrol(MediaPlaye

31、r.MediaPlayer.1, 0,0,600,500,gcf); set(h,FileName,HKTK.asf);,105,106,35.Multiframe图像的制作,在matlab6p5toolboximagesimdemos 路径下的mri.tiff这样的图像如何制作的问 题,现在我尝试着用这样的办法可以(程序在 下面列出): ,107,108,程序,clear for k=1:4; Y=rand(256,256,3)*255; imwrite(uint8(Y),AAAAA.tiff, WriteMode,append); end,109,110,end,谢谢大家! 祝大家学习愉快!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1