一.M文件
在实际应用之中,直接在命令行输入简单的命令无法完全满足用户的需求,MATLAB提供了M文件编程,
M文件因其扩展名为m而得名,是一个标准的文本文件,几乎可以在任何编译器之中进行修改,存储和读取,
M文件有两种格式:
- 命令文件(脚本文件)Script
2)函数文件 Function
注意: 1)M文件的文件名或M函数的函数名应该尽量避免与MATLAB内置函数或者是工具箱之中的函数重名,否则程序执行时可能会出现错误, 2)M函数的文件名必须要与函数名一致才行!!!
1.命令文件(.m文件)
在实际应用之中,如果要输入较多的命令,经常重复输入时,就可以利用M文件,只需要在命令行之中输入m文件的文件名,系统会自动的逐条执行M文件之中的命令,命令文件之中的语句可以直接访问MATLAB工作区中的所有变量,且在运行过程之中生成的变量都是全局变量
注意:
M文件可以在任何文本编辑器之中进行编辑,MATLAB也提供了相应的编辑器,可以在MATLAB命令行之中直接输入edit进入编辑器,也可以点击新建脚本,都是可以的
尝试操作:
步骤1)在命令行中输入edit,直接进入m文件编辑器,将其保存为jiafa.m
2)在m文件之中输入程序,
3)在命令行之中输入文件名,可以得到程序执行结果,同时工作区之中也会显示出来相应的变量,
注意:
M文件之中的%用于对程序进行注释,而在实际运行的时候并不执行,相当于C语言之中的*/,
注意,编辑完文件之后,一定要将其保存在当前工作路径下
2.函数文件(f.m文件):
函数文件的第一行一般都是以function开始,这是函数文件的标志,点击新建,找到函数,建立文件即可(确保在当前文件夹之下包含这个函数文件),
注意函数文件名必须要与函数名一致,这很重要!!!
示例:编写一个求分段函数的程序,用来求值
function y=f(x)
% 此函数用于求分段函数f(x)的值
% 当x<1时,f(x)=3x+2;
% 当-1<=x<=1时,f(x)=x;
% 当x>1时,f(x)=2x+3;
if x<-1
y=3*x+2;
elseif -1<=x<=1
y=x;
else
y=2*x+3;
end
执行结果:
例2:编写一个求任意非负整数n的阶乘的函数,并用它来求10的阶乘
function s=jiecheng(n)
%此函数用来求非负整数n的阶乘
%参数n可以为任意的非负整数
if n<0
%若用户将输入参数误写成负值,则报错
error('输入参数不能为负值!');
return;
else
if n==0 %若n为0,则其阶乘为1
s=1;
else
s=1;
for i=1:n
s=s*i;
end
end
end
注意:编写函数文件的时候要养成注释的好习惯,
你在编写函数文件的时候所写的注释在调用help命令的时候可以调出来!!!!
这样可以使程序更加清晰,别人也容易看明白,更便于维护
注意:在使用help函数的时候,它只能显示M文件注释语句的第一个连续块,被语句隔离的第一个注释块之后的其他语句则无法显示,
所以在编写M文件的时候,应该养成在第一行注释之中尽可能多的包含函数足够的信息特征
嵌套调用与递归调用
在编辑函数文件的时候,MATLAB也允许对函数进行嵌套调用或者是递归调用,
函数的嵌套调用
就是在一个函数文件之中可以调用其他任意函数,被调用的函数也可以调用其他函数,这样大大降低了函数的复杂性。
示例1编写一个求1+1/2!+1/3!+…1/n!的程序
function s=sum_jiecheng(n)
%此函数用来求1+1/2!+...+1/n!的值
%参数n为任意非负整数
if n<0
%若用户将输入参数误写成负值,则报错
disp('输入参数不能为负值!');
return;
else
s=0;
for i=1:n
s=s+1/jiecheng(i); %调用求n的阶乘的函数jiecheng
end
end
函数的递归调用
就是指调用一个函数的过程之中直接或者间接的调用函数本身。
最重要的就是要掌握好什么时候跳出递归,怎样跳出递归
示例:利用函数递归求阶乘
function s=factorial(n)
%此函数利用递归来求阶乘
%参数n为任意非负整数
if n<0
%若用户将输入参数误写成负值,则报错
disp('输入参数不能为负值!');
return;
end
if n==0|n==1
s=1;
else
s=n*factorial(n-1); %对函数本身进行递归调用
end