《MATLAB M语言高级编程》读书笔记

周一 30 七月 2012 by Joshz

第一章:M语言基础

  • Matlab是解释型语言,不同于C语言这样的编译型语言,不过Matlab现在也可以编译。
  • whos命令查看变量
  • 给变量赋值之前,不需要定义其类型。Matlab会自动决定变量类型,并分配内存空间。
  • Matlab支持自动扩维(在某些操作下!比如两个不同维的矩阵相加就不会自动扩维,而会报错),所以几乎所有变量都可以理解为矩阵(对于结构数组、元胞数组最好不要当做矩阵来理解)
  • Matlab变量按列存储,C/C++按行存储。Matlab绝对下标索引是按从上到下,从左到右的顺序进行的,初始值为1。这个特性继承自FORTRAN。
  • 矩阵输入:中括号、逗号、分号、空格的区别。a=[1:5];这样的语句就会产生warning。

矩阵索引示意图

matrix index

这一张图基本就讲清楚了所有的情况,注意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函数文件格式:

matlab function
  • 在线帮助部分可用help查询得到,H1 help line部分用lookfor命令查询得到。
  • 在线帮助不可出现空行,空行后面的内容不在作为在线帮助。
  • Matlab函数文件名一般和函数名相同,如果不同,则以文件名为准。

输入参数可变的函数:

  1. 输入参数可变的函数的最后一个输入参数一定要是 varargin。
  2. 使用 nargin命令或者 length(varargin)来检测到底输入了多少个参数。
  3. 使用元胞数组内容提取符{}来提取可变输入参数中的输入内容。

输出参数可变的函数:

  1. 输出参数可变的函数的最后一个输出参数一定要是 varargout。
  2. 使用 nargout命令或者 length(varargout)来检测到底有了多少个输出参数。
  3. 使用元胞数组内容提取符{}来对可变输出参数赋值。

Comments