matlab学习心得

时间:2024.5.9

matlab学习心得.txt31岩石下的小草教我们坚强,峭壁上的野百合教我们执著,山顶上的松树教我们拼搏风雨,严寒中的腊梅教我们笑迎冰雪。编程心得

1.helpwin只是寻找函数类,一般不如用doc(相当于帮助文档中的搜索),但在用doc搜索不到帮助文件时可用helpwin,如找有关\的帮助等;打开格式非标准的mat或xls等数据文件如dat文件或无后缀名的文件时,不要用打开方式打开,而应先打开应用程序如MATLAB或excel,然后在应用程序中打开数据文件,这样能得到正确的行数和列数;lookfor可对M文件的第一行进行关键字搜索,比help条件宽松;MATLAB大小写有区分。用which搜索路径;要打开matlab自带的m文件直接用open即可,不需要找到路径,会在当前目录和set path的路径中搜索。

2 矩阵的运算注意:标量与矩阵进行四则运算时该标量与矩阵的每个元素进行运算;两矩阵相乘左矩阵列数须等于右矩阵行数;矩阵除法有左除\(反斜杠)和右除/(斜杠),A\B=inv(A)*B,A/B=A*inv(B);方阵的乘方运算有四种:A^n,A^p,s^A,s.^A,其中A为方阵,n为整数,p为非整数,s为标量;A’表示矩阵A的转置,一般选中了Hermitian(共轭)复选框则元素带共轭;funm(A,’fun’)表示矩阵的函数运算,要求A是方阵,fun为矩阵运算函数名;给矩阵赋值时维数必须匹配,用方括号,一个分号为一行。

3.数组的运算注意:数组乘法运算符为.*,表示两数组中对应元素相乘;数组的除法运算符为.\和./,表示对应元素相除;数组与数组运算时,参与运算的数组必须同维,结果为数组中每个元素进行运算所得;直接用结构名赋值即省略了(1); varargout返回输出变量list即一系列变量名称;feval(@fun,var1,?)用var1,?试算[evaluate]fun的值;读二进制文件常用fopen()和fread()组合,matlab读fortran写出的二进制文件时往往要在fopen()中加'b';读文本文件常用textread()和fopen();fscanf()组合,要注意格式,最好读完后对照打开看看。

4.标准差std(x,flag,dim)默认flag=0,dim=1计算公式为 的平方根,flag=1时分母为n;可通过h=figure(i),后用get(h)获得图形对象所有属性的当前值,其格式为:属性名=属性值;结构数组可在域名后加(a,b)再加.变量名,调用时输变量名可使用tab完成;利用struct函数一次输入多个结构元素时注意用单元数组,用{}而非[]。

5. 左除和右除的两边不一定是方阵,当A为m*n矩阵,B为列向量时,A\B表示A*X=B在最小平方意义上的解,需对A进行QR分解,m<n时解通过A'*((A*A')\b)求得,m>n时解通过(A'*A)\(A'*b)求得,而A/B = (B'\A')';积分可以查一下积分命令quad 或者 trapz。

6.注解块操作符%{和%}必须单独成行否则不起应有作用;struct([])表示结构数组,name1.name2表示name1为结构数组;函数名切记不要与MATLAB内置函数重名否则会出现错误因为系统先从当前目录寻找匹配的函数;MATLAB可以把程序制作的动画生成avi格式的视频,须把avifile(),getframe(),addframe(),close()配合起来使用。

7.启动notebook后word文档的菜单栏中没有出现Notebook菜单项,可以依次单击工具-》自定义-》命令-》宏,选择保存于mbook.dot上的宏TemplateProject. mwNewNotebook.. MAIN(把他拖到菜单栏然后单击,没必要)就会出现Notebook菜单项;计算区(Calc Zone)不要弄,evaluate M-book一般也不要用;单元转换为文本可以常用。

8. 低级文件I/O函数很重要,因为它可读写二进制文件,便于与FORTRAN结合;读写之前先用fopen(filename,mode),注意都要加单引号,返回值如ans=0表示操作成功,-1表示不成功;一定要注意r和w因为w会删除原文件所有内容;读用fread(fid,count,precision,skip)其中precision如'uint8=>char'读取文本文件,注意在fclose(fid)之前是连续读的,不指定precision默认按字节读取可能会出现很多元素为0;fwrite(fid,A,precision,skip)用二进制格式写入文件,skip参数对于将数据插入到已知长度的记录中非常有用;重设文件指针位置用fseek(fid,offset,origin)表示在fid指定的文

件上按照origin给出的参照点,相对移动offset个字节,注意如果指针不在开头要重置到开头origin应选'cof'当前位置而不选'bof'文件开始,重置完后可用ftell(fid)知道指针当前位置相对于bof的字节数,还可用ferror(fid)查询错误信息;还可用frewind(fid)函数将文件位置指针返回到文件起始位置;从文本文件读字符串行用fgets(fid,nchar)表示读一行文本并带有行结束符,每次读nchar个字符直到遇上结束符。

