juaner's Blog

千里之行,始于足下。

M文件编写技巧

1、写m文件时,选中某段程序内容,ctrl+i让matlab帮你自动对齐程序。

2、注释掉一段程序:

   方法一:块注释符号:%{、%}。

   方法二:用if 0 ... end,但缺点是不够直观。

   方法三:选中要注释的内容,右键菜单选择Comment或者Uncomment。

   方法三:快捷键ctrl+R和ctrl+T。

3、ctrl+F2做标签,ctrl+g 跳至某一行,这些快捷键都很实用。

4、 Ctrl+C 中断正在执行的操作。如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断。MATLAB这时可能正疲于应付,响应会有些滞后。

5、close all 如果开了多个绘图窗口,用这个命令将它们一起关掉。

6、clc:清屏;clear 变量名;clear all。clc并没有清除工作空间,只是清除了显示;clear是从工作空间中删除所有的变量。

7、cell模式
在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了。cell模式相当于将其中的代码拷贝到命令窗 口中运行。两个%后接一个空格(%% )开始一个cell。将输入光标放到一个cell中时,背景将变为浅黄色,Ctrl+Enter执行cell中的代码。执行cell中代码时不需要保存m文件,该m文件可以不在路径列表中。cell模式中,断点不起作用,当然,调用的子程序中的断点还是正常的。


8、 Tab补全
对名称记得不太清楚的命令,可以输入开头的几个字母,然后按Tab键,当只有一个以这些字母开头的命令时,将自动补全命令名,否则显示一个命令名列表,方便从中选择。当然,只在命令窗口中有效。

9、长命令行:

  如想另起一行输入命令,在末尾加上“...”即可,如:

  s=1-1/2+1/3-1/4+1/5-1/6+1/7 ...
   -1/8+1/9-1/10+1/11-1/12

10、保存、重载内存变量

可以将内存变量保存为一个二进制的M文件,以后还可以恢复回来。

save june;或者 save june x y z;(后者是只保存内存变量中的部分变量值)

重载时输入:

load june;

save myfile VAR1 VAR2;

load myfile;
 

11、查找路径

what显示当前目录下的文件;加上路径后,可显示输入的路径下所有的文件。

一下两个命令分别显示,编辑M文件:

type myfile;

edit myfile;

12、实录指令 diary

diary my_diary

指令

diary off;

 

 

数据可视化

1、二维绘图

一、plot(y)

  注意:plot(y)函数以向量索引为横坐标值。

二、plot(x,y)

 x,y均可为向量和矩阵,特殊的情况是:如果x,y均为mXn矩阵时,将绘得n条不同颜色的连线。绘制规则为:以x矩阵的第i列分量作为横坐标,矩阵y的第i列分量为纵坐标,绘得第i条连线。

三、plot(x,y,s)

  此格式用于绘制不同的线型、点标和颜色的图形,其中s为字符,可以代表不同的线型,点标和颜色。常见的可用字符及其意义如下所示意:

  - 实线; :点线;  -.点划线; --虚线;  y黄色;  m紫红色;  c蓝绿色;  r红色;  g绿色;

   b蓝色; w 白色;  k 黑色;   .点;     o圆;    +加号;    *星号;    x x符号;

  s方形;  d菱形;   v下三角;   ^上三角;   <左三角;  >右三角;  p正五角形。

square:正方形;diamond:菱形;pentagram:五角星;hexagram:六角星

例如:单窗口多曲线绘图

方法一:>>plot(t,y,t,y1,t,y2)

方法二:

>> t=0:0.1:10;
>> y=sin(t);
>> y1=sin(t+0.25);
>> y2=sin(t+0.5);
>> y3=cos(t);
>> y4=cos(t+0.25);
>> y5=cos(t+0.5);
>> plot(t,[y',y1',y2'.y3',y4'y5']);

绘制带有形状的图形:

>> x=0:0.5:20;
>> y=sin(x);
>> plot(x,y,'-.rd')

