第三章 MATLAB程序设计基础.docx
- 文档编号:25192648
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:19
- 大小:24.74KB
第三章 MATLAB程序设计基础.docx
《第三章 MATLAB程序设计基础.docx》由会员分享,可在线阅读,更多相关《第三章 MATLAB程序设计基础.docx(19页珍藏版)》请在冰豆网上搜索。
第三章MATLAB程序设计基础
第三章MATLAB程序设计基础
chapter3:
FoundationofMATLABprogramdesign
一、数据及数据文件(DataandDatafile)
1.数据类型:
(Datamode)用于编程和计算的数据类型(表3—1)
数组:
字符数组(Characterarray)、
数值数组(Numericarray)—
包括整形(int8,uint8,int16,uint16,int32,uint32)单精度(signal),双精度(duble)(MATLAB最常用的变量类型),稀疏双精度(sparce)矩阵。
、
Int---Integrate.
Uint---UnsignedIntegerdata
单元数组(Cellarray)、
结构数组(Structurearray)
Java类(Javaclass)
函数句柄(Functionhandle)
在工作空间浏览器中不同的数据类型有着不同的图标标识,(见图3—2)_
2.数据文件(Datafile)
MATLAB支持的各种数据文件(ReadablefileformatsofMATLAB)及其调用方法和返回值:
(1)二进制数据文件:
(Binarydatefile)以.mat为扩展名。
是标准的MATLAB数据文件,以二进制编码形式存储。
.mat文件可以由MATLAB提供的save和load命令直接存取。
(2)ASCⅡ码数据文件:
(ASCⅡcodedatafile)扩展名为.txt,.dat等,可以是在MATLAB环境下存储的,也可能是其他软件的计算结果,可以被MATLAB调用,也可以用文本编辑器打开进行观察与修改。
可以用save和load命令进行读入和存取。
(3).图象文件:
(Graphicsfile)扩展名为.bmp,.jpg.tif等,用于图形图象处理,可以用imread和imwrite命令进行读入和存取。
(4).声音文件:
(Soundfile)扩展名为.wav,用waveread和wavwrite命令进行读入和存取。
Readablefileformats.
DataformatsCommandReturns
MAT-MATLABworkspaceloadVariablesinfile.
CSV-CommaseparatednumberscsvreadDoublearray.
DAT-FormattedtextimportdataDoublearray.
DLM-DelimitedtextdlmreadDoublearray.
TAB-TabseparatedtextdlmreadDoublearray.
Spreadsheetformats
XLS-ExcelworksheetxlsreadDoublearrayandcellarray.
WK1-Lotus123worksheetwk1readDoublearrayandcellarray.
Scientificdataformats
CDF-CommonDataFormatcdfreadCellarrayofCDFrecords
FITS-FlexibleImageTransportSystemfitsreadPrimaryorextensiontabledata
HDF-HierarchicalDataFormathdfreadHDForHDF-EOSdataset
Movieformats
AVI-MovieavireadMATLABmovie.
Imageformats
TIFF-TIFFimageimreadTruecolor,grayscaleorindexedimage(s).
PNG-PNGimageimreadTruecolor,grayscaleorindexedimage.
HDF-HDFimageimreadTruecolororindexedimage(s).
BMP-BMPimageimreadTruecolororindexedimage.
JPEG-JPEGimageimreadTruecolororgrayscaleimage.
GIF-GIFimageimreadIndexedimage.
PCX-PCXimageimreadIndexedimage.
XWD-XWDimageimreadIndexedimage.
CUR-CursorimageimreadIndexedimage.
ICO-IconimageimreadIndexedimage.
RAS-SunrasterimageimreadTruecolororindexed.
PBM-PBMimageimreadGrayscaleimage.
PGM-PGMimageimreadGrayscaleimage.
PPM-PPMimageimreadTruecolorimage.
Audioformats
AU-NeXT/SunsoundaureadSounddataandsamplerate.
SND-NeXT/SunsoundaureadSounddataandsamplerate.
WAV-MicrosoftWavesoundwavreadSounddataandsamplerate.
3.数据输入向导(Importwizard)
File菜单下的工具ImportWizard用于将各种类型数据文件中的数据导入工作空间,称为数据输入向导。
在Import对话框中输入需要导入的数据文件名后出现ImportWizard窗口,可预观测将要导入的数据、显示图象、播放声音等。
几种数据的导入:
(1)mat数据文件(matdatafile)
调入途径:
在importwizard窗口选择File选项,输入文件名;也可用Browse打开文件浏览器选择输入文件;也可选Clipboard,数据从剪贴板中调入。
Importwizard窗口内容:
左侧,变量名称、大小、类型。
右侧观察前10行10列信息。
Next:
显示数据输入向导窗口第二页。
(2)ASCⅡ码数据文件:
(ASCⅡcodedatafile)在importwizard窗口选择File选项,输入ASCⅡ数据文件名---选择显示数据内容(data)或头文本内容(textdata)---选择Next下一页进行导入内容选择(通过钩选决定将何变量导入工作空间)----按Finish完成导入操作或按Cancel终止数据的导入。
(3)图象数据文件:
(Graphicsdatafile)在importwizard窗口选择File选项,输入图形数据文件名---点击showimage(可在图象上拖曳放大区域)------按Finish完成数据导入(或按Cancel终止数据导入)。
(4)声音数据文件:
(Sounddatafile)在importwizard窗口选择File选项,输入声音数据文件名---点击PlaySound弹出一个显示声音数据波形的图形窗口(按Playagine按钮重新播放声音,按Done按钮关闭预观察窗口)------按Finish完成数据导入(或按Cancel终止数据导入)。
(5)剪贴板的数据:
(Clipboarddata)需要导入已存放在系统剪贴板中的数据,点数据输入向导窗口中的Clipboard选项,--Next进入下一页--按Finish完成数据导入(或按Cancel终止数据导入)。
二.M文件(M-file)
MATLAB文件以.m为扩展名存储,称为M文件,M文件有两种工作方式:
1,交互式命令操作方式(interactivemode)—通过命令窗口进行交互式操作;2,M文件(M-file)的编程工作方式(programmingmode)。
1.M文件编程:
(M-fileprogram)可用普通文本编辑器编制MATLAB文件,文件由纯ASCⅡ字符组成,确定文件名后加.m扩展名。
可以用在任何的文本编辑器中编辑,但MATLAB提供了一个专用的编辑/调试器,方便灵活,功能较多,推荐使用。
建立M文件的一般步骤:
(normalprocessofM-filecreating)
(1)打开文件编辑器:
(Openingthefileeditor)最简单的方法是在操作桌面的工具栏上选择新建文件键(NewM-File)或打开已有文件键(OpenFile),也可以在命令窗口输入命令edit建立新文件或输入editfilename,打开名为filename的M文件;
(2)编写程序内容:
(Composetheprogramcontent)编写新的文件或修改已有文件;
(3)保存文件:
(savefile)文件运行前必须完成保存操作,与一般的文件编辑保存操作相同(save或saveas);
(4)运行文件:
(runningfile)在命令窗口输入文件名即可运行。
如要在编辑器中直接完成运行,可在编辑器的Debug菜单下saveandrun选项,或按Run快捷键,最快捷的方法是直接按F5键执行运行。
M文件有两种形式:
命令(脚本)文件(ScriptFile)和函数文件(FunctionFile)
2.命令文件:
(ScriptFile)M文件中最简单的一种,是可用于自动重复执行的一组MATLAB命令和函数组合,不需输出输入参数,用M文件可以调用工作空间已有的变量或创建新的变量。
运行过程中产生的变量都是全局变量。
建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M文件即可。
运行命令文件时,只需在命令窗口键入文件名即可。
例:
用三角函数计算画出花瓣图形。
theta=-pi:
0.01:
pi;
rho(1,:
)=2*sin(5*theta).^2;%计算四种不同rho
rho(2,:
)=cos(10*theta).^3;
rho(3,:
)=sin(theta).^2;
rho(4,:
)=5*cos(3.5*theta).^3;
fork=1:
4
Subplot(2,2,k),
polar(theta,rho(k,:
))
end
将程序保存成名为petals的M文件,并运行。
注:
(1)‘%‘引导注释行,不予执行;
(2)不需要用“end”作为M文件的结束标志;
(3)若文件存放在自己的目录上,在运行文件前,应先将自己的目录设置为当前工作目录。
最简单方法:
在当前目录浏览器中设置。
(4)运行后存放在工作空间的变量可以用工作空间浏览器查看。
3。
函数文件(FunctionFile)
如果M文件的第一个可执行行以function开始,便是函数文件,每一个函数文件定义一个函数。
函数文件区别于命令文件之处在于命令文件的变量在文件执行完成后保留在工作空间中,而函数文件内定义的变量只在函数文件内起作用,文件执行完后即被清除。
例:
建立average函数用于计算矢量中单元的平均值。
functiony=average(x)
%AVERAGEMeanofvectorelements.
%AVERAGE(X),WhereXisavector,isthemeanofvectorelement.
%Non-vectorinputresultsinanerror.
[m,n]=size(x);
if(~((m==1)|(n==1))|(m==1&n==1))
error('Inputmustbeavector')
end
y=sum(x)/length(x);
将文件存盘,缺省状态下自动存储名为average.m的函数。
这样只要接受一个输入参数便可计算返回一个输出参数,与其他MATLAB函数一样使用。
例:
用已建立的average函数文件求1~99的平均值。
z=1:
99;
average(z)
函数文件的基本组成部分:
(1)函数定义行:
(thelinesforfunctionidentification)由function引导,并定义函数名、输入参数和输出参数,函数定义行必须放在文件的第一个可执行上。
可以设多个输入输出参数,如:
function[x,y,z]=sphere(theta,phi,rho)
也可以没有输出参数,如:
functionprintresults(x)
(1)H1行:
(LinesH1)lookfor查询时使用的;
(2)帮助文本:
(Helptext)建立在线查询信息;
(3)函数体:
(Functionbody)包含全部的用于完成计算及给输出参数赋值等工作的语句;
(4)注释:
(explanatorynotes)以%起始导行尾结束部分的说明文字。
可放置在程序中的任何部位。
2.局部变量与全局变量(LocalvariableandGlobalvariable)
用global就可以把一个变量定义为全局变量。
MATLAB中变量名是区分大小写的,习惯上常将大写字母定为全局变量。
如:
globalABC
三.程序结构(Structureofprogram)
8种控制程序流程(controlflowstatement)的语句:
for,while,if,switch,try,continue,break,return
1。
循环语句(Loopstatement)
(1)for语句:
forv=表达式通常为一个矢量,形式为:
m:
s:
n(初值:
步长:
終值)
语句体
end
例:
n=10
fori=1:
n
x(i)=(i+1).^2;
end
x
x=
49162536496481100121
例:
嵌套循环:
注意与end的配对。
m=3;n=4;
fori=1:
m
forj=1:
n
a(i,j)=1/(i+j-1);
end
end
formatrat
a
a=
11/21/31/4
1/21/31/41/5
1/31/41/51/6
例:
运用非1步长,产生0-20以内的偶数
fori=0:
2:
20
a(i/2+1)=i;
end
a
a=
02468101214161820
(2).While语句:
为条件循环语句。
循环不确定次数,只要表达式的结果非零,语句体就重复执行,直到循环条件不成立为止。
While表达式
语句体
end
例:
while循环,求解n!
达到100位数的第一个n是多少。
n=1;
whileprod(1:
n)<1e100
n=n+1;
end
n
n=
70
2.条件语句(Selectionstatement)
(1)if—end语句(simpleifstatement)
if表达式
语句体
end
(2)if—else--end语句
if表达式
语句体1;
else
语句体2:
end
当计算的表达式结果为真时执行语句体1,结果为假时执行语句体2。
例:
判断学生是否通过学业。
if((attendance>=0.90)&(grade>=60))
pass=1;
else
fail=1;
end
(1)if—elseif—end语句
if表达式1
语句体1;
elseif表达式2
语句体2;
else
语句体3;
end
例:
用色彩区分数据点的范围。
n=100;
x=1:
n;
y=randn(1,n);
holdon
fori=1:
n
ify(i)<-1
plot(x(i),y(i),'*g')
elseify(i)>=-1&y(i)<=1
plot(x(i),y(i),'ob')
elseify(i)>=1
plot(x(i),y(i),'xr')
end
end
holdoff
(3)分支语句:
switch—case—end
通过对某个变量值的比较做各种不同的执行选择。
形式:
switch表达式(数字或字符串)
case数字或字符串1
语句体1;
case数字或字符串2
语句体2;
……
otherwise
语句体n;
end
例:
检查input_num的数值.
switchinput_num
case-1
disp(‘negativeone’);%当input_num=-1时显示
case0
disp(‘zero’);%当input_num=0时显示
case1
disp(‘positiveone’);%当input_num=1时显示
otherwise
disp(‘othervalue’);%当input_num等于其他值时显示
end
(4)检测语句:
(Detectstatement)
try-catch语句用于检测错误并改变流程,形式:
try
语句体1
catch
语句体2
end
先执行try下面的语句体1,如没有错误,就跳出该结构,如出错误,则执行catch语句下面的语句体2。
可用lasterr函数查询错误信息,查询结果为空字符串时表示语句体1成功执行。
例:
判断错误语句的用法
n=4;
a=magic(3)
try
a_n=a(n,:
),%取a的第n行元素
catch
a_n=a(end,:
),%如取a的第n行出错,则改取a的最后一行
end
lasterr%显示出错原因
a=
816
357
492
a_n=
492
ans=
Indexexceedsmatrixdimensions.
(5)其他流程控制语句:
(Othercontrolflowstatement)
(a),continue语句:
用于控制for循环和while循环跳过某些执行语句。
例:
continue语句的用法.
fid=fopen('magic.m','r');%打开文件
count=0;%计数器置零
while~feof(fid)%判断是否到文件末尾
line=fgetl(fid);
ifisempty(line)|strncmp(line,'%',1)
%判断是否为空行或注释行
continue%如果是空行或注释行继续下一次循环
end
count=count+1;%如果不是空行或注释行计数器加1
end
disp(sprintf('%dlines',count));%显示行数
25lines
(b).break语句:
用于终止for循环和while循环的执行.
例:
break语句的用法.
fid=fopen(‘fft.m’,’r’);%打开文件
s=’‘;%清空字符数组
while~feof(fid)%判断是否为文件末尾
line=fgetl(fid);%从文件中读行
ifisempty(line)%如果是空行
break%如果是空行退出循环
end
s=strvcat(s,line);%如果不是空行,丛向连接字符数组
end
disp(s)%显示字符数组结果
(c)return语句:
用于终止当前的命令序列,并返回到调用的函数或键盘。
例:
return语句的用法.
functiond=det(A)%定义函数det(A)计算矩阵A的行列式
ifisempty(A)%如果矩阵是空的
d=1;
return%返回调用函数
else
…%计算过程略
end
四.数据的输入与输出(Dateinputandoutput)
MATLAB可以与其他外部应用程序进行交换,有关数据输入与输出的内容很多,以下为简要内容介绍:
1.数据的输入(Datainput)
常用方法:
(a)键盘输入:
(keyboardinput)数据少时较方便,多时不益使用;
(b)用M文件产生数据:
(GeneratedatabyM-file)通过运行已编制好的M文件把数据引入MATLAB工作空间,好处在于可用文本编辑器修改数据,适用于较多数据的输入;
(c)从ASCⅡ码文件装载数据:
(LoaddatafromASCⅡcodefile)对以ASCII码形式存储的文本格式的数据文件可用load命令直接读入MATLAB,其内容存放在以文件名命名的变量中
(c)利用fopen,fscanf,fread及MATLAB其他低层I/O命令读取数据:
用于读取其他外部应用程序建立的各种特定格式的数据。
2。
数据的输出(dataoutput)
(a)利用diary命令输出语句:
运行diary命令可以在当前工作目录上产生一个名为diary的日记文件,文件内容可以输出。
关闭日记文件的命令为dairyoff.
(b)利用Notebook获取数据:
于dairy用法相仿优点是文字质量高,版面规范,且M-book中的命令可以随时运行或修改,MATLAB工作空间中的数据随之改变。
运行Notebook要求计算机上装有MS-Word。
NOTEBOOKOpenanm-bookinMicrosoftWord(Windowsonly).
NOTEBOOK,byitself,launchesMicrosoftWordandcreatesanewm-bookcalled"Document1."
NOTEBOOK(FILENAME)launchesMicrosoftWordandopensthem-bookFILENAME.
NOTEBOOK('-SETUP')runsaninteractivesetupfunctionfortheNotebook.TheuserispromptedfortheversionofMicrosoftWordandthelocationsofseveralfiles.
NOTEBOOK('-SETUP',WORDVER,WORDLOC,TEMPLATELOC)setsuptheNotebookusingthespecifiedinformation.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 MATLAB程序设计基础 第三 MATLAB 程序设计 基础