9.如果运行的M文件有错误,而且在命令窗口又要运行M文件中定义错误的内置函数时可能会出现错误,这时应改工作目录;有些内置函数可在命令窗口运行但在M文件中运行可能会出现错误,如sphere(n);脚本M文件与命令窗口公用变量工作区,而函数M文件有单独的变量工作区,切实注意了;关系操作表达式返回的是逻辑型值即0和1。

10.数组维数扩展时下标不要用1,因这是默认下标用1后结果是重新赋值;不同数组类型转换如cell2struct等之前一定要先看数组尺寸size(array);变量名切记不要用函数名,否则调用函数时会出错还不知错在哪,因MATLAB优先使用变量名而非函数名,比如定义了变量max再调用max()函数时就会报错Subscript indices must either be real positive integers or logicals;中括号加引号用于多个文件名可以,用于多个变量名不行;简单统计量比如最大值,最小值,平均值加减后再统计和统计后再加减结果一样;函数不管用或者出错应检查是否不小心加了等号。

11.设置坐标轴刻度和属性时用set(gca,'xtick',数值数组); set(gca,'xticklabel',字符串数组); 切记是label不要写成lable;用box off可以去掉右边和上边的刻度和边框;把右边和上边分别作为y和x轴可以加画图形,但最好不用plot而用line;有关坐标轴设置的例子可见我的程序plotNino.m;要实现坐标轴隔点标注数值且所有点间隔线均保留需设置两次坐标轴,第一次显示所有间隔线第二次用ax2=axes()后隔点标注;放大工具只对ax2有效;标注时字符矢量用{}且非数字字符必须加引号;注意annotation()中[x y w h]的x,y是对整个figure而言;标记单个数据点用scatter()即可。

12. MatLab小波分析工具箱中一些学习心得:进行多分辨率分析时,wavedec()得到的小波系数是由最后一层的低频系数和各层的高频系数首尾相连而成,不是相加;用wrcoef()可重构各单支系数的对应信号且saN+sdN+sdN-1+?+sd1近似等于原始信号s;用waverec()一次重构的结果和单支重构的和稍有差别但差别很小如e-15;用wavedec()时注意有些小波函数不能用如Morlet小波基等,具体可看wfilters();小波分解再重构后与原始信号相差最小的小波函数为db1即Haar小波基;

13. 只有函数式M文件才能定义函数,脚本文件和函数不能写入同一个m文件中,即脚本文件中不允许出现function()语句但可以调用同目录下函数文件中的函数;函数文件要想保留一些中间变量的值就要在函数外部调用因为函数调用结束时会销毁临时变量空间,需另写脚本文件,要不然就将需要导出的变量作为返回的参数或者用global申明全局变量;要使函数文件中的函数易被其他脚本文件调用,文件名最好为第一函数名;一张图中画多张子图时注意subplot(‘Position’,[ ])和axes(‘OuterPosition’,[ ])在[]中值一样时子图的位置大小不一样,axes的[]所给区域按比例缩小包含坐标轴标题等故值易确定但调用时要加(..,’Parent’,*),此外subplot()可有系统给定区域;

MATLAB中内置的函数

linspace(a,b,n) 生成a~b之间线性分布的行向量,n默认值为100。

logspace(a,b,n) 生成10^a~10^b之间按对数等分的n个元素的行向量,n默认50。 zeros(m,n) 生成m*n的全0矩阵; ones(m,n) 生成m*n的全1矩阵

rand(m,n) 生成m*n均匀分布的单位间隔上随机矩阵,取值范围0.0~1.0

randn(m,n) 生成m*n正态分布的随机矩阵,取值范围是整个实数区间

eye(m,n) 生成m*n的单位矩阵; magic(n) 生成n阶魔方矩阵,n>=3 triu(X) 生成X矩阵的上三角矩阵; tril(X) 生成X矩阵的下三角矩阵

flipud(X) 使矩阵沿水平轴上下翻转; fliplr(X) 使矩阵沿垂直轴左右翻转;

Flipdim(X,dim) 使矩阵沿特定轴翻转; rot90(X) 使矩阵逆时针旋转90度 cat(n,A1,A2,?,Am) n=1时子矩阵上下排列,n=2时子矩阵左右排列,n=3时子矩阵数m为第三维; repmat(A,行,列,页,??) 模块矩阵A按后边格式重复排列

ndims(P) 返回数组P的维数; size(P) 返回向量其元素为数组各维的大小; length(P) 返回数组P行数或列数的最大值

[L,U,P]=lu(X) 矩阵X的三角分解,U为上三角,L为下三角,P为单位阵的行变换矩阵

[U,S,V]=svd(X) 矩阵的奇异值分解,S为对角阵,U,V为酉矩阵,X=U*S*V’

[V,D]=eig(A,B,flag) 由flag制定算法计算矩阵A和B的特征值D和特征向量V,flag的可能值为chol或qz; [R,p]=chol(X) 表示使用Cholesky分解算法,若X对称正定则存在非奇异上三角阵R使R’*R=X,若X非正定则p为正整数R为有序上三角阵;[Q,R]=qr(A) 求正交矩阵Q和上三角阵R使A=QR;