四、fplot命令

  fplot用于指导如何通过函数来取得绘图的数值点矩阵。该命令通过内部的自适应算法来动态决定自变量的取值间隔。

命令为:fplot(function,limits),limits定义x轴或x轴和y轴的取值范围。

        fplot(function,limits,LineSpec),LineSpec定义绘图的线型、颜色和数据点等。

        fplot(function,limits,tol);tol表示相对误差容忍度。

 

五、ezplot命令

   略

2、三维绘图

一、plot3

调用格式为:

plot3(X1,Y1,Z1,...)或者plot3(X1,Y1,Z1,LineSpec,...)

二、mesh命令

该命令与plot3不同的是它可以绘出在某一区间内完整的曲面,而不是单根曲线。其调用格式如下:

mesh(X,Y,Z)或者mesh(Z)或者mesh(...,C)。X和Y必须均为向量,若X和Y的长度分别为m和n,则Z必须为m×n的矩阵,也即[m,n]=size(Z)。

三、surf命令

    该命令的调用方法与mesh命令类似,不同的是mesh函数绘制的图形是一个网格图,而surf命令绘制得到的是着色的三维曲面。着色的方法是再得到响应的网格后,对每一个网格依据该网格所代表的节点的色值来定义这一网格的颜色。调用方法如下:

surf(Z)或者surf(X,Y,Z)或者surf(X,Y,Z,C)或者surf(...'PropertyName','PropertyValue')或者surf(axes_handle,...)或者h=surf(...)。

3、基本三维绘图命令的改进命令

一、meshgrid,meshc和meshz

    meshgrid命令的作用是将给定的区域按一定的方式划分成平面网格,该平面网格可以用来绘制三维曲面,调用方法如下:

[X,Y]=meshgrid(x,y)。

meshc是在用meshc命令绘制的三维曲面图下绘出等高线,调用方式和mesh相同。

meshz是再mesh函数的作用之上增加绘制边界面的功能,调用方式与mesh一样。

二、surfc

surfc与meshz类似,在surf命令绘制的图形上加绘等高线,调用方式与surf命令一样。

三、waterfall

该命令用于绘制形似瀑布流水形状的网线图,调用格式与mesh相同。

4、另外的图形有特殊图形函数,略。

5、图形处理

