数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
楼主: HUASHI3483

Matlab详细教程

  [复制链接]
 楼主| 发表于 2004-4-14 20:06:11 | 显示全部楼层
2.8 储存及读取数据  

--------------------------------------------------------------------------------

我们在使用MATLAB过程中,免不了希望将运算过程中的某些数据「储存」起来,以便下次使用再「读取」利用。「储存」和「读取」的指令分别是save及load,而save的数据型态又分为:(1)双位元格式 (binary format) 的 MAT-file,(2) ASCII 格式的 ASCII-file。MAT-file  
是以双位元字元储存,可让电脑在读出/入(input/output) 速率加  
快,其格式为test.mat(test为档名),MATLAB将档案的型态预设为MAT-file;而ASCII-file则是以可辨识的字元储存,但会降低电脑在读出/入的速率,其格式为test.dat(test为档名)。如果你的数据是只在MATLAB中产生及被使用,那最好使用MAT-file。ASCII-file则必须用在当数据
档要为其它不是MATLAB的应用软体读取时。  


另外要注意,当save成MAT档是储存变数本身,而非直接储存变数的数据;而save成ASCII档则是直接储存变数的数值。  

这二者储存的差异,造成在读取MAT档和ASCII档的数据有所不同,详见以下的范例。  


须注意的是在储存及读取数据时,MAT-file或是ASCII-file的档最好为矩阵型态,否则可能在读取时有困难。数据储存成矩阵的大小可以为m×n,其中m是列的数目,n则为行的数目。  


以下就是几个save, load的使用范例  

>> x=1:5; y=11:15; % 先产生二个列阵列 (row array} x, y  

>> save data1 x y % 是将 x,y 二个变数的数值存入 data1 这个MAT-file,  

%即data1其实是data1.mat。data1.mat 的内容为变数x, y,而非(1:5, 11:15) 的数据  

>> save data2.dat x y -ascii % 如果要将data1改以ASCII格式储存,则须加上-ascii  

% 的选项。data2.dat 的内容为(1:5, 11:15) 的数据  

>> type data2.dat % type 指令可以将 data2.dat 的内容列出


>> load data1 % 读取 data1.mat 档  

>> x, y % 叫出 data1.mat中的变数来读取其内容(1:5, 11:15)


>> load data2.dat % 读取 data2.dat 档  