T=schur(A,flag) 返回正交矩阵U和schur矩阵T使A=U*T*U’;

rsf2csf(VR,DR) 将实舒尔形式转化成复舒尔形式; gsvd(A,B) 广义奇异值分解; qz(A,B) 特征值问题的QZ分解; hess(A) 海森伯格形式分解;

sparse(A) 返回A的稀疏矩阵形式; full(S) 将稀疏矩阵转化为全元素矩阵; spy(S,’lineSpec’,markersize) 用图形显示矩阵,点表示矩阵中非零元素位置。 colmmd(S) 返回稀疏矩阵列的最小度排序向量p,按p排列后的矩阵为S(:,p)。

setfield(ps,{i,j,k},域名,赋值) 修改结构数组ps中域的存储内容,返回维数为i*j*k。 lower(string) 把字符串中的大写变为小写。

strncmp(‘str1’,’str2’,n)比较两字符串的前n个字符,str2可换为单元数组C,返回逻辑数组

lookfor name 寻找第一行注解H1中含有name的M文件。

findstr(str1,str2) 先比较两个字符串,然后在长的中找与短的匹配的子字符串,每找到一次返回匹配起始点的位置为数组元素。

fscanf(fid,format,size) 从fid指定的文件读size个数据并根据format指定的格式转换,其中format如%c,%f,%d等,size为[m,n]时表示m*n矩阵按列存放,缺省读全部数据; fprintf(fid,format,A) 按format指定格式转换矩阵A中数据并将它们写到fid指定文件,缺省fid时,数据输出在屏幕上。

Repmat(A,m,n) A为子矩阵,复制m*n次; fix(A) 返回数组中每个元素取整后的值; reshape(A,m,n ) 把数组A进行重新排列,按列方式操作;

Prod(A ) 若A为向量则返回元素乘积,若A为矩阵则返回每列元素的乘积;

Permute(A,[a b c d]) A为4维阵列,返回阵列的第1,2,3,4维为A的第a,b,c,d维 strcat(s1, s2, s3, ...) 把字符串或者单元数组s1,s2,s3进行水平连接

w=conv(u,v) 返回向量u和v的卷积,若m = length(u),n = length(v)则 ,j = max(1,k+1-n): min(k,m),k=1:m+n-1

[V,D] = eig(A) 返回A的特征向量矩阵V和特征值矩阵D

[S.field] = deal(X) 域名为field的所有域元素赋值为X

[Y1, Y2, Y3, ...] = deal(X{:}) 复制单元数组的内容给变量Y1,Y2,Y3,?

Num2cell(a,[i j]) a为数值阵列,返回单元阵列每个单元为a保持第i,j维尺寸不变的数组

《MATLAB基础与编程入门》

Page 2: MATLAB核心模块有两大分支分别以MATLAB为基础和以simulink为基础。MATLAB 2006b即MATLAB 7.3。MATLAB compiler能将M文件编译生成为函数库或可执行文件,使其能与其他语言如C/C++混合应用,MATLAB builder可将函数文件打包成com组件或.net组件、excel插件、java对象,将其应用程序算法集成到开发工具或应用软件中。MATLAB的工具箱可提供函数给用户直接使用,且其算法是开放和可扩展的。MATLAB提供了与各种设备进行数据I/O的交互工具和函数等。

Page 4: 工具箱包括:数学与数据分析,如spline 仿样,mapping 绘图、映射,genetic algorithm and direct research 遗传算法和正变形研究等;数据采集与测量测试,如database 数据库,excel link链接Excel等;信号处理与图象处理,如system identification系统辨识,wavelet 小波分析,filter design 滤波设计等;控制系统设计与分析,如 fuzzy logic 模糊逻辑,robust control 强控制等;财经与金融,如 financial time series 金融时间序列,GARCH 广义条件异方差等;应用程序集成与发布,如 MATLAB report generator 报告生成器,MATLAB web server 网络服务器,MATLAB builder for .NET 编码器等。 Page 5: simulink是框图设计环境,可对各种动态系统建模、分析和仿真,Stateflow可用来进行逻辑驱动过程的仿真。Simulink 可将用C、C++和fortran语言编写的算法集成到框图中,其实时代码生成工具可进行代码验证。

Page 9: Real-Time Workship(RTW)可生成标准的C/C++代码并具备生成其他语言代码能力

《MATLAB编程基础与典型应用》

Page 8: MATLAB默认每行命令产生的变量结果都显示,加上英文状态下;才不显示。可用连续3个或以上的黑点?表示续行,但notebook中不能用。%表示其后一行的内容为注释。 Page 10: 常用操作指令包括:clc, clear, clf, who, whos, delete <file>, which <file>, clear all, help <command>, save <name>, save <name x y >, load <name>, diary <name.m>, type <name.m>, what。

Page 13: 历史命令窗口点右键有很多实用功能。当前目录浏览器(CurrentDirectory)窗口可更改当前目录,打开M文件,导入MAT文件数据。工作空间浏览器窗口点右键可对变量进行编辑、绘图、保存,也可用save,load,whos,exist等命令管理变量。

