第一篇:MATLAB学习心得
MATLAB学习报告
一. 对MATLAB的认识
正如课本《MATLAB教程及实训》中的前言所说,MATLAB是MathWords公司于1984年开发的,目前已经发展成国际上最流行、应用最广泛的科学与工程计算软件之一。MATLAB集合矩阵云运算、数值分析、图形显示和仿真等于一体,被广泛应用于自动控制、数学运算、计算机技术、图像信号处理、汽车工业、语音处理等行业。MATLAB它将计算、可视化和编程等功能同时集于一个易于开发的环境。MATLAB主要应用于数学计算、系统建模与仿真、数学分析与可视化、科学与工程制图和用户界面设计等。
目前,MATLAB已经成为应用代数、自动控制理论、数字信号处理、动态系统仿真和金融等专业的基本数学工具,各国高校纷纷将MATLAB正式列入本科生和研究生课程的教书计划中,成为学生必须掌握的软件之一。
MATLAB是matrix laboratory的缩写,它的产生是与数学计算有密切的关系。从1980年发展到现在已经是一个交互式开发系统,其基本数据要素是矩阵。MATLAB系统是由MATLAB开发环境和MATLAB语言,MATLAB数学函数库、MATLAB图形处理系统和MATLAB应用程序接口(APL)5部分组成。
MATLAB的有以下特点
1运算功能强大
2编程效率高3强大而智能化的作图功能 4可扩展性强 5Simulink 动态仿真功能
二. 我对MATLAB的掌握程度
在短课时选择了本书1、2、3、4、5、7章的内容学习
1.MATLAB R2010a软件的概述(略)。2.MATLAB常见字符及基本运算
在本人的自主学习以及老师的授课下我已经初略的掌握了MATLAB R2010a的基本使用方法:MATLAB R2010a的开发环境、MATLAB R2010a的其他管理、MATLAB的文件处理工具、MATLAB R2010a的帮助系统
(1)数据类型 数组:字符型、数值型、元胞型、结构体型、Java型和函数句柄,其中数值型有包括单精度型和双精度型。常数
例如”a” “x”(关键字如if、while 等不能作为变量名)整数、复数和浮点数的类型与具体用法。
这一整章学习起来毫不费劲,这主要是因为上一学期学习了的c语言。
(2)矩阵和数组的算数运算
数组的创建,其中包括空数组还有向量的运用法则以及特殊矩阵和数组。其次是数组的操作,其中数组的元素、子矩阵的产生和数组的赋值以及矩阵的合并与数组的删除。矩阵和数组的函数。
字符串、创建字符串、与字符串函数的熟练运用、日期与时间、日期和时间的表达式、日期时间的函数的使用、关系运算和逻辑运算、关系运算符的使用与逻辑运算符的使用以及运算符的优先级等
总体学习上是有些不足,总是忘记,这得不断重复的记忆才行。
3.数据的可视化掌握
首先MATLAB的数据可视化需要掌握四大点
二维绘图
二维绘图需要掌握其一般步骤以及基本绘图的函数,多个图形的绘制以及设置曲线的方式、坐标轴和图形的注释。课本P81.例题3-1绘制一个正弦波形,绘制的正弦曲线图略,具体操作如下:
》x=0:0.1:10 》y=sin(x);
》plot(x,y)
%根据x和y绘制二位曲线图
程序分析:plot函数自动创建Figure 1图形窗口斌显示绘制的图形,横坐标是x,纵坐标是y。
特殊图形和坐标的绘制 MATLAB的图形窗口 基本三维绘图命令
三维曲线与直线图的绘制重要掌握
4.符号运算
先来一道例题创建符号变量和表达式 》x=sym(’x’);》syms a b c 》y=a*x~2+b*x+c y= a*x~2+b*x+c 可以在Workspace中看到,x、a、b、c和y都是符号变量,y是由符号变量计算产生的。
此章节符号较多且其运算规则也相对来说比较复杂。但是这一章节却是MATLAB语言以及编程的重点基础,更是要非常熟练的掌握。一分耕耘一分收获,经过不断重复的记忆我已经也能大部分符号运算都能知道其用法以及运算规律。
5.程序设计和M文件
此章节主要有:
分配控制语句:if结构,swich结构 循环控制语句:for循环,while循环 Break和continue语句 错误控制语句 流程控制命令 M文件结构
M文件编辑和调试窗口 M脚本文件和M函数文件
第七章节与C语言大部分相同或者雷士,有C语言的基础学起来不难,但这一章节却异常重要,更是要学会编程的思想,这是有点难度的。程序控制不在多说因为与C语言大体相同。但这一章的函数的使用与C语言不同,需要分开来记忆,总的来看学的还是不错的,但听班上的有些同学说很难记忆,因为与C语言有冲突。这一章节我还学习了M文件的结构、函数的句柄和inline对象,这些倒是和Java语言有的相似。倒也不难理解。还有函数的绘图与数值的分析。
7.MATLAB高级图像设计与simulink仿真环境
三. 收获与心得
收获:
上学期学习高数的时候,总有那么难的数学函数要解答,一些二维或者三维的函数绘图图形又复杂。在学习完这门课程后知道了原来这些绘制的图片可以由MATLAB绘制出来的。这让我知道了MATLAB可以用在数学上。而且是高等数学习者必备的一款软件。现在我也可以绘制一些复杂的函数。我想这也是一项很大的收获。在仿真中可以仿真一些复杂的电路原理图,而我这个专业是跟电路有着密切的关系。其用处之大不言而喻,我想这也将是我最大的收获了。另外值得一提的是学习MATLAB语言可以建立我们另一种思考问题的思维。这种思想难得可贵。
学习心得:
这学期的学习MATLAB,由于前几节课没有认真听,总以为和C语言一样简单也,到后来拉下的课程比较多,老师有说要写学习报告来计算期末成绩,所以不得不自学拉下的课程,这使我非常烦躁和不安,但我们都是这样过来的。以至于一直延续大大一而不可更改,直到这学期的MATLAB学习。
学习有时候并不是一个人的事情,独自一人学习效率不会太,我们可以多向他人请教或许会更好。
这学期刚开始接触MATLAB语言也是用着以前的学习方法。慢慢的感觉到不对,书本上是学会了,但是一到真枪实战的干就不行了。后来想想就是学习方法的问题。实践、得实践才行。之后我便边学边用电脑实践。果不其然,效果大大提升。总而言之,学习MATLAB的方法是边学习边实践,效果成倍增加。学习MATLAB语言,其实是学习MATLAB的编程思想,另一种思考问题的思维。它交给我一种建立模型分析问题的结构化思维方式,任何事物,从不同的角度看,都可以想象成一个从头到尾、环环相扣的系统,我们想要了解整个系统的功能就必须以每一块结构为思维对象,层层分析最后得出客观规律的正确结果。
对于这门课程的反思:
当我第一次看到这本书的内容时,觉得有了c语言的基础,学习起来一样好学,所以前面一直没认真听课,也给老师带来了消极的影响,到了后面,我不得不自己学习,这带给我诸多烦恼,后悔没有认真去听课,经过我认真的反思,我才觉悟到在课堂上认真听讲和拥有一个良好的学习态度是多么的重要。最后感谢老师对授与我们这门课的知识。
参考文献:曹弋、刘怀、王恩荣.MATBLE教程及实训【M】.北京:机械工业出版社,2013
MATLAB学习报告
专业班级: 姓名: 学号:
指导老师:
第二篇:matlab学习心得
学习MATLAB 感想 学习了 MATLAB 这门课程,我了解该软件的基本功能,也知道 了该软件在我们生活中的重要地位。随着社会的不断发展,科技 的不断进步,计算机的普及,它也被应用在越来越多的方面。MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、工 程中常用的形式十分相似,故用 MATLAB 来解算问题要比用 C,FORTRAN 等语言完成相同的事情简捷得多,MATLAB 的最突出的 特点就是简洁。MATLAB相对于其他的一些编程软件有许多的优点:
一、语言简洁紧凑,使用方便灵活,库函数极其丰富。
二、运算符丰富。
三、MATLAB既具有结构化的控制语句(如for循环、while循环),又有面向对象编程的特性。
四、语法限制不严格,程序设计自由度大。
五、程序的可移植性很好,基本上不做修改就可以在各种型号的计 算机和操作系统上运行。
六、MATLAB的图形功能强大。用madlab创建矩阵时,方法有两种:第一、可以直接依次输入矩 阵各行各列的元素,但矩阵元素必须用[ ]括住,矩阵元素必须用逗号 或空格分隔,在[ ]内矩阵的行与行之间必须用分号分隔。第二、用 MATLAB函数创建矩阵。MATLAB可以进行矩阵的加减、乘除的元 素,求可逆矩阵、转置矩阵,求矩阵的特征值,求线性方程组等等。MATLAB的功能是非常强大的,MATLAB不仅有强大的运算功 能,它还有强大的绘图功能,我对它的了解也仅仅就是一点点,或许 说还没有入门。比如说它含有丰富的内建函数,例如数学函数中的三 角函数、复函数、多项式函数、数据分析函数的求平均值、最大最小 值、排序等,以及逻辑/选择函数如if-else等,还有用来模拟随机发 生事件的随机函数。这些我都不了解。虽学习MATLAB的时间虽然很短,但却让我了解到了它的强大和 它的功能。我想就算时间足够,老师也不能把所有的都讲解给我们,因为一个软件的功能需要我们自己不断的去摸索,老师也不可能知道 所有。老师只是个指路的明灯,最终的学习还是要靠自己。而且在摸 索过程中,我们能够发现和体会学习的快乐!
第三篇:Matlab学习心得
matlab博大精深,说到底我也只不过是个初学者,只是学的时间比新手长了一点,现在写几句给新手,希望能给你们有点帮助 1 学Matlab并不难,难的是学会怎么用。
2不要试图掌握matlab的每一个功能,熟悉和你专业最相关的部分就可以了。不要问:明天要交作业了,哪位大侠帮忙写个程序吧,或初学matlab,不懂呀,大哥大姐帮忙写个程序之类的话
不要等到要用到才去学,如果你有兴趣,你有时间,你可以多学些东西,说不定什么时候就用了,机会只偏爱那些有准备的头脑,到时候就不会说什么,要做东西想让人指点,基础的东西来不及仔细看了,一写程序吗,低级错误满天飞 不要说:不要让我看matlab英文的帮助我看不懂--谁都是从不懂到懂的 不要担心:我编程能力差,我一定用不好matlab。6 不要只问不学 7 学maltab要有耐心 看到某本书中或论坛的帖子中解决问题的方法要试着解决类似的问题,要举一反三,要学会变通 有了问题先自己想,察看帮助,1个小时后没有结果再问别人,不要一有问题就发问,然后什么都不管了,把希望寄托在别人身上 10 学会用搜索引擎,在网上可以找到很多资料,有的问题一搜索就能找到的,就不要来问别人了 11要多动脑,多动手写程序、调试,看程序时候多想几个为什么,理解别人程序中精华的东西,多自己调调程序,可以改改程序,把知识转成自己的,弄懂一两个经典例子比粗粗的看一大书要好,值得一提是不是一下子就能看懂相对比较长,比较复杂的程序的,要做的是自己慢慢去分析,利用已经有的资料和帮助,等慢慢搞懂它,要多看几遍,相信多看一遍你就会有一些新的认识,一直到你已经掌握里例子的精华。多读matlab高手写的程序,帖子,找到一个高手,在几个大的论坛可以搜索出一大堆的帖子,然后慢慢去看吧,从中可以学到很多东西,也许你会发现很多你都看不懂,这很正常,别人写程序考虑的是能实现这样的功能,运行效率等问题,而不是考虑是不是很容易能让别人理解,你就看你现在能看懂,再看些通过你断点调试,查help能看明白的,看不懂的就先放下,遇到好的和看不懂,你又很挺感兴趣的话题,你先收藏起来,过段时间你再回头看看,你会发现,每看一遍,你就会多懂一些东西,当你第三遍甚至第四遍看同一个程序的时候,也许你就会有豁然开朗的感觉。一个比较长的程序,首先不要怕长,把它分解成一句一句,一句一句看懂它。要明白一口吃不成胖子,好东西要慢慢体会,才能领会。电脑上复制粘贴很方便,对于别人解决的你专业上的问题,最好自己写一遍,这样印象深刻,对于不懂的函数用法的函数,help中查查,能看懂多少算多少,对于程序断点调试一遍,弄清楚每个语句的功能,14 尽量摆脱c编程的习惯,总爱用循环,能不用的循环的尽量不用,掌握矢量化的精髓 善于总结,学习过的知识,看过好的帖子可以收藏起来,过段时间再复习一下,一段时间的积累,你会发现你的水平在慢慢提高 16 多用help,see also lookfor get,set 等常用命令 要大胆的去试,试过才知道可不可以,如有人问可不可以把多个子程序放在一个m文件中,呵呵,试试不就知道了 多参与讨论,不要只关心自己的问题,也经常关注别人的帖子,从中也可以学到不少东西的 提醒一句,不要做只会下资料而不看的收藏家,这样对你没什么意义,书不在于多,真的看一两本书也就够了,以后要用的时候,再去查书,一味的东看看西看看,见了别人的资料,不关好不好,就留信箱的人,我感觉也不该这样,有了那么多资料,就别想着还有没有比这更好的了,开始学吧先写这么多吧,希望对新手能有点用 感觉语言是相通的,不一定只针对matlab这门语言
如何写程序,如果你还是初学者,那么尽量不要复制粘贴,那样你是永远也无法学会写程序的。另外也不要对着别人的程序,一个字一个字敲进去,那样的话你只能成为一名优秀的打字员。一个比较好的方法是先读懂他,理清他的思路,然后自己动手写,写不出来的时间再看看别人的程序,然后对照的看,你的和他的程序差异在哪里,写的过程就是提高的过程。
程序运行有错误怎么办,好多错误。首先,别害怕错误,这是每一个人都会碰到的问题,大牛,小虾都一样,你对你自己说 这不机会又来了,调程序的过程就是提高的过程。不要一遇到错误就来论坛发问了,如何调,关键是看错误提示,看错误的类型及出现在哪条语句上。好好练自己的调试能力,这不仅可以帮你找到一些错误,有是碰到一些读不懂的程序,借助断点调试可以帮你读懂程序
还不行怎么办,用搜索引擎找答案(有时候把错误提示输进去就可以找到答案了)
还不行,这才发贴和别人交流。。
写程序原则 尽量写的简单 通俗容易懂,让那些不如你聪明的人都能看懂,命名的时候做到见名知意,写的时间多加点注释,不然,不要说别人读不懂你的程序,等过几天,你自己也读不懂了,可以看看matlab里的函数,注释也写的很详细,当你觉得有些方法比较常用的时候,你可以封装成函数,加上一些说明,以后要用的时候,直接调用就可以了,注重代码的重用性。
勿在浮砂筑高台,基础很重要,为什么学matlab,如果你只是把它当成 c c++的附属品,用这些语言的思维来写一些奇怪的类matlab程序,我想你还是直接用c 或 c ++更合适,不要一开始就想着用matlab 做出什么东西,好好看一本matlab的基础书,这些基础对你以后的进阶会很有帮助。再说混合编程,什么都不懂就想着去混合编程是不实际的,maltab版本 vs 的版本不同,都会对混合编程影响的。所以结果是对着别人的例子来做也不一定会做出来,一是别人讲的有些细节问题没讲清楚,二是版本问题。就算做出来,如果不明白为什么要这样做,又有多大意义呢。然后自己做一个,又不会了。说这些的目的无非是希望想做混合编程的朋友多了解一些基础的东西,否则在混合编程这一块上会浪费很多时间,结果还是没有解决问题。
7.0系列 深入浅出matalb混合编程这本书是值得一看的。多看帮助之类的话这里就不多说了。
Recent developments in linear quadtree-based geographic information systems
第四篇:matlab学习心得
编程心得
1.helpwin只是寻找函数类,一般不如用doc(相当于帮助文档中的搜索),但在用doc搜索不到帮助文件时可用helpwin,如找有关的帮助等;打开格式非标准的mat或xls等数据文件如dat文件或无后缀名的文件时,不要用打开方式打开,而应先打开应用程序如MATLAB或excel,然后在应用程序中打开数据文件,这样能得到正确的行数和列数;lookfor可对M文件的第一行进行关键字搜索,比help条件宽松;MATLAB大小写有区分。用which搜索路径;要打开matlab自带的m文件直接用open即可,不需要找到路径,会在当前目录和set path的路径中搜索。矩阵的运算注意:标量与矩阵进行四则运算时该标量与矩阵的每个元素进行运算;两矩阵相乘左矩阵列数须等于右矩阵行数;矩阵除法有左除(反斜杠)和右除/(斜杠),AB=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为列向量时,AB表示A*X=B在最小平方意义上的解,需对A进行QR分解,m
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
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,存放在binwin32相应子文件夹中,在externinclude中有与前面两个库文件对应的.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 'binwin32mexoptsdf60engmatopts.bat'];mex('-f',optsfile,'*.f90');但有时候没有df60engmatopts.bat文件,这时候需在VisualFortran的集成环境中编译链接;可先用VF打开该f90文件然后选Tools->Options->Directories,在Include files中添加matlabrootexterninclude,在Library files中添加externlibwin32microsoft,然后选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添加externinclude,library files添加libwin32digitaldf60,选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命令
要查询某一命令是在搜寻路径的何处,可用which命令: >>which fact E:studycodematlabfact.m
what 列出当前目录下的.m文件和.mat who:显示当前所有变量的简单列表 whos:显示当前所有变量的详细信息
disp打印;clc清屏;clf清图;
close all 关闭所有图形; clear 清除所有变量
esc 清除一行ctrl+c中断程序运行
tic 开始计时;shift+enter换行;toc停止计时 % 行注释; %{……%} 块注释
%% + 空格 + 模块名添加程序块使得模块化 三个小黑点连续换行;或者shift+enter语句换行 cd 路径改变当前目录
elseif没有空格 switch
case(不需要用break跳出)...otherwise end
funtool函数计算器
eval('MATLAB表达式')执行一个MATLAB表达式 example: >>for i=1:3 >>eval(['book',num2str(i),'=',num2str(2*i-1)]);>>end book1 = 1 book2 = 3 book3 = 5
MATLAB求方差
var(x)= var(x,0)除以n-1 var(x,1)除以n
MATLAB绘图
matlab语法与绘图文件夹,详细介绍了MATLAB基本运算、MATLAB基本平面绘图、MATLAB基本立体绘图
x=linspace(-2, 2, 25);% 在x轴上取25点 y=linspace(-2, 2, 25);% 在y轴上取25点
[xx,yy]=meshgrid(x, y);% xx和yy都是25x25的矩阵
zz=xx.*exp(-xx.^2-yy.^2);% 计算函数值,zz也是25x25的矩阵 mesh(xx, yy, zz);surf(xx, yy, zz);
% 画出立体网状图 % 画出立体曲面图 figure(n):打开编号为n的图形窗口
subplot(m,n,p):分割图形显示窗口为m*n块,p为子块编号 axis([xminxmaxyminymax]):给出区域
text(x,y,'字符串')在坐标(x,y)处显示字符串 gtext('字符串')通过鼠标选择说明文字的位置 title('图标标题')xlabel('x坐标轴名称')ylabel('y坐标轴名称')legend('','',''...)图例名 grid on/off hold on/off 矩阵运算
For vectors, ALL(V)returns logical 1(TRUE)if none of the elements of the vector are zero.所有的数都非零返回1 ANY True if any element of a vector is a nonzero number or islogical 1(TRUE).ANY ignores entries that are NaN(Not a Number).sum(A):按列求和
repmat(A,m,n):将矩阵复制m*n份
矩阵变换 rot90逆时针旋转90度flipud上下翻转fllplr左右翻转
单元数组可以存放不同的数据类型
>>A{1,1}=magic(3);A{1,2}='djk';A{2,1}=sym('sin(x)+cos(x)');A = [3x3 double] 'djk' [1x1 sym ] [] cellplot(A):图形化显示单元数组的结构
行简化阶梯型矩阵 rref(A)求矩阵的秩 rank(A)det(A)求行列式 [V D] = eig(A):
D对角线上的元素为A的特征值,V为相对应的特征向量构成的矩阵 当V满秩时,A可对角化,inv(V)*A*V = D 拟合和插值
cftoolSurface Fitting Tool.polytool(x,y,2)多项式拟合 rstool(x,y,'model',alpha)
最小二乘法线性拟合 function zxecf(x,y)clear z = polyfit(x,y,1);
f = poly2sym(z);poly2str(z,'x');plot(x,y,'r*');hold on ezplot(f,[xminxmax]);
// ezplot画符号函数
拟合工具箱 %{ yy = polyval(z,x);plot(x,y,'r*',x,yy);%}
函数的3种使用方法
利用function直接定义函数,要求文件名和函数名一致,函数文件名不能由数字组成 函数句柄实现对函数的间接调用 fhandle = @M文件名
匿名函数:fhandle = @(arglist)expr由输入参数列表arglist和表达式expr确定的函数创建句柄并将此句柄返回给变量fhandle 内联函数:f = inline('expr','arglist')example: >>fhandle = @(x,y)(sin(x)+cos(y)+1)>>fhandle(pi/2,0)3 >>f = inline('sin(x)+cos(y)+1','x','y');>>f(pi/2,0)3 function out=f(x,y)out = sin(x)+cos(y)+1;
解方程组
解线性方程组 solve 解微分方程组dsolve 解数值解龙哥库塔 ode y=dsolve('Dyt=y0*y')不明白
符号表达式
syms一次可定义多个符号变量sym建立单个符号 y=sym('sin(x)+cos(x)');diff(f,x,n)求符号表达式f关于x的n阶导数
int(f,r,x0,x1)f为积分符号表达式,r为积分变量,x0,x1为积分上下限 example: syms x y;f = 2*x+y;h = subs(f,{x,y},{1:3,5:7});% h = [7,10,13];
多项式
系数矩阵p 符号表示:s=poly2sym(p)poly2str(p,'x')以字符串的形式查看以x为变量的函数
系数表示:sym2poly(s)多项式求值:polyval(p,数或矩阵)多项式求导polyder(p)求积分polyint(p)r = poly(p)求矩阵的特征多项式的系数 roots(r)求多项式的根即p
MATLAB编程
输入输出 x=inputdlg('输入说明文字');x=str2num(cell2mat(x));
age=input('how old are you:')
disp(age)fprintf('my age is %d.n',age);% 和C语言里的printf差不多
data.txt: 1 2 3 4 5 6 7 8 9
fid = fopen('data.txt','r');line = fgetl(fid);str2num(line);
A = load('data.txt');
save 默认将当前所有变量存到当前目录下的MATLAB.mat save mywork 默认存成.mat格式
% 存到A中,再对A进行操作
% 读取一行 % 得到 1 2 3 % 有没有类似C语言的输入
savemydata.mat v1 % Use with literal filename save 'my data file.mat' v1 % Use when filename has spaces save(savefile, 'v1')% Use when filename is stored in a variable load 装载当前目录下的MATLAB.mat load new.txt / load('new.txt')当前目录下不支持中文 load('路径名+文件名',变量名列表)xlsread('路径名+文件名')读取excel文件