[Matlab][Digital Processing]基本语法 - HuisClos

[Matlab][Digital Processing]基本语法

抄书。


1、注释:%

2、数据类型:

①数值:(u)int8,(u)int16,(u)int32,(u)int64,float,double,复数(虚部i),默认数据类型是double;char是6位,schar是8位,bitN指定任意N位带符号整数

②逻辑类型:True和False,使用logical函数实现强制类型转换;

③字符串:字面值通过单引号识别,注意所有字符都是Unicode的;

④数组:(Matlab特色)数组是基本数据单元,标量被看作一行一列的数组

多维矩阵下标用(1,2)表示,可以使用类似python的切片,用\':\'代替所在维数的全部;

End表示该维最大下标;

可以直接通过赋值来扩展数组的大小。

⑤比较运算符:同C(复数的比较只比较实部)。

3、矩阵:普通矩阵

稀疏矩阵:

稀疏化:sparse;逆操作:full;

稀疏矩阵有很多对应普通矩阵的创建函数,如speye,sprand,sprandn;有些函数是专对稀疏矩阵的,包括nnz, nonzeros等

4、单元阵列(胞元),特殊数组,每个元素都是指向其他数据结构的指针。

用{}表示解引用该下标对应的元素。创建:直接赋值a{1,1}=…,或者用cell先创建,然后再赋值;显示:用celldisp;绘图:用cellplot;删除元素:用clear或者赋予空值;

常用单元阵列存放字符串(可以用cellstr转换二维字符数组);

实现可变参数类型:参数名是varargin,这样输入的参数都转化为单元阵列varargin中的元素;

返回不定个数的结果,类似,用varargout;

5、名称搜索路径:①当前环境的变量:whos

②内置函数:库函数

③当前目录的.M文件

④设置的其他搜索路径:在File-Set Path中添加

6、转换函数:num2str、str2num;sscanf;

其他的类似C中强制类型转换的格式:double(str);

进制转换:hex2num,hex2dec等

