Tuesday, July 17, 2012

matlab 中如何读取文本文件

假定名为 test.txt 的文件中以下为文件内容 

你好,我的数据 
欢迎来到 
百思论坛 
www.baisi.net 
1 11 111 1111 
            2 22 222 2222       
3 33 333 3333 
4 44 444 4444 
            5 55 555 5555       

这样的文件怎么读入数据呢? 
方法有多种,现举两个比较简单实用的。 

方法一: 

在文件菜单中选择 file/import data,按照提示进行操作至结束。 
 command 窗口中输入 
>> whos 
Name           Size                   Bytes  Class 

data           5x4                      160  double array 
textdata       4x1                      300  cell array 

Grand total is 54 elements using 460 bytes 

>> data 

data = 

          1          11         111        1111 
          2          22         222        2222 
          3          33         333        3333 
          4          44         444        4444 
          5          55         555        5555 

>> textdata 

textdata = 

   '你好
   '欢迎来到
   '百思论坛
   'www.baisi.net' 

方法二: 

[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4) 
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。 
这里%s的个数和[a1,a2,a3,a4]对应。 
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4) 

a1 = 

   '1' 
   '2' 
   '3' 
   '4' 
   '5' 


a2 = 

   '11' 
   '22' 
   '33' 
   '44' 
   '55' 


a3 = 

   '111' 
   '222' 
   '333' 
   '444' 
   '555' 


a4 = 

   '1111' 
   '2222' 
   '3333' 
   '4444' 
   '5555' 
因以字符串的形式读入,所以有'' 

文件内容形式二(假定文件名为test2.txt): 

你好 
1 11 111 1111 
欢迎来到 
            2 22 222 2222       
百思论坛 
3 33 333 3333 
www.baisi.net 
4 44 444 4444 
            5 55 555 5555       

说明:这种内容格式的文件用上面的方法是不行的。 

以下是由chinamaker编写的一种方法: 
fidin=fopen('test2.txt');                               % 打开test2.txt文件              
fidout=fopen('mkmatlab.txt','w');                       % 创建MKMATLAB.txt文件 
while ~feof(fidin)                                      % 判断是否为文件末尾                
   tline=fgetl(fidin);                                 % 从文件读行    
   if double(tline(1))>=48&&double(tline(1))<=57       % 判断首字符是否是数值 
      fprintf(fidout,'%s\n\n',tline);                  % 如果是数字行,把此行数据写入文件MKMATLAB.txt 
      continue                                         % 如果是非数字继续下一次循环 
   end 
end 
fclose(fidout); 
MK=importdata('MKMATLAB.txt');      % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来 
>> MK 

MK = 

          1          11         111        1111 
          2          22         222        2222 
          3          33         333        3333 
          4          44         444        4444 
          5          55         555        5555

matlab坐标轴标注和特殊字体


坐标轴标注:
1. 控制坐标轴尺度长度:set(gca,'XLim',[-pi/2 pi])
2. 定制自己想标注的刻度:
      (1)set(gca,'XTick',[-pi/2:pi/4:pi])      (2)set(gca,'XTickLabel',{'-pi/2' '-pi/4:' '0' 'pi/4' 'pi/2' 'pi*3/4' 'pi'})
3. 反转坐标轴:set(gca,'XDir','reverse')
4. 上下标及latex公式
     输下标:_{wb}
     输上标:^{0.5}
     输latex公式:     text('Interpreter','latex',...     'String','$$\int_0^x\!\int_y dF(u,v)$$',...
     'Position',[.5 .5],...
     'FontSize',16)

在Matlab中输入上标、下标、特殊符号或字体:

bf,\it,\rm表示黑体,斜体,正体字符
上标用 ^(指数),下标用 _(下划线)
调用方式为: ^{任意字符}, _{任意字符}, 注意{}的使用!

希腊字母等特殊字符用 \加拼音 如:
α \alpha     β \beta         γ \gamma     θ \theta     Θ \Theta
Г \Gamma     δ \delta       Δ \Delta     ξ \xi         Ξ \Xi         Ω \Ommiga
η \elta     ε \epsilong     ζ \zeta       μ \miu       υ \nu         τ \tau
λ \lamda     Λ \Lamda       π \pi         Π \Pi       σ \sigma       Σ \Sigma
φ \phi       Φ \Phi         ψ \psi       Ψ \Psi       χ \chi         ω \ommiga
< \leq       > \geq        不等于 \neq       << \ll     >> \gg
正负 \pm     左箭头 \leftarrow     右箭头 \rightarrow     上箭头 \uparrow

体会以下两例:
figure, title('\zeta^{-t}sint');
figure, title('x~{\chi}_{\alpha}^{2}(3)');

Wednesday, July 11, 2012

MATLAB 颜色的使用

颜色的使用
        MATLAB提供了许多在二维和三维空间内显示可视信息的工具。例如,看一条sin函数的曲线图就会比一堆数据提供更多的信息。这种用图表和图形来表示数据的技术叫做数据可视化MATLAB不仅是一个强大的计算工具,并且在以引人入胜和直观方式可视地表示数据方面也很有特色。
       但是很多时候,一个简单的二维或三维图形不能一次显示出想要提供的全部信息。这时,颜色可以对图形提供一个附加的维数。前面章节讨论的许多绘图函数都可以接受一个可用的颜色参量,来增加这附加的维数。
       本章的讨论以研究颜色映象开始:如何使用、显示、修改和如何创建用户自己的颜色映象。然后,阐述在一个图形窗口中仿真多个颜色映象的技术或只使用颜色映象的一部分的技术。最后,讨论照明模型并提供例子。


