《MATLAB M语言高级编程》读书笔记
周一 30 七月 2012 by Joshz第一章:M语言基础
- Matlab是解释型语言,不同于C语言这样的编译型语言,不过Matlab现在也可以编译。
- whos命令查看变量
- 给变量赋值之前,不需要定义其类型。Matlab会自动决定变量类型,并分配内存空间。
- Matlab支持自动扩维(在某些操作下!比如两个不同维的矩阵相加就不会自动扩维,而会报错),所以几乎所有变量都可以理解为矩阵(对于结构数组、元胞数组最好不要当做矩阵来理解)
- Matlab变量按列存储,C/C++按行存储。Matlab绝对下标索引是按从上到下,从左到右的顺序进行的,初始值为1。这个特性继承自FORTRAN。
- 矩阵输入:中括号、逗号、分号、空格的区别。a=[1:5];这样的语句就会产生warning。
矩阵索引示意图
这一张图基本就讲清楚了所有的情况,注意A([9 14;10 15])这样的索引方式。想一想A([8 12;10 11])是什么,A([8:10;10:12])又是什么? 进一步想想这个程序的结果是什么:
a=1:3;
b=a(ones(3,1),:)
c=[1;2;3];
d=c(:,ones(1,3))
A=[4:6;7:9];
B=A(mod((1:4)',2)+2\*(~mod((1:4)',2)),:)
C=A(:,mod(1:9,3)+3\*(~mod(1:9,3)))
求B、C用这种方法显得繁琐,用repmat更简洁,不过b、d的求法又很方便了。
- MATLAB的索引方式是继承自fortran语言,因为最初它就是用fortran写的。
- 布尔运算:真返回逻辑值1,假返回逻辑值0。矩阵也可以进行布尔运算,返回逻辑数组。(试试看~2=?)
- 形如A(B)的矩阵索引操作在B是数值矩阵和B是逻辑矩阵时是完全不同的。没怎么看懂。。。P18
- help matfun 基本的矩阵函数
- help ops Matlab的操作符
- 加点运算和不加点运算的区别?
- 大部分情况下加点的运算表示对矩阵元素分别进行运算,而不加点的运算则把矩阵作为整体来运算,转置运算是例外。可以理解成不加点运算是默认的矩阵运算,而加点运算为元素运算。
功能 | 记号 | 说明 | 功能 | 记号 | 说明 |
---|---|---|---|---|---|
乘 | * | 矩阵乘法 | 数组乘 | .* | 对应元素相乘 |
左除 | / | 数组左除 | ./ | ||
右除 | \ | 数组右除 | .\ | ||
幂 | ^ | 方阵幂运算 | 数组幂 | .^ | 矩阵元素求幂 |
共轭转置 | ' | 共轭转置,除了转置外,还要求共轭 | 转置 | .' | 矩阵转置,不求共轭 |
- 左除/和右除\什么区别?
- 用help slash查看官方说法
- m文件包括两种:1、批处理脚本,2、函数M文件
- 在M文件中包含子函数的方法?
Matlab函数文件格式:
- 在线帮助部分可用help查询得到,H1 help line部分用lookfor命令查询得到。
- 在线帮助不可出现空行,空行后面的内容不在作为在线帮助。
- Matlab函数文件名一般和函数名相同,如果不同,则以文件名为准。
输入参数可变的函数:
- 输入参数可变的函数的最后一个输入参数一定要是 varargin。
- 使用 nargin命令或者 length(varargin)来检测到底输入了多少个参数。
- 使用元胞数组内容提取符{}来提取可变输入参数中的输入内容。
输出参数可变的函数:
- 输出参数可变的函数的最后一个输出参数一定要是 varargout。
- 使用 nargout命令或者 length(varargout)来检测到底有了多少个输出参数。
- 使用元胞数组内容提取符{}来对可变输出参数赋值。