二维字符数组,用char(\'\',\'\'),或者strvcat在竖直方向进行添加;

7、字符串操作函数:基本和C中函数名字一致,但是添加了很多功能,如str(n)cmp(i)(只能比较相等…);

判断格式(同ctype.h中的函数,isalpha变成了isletter);

findstr(一维),strmatch(二维,返回行数),strrep;

strtok(返回tuple,左边是分隔符左边,右边是剩下的);

upper,lower;

8、结构数组:用关键字struct创建或者直接赋值(如a.x=…,自动推断)。

A=struct(\'field1\',var1,\'field2\',val2,…)或者直接用字符串数组或单元阵列指定结构域名。删除域:rmfield;访问域:getfield和setfield(直接用\'.\'亦可);

9、变量:长度不超过31,大小写敏感可以通过casesen on/off切换,

10、特殊变量:有些常用的常量被集成到matlab中,包括pi,I,j(虚数),Inf,NaN,clock,date,eps(精度),ans(上一个结果),有些可以看作函数。注意不要覆盖这些函数。

11、运算符:逻辑—与C类似,xor(异或)除外,^表示幂次;

关系—与C类似,不等于用~=表示;

算术—左除(\)和右除(/)分别将左边或右边求逆然后相乘;

在所有运算符前面加上.表示的不再是矩阵的运算法则,而是对应元素的计算;[]:构造数组;():多种含义,可装载下标;续行:…

12、内存顺序:列主序,在使用单下标时非常重要。

13、显示输出:默认是小数点后4位,改变格式要用format命令,如format short等;或者使用disp函数;或者使用fprintf函数,格式与C语言printf类似

14、数据文件:最简单的是save和load,后缀用.dat,参数可以是-ascii(方便共享)

15、内建函数:数值类的代数函数基本都有,包括max、min、三角函数、sqrt、mod;取整的ceil、fix和round

16、画图,plot指定坐标轴、颜色、标记类型、线形、线宽,格式是plot(x,y,\'PropertyName\',value)这种;title指定标题、xlabel等指定坐标轴的名称,grid on打开网格;图例用legend;打印图像用print;axis控制坐标轴范围;hold on/off在同一坐标轴画图;figure n,选择当前图像;gcf返回当前图像数;在一个窗口画图:subplot(m,n,p),p要从上到下从左到右数;字体修改用stream modifier;极坐标:polar;

其他图:stair(s)(阶梯型), bar(条形图), barh(垂直的条形图), compass(极坐标图), pie(饼状图),hist(直方图),stem(针头图)

三维作图:plot3;mesh(网格);surf(表面);等高线(contour),用meshgrid辅助确定范围

直接作图(无需中间数组):ezplot,fplot;后者甚至支持tex命令

其他坐标空间:semilog的x用对数,y轴用线形;semiloge相反;loglog两个轴都是对数

17、 逻辑类:ischar, isempty, isinf, isnan, isnumeric等

18、语句:选择——if xxx elseif xxx else xxx end,这里的格式有点类似python,不必用括号,但是以断行分,缩进不是必须的;switch,通C语言,但是不需要break断流,可以用case{1,2}来合并相同的情况,关键字otherwise表示其他,case后面用逗号。

异常(错误)——try…catch…注意这里不是面向对象,所以也没啥异常类,这个东西比较鸡肋,错误的话就直接跳出到catch模块了。

循环——while…end;for i=1:2:10…end,虽然不如Python的in关键字那么简洁,也比较方便。Break、continue的用法通C

19、调试:F5:执行到断点,F10:逐行调试

20、逻辑数组:直接判断数组与常量的大小比较,生成的数组只有1和0,也就是逻辑数组;

可以通过"对应"来简化运算。从而快速筛选所需元素。

21、函数:每个函数对应一个M文件,格式为function[out1,out2…]=fname(in1,in2…),返回值:直接令函数名=一个值即可;变量按值传递(准确来说是写时复制)。实参的个数和形参可以不等(但是不能用缺省实参),这种情况必须在程序中检查(比缺省实参略麻烦,但是更灵活,使用nargin, nargchk, inputname等函数);

通过全局变量共享数据,声明方式是global;

持久(静态)数据用persistent关键字声明。

函数的函数:数学的概念,通过调用函数对另外的函数的某个属性(如:极值),进行计算(和FP中的高阶函数有雷同的地方)。

子函数(中间函数):在一个M文件中声明多个函数,除去最上面一个外都是子函数。子函数只能在所在M文件中可见。

私有函数:以private命名的子目录中的函数,只有在其父目录中是可见的。

错误:error(\'msg\'),msg为空数组不输出,警告用warning(\'msg\')

随机数:rand和randn

直接执行字符串:eval(类似java)

查找函数:lookfor,有类似python的注释结构

I/O函数:textread:逐行读取并解析(格式化),适用于以行为分隔的有序数据;

matlab使用文件标识(类似于句柄或linux 的文件标示符)来确定文件,函数名和C类似,多出fgetl(按行读取,忽略换行符)和fgets(不忽略换行符),文件默认打开方式是二进制。fclose(\'all\')会关闭所有文件;fprintf也可输出到文件;fscanf可以从文件中读取格式化数据;确定文件的存在性:exist;输出IO相关的错误信息:ferror;文件末尾判定:feof;uiimport:通过UI导入或直接导入剪贴板的程序;

22、图形:图像对象以句柄标识,每个图形包括uimenu(目录)、uicontrol(控件)、坐标系和uicontextmenus(右键);

gca返回当前坐标系句柄,gco返回当前选择对象句柄,一般习惯在存储句柄的变量名后面加上H;

更改对象属性:get、set,指定属性名即可,也可以使用属性编辑器完成这一过程(propedit,对于最终用户),除了标准属性外,用户也可添加任意数量的自定义属性数据到文件中(用函数setappdata和getappdata)。

查找属性值匹配的任意对象:findobj(比较慢);

暂停等待:waitforbuttonpress;

图像的位置:查找position属性,坐标系是标准坐标系的格式(坐下原点);

修改默认属性,属性名前面加上Default,修改父对象的默认属性后子对象的对应属性也会改变。

23、GUI:matlab支持基本的GUI创建,方便做出一些比较简单的框架。用guide设计,然后再自动生成的M文件中添加或修改相应函数即可。