多项式拟合
x=[0.1,0.2,0.15,0,-0.2,0.3]
y=[0.95,0.84,0.86,1.06,1.5,0.72] p=polyfit(x,y,2)拟合 xi=-0.2:0.01:0.3范围 yi=polyval(p,xi)计算y值
plot(x,y,'o',xi,yi,'k')画图’’必须要 title('hyg')标题
第二篇:matlab心得体会
Matlab是一个基于矩阵运算的软件
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()可有系统给定区域;
1. help:最有效的命令(参阅了瀚海mathtools的 starrynight网友的文章)其实,可以这样说吧,如果离开matlab软件,我想我自己是基本上什么都不会。 一遇 到什么问题,通常 我的第一反应是:help ,就先说说自己对help的一些常用方法吧。 1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。 2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在 命令窗口中敲入 help toolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。 3)知道函数名,直接用help funname就可以得到相应的帮助信息。
2. see also:不可小瞧的关联 在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮 助信息中没有直接 给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的see also。 譬如:曾经遇到一个画椭球的问题。刚开始我以为这个命令函数应该在graph3d中给 出的(顺带提一句, 只用help的时候我们就可以看到matlab\graph3d - Three dimensional graphs. 。 于是乎,我又 help graph3d,很遗憾,在 Elementary 3-D plots.中我没有发现画椭球的函数,但是 我发现在see also中 有SPECGRAPH. 抱着试试的态度,我又help specgraph,^_^,这次在 Solid modeling 中找到了 ellipsoid - Generate ellipsoid。
3. lookfor: matlab中的google 当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果 。 譬如:曾经在gui编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方 框,就像你在桌面 上拖动鼠标,会出现虚线框一样。 当初我也刚开始一定都不知道该查找什么东西,后来 想起用它了。于是乎,>> lookfor Rectangle (很不好意思,当时这个矩形我还是在金山词霸中搞定的-_-) 。果然,在其中就找到 这样一条信息:GETRECT Select rectangle with mouse.^_^
4. get,set: GUI object 属性的帮手 在GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的 想法实现,但是我们又不 记得这些object的属性,更别提怎么设置他们的值了。这时,可以用 get(handles)得 到此对象的所有的属性 及其当前值。用set(handles)可以得到对象所有可以设置的属性及其可能的取值。找 到我们需要的属性名字和 可能的取值之后,就意义用 get(handles,‘propertyname’)取得此属性的值, 用set(handles,‘propertyname’,values)设置此对象此属性的值。
5. Edit: 查看m源文件的助手 在应用matlab过程中,可能我们想看看它的m源文件,当然用editor定位打开也行, 但是我经常采用的式直接 在command窗口中用edit funname.m,就省去了定位的麻烦。 6. 其他常用命令:which,what等 which:定位指定的函数和文件,最好带上参数-all,以便显示更加多的信息 what: 获得指定目录的m文件,mex文件以及mat文件名列表。