>> x2=data2(1,; y2=data2(2,; % 将data2中的第一及第二列数据分别以x2及y2  

%变数读入,之后在运算中即可使用这二列数据  

>> x=21:25; y=31:35;  

>> save data3.dat x y -ascii  

>> load data3.dat;  

>> x3=data3(1,; y3=data3(2,:); % 将data3中的第一及第二列数据分别以x3及y3 变数读入  

%,之后在运算中即可使用这二列数据  

>> A=[1 2 3; 4 5 6];  

>> save data4.dat A -ascii %是将A阵列的数值存入data4这个ASCII-file  

>> load data4.dat  

>> x4=data4(:,1); % 令 x4 为 data4 的第一行数据  

>> y4=data4(:,2); % 令 y4 为 data4 的第二行数据  

>> z4=data4(:,3); % 令 z4 为 data4 的第三行数据  



--------------------------------------------------------------------------------

   
 楼主| 发表于 2004-4-14 20:06:37 | 显示全部楼层
2.9 其它绘图功能

--------------------------------------------------------------------------------

我们在前面多少都说明过简易的二维绘图功能,例如在图上加注说明的指令有title, xlabel,ylabel,除此之外还有二个指令 text, gtext 可以在图中加上文字用以说明图中的曲线或图形代表什么。text是依据所绘图的座标来放置文字说明,其语法为text(x,y, 'string'),x,  
y是要放置说明的座标值,string是说明的文字。gtext则是依据滑鼠或上下左右游标键来放置文字说明,其语法为gtext('string')。我们来看几个例子:  

>> x=linspace(0,2*pi,30); y=sin(x); z=cos(x);  

>> plot(x,y,x,z) % 划二条曲线 y=sin(x), z=cos(x)  

>> text(2.5,0.7,'sin(x)') % (2.5,0.7)是依据绘图大小的座标值  

>> gtext('cos(x)') % 将滑鼠移至适当位置再按滑鼠键  


一般的 x-y 图在横轴及纵轴皆是以线性尺度来绘图,如果要绘图的数据的 x 或 y 值变化范围太大,就须要改用对数 (log) 尺度来绘图才可得到合理的图。MATLAB 提供三种对数尺度的绘图指令:semilogx,semilogy, loglog,它们的作用分别是x轴以对数尺度绘图,y  
轴以对数尺度绘图,x 和 y 轴以对数尺度绘图。我们来看几个例子,藉以说明在何种场合须要用对数尺度绘图。  

>> y=0:0.1:10; x=10.^y  

>> plot(x,y) % 会画出的看不出所以然的图  

>> semilogx(x,y) % 改以对数尺度绘图就清楚多了  


>> x=[0 2 5 7 10 12 15 17 20 21];  

>> y=[0.1 0.2 0.5 0.6 0.9 1 1.2 1.26 1.22 1.2];  

>> plot(x,y) % 先以线性尺度绘图,再分别以三种对数尺度绘  

>> semilogx(x,y) % 图,注意各个图长像会改变  

>> semilogy(x,y)  

>> loglog(x,y)



--------------------------------------------------------------------------------
   
上一页 下一页 讲义大纲   
 楼主| 发表于 2004-4-14 20:06:59 | 显示全部楼层
3.1.1 横轴和纵轴的控制

--------------------------------------------------------------------------------

要控制绘图的横轴及纵轴比例,可以用 axis配合下列的相关的选项:  
axis([xmin xmax ymin ymax])  以 xmin xmax 设定横轴的下限及上限,以 ymin ymax 设定纵轴的下限及上限   
axis auto  横轴及纵轴依照数据大小的上下限来订定,横轴及纵轴比例是4:3   
axis square  横轴及纵轴比例是 1:1   
axis equal  将横轴纵轴的尺度比例设成相同值  
axis xy  预设值使用卡氏座标即是将图原点设在左下角横轴由左往右增纵轴由下往上递增   
axis ij  使用矩阵格式即是将图原点设在左上角横轴不变纵轴由上往下递增   
axis normal  以预设值画纵轴及横轴  
axis off  将纵轴及横轴取消  
axis on  恢复纵轴及横轴  


上述的各个指令的语法也可以将关键字放在括弧内的单引号之间,如axis(' ')。


以下是应用 axis的范例:  

>> x=linspace(0,2*pi,30); y=sin(x); z=cos(x);  

>> plot(x,y,x,z)  

>> axis off  

>> axis on  

>> axis('square','equal')  

>> axis('xy','normal')  



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:07:19 | 显示全部楼层
3.1.2 子图

--------------------------------------------------------------------------------

要将数个相关的图画在同一页时,可以用subplot这个指令。其语法为 subplot(m,n,p),其中 m, n代表绘图成 m x n 个子图,m表示在 y方向有 m 个图, n表示在 x 方向有 n 个图,p 是代表第几个子图。下例是以 subplot分别画出线性及对数尺度的四个子图:  

>> x=[0 2 5 7 10 12 15 17 20 21];  

>> y=[0.1 0.2 0.5 0.6 0.9 1 1.2 1.26 1.22 1.2];  

>> subplot(2,2,1), plot(x,y) % 画左上角的图  

>> subplot(2,2,2), semilogx(x,y) % 画右上角的图  

>> subplot(2,2,3), semilogy(x,y) % 画左下角的图  

>> subplot(2,2,4), loglog(x,y) % 画右下角的图  



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:07:42 | 显示全部楼层
3.1.3 图形放大及缩小

--------------------------------------------------------------------------------

zoom 指令可以将图形放大或缩小,若要将图形放大时用 zoom on,zoom out,当不再须要放大或缩小图形时用 zoom off。  

>> M=peaks(25); % peaks 是MATLAB内建的一个像山峰的特别函数,25是这个  

>> plot(M) % 函数矩阵的大小,如果数值愈大则画出的山峰图愈平滑  

>> zoom on % 开始放大图形,每按一次Enter键图形就放大一次  

>> zoom out % 开始缩小图形,每按一次Enter键图形就缩小一次  

>> zoom off % 停止图形放大或缩小功能



--------------------------------------------------------------------------------
 楼主| 发表于 2004-4-14 20:08:10 | 显示全部楼层
3.1.4 函数分布的快速绘图

--------------------------------------------------------------------------------

fplot的指令可以用来自动的画一个已定义的函数分布图,而无须产生绘图所须要的一组数据做为变数。其语法为fplot('fun',[xmin xmax ymin ymax]),其中 fun为一已定义的函数名称,例如 sin, cos等等;而 xmin, xmax, ymin, ymax  
则是设定绘图横轴及纵轴的下限及上限。以下的例子是将一函数 f(x)=sin(x)/x在-20 x 20,-0.4 y 1.2之间画出:  

>> fplot('sin(x)./x',[-20 20 -0.4 1.2])  

>> title('Fplot of f(x)=sin(x)/x')  

>> xlabel('x'), ylabel('f(x)')



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:08:28 | 显示全部楼层
3.1.6 其它的功能

--------------------------------------------------------------------------------

如果我们须要在所画的图中的曲线的某处加上符号,而又可以随意的放置这些符号,则可以用指令ginput方式,它容许我们以滑鼠或上下左右游标在萤幕上输入要加上符号的座标。下面的例子是一个有8个峰顶及峰谷的函数分布图( y = sin (x) / x  
),我们以滑鼠方式将符号加在这些峰值上,藉以突显这些极值,其语法为 [x,y]=ginput(n)。  

>> x=linspace(-2*pi,2*pi,60);  

>> y=sin(x).^2./(x+eps); % 注意加上eps可避免当x趋近零时,y会无法定义  

>> plot(x,y)  

>> [a,b]=ginput(8); % 依序从萤幕输入8点的座标  

>> hold on  

>> plot(a,b,'co') % 依据输入的座标值将符号画在图上适当位置  

>> hold off




--------------------------------------------------------------------------------
 楼主| 发表于 2004-4-14 20:09:16 | 显示全部楼层
3.2.1 三维的曲线绘图

--------------------------------------------------------------------------------

plot3 可以用来画一个三维的曲线,它的格式类似 plot ,不过多了 z方向的数据。其与法可以是 plot3(X,Y,Z) 或是 plot3(X,Y,Z,'linetype'),其中的 linetype是设定画线的符号和颜色。下面的例子说明一个三维的曲线图:  

>> t=0:pi/50:10*pi;  

>> plot3(sin(t),cos(t),t)  

>> title('Helix'), xlabel('sin(t)', ylabel('cos(t)'), zlabel('t')  

>> axis('ij') % 加上这个指令,注意图的y轴及曲线方向改变了  



--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:09:41 | 显示全部楼层
3.2.2 曲面及等值线绘图

--------------------------------------------------------------------------------

如果要画一个三维的曲面,MATLAB是以meshgrid配合与mesh或surf指令来绘图。先要以meshgrid产生在x-y平面的二维的网格数据,再以一组z轴的数据对应到这个二维的网格,即可画出三维的曲面。以下的例子可说明上述的绘图过程。  

>> x=-7.5:0.5:7.5; y=x; % 先产生x及y二个阵列  

>> [X,Y]=meshgrid(x,y); % 再以meshgrid形成二维的网格数据  

>> R=sqrt(X.^2+Y.^2)+eps; % 加上eps可避免当R在分母时趋近零时会无法定义  

>> Z=sin(R)./R; % 产生z轴的数据  

>> mesh(X,Y,Z) % 将z轴的变化值以网格方式画出  

>> surf(X,Y,Z) % 将z轴的变化值以曲面方式画出  

>> mesh(peaks) % 直接将以定义的peaks函数以网格方式画出  

>> title('Mesh plot of peaks')


与三维绘图有关的还有等值线图,相关指令为contour,contour3。contour是将等值线图以二维图表示,其语法有几个方式。一是contour(Z),contour(Z,n),其中Z是一个二维矩阵,而  
n为等值线的数目(如果不给即以自动方式设定)。另一种语法则是将z轴的值对应到指定的x,y轴的值,语法为contour(X,Y,Z),contour(X,Y,Z,n),其中X,Y, Z代表x,y,z轴的数据。contour3则是将等值线以三维图表示,其语法与contour类似,只是将对应的关键字contour  
改成contour3,其余部份相同。  


以下的例子可以比较contour, contour3图示的不同:  

>> [X,Y,Z]=peaks; % x,y及z轴的数据由peaks函数定义  

>> subplot(2,2,1)  

>> contour(Z,20) % 画出peaks的Z轴二维等值线图,20为等值线的数目  

>> subplot(2,2,2)  

>> contour(X,Y,Z,20) % 画出peaks的二维等值线图,注意x,y轴与上图不同  

>> subplot(2,2,3)  

>> contour3(Z,20) % 画出peaks的Z轴二维等值线图  

>> subplot(2,2,4)  

>> contour3(X,Y,Z,20) % 画出peaks的三维等值线图,注意x,y轴与上图不同


--------------------------------------------------------------------------------
   
 楼主| 发表于 2004-4-14 20:09:58 | 显示全部楼层
第四章MATLAB函数

--------------------------------------------------------------------------------

工程问题:语音讯号分析


在这章我们将介绍MATLAB的内建函数,包括数学函数 例如三角函数、复数函数、多项式函数等 ,分析数据相关函数 计算平均值、最大最小值、排序等 、逻辑/选择函数 if-else等 和产生乱数方法 用来模拟随机发生事件 。虽然MATLAB提供上百种内建函数,万一你需要使用的特

别函数并不在其中,你也可以自行定义函数。


--------------------------------------------------------------------------------

第四章MATLAB函数  
4.1 数学函数  
4.2 数据分析函数  
4.3 选择指令及函数  
4.4 范例问题:语音讯号分析  
4.5 使用者自定函数  
4.6 乱数  
4.7 矩阵运算函数  
4.8 回圈  

--------------------------------------------------------------------------------
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-4-28 07:30 , Processed in 0.046922 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表