MATLAB编写的程序文件有两种:脚本M(Scripts)文件和函数M(Functions)文件
M文件的创建
M文件是普通的ASCII文本文件,可以采用文字编辑和处理软件来建立,M文件的命名和C类似,注意MATLAB中对大小写的区分
- 脚本M文件
是一系列的命令、语句的简单组合。其中的变量都为全局变量,一般用clear清除变量
- 函数M文件
实现程序的模块化,可以实现程序的分工合作,适合程序的开发。其中变量一般都是局部变量,存放在自身函数的函数空间
使用edit可以查看函数的M文件,如edit std.m
参数传递
nargin为输入参数个数,nargout为输出参数个数
function y=mymax3(x1,x2,x3)
% 计算标量或向量的最大值
if nargin==0
y=NaN;
disp('请输入参数!');%当参数为0是会提示输入参数
return;
elseif nargin==1
y=max(x1);
elseif nargin==2
y=max(max(x1),max(x2));
else
y=max([max(x1),max(x2),max(x3)]);
end
变量
全局变量采用global进行声明
永久变量只能在函数M文件在定义,persistent
顺序结构
从上到下执行
分支结构
1.条件结构
1.1.if…end
a=6;
b=4;
if a>=b
a=b;
end
a,b
1.2.if…else…end
a=12345;
if rem(a,2)==0
disp('偶数');
else
disp('奇数');
end
1.3.if…elseif…else…end
x=87;
if x>=90
disp('优秀');
elseif x>=80
disp('良好');
elseif x>=70
disp('中等');
elseif x>=60
disp('及格');
else
disp('不及格');
end
1.4.switch…case…end
x=5;
switch x
case 1
disp('x=1');
case 2
disp('x=2');
case {3,4,5}
disp('x=3,4,5');
otherwise
disp('x');
end
2.循环结构
2.1.for
for i=1:1:10
x(i)=i^10;
end
for i=[1,2,3,4,5,6,7,8,9,10]
y(i)=i^10;
end
i=1:10;
z=i.^10
2.2while
x=zeros(1,10);
i=1;
while i<=length(x)
x(i)=1/i;
i=i+1;
end
x
2.3.break(跳出循环)
x=magic(6)
for i=1:size(x,1)
for j=1:size(x,2)
if x(i,j)==5
break;
else
x(i,j)=0;
end
end
end
x
2.4.continue(继续)
x=magic(6)
for i=1:size(x,1)
if rem(i,2)==0
continue;
end
x(i,:)=0;
end
x
3.try…catch 异常处理
当你不确定该段程序代码是否会出错时,采用该语句可以捕获和处理异常
a=[1,2,3;2,3,4]
b=[3,4,5;1,6,7]
try
c=a*b;
disp('c=a*b');
catch
disp(lasterr);
end
交互式结构
1.input
r1=input('Do you like apple? Y/N: ','s');
while isempty(r1)
r1=input('Do you like apple? Y/N: ','s');
end
disp(r1);
disp('input matrix,for example:eye(5)');
r2=input('','s');
f=eval(r2)
2.keyboard修改变量的值
a=[1 2 3;2 3 4]
b=[4 5 3;7 8 9]
keyboard
c=a+b
3.pause暂停,按任意键继续
t=0:pi/20:2*pi;
x=sin(t);
figure;
plot(t,x)
xlabel('t');
ylabel('x');
hold on;
for i=1:7
pause;
plot(t,sin(t+i/5));
hold on;
end
4.echo(echo on显示程序语句;echo off不显示)
a=[1 2 3;2 3 4];
b=[1 2 3;7 8 9];
echo on;
c=a+b
d=a-b
echo off;
e=a.*b
5.return终止运行或返回
函数类型
1.主函数
每个函数M文件的第一行定义的函数是主函数,一个函数M文件只有一个主函数,主函数名字与函数的名字相同。主函数可以调用子函数和嵌套函数。
2.子函数
一个函数M文件可以有多个子函数,也采用function定义。如果主函数中包含子函数则每个采用function定义的函数必须采用end结束。子函数只能被同一文件下的主函数或其他子函数调用。
function [a,b]=mymain(x,y)% 主函数
a=mysub1(x,y);
b=mysub2(x,y);
end
function z=mysub1(x,y)% 子函数1
z=x-y;
end
function z=mysub2(x,y)% 子函数2
z=x+y;
end
3.嵌套函数
function a=A(x,y) % B(x,y);
% D(x,y);
a=1
function b=B(x,y)
C(x);
D(y);
b=2
function c=C(x)
B(x)
D(x);
c=3
end
end
function d=D(x,y)
B(x,y);
E(y);
d=4
function e=E(y)
B(x);
D(x);
e=5
end
end
end
4.私有函数(要保存在private文件下,有有限的访问权限,不能直接调用)
function z=myprivatefun(x,y)
% 这是私有函数 myprivatefun()
disp('这是私有函数!');
if nargin==2
z=x+y;
elseif nargin==1
z=x;
else
warning('没有输入参数!');
return;
end
5.重载函数(具有相同的函数名,在调用时MATLAB会根据实际的参数类型和个数来选择其中一个,通常目录名以@开头后跟一个代表MATLAB数据类型的字符,如@int8)
function m=max(x,y,z,w,varargin)
% 新建的重载函数 max()
% 该函数求三个标量的最大值
% author,copyright
if nargin~=4
return;
end
temp=x;
if x<y
temp=y;
end
if temp<z
temp=z;
end
if temp<w
temp=w;
end
m=temp;
6.匿名函数(fhandle=@(arglist)expr,其中arglist是匿名函数的输入参数列表,用逗号分隔,expr是具体函数表达式)
6.1.
f=@(x) 2*x^2+3*x+4
a1=f(2)
a2=f(3)
a3=f(4)
6.2.
f1=@()disp('This is an anonymous function')
f1()
functions(f1)