之前的内容涉及命令行部分的内容只能解决比较简单的问题,输入比较方便,但是遇到比较复杂的问题时,用户就需要使用M文件编程。
M文件
类似一般高级语言,是一种程序化的编程语言,但与它们相比它只是一个简单的ASCII码文本文件,因此它的语法比一般的高级语言简单,程序易调试,有很好的交互性。它同时具有很多工具箱,非常方便(可以添加自己的M文件)。MATLAB语言是由C语言,是一个解释型的语言。
简单讲,M文件就是将处理问题的各种命令融合到一个文件中(.m),然后由系统进行编译,得出结果。它有两个形式:
- 脚本script (类似C中的子过程),变量保存在基本各种空间
- 函数functions (类似子函数,有返回值),变量保存在自己特殊的工作空间。
M文件编辑器
主界面新建即可。(或者在命令行输入 edit mfiles)
有个特殊方法是:在历史记录窗口,按住ctrl或者shift选中所需命令,右键后选择“Create M-file”
%%创建cell
M文件的基本内容
function y=fact(x)
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
[m,n]=size(x);
if(~((m==1)|(n==1))|(m==1 & n==1))
error('input must be a vector');
end
y=sum(x)/length(x)
1.函数定义行 function [out1,out2…]=funname(in1,in2…)
2.H1行 :help文本的第一行,描述函数的功能、参数显示
3.连续多行的注释文本,把文件保存在当前目录下,调用help函数时就可以看到想相应的帮助文本
4.注释文本:%;多行:%{…
%}
5.函数体:计算赋值、函数调用、循环和流程控制以及注释、空行等。
脚本式M文件
a=2;
b=2;
clf;
x=-a:0.2:a;y=-b:0.2:b;
for i=1:length(y)
for j=1:length(x)
if x(j)+y(i)>1
z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j));
elseif x(j)+y(i)<=1
z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j))
else z(i,j)=0.7575*exp(-y(i)^2-6.*x(j)^2);
end
end
end
axis([-a,a,-b,b,min(min(z)),max(max(z))]);
colormap(flipud(winter));surf(x,y,z);
函数式M文件
function y=fact(x)
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
[m,n]=size(x);
if(~((m==1)|(n==1))|(m==1 & n==1))
error('input must be a vector');
end
y=sum(x)/length(x)
函数式M文件需要自带变量。并且默认情况下,函数式M文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束这些变量自动从空间清楚。