1 颜色映象理解


       MATLAB有一个叫颜色映象的数据结构来代表颜色值。颜色映象定义为一个有三列和若干行的矩阵。利用01之间的数,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、黄、蓝三种颜色的强度,形成一种特定的颜色。一些有代表性的RGB值在表1中给出。
 1 简单颜色

Red
GreenBlue颜色
000
111
100
010绿
001
110
101洋红
011青蓝
2/32/31天蓝
10.50橘黄
0.500深红
0.50.50.5灰色
 有十个MATLAB函数产生预定的颜色映象。见表2
2 标准颜色影像 
hsv色彩饱和值(以红色开始和结束)
hot从黑到红到黄到白
cool青蓝和洋红的色度
pink粉红的彩色度
gray线性灰度
bone带一点蓝色的灰度
jethsv的一种变形(以蓝色开始和结束)
copper线性铜色度
prim三棱镜。交替为红色、橘黄色、黄色、绿色和天蓝色
flag交替为红色、白色、蓝色和黑色
        按缺省,上面所列的各个颜色映象产生一个64×3的矩阵,指定了64种颜色RGB的描述。这些函数都接受一个参量来指定所产生矩阵的行数。比如hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红和黄,到白。
       大多数计算机在一个8位的硬件查色表中一次可以显示256种颜色,当然有些计算机的显示卡可以同时显示更多的颜色。这就意味着在不同的图中,一般一次可以用三或四个64×3的颜色映象。如果使用了更多的颜色映象输入项,计算机必须经常在它的硬件查色表中调出输入项。比如,当在画MATLAB图形时背景图案发生了变化,就是发生了这种情况。所以,除非计算机有一次显示更多种颜色的显示卡,最好任何一次所用的颜色映象输入项数都小于256


2 颜色映象使用


       语句colormap(M将矩阵M作为当前图形窗口所用的颜色映象。例如,colormapcool装入了一个有64个输入项的cool颜色映象。colormap  default装入了缺省的颜色映象hsv
       函数plotplot3contourcontour3不使用颜色映象,它们使用列在plot颜色和线形表中的颜色。而大多数其它绘图函数,比如meshsurffillpcolor和它们的各种变形函数,使用当前的颜色映象。
       接受颜色参量的绘图函数中的颜色参量通常采用以下三种形式之一:(1)字符串。代表plot颜色或线型表中的一种颜色,比如,r 代表红色;(2)三个输入的行向量。它代表一个单独的RGB值,比如[.25   .50   .75];(3)矩阵。如果颜色参量是一个矩阵,其元素作了调整,并把它们用作当前颜色映象的下标。最后一种形式会在以后作更多讨论。


3 颜色映象显示


       可以用多种途径来显示一个颜色映象。其中一个方法是观察颜色映象矩阵的元素。


       » hot(8)
       ans =
           0.3333                 0
           0.6667                 0
           1.0000                 0
           1.0000    0.3333         0
           1.0000    0.6667         0
           1.0000    1.0000         0
           1.0000    1.0000    0.5000
           1.0000    1.0000    1.0000


       上面的数据显示出第一行是1/3红色,而最后一行是白色。另外,函数pcolor可以用来显示一个颜色映象。例如:


       » n=16;
       » colormap(jet(n))
       » pcolor([1:n+1;1:n+1] )
       » title(  Using Pcolor to Display a Color Map )


      因为上面这一段程序很有用处,它已经装入精通MATLAB工具箱中的函数mmshow中。


       » help mmshow
       MMSHOW PCOLOR Colormap Display
              MMSHOW uses pccolor to display the current colormap.
              MMSHOW(MAP) displays the colormap MAP.
              MMSHOW(MAP(N)) displays the colormap MAP having N elements.
              Examples:MMSHOW(hot)
                      MMSHOW(pink(30))
帮助信息
       MMSHOW  显示PCOLOR颜色映象
       MMSHOW  使用pcolor来显示当前颜色映象
       MMSHOW(MAP)  显示MAP颜色映象
       MMSHOWMAP(N))  显示一个有N个元素的MAP颜色映象
       例子:MMSHOWhot
             MMSHOWpink30))
       函数mmshow取和colormap同样的输入参量,但在这种情况下它用自己的伪彩色显示而不是把颜色映象施加到当前图形。
       另一种途径是使用MATLAB的函数rgbplot,它可以把颜色映象的各列分别画成红、绿和蓝色。例如:


       » rgbplot(hot)


       输出见附件中图2.


       图中显示红色分量首先增加,然后是绿色,最后是蓝色。rgbplotgray表示所有三列数据均匀线性地增加(三条线重叠)。
       最后,函数colorbar在当前的图形窗口中增加水平或垂直的颜色标尺以显示当前坐标轴的颜色映象。»colorbar( horiz ) 在当前的图形下面放一个水平的颜色条。» colorbar( vert ) 在当前的图形右边放一个垂直的颜色条。对无参量的colorbar,如果当前没有颜色条就加一个垂直的颜色条,或者更新现有的颜色条。下面的例子就演示了colorbar的用法。


       » [x,y,z]=peaks;
       » mesh(x,y,z);
       » colormap(hsv)
       » axis([-3   -3   -6  8])
       » colorbar