MATLAB编程基础

变量和语句

变量命名

没啥说的,就和其他语言差不多,区分大小写,字母开头。由于 Matlab 中有很多预定义的函数,尽量避免使用函数名作为变量名,否则会使函数失效。

变量类型

  • 局部变量:每个函数有自己独立的工作区,与其他函数和主工作区分开,里面的变量即局部变量,函数结束就删除。
  • 全局变量:在所有工作区中有效。通过在函数名前面加 global [变量]来声明。
  • 永久变量:用 persistent [变量] 来声明,只能在 M 文件中定义和使用,只能由声明它的函数存取和操作,当声明它的函数退出后,永久变量继续保存在内存中

特殊变量

变量名 描述 变量名 描述
ans 默认保存运算结果的变量 nargout 函数的输出参数个数
pi 圆周率 realmin 可用的最小正实数
eps 机器零阈值 realmax 可用的最大正实数
inf 无穷大 bitmax 最大正整数
NaN 不确定数 varargin 可变的函数输入参数个数
i 或 j 虚数 varargout 可变的函数输出参数个数
nargin 函数的输入参数的个数 beep 让计算机发出提示音

注意到 i、j 被用来当虚数,所以建议在循环时不要用 i、j、k。

语句

语句以 ,;回车 结尾。使用 , 时,语句暂缓输出;使用 ; 时,语句输出被隐藏;使用 回车 则直接输出结果。

注释以 % 开头。

程序控制

顺序

这个就不讲了,前面学的都是顺序。

分支

  1. if-end 结构
    if expression
        commands
    end
    
  2. if-else-end 结构
    if expression
        commands1
    else
        commands2
    end
    
  3. if-elseif-else-end 结构
    if expression1
        commands1
    elseif expression2
        commands2
    ...
    else
        commandsn
    end
    
  4. switch-case-end 结构
    switch value
        case test1
            commands1
        case test2
            commands2
        ...
        otherwise
            commands
    end
    

循环

  1. for循环
    for x=array
        commands
    end
    
    1. 依次将 array 的每一列幅值给 x ,并执行一次循环体。
    2. 循环体一般用分号抑制输出(想想遍历上千次的输出,够爽)
  2. while循环
    while expression
        commands
    end
    

其他控制命令

  1. return 返回主函数或命令行窗口
  2. input 获取用户输入,格式如下:
    value = input('message') %接收用户输入,根据输入自动判断类型并幅值给 value
    value = input('message', 's') %接受用户输入,以字符串形式幅值给 value
    
  3. pause 暂停直到用户按任意按键。如果想要暂停 n 秒,可以用 pause(n)
  4. continue 和 Python 一样,跳过当次循环
  5. break 和 Python 一样,跳出当个循环体

M文件

只需要点击左上角的 新建 即可,打开也在左上角。当然你用命令行也行,输入 edit 新建,输入edit filename 打开。

M文件分成两种,脚本和文件。下面逐一介绍。

脚本

  • 脚本文件运行完后,所产生的变量都自动保存在 MATLAB 工作区中。
  • 脚本的所有变量都是全局变量,并不随脚本关闭而删除

函数

  • 每个函数文件只包含一个主函数,并且函数名和文件名相同,如果不相同,以文件名为准。命名要求和变量相同。
  • 文件第一行为主函数声明,声明格式为
     function [输出变量] = 函数名([输入变量])
     commands
     end
    
  • 函数内部的运算不可见。MATLAB 会新建一个临时工作区,并在结束后删除。
  • 输入变量不会被复制到临时工作区,但在临时工作区内可读
  • 如果函数文件对脚本文件进行了调用,则脚本文件产生的变量放在临时工作区中

下面给出一个例子:

输入

%新建一个 mean.m 文件
function y = mean(x, dim)
if nargin==1,
    dim = find(size(x)~=1, 1);
    if isempty(dim), dim=1;end
    y = sum(x)/size(x, dim);
else
    y = sum(x, dim)/size(x, dim);
end
%在命令行中输入
a=magic(3)
avg1=mean(a)
avg2=mean(a,2)

输出

a =
     8     1     6
     3     5     7
     4     9     2

avg1 =
     5     5     5

avg2 =
     5
     5
     5

子函数

子函数 是在M函数文件中除主函数外的其他函数。其书写规范为:

  1. 主函数位置不能变(只能在开头),子函数排列顺序可以任意改变。
  2. 子函数只能被主函数或其他子函数调用,不能被外部调用
  3. 其声明格式和函数文件相同
  4. 子函数、主函数的工作区彼此独立,只能通过输入输出、全局变量和跨空间命令来实现

输入

function [avg, med] = mean_med(x)
n =length(x);
avg = getmean(x,n);
med = getmed(x,n);
end

function a = getmean(v,n)
a=sum(v)/n
end

function m = getmed(v, n)
w = sort(v);
if rem(n,2) == 1
    m = w((n+1)/2);
else
    m = (w(n/2)+w(n/2 + 1))/2;
end
end
x = [1:2:11]
[mean, med]=mean_med(x)

输出

x =
     1     3     5     7     9    11

mean =
     6

med =
     6

匿名函数

匿名函数没有函数名,只用表达式、输入、输出参数。可以在命令行中创建匿名函数

输入

sqr = @(x)x.^2
sqr([1.25 2])

输出

sqr =
  包含以下值的 function_handle:
    @(x)x.^2

ans =
    1.5625    4.0000

内联函数

内联函数的