Page 17: 可用help<topic>命令在命令窗口显示帮助内容,也可用helpwin<topic>命令打开帮助浏览器窗口并显示指定主题信息。还可用lookfor命令搜索包含字符的命令行,一旦发现就可用ctrl+C推出搜索过程。Demos目录下的主题信息提供图文并茂的演示。

Page 19: 变量名第一个字符必须是英文字母且区分大小写,不需要事先声明。一些关键字不能作为变量名使用如if,while,return,for等。系统预定义的变量和常数有ans,pi,eps,inf,nan,i,j,nargin,realmin,realmax,nargout,可被临时覆盖。

Page 26: 提取矩阵元素时,序号按列排列。

Page 37: 矩阵的乘方运算有四种。

Page 43: MATLAB中的关系运算符有<,<=,>,>=,==,~=;逻辑运算符有&,|,~,xor,&&(先决与),||(先决或),先决表示左边的运算符合要求就不需执行右边运算。

Page 54: 稀疏矩阵大部分元素为0,故只需储存非零元素的下标和元素值。

Page 72: 数值数组和字符串数组中存储单元的数据类型相同,使用()操作;单元数组中每个单元存放的数据可能都不一样,使用{}操作,获取单元数组内容时圆括号只显示单元,花括号才显示内容。

Page 77: 结构数组组织数据的能力比单元数组要强些,可通过struct(域名1,赋值,域名2,赋值??)函数创建;获取结构数组域中的具体内容使用符号.,也可用专用函数getfield()获取;修改结构数组中域存储内容的函数是setfield()。

Page 81: 多项式以行向量的形式存放且以降幂形式出现,若缺少某幂次项则该项系数为0 Page 134: 句柄是图形对象的标志代码,标识代码含有图形对象的各种必要的属性信息;图形对象的所有属性都是由属性名和属性值组成,对图形对象属性操作可实现不同表现效果,可通过句柄控制;用get(get(gca,'children'))命令可看到轴的子代的各种属性值;可对图形对象设置缺省对象属性来实现继承操作,还可用set(h,’.’,’.’)设置各种属性。 《精通MATLAB7编程与数据库应用》

Page 5: 为调试程序而进入debug方式时,提示符变为K>>;运算符两边的空格随意添加后无区别;在命令历史中查找,可将光标定位于某行后敲要查找的语句的首字母;可将用得多的几条语句选中后在右键菜单选”create shortcut”创立快捷键;命令窗口输入pathtool或选File->Set path可设置搜索路径。

Page 19: 函数的输入参数用圆括号括起来用逗号分隔,输出参数在等式左边用方括号;语句的续行可在结尾用省略号(?);一行中可写多个语句,语句用逗号或分号隔开,若想写完多行命令再运行可按shift + enter组合键;还可使用“Tab完成”,在命令和editor窗口写入文件名、变量、结构和函数名时只写入前面的几个字符后按Tab键。

Page 24: 变量名是否正确可用isvarname查看0表有误;变量类型包括三种,常用的是局部变量,全局变量要用global声明且每个使用函数都要声明,永久变量(一直在内存中)要用persistent声明。

Page 171: 程序开发的建议:

1. 化复杂为简单:将每个任务做成一个独立的函数,函数尽量短;用数学语言写出步骤和流程,再转换成程序语言;选择正确的数据结构(如哪种数组)。

2. 遵循的原则:使用描述性的变量名和函数名,尽量不用缩写;函数前面写帮助的注解,说明函数功能;一行不要超出80列以便打印;函数只被另一个函数调用,把被调函数作为子函数与主函数放在同一个M文件上。

3. 函数命名的唯一性:用which –all 函数名 检验。

4. 分步写程序,分步调试:对较大程序,一次写成一部分,然后测试;能正常工作且输出结果合理,再写下一部分;修改也一样,每次调试一部分。

5. 程序最后测试:用debugger,可记录下被执行的每一行代码;用不同的输入组合测试,让每一行至少执行一次。

Page 173: 在命令窗口的命令提示符下输入M文件名可运行该M文件;MATLAB与其它语言的区别之一是过程控制语句可能用到数组或矩阵;对if条件判断,若逻辑表达式非标量,那么它的所有元素值都非0,if条件才能满足,也可以是空数组,表示条件为假。

Page 175: 分支语句switch后的表达式可以是函数或数值或字符串;循环有两种:次数确定的和依条件结束的;for循环中可用数组控制循环次数,MATLAB把列数作为循环次数;for语句可写在一行,分隔符用逗号;continue回到循环头,break退出循环,嵌套循环中都作用最内层循环;错误控制语句try?catch?end执行时,try?catch范围内出现错误可转到代码段catch?end做出响应,若此段还有错误则结束程序执行;return语句可强制结束当前运行的程序。

Page 179: 脚本(scripts)与函数的区别:脚本简单执行一系列语句和需多次运行的文件,不

能接受输入参数也不返回输出结果,变量保存在基本工作区;函数有定义语句function,有输入输出,变量有单独工作区;输出用[],输入用()。