一、图形标注:

   1.1   坐标轴标注和图形标题,具体代码如下:

   xlabel('string');

   xlabel(...,'PropertyName',PropertyValue,...);

   xlabel('fname');x,y,z,title的用法一样。

    其中string是标注所用的说明语句,fname是一个函数名,‘PropertyName’,用于定义相应标注文本的属性和属性值,包括字体大小,字体名和字体粗细等。

  如:title(‘正弦函数’,‘fontsize’,12,‘fontweight’,'bold','fontname','隶书')

   1.2   用文本标注图形

    使用text或gtext命令对图形进行文本注释。使用text进行标注时需要定义用于注释的文本字符串和放置注释的位置,而对于gtext命令进行标注却可以使用鼠标来选择标注文字放置的位置。

   用法如下所示:

   text(3*pi/4,sin(3*pi/4),'\leftarrowsin(t)=.7.7','FontSize',16)

   text(3*pi/4,sin(3*pi/4),'sin(t)=-.7.7\rightarrow','HorizontalAlignment','right’,'FontSize',16)

   1.3  图例标注

    对数值结果进行绘图时,会在一张图中出现绘制多条曲线的情况,这时可以用legend命令为曲线添加图例区分它们。该函数能够为图形中所有的曲线进行自动标注,并以输入变量作为标注文本。调用格式如下:

    legend('string1','string2',...)

    legend(...,'Location',location)

    标注的位置可以通过定位代号来定义,代号的说明如下:

    0:自动定位,使得标注图标与图形重叠最少;

    1:默认值,置于图形的右上角;2:置于左上角;3:左下角;4:右下角;-1:右外侧。

    例如:h=legend('cos','sin',2);

    1.4 坐标轴的控制

    axis([xmin xmax ymin ymax])

    axis([xmin xmax ymin ymax zmin zmax cmin cmax])

    axis'控制字符串';

    另外:zoom函数控制坐标轴缩放,grid函数控制坐标轴网格,box函数控制坐标轴封闭。

   1.5 图形数据取点

    使用取点命令ginput可以方便地通过鼠标读取二维平面图中任一点的坐标值。调用格式如下:

   [x,y]=ginput(n);//用户可以通过鼠标选择n个点,它们的坐标值保存在[x,y]中,可通过enter键结束取点;

   [x,y]=ginput;取点的数目不受限制;

   [x,y,button]=ginput(...);返回值button记录了在选取每个点时的相关信息。

6、绘制带有箭头的坐标

方法一:隐藏坐标轴,然后自己用 plot 画坐标轴,用text写刻度。

>> x=-5:10;
>> y=-5:10;
>> plot(x,y);
>> axis off
>> hold on
>> plot([0 0],[min(y) max(y)],'k',[min(x) max(x)],[0 0],'k');%画出坐标轴

>> text(max(x)-0.3,-0.3,'x') %标出坐标轴的名称
>> text(-0.5,max(y)-0.4,'y')


>> ax=[max(x),max(x)-0.3,max(x)-0.3;0,0.2,-0.2];
>> fill(ax(1,:),ax(2,:),'k');   %填充小三角
>> ay=[0,0.15,-0.15;max(y),max(y)-0.4,max(y)-0.4];
>> fill(ay(1,:),ay(2,:),'k');

 

方法二:就是先打开一个图用命令:figure,再用axes命令就可以建立一个带有箭头的直角坐标系。

x1=linspace(0,1,100);
y1=x1.^2;
figure1 = figure('PaperPosition',[0.6345 6.345 20.3 15.23],'PaperSize',[20.98 29.68]);
axes1 = axes('Parent',figure1);
hold(axes1,'all');
plot1 = plot(x1,y1);
annotation1 = annotation(figure1,'arrow',[0.131 0.131],[0.92 0.96]);
annotation2 = annotation(figure1,'arrow',[0.88 0.96],[0.108 0.108]);

关于用annotation绘制箭头,可以参考 http://www.matlabsky.com/thread-13465-1-1.html

axes('position', [0.55 0.65 0.3 0.2]);[0.15 0.15 0.3 0.2]是归一化的坐标,1表示整个figure的大小。四个数依次是坐标左下角起点坐标和长度,宽
度。

 7、图形的打印和输出

  print -dformat filename

  print函数必须紧跟在plot函数之后使用。格式为:print(图形句柄,存储格式,文件名);

  • 图形句柄,如果图形窗口标题栏是“Figure 3”,则句柄就是3.用gcf可以获取当前窗口句柄。
  • 指定存储格式。常用的有:
    • png格式:‚-dpng‘ (推荐这一种,与bmp格式一样清晰,文件也不大)
    • jpeg: ‚-djpeg‘(文件小,较清晰)
    • tiff: ‚-dtiff‘
    • bmp: ‚-dbitmap‘(清晰,文件极大)
    • gif: ‚-dgif‘(文件小但不清晰)

  例如: >> mesh(peaks);

         >> print(gcf,'-djpeg','F:\mesh');

         >> mesh(peaks);
         >> saveas(gcf,'F:\3','jpeg')

 

从下面的这段断码里主要学习画出一些特殊的函数曲线:

>> x=0:0.1:10;
y=10*x.^2;
subplot(221);
plot(x,y);%x,y都是线性坐标
title('plot(x,y)');grid on;

subplot(222);
semilogx(x,y);%x是对数坐标,即将x取10的对数
title('semilogx(x,y)');grid on;

subplot(223);
semilogy(x,y);%y是对数坐标,即将y取10的对数
title('semilogy(x,y)');grid on;

subplot(224);
loglog(x,y);%x和y都是对数坐标,即将x和y取10的对数
title('loglog(x,y)');grid on;