脚本与函数
MATLAB命令的两种执行方式:
- 交互式命令执行方式
- 程序执行
要充分利用MATLAB数据结构的特点(矩阵运算、矢量化编程),充分利用MATLAB自带的函数
M文件:
- 是一个文本文件,拓展名为.m
- 可以用任何编辑程序来建立和编辑,默认matlab
- M文件就是将处理问题的各种命令融合到一个文件中
启动MATLAB编辑器的三种方法:
- “主页”选项中的新建脚本/双击已有文件/打开命令按钮
- 命令行输入edit(既可以新建,也可以打开已有文件)
- 命令历史窗口,选中一些命令(按住ctrl可以同时选择多个),从右键快捷菜单中选择“创建脚本”命令,并在编辑区加入所选命令
M文件分类:
- 函数文件
- 脚本文件
区别 | 函数文件 | 脚本文件 |
---|---|---|
输入参数 | 没有 | 有 |
输出参数 | 不返回 | 返回 |
变量操作 | 文件所有命令执行结果完全返回到工作空间 | 执行完毕局部变量被清除 |
运行 | 可以直接运行 | 以函数调方式调用 |
举例:
建立一个M文件实现a和b的值的互换,2种方式
脚本文件:
a=input('请输入a的值:');
b=input('请输入b的值:');
c=a;
a=b;
b=c;
disp(['a=',num2str(a),'b=',num2str(b)]);
重点:input()函数和disp()函数
函数文件:
function [a,b]=swap(a,b)
c=a;
a=b;
b=c;
return;
end
重点:function和return
- 函数文件必须以function开头,以end结尾
- 函数文件()填输入参数,[]是输出参数
- 调用函数:[a,b]=swap(a,b)返回a和b的值
注释
- 单行注释:%
- 多行注释:%{ }%
函数文件的可调性
- 调用函数时,MATLAB用两个永久变量nargin和nargout记录函数的输入参数和输出参数个数
- 只要在函数文件包含这两个变量,就可以知道函数被调用时,输入参数和输出参数个数
例子:
function fout=charray(a,b,c)
if nargin==1
fout=a;
elseif nargin==2
fout=[a,b];
elseif nargin==3
fout=[a,b,c];
end
return;
全局变量和局部变量
- 函数文件中的变量是局部的,即在一个函数文件中定义的变量只能在该函数文件中使用,不能在别的函数使用
- 如果要在若干个函数之间共享变量,可以将变量定义为全局变量
- 全局变量用global命令定义,如:global a b
例子:
先建立函数文件wadd.m
该函数将输入的参数加权相加:
function f=wadd(a,b)
global m n
f=m*a+n*b;
return;
end
命令行输入:
global m n
m=2;
n=3;
wadd(1,2)
函数的递归调用:
函数可以调用自己、调用他人
利用函数的递归,求n的阶乘:
function f=factorial(n)
if n<=0
f=1;
else
f=n*factorial(n-1);
end
特殊形式函数:
1. 子函数
- 可以在M文件同时定义多个函数
- M文件出现的第一个函数称为主函数,其他函数称为子函数
- 子函数只能由同一M文件调用,不能被其他文件调用
- 函数名与主函数相同
例如:
function d=func(a,b,c)
d=subfunc(a,b)+c;
end
function f=subfunc(a,b)
f=a*b;
end
2. 内联函数
- 以字符串形式存在的函数表达式可以通过inline函数转换为内联函数
- 例如:a=“x+y”,可以通过inline(a)转换为内联函数f(x,y)=x+y
a='(x+y)^2';
b=inline(a);
b(2,3)
3. 匿名函数
- 匿名函数基本格式:函数名=@(x,y)x+y
- 输入参数用逗号隔开
程序优化和调试
程序调试方法:
- 程序错误有两类:语法错误和运行错误
- 语法错误包括词法或文法错误,例如函数名拼写错、表达式写错等
- 程序运行错误是指运行错误,例如变量未定义、函数调用错误等,称为程序逻辑错误
- 利用调试函数
- 利用调试工具