Page 181: 默认下M文件名与第一个函数名相同,若不同需用文件名引用函数;用exist函数识别是否为M文件函数,非0则是;用which函数找到M文件函数的源码;

《MATLAB程序设计与应用》

Page 242: 在M-book 中,在word与MATLAB之间进行传递的内容称为单元(Cell),输入输出是指对MATLAB而言;m-book最重要的操作就是输入单元的定义与执行,其方法是:先在文档中输入命令后选中命令行,再按组合键Alt + D(=Define Input Cell),则命令行变成绿色的输入单元,然后按组合键Ctrl + Enter(=Evaluate Cell),执行后产生蓝色的输出单元;也可选中命令行后直接按组合键Ctrl + Enter输入并执行;注意:命令和标点须在英文状态下输入,MATLAB的续行符不能用于m-book,它会自动换行无需加回车符,修改后执行新结果会覆盖掉老结果。

Page 247: 可用evaluate loop实现单元的循环执行,用purge output cells删去选中的输出单元,用undefine cells把单元转换为文本;输出格式控制包括输出数据控制和图形控制,可通过notebook->notebook options->embed figures in m-book是否选中控制输出图形是否镶嵌在m-book文档中;若输出图形背景色不是白色可在MATLAB命令窗口运行whitebg('white')再重新运行输入单元;可通过“样式和格式”修改Output等的样式。 Page 251: Simulink主要对动态系统进行建模、仿真和分析,提供图形用户界面GUI,用户可用鼠标从模块库中调用标准模块并适当连接以建模同时用参数对话框设置参数,建模后选择仿真参数和数值算法便可启动仿真程序对系统仿真;simulink仿真模型表现为方框图,其扩展名为.mdl,数学上体现了一组微分方程或差分方程,通常包含3类模块:信源(source)、系统(system)、信宿(sink仪器);可用format菜单调整模块方向,改变模块前景色、背景填充色或者模型背景色,产生阴影效果等,处理模块名,给连线加标志;模型连接须从一个模块的输出端连到另一个模块的输入端,默认是折线要用斜线需选中连线再按住shift键拖动;连线分支操作是鼠标移到分支点位置先按下ctrl键再拖动到目标模块的输入端;选定模块后再用模型编辑窗口edit菜单可设置模块参数,模块属性等。

Page 265: 系统仿真过程中,事先须对仿真算法、输出模式等仿真参数进行设置,方法是:从模型编辑窗口simulation菜单中选择configuration parameters命令打开仿真参数对话框设置仿真参数;设置仿真参数完后,从simulation菜单中选择start项便可启动当前模型的仿真,此时stop命令变成可选以供中途停止;为观察仿真结果变化轨迹可以:把输出结果送给scope模块或者XY graph模块,把仿真结果送到输出端口并作为返回变量后用MATLAB命令绘制该变量变化曲线,把输出结果送到to workspace模块从而直接存入工作空间后用绘图命令绘制出变量变化曲线;系统仿真步骤如下:建立系统仿真模型包括添加模块、设置模块参数以及进行模块连接等操作,设置仿真参数,启动仿真并分析仿真结果。

Page 134: 要在MATLAB中使用其他软件的图象需用[x,c]=imread(filename,fmt)读取该图象,其图像通常由数据矩阵x和色彩矩阵c组成,真彩色图像的数据矩阵为三维,三个面上数据分别是RGB三种颜色的强度值,每个元素对应图像中一个像素点;可用colormap(c)函数设置色图;影片动画制作有三个函数:moviein(n)建立一个足够大的n列矩阵,a(:,n)=getframe将n幅画面信息保存矩阵a中,movie(a,m)播放由矩阵a定义的画面m次;实时动画制作是先画出初始图形,再计算活动对象新位置并显示新对象擦除旧对象,可通过EraseMode属性实现一般选Xor,只绘制与屏幕颜色不一致的原对象点;可通过改变数据属性来重新绘图,没改变一次就应用drawnow命令刷新屏幕一次。

Page 311: mat文件是MATLAB数据存储的默认文件格式,以双精度二进制格式保存数据,它由128字节的文件头和其后的数据单元组成;MATLAB提供了一个子程序库使用户可以在C/C++,FORTRAN中直接调用这些子程序来创建和读取mat文件;操作mat文件的API函数封装于两个标准库文件:libmat.lib和libmx.lib,存放在\bin\win32相应子文件夹中,在\extern\include中有与前面两个库文件对应的.def文件:libmat.def,libmx.def,其导出函数原型位于同目录下的mat.h,matrix.h中,前者包含mat文件的创建读写等函数的定义,后者包含MATLAB中基本数据类型和矩阵的定义;在FORTRAN语言中mat文件操作函数有:matOpen(filename,mode), matClose(mfp), matDeleteVariable(mfp,name), matGetDir(mfp,name), matPutVariable(mfp,name,pm), matGutVariable(mfp,name,pm), matPutVariableAsGlobal(mfp,name,pm),其中mfp为指向mat文件的指针,name是读写mat文件的矩阵名称,num为矩阵数目,pm是mxArray结构体指针,mode为打开文件方式。 Page 315: MATLAB编译器(MCC)可将m语言编写的函数文件(脚本文件不行)转换成C/C++源代码,经编译链接后可生成函数库、可执行程序、COM组件等,从而提高程序执行效率丰富程序开发手段并隐藏算法源代码;使用MCC需安装MATLAB和一种C/C++编译器,如VC++6.0,要生成独立应用程序需安装相应数学库和图形库;编译器配置即执行命令:mbuild –setup 后按提示选取一种编译器(通常安装VC++6.0后选择它)生成批处理文件并注册相关dll文件,mbuild通过调用外部的C/C++编译器把M文件翻译成C/C++源代码然后与MATLAB的C/C++数学库、图形库链接得到独立可执行程序;执行命令为:mcc –m –I /files_source(源文件路径) –d /files_target(目标文件路径) *.m ;离开MATLAB执行exe文件时要把生成的所有文件包括相应库文件全部带上。

