变量和语句
变量命名
没啥说的,就和其他语言差不多,区分大小写,字母开头。由于 Matlab 中有很多预定义的函数,尽量避免使用函数名作为变量名,否则会使函数失效。
变量类型
- 局部变量:每个函数有自己独立的工作区,与其他函数和主工作区分开,里面的变量即局部变量,函数结束就删除。
- 全局变量:在所有工作区中有效。通过在函数名前面加
global [变量]
来声明。 - 永久变量:用
persistent [变量]
来声明,只能在 M 文件中定义和使用,只能由声明它的函数存取和操作,当声明它的函数退出后,永久变量继续保存在内存中
特殊变量
变量名 | 描述 | 变量名 | 描述 |
---|---|---|---|
ans | 默认保存运算结果的变量 | nargout | 函数的输出参数个数 |
pi | 圆周率 | realmin | 可用的最小正实数 |
eps | 机器零阈值 | realmax | 可用的最大正实数 |
inf | 无穷大 | bitmax | 最大正整数 |
NaN | 不确定数 | varargin | 可变的函数输入参数个数 |
i 或 j | 虚数 | varargout | 可变的函数输出参数个数 |
nargin | 函数的输入参数的个数 | beep | 让计算机发出提示音 |
注意到 i、j 被用来当虚数,所以建议在循环时不要用 i、j、k。
语句
语句以 ,
、;
、回车
结尾。使用 ,
时,语句暂缓输出;使用 ;
时,语句输出被隐藏;使用 回车
则直接输出结果。
注释以 %
开头。
程序控制
顺序
这个就不讲了,前面学的都是顺序。
分支
if-end
结构if expression commands end
if-else-end
结构if expression commands1 else commands2 end
if-elseif-else-end
结构if expression1 commands1 elseif expression2 commands2 ... else commandsn end
switch-case-end
结构switch value case test1 commands1 case test2 commands2 ... otherwise commands end
循环
for
循环for x=array commands end
- 依次将 array 的每一列幅值给 x ,并执行一次循环体。
- 循环体一般用分号抑制输出(想想遍历上千次的输出,够爽)
while
循环while expression commands end
其他控制命令
return
返回主函数或命令行窗口input
获取用户输入,格式如下:value = input('message') %接收用户输入,根据输入自动判断类型并幅值给 value value = input('message', 's') %接受用户输入,以字符串形式幅值给 value
pause
暂停直到用户按任意按键。如果想要暂停 n 秒,可以用pause(n)
continue
和 Python 一样,跳过当次循环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函数文件中除主函数外的其他函数。其书写规范为:
- 主函数位置不能变(只能在开头),子函数排列顺序可以任意改变。
- 子函数只能被主函数或其他子函数调用,不能被外部调用
- 其声明格式和函数文件相同
- 子函数、主函数的工作区彼此独立,只能通过输入输出、全局变量和跨空间命令来实现
输入
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
内联函数
内联函数的