Page 319: MATLAB提供了客户/服务器(Client/Server,C/S)功能,利用动态数据交换(DynamicDataExchange,DDE)功能和ActiveX自动化服务功能,可以实现在其他程序中对MATLAB程序及函数的调用,且通过mxArray与工作空间交换数据,从而增强其他语言的数值计算能力和数据可视化能力;MATLAB引擎是一组函数库,他提供了一种在用户程序进程中与MATLAB进程通信的方法,在WINDOWS下使用ActiveX技术实现,使用组件对象模型(ComponentObjectModel,COM)接口;C语言MATLAB计算引擎包括引擎函数和mx-函数两类,常用引擎函数有engOpen, engClose, engGetVariable, engPutVariable, engEvalString等,mx-函数的具体用法参见帮助文件中section为External Interfaces Reference部分;引擎编程首先要将mxArray转换成MATLAB中可操作的形式,将源程序编写存盘后再用mex命令对源程序文件进行编译,注意源文件中不能有中文(即使是注释);mex用来编译简单文件合适,但工程复杂时需在VC++6.0的集成环境中编译链接。

Page 324: 常用FORTRAN引擎函数有engOpen(startcmd), engClose(ep), engGetVariable(ep,name), engPutVariable(ep,name,pm), engEvalString(ep,command)等,其中startcmd 为引擎参数(字符型),ep为引擎指针(整型),name为矩阵名,pm为mxArray矩阵指针,command为MATLAB命令;在MATLAB命令窗口使用的编译命令是optsfile=[matlabroot '\bin\win32\mexopts\df60engmatopts.bat']; mex('-f',optsfile,'*.f90'); 但有时候没有df60engmatopts.bat文件,这时候需在VisualFortran的集成环境中编译链接;可先用VF打开该f90文件然后选Tools->Options->Directories,在Include files中添加matlabroot\extern\include,在Library files中添加\extern\lib\win32\microsoft,然后选Project->Settings->Link,在Object modules中添加libmx.lib libmat.lib libeng.lib,再用默认的编译链接可生成可执行文件*.exe。

Page 325: MEX(MATLAB executable)动态链接函数接口使MATLAB可直接调用C,FORTRAN语言编写的算法程序,应用如下:对已有的C,FORTRAN子程序通过添加入口程序mexFunction可

由MATLAB调用而不必重编M文件,可把要求大量循环迭代的部分用C语言编写为MEX文件提高计算速度,直接控制硬件如数据采集卡等;MEX文件优于M文件执行,用C语言编写MEX文件的特点是编程灵活指针功能强,但应注意C和MATLAB中数据存储方式的差别,其源程序包括两部分:入口子程序(作用是建立通信联系),计算子程序(可是普通的C程序),注意都要包括头文件mex.h;可在命令窗口输入mex filename.c编译MEX程序,但在VC环境下更好,项目类型为Win32 Dynamic-link library,(设置环境和参数都较麻烦)编译链接无误后产生*.dll,运行时会自动打开新的MATLAB应用程序。

Page 330: FORTRAN语言数值计算功能强但指针功能弱,其MEX文件同样由入口子程序和计算子程序组成,它只支持双精度类型和字符串类型的数据;mexFunction()中参数的意义和C语言一样,入口子程序也和C语言大体相同,编译时先输入命令mex –setup选择DigitalVisualFortran6.0作为默认编译器,有些MATLAB软件里没有(如我的只能用VC++);集成环境中编译步骤如下:新建一个项目类型为FortranDynamicLinkLibrary,选Project->Add to project->new->Text file创建与项目同名的定义文件(*.def),选Tools->options->directories-> include files添加\extern\include,library files添加\lib\win32\digital\df60,选project->settings-> output file name输入*.dll,Object modeles增加libmx.lib,libmex.lib,将文件加入到项目中再进行编译链接,可生成*.dll;将MATLAB数据接口和其他开发环境结合可充分发挥数值计算长处避开执行效率低的不足,MATLAB还提供了与excel中数据交互的工具箱、VB算法库及MATLABwebServer可通过HTTP协议在安装了web服务器主机上提供MATLAB计算远程服务,硬件操作方面MATLAB提供了串行通信对象操纵串行口并可通过mex程序调用设备驱动程序。

《MATLAB7.x程序设计语言》

Page 266: 建立多维数组有四种方法:利用下标建立,如2×2的矩阵也可看作是2×2×1的数组可扩展维数,标量输入表示扩展维元素均相同;利用特殊数组函数(如rand, randn, ones等)可直接产生多维数组,也可用repmat(A,m,n)直接产生;利用cat(n,A,B)连接A,B矩阵,n为指定维数,连接时是最后一维变化;编写M文件将记录组合成多维数组;ndims获得维数,size得到各维尺寸,whos得到数组存储格式。

Page 269: 多维阵列(即数组)的下标访问即采用各维的下标访问其元素,可用向量来表示多个元素,: 表示其他维固定该维变化的所有元素还可用a:b取出部分元素;阵列重新排列可用reshape函数按列重排,用squeeze函数删除单点维(尺寸size为1的维);序列变换可用permute函数改变指定维次序。

Page 272: 面向向量的函数(如sum,mean,prod等)通常在第一个非单点维上操作且允许指定的维,也有例外如cross函数;元素对元素的操作函数(如三角、指数函数等)对每个元素进行同样操作,算术、逻辑、关系操作符也按元素对元素方式处理,有一个为标量则对阵列所有元素与该标量进行同样操作;面向矩阵的函数(如线性代数函数)不能用于多维阵列,需从中取出维数为2的一部分进行操作;RGB(m,n,3)的三色原理Color=0.3*RGB(:,:,1)+0.59*RGB(:,:,2)+0.11*RGB(:,:,3)。

Page 273: 结构阵列由多个域构成,不同域可存放不同类型的数据,可用结构名(下标).域名对结构阵列赋值;用结构名显示结构信息,只有一个结构元素显示各元素值,可用rmfield函数删除错误域名;用struct函数可产生一个结构元素的结构数组,再利用单元数组{}可输入多个结构元素;访问结构数组中的元素可用下标,利用getfield(结构名,{下标},’域名’,{a:b,c:d})可得到域的部分值(域元素),利用setfield函数可改变结构的域值。

Page 277: MATLAB函数和操作符可用于结构数组中的域和域元素,可用循环来完成指定功能,还可对同名域的数据用函数直接处理;结构阵列的数据组织方式有平面组织和元素对元素组织等,如对三个独立存储矩阵,平面组织方式下每个域是一个平面的数据(矩阵),这样容易

提取平面数据并扩展平面个数,访问子集时稍麻烦,元素对元素组织结构的建立需用循环,访问子集较容易但访问平面还要用循环;结构阵列的域值可以是另一个已定义过的结构,即结构嵌套,如用struct建立一个结构元素再用赋值语句*.原域名.域名扩展。

Page 282: 单元阵列中每个单元可以是标量、向量、矩阵、字符阵列、结构阵列、多维阵列等,在建立单元阵列之前应确保不存在同名数值阵列否则会导致错误;对单元阵列赋值时应使用花括号,放左边较方便,可用cell(m,n,?)预分配空单元阵列;显示单元数组可直接输入数组名显示单元信息,也可采用celldisp函数显示详细信息和cellplot函数显示存储结构图形;使用单元阵列数据也用下标访问但注意括号,访问一个单元用花括号,访问单元中的元素和部分单元用圆括号;删除元素也用赋空值,如A(:,2)=[]后A可能成了一维单元阵列。

Page 285: 花括号内采用冒号操作符相当于指示多个独立的单元内容如A{m:n},形如

[a{1};a{2}]可构造数值阵列;可用单元数组代替函数输入、输出、显示操作等的变量列表,如[a{1:2}]=eig(B)此时a{1}为特征向量(模态)矩阵a{2}为特征值(规范)矩阵;利用下标可将函数和操作符应用于单元阵列,用循环可对所有单元进行处理;单元阵列比结构阵列更具包容性,它可在一条赋值语句中访问多个数据域,如使用[a,b]=c{1:2}相当于a=s.f1;b=s.f2其中c为单元阵列,s为等价结构阵列;利用花括号、cell函数及赋值语句可建立嵌套的单元阵列,不用cell函数预分配完全可以但赋值系统会花更多时间;单元阵列与数值阵列之间的转换应采用循环程序,num2cell可实现数值到单元。

Page 290: 多维单元数组可利用cat函数连接产生,如A,B为2×2的单元数组则可用cat(3,A,B)生成2×2×2的多维单元数组;多维结构数组可利用直接赋值或cat函数产生,定义后可用结构的域名来访问还可对其数据应用函数和操作符;利用单元数组还可将具有不同域结构的结构数组存储在一起,每个单元为一个结构数组;多维数值阵列适用于规则数据,结构阵列适用于不一致的数据,单元阵列可用于任意数据混合;一般结构名首字母大写,单元数组名大写,其余名称小写,较复杂的数据库用单元中有结构,结构中有数值和字符的形式。

Page 314: MATLAB中字符以其ASCII码表示,每个字符都采用16位的ASCII码存储,字符串即一维字符数组;double函数可把字符串中每个字符转变成ASCII码,char函数可把ASCII码数组转变成对应字符串;建立二维字符数组时应注意确保每行上的字符数相等,方法是先disp每行字符串的长度length()后用blanks函数在较短的字符串末尾补上空格;从字符数组中提取字符串时,可用deblank函数删除末尾多余的空格;利用cellstr函数可将字符数组变换成字符串单元数组,每个单元均为字符串且已删除末尾空格,利用char函数可进行其逆操作,且可自动在每行末尾加上适当空格。

Page 317: 比较两字符串是否完全相同用strcmp函数,strcmpi函数比较时忽略大小写,strncmp函数比较两字符串前n个字符是否相同,相同时,返回逻辑真,值为1不同为0;可用MATLAB关系操作符逐字比较两个字符串是否相同或大小关系,采用的是ASCII码,表达式为真值为1;可用isletter函数逐字比较字符串是否全由字母构成,是则为1,isspace函数逐字比较字符串是否有空格,还可用或操作符检测字符串是否全由字母和空格构成。 Page 319: 利用findstr和strrep函数可实现字符串中部分字符的搜索与替代;用strtok函数可找出第一个分隔符之前的字符串,若有n个单词可用循环和array=strvcat(string,n)从英文句子中提取单词;MATLAB提供了一组函数如int2str,num2str,bin2dec,hex2dec,base2dec等在各种数制和字符串之间进行变换;只有用num2str函数才可将含小数的数值变换成字符串如在图形标记中使用数值,用mat2str函数可将矩阵变换成字符串形式。

更多相关推荐:
matlab心得体会

MATLAB学习心得体会Matlab,提起它,不管我们上课是否认真听讲了,我们都应该对它不再陌生,我们不可否认它的强大之处,正如一节课时老师给我们说的“Matlab可以做很多事情”。通过近一段的学习,使我更加确…

对matlab的学习心得

Matlab的学习心得通过初步对matlab的学习我觉得收获很大我了解到matlab是一个功能很大的数学实验软件即一个很好的计算机数学软件平台我在学习matlab主要是围绕实验初步学习了一些简单的矩阵运算以及简...

matlab学习心得体会

Matlab学习心得班级机械124姓名万明男学号20xx093386电话139xxxxxxxxmatlab学习心得体会MATLAB中有丰富的图形处理能力提供了绘制各种图形图像数据的函数他提供了一组绘制二维和三维...

matlab实验心得总结

通过《matlab仿真》实验使我学习掌握了许多知识。首先是对matlab有了一个全新的认识,其次是对matlab的更多操作和命令的使用有了更高的掌握,最重要的事对matlab的处理能力有了一个更高的飞跃尤其是对…

matlab学习心得体会

最近在学习matlab一直不入其法门从网上看到了一些大虾的经验心得感触颇深转贴过来希望给初学者有一定的指引一写给学习matlab的新手们作者eight八来源振动论坛本人接触matlab已经有5年多的时间了一直想...

matlab学习心得

关于学习MATLAB一点心得摘要MATLAB作为当前国际控制界最流行的面向工程与科学计算的高级语言、它可轻易的再现C或FORTANT语言几乎全部的功能,并设计出功能强大、界面优美、稳定可靠的高质量程序来,而且编…

Matlab心得体会

Matlab心得体会10金融3吕淼20xx241125在为学习这门课前就听说了他的强大,因为现在的经济模型都是需要这些分析软件的,也曾听说金融的未来方向是需要数学等等作为依托的。曾经旁听过学校数学建模的课程,当…

Matlab心得及学习方法

Matlab心得及学习方法不断更新发现现在很多人找工作的或者读博的都想要学习或者正在学习Matlab问我要怎么学习其实我虽然写Matlab代码的经验还算丰富但是还不能说是一个很好的Matlab编程人员这里有一些...

matlab心得体会

Matlab是一个基于矩阵运算的软件1helpwin只是寻找函数类一般不如用doc相当于帮助文档中的搜索但在用doc搜索不到帮助文件时可用helpwin如找有关的帮助等打开格式非标准的mat或xls等数据文件如...

matlab心得与学习方法(也许这是个大牛写的)

发现现在很多人找工作的或者读博的都想要学习或者正在学习Matlab问我要怎么学习其实我虽然写Matlab代码的经验还算丰富但是还不能说是一个很好的Matlab编程人员这里有一些心得分享给大家希望对大家有所帮助关...

Matlab使用心得

一Matlab的基本介绍二数值分析三二维图像制作四三维图像制作笔记一Matlab的基本介绍矩阵的表示方法A123456789101112BA213取出部份矩阵B取A的第二行1至3列AAB39将B转置後以行向量并...

matlab中s函数编写心得

matlab中s函数编写心得转自水木函数是systemFunction的简称用它来写自己的simulink模块够简单吧详细的概念介绍大伙看帮助吧可以用matlabCCFortranAda等语言来写这儿我只介绍怎...

matlab学习心得(33篇)