下面是matlab中几种常用的函数定义和调用方法:
1、函数文件+调用函数文件:定义多个M文件:
% 调用函数文件:myfile.m
clear
clc
for t=1:10
y=mylfg(t);
fprintf(‘M^(1/3)=%6.4f\n’,t,y);
end
%自定义函数文件: mylfg.m
function y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfg.m)一致
Y=x^(1/3);
注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。
2、函数文件+子函数:定义一个具有多个子函数的M文件
%命令文件:funtry2.m
function []=funtry2()
for t=1:10
y=lfg2(t)
fprintf(‘M^(1/3)=%6.4f\n’);
End
function
y=lfg2(x)
Y= x^(1/3);
%注:自定义函数文件funtry2.m中可以定义多个子函数function。
子函数lfg2只能被主函数和主函数中的其他子函数调用。
3、Inline:无需M文件,直接定义;
%inline命令用来定义一个内联函数:f=inline(‘函数表达式’,‘变量1’,’变量2’,……)。
调用方式:y=f(数值列表)
%注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。
例如:
f=inline(‘x^2+y’,’x’,’y’); z=f(2,3) Ans=7
注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。
例:
Clear
Clc
f=’x^2’;
Syms x g;
g=x^2;
h=inline(‘x^2’,’x’);
4、Syms+subs: 无需M文件,直接定义;用syms定义一个符号表达式,用subs调用:
Syms f x%定义符号
f=1/(1+x^2); %定义符号表达式
subs(f, ‘x’,代替x的数值或符号)
注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。
这种函数定义方法的特点是,可以用符号进行替换
Syms f x f=1/(1+x^2);
subs(f, ‘x’,’y^2’)
ans= 1/(1+(y^2)^2)
注:该方法的缺点是,由于使用符号运算内核,运算速度会大大降低。
5、字符串+subs:无需M文件,直接定义.直接定义一个字符串,用subs命令调用。
例如:f=’1/(1+x^2)’%定义字符串
z=subs(f,’x’,2)
g=subs(f,’x’,’y^2’)
注:优点是,占用内存最少,定义格式方面自由。缺点是,无法对字符进行符号转化。
当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).
例如:f=’x^2*y’;
x=2;y=3;
subs(f)
ans=12
========================================================================================
另外:
函数调用是使主程序简明清晰的重要工具,在很大程度上简化了程序的复杂程度,也方便于不同程序使用相同模块的调用。
下面主要介绍:
函数文件+调用命令文件:
需单独定义一个自定义函数的M文件这种方法很简单,定义好输入输出就可以自由调用函数。
(1)定义函数
新建一个m文件在m文件里面第一行输入function [输出值]=(任何字母)(输入变量),输入变量和输出值个数不限,根据自己需要定义,接着定义你要实现的功能,最后保存这个m文件,注意:这个m文件的名字就是后面程序调用的名称,同时主程序和函数文件必须保存在同一个文件夹中,而且可以在函数中再嵌套其它函数。
(2)调用函数
[输出值]=函数保存的文件名(输入变量)
注意,如果输出值只有一个,可以不用中括号,如果两个以上就不必须使用,否则只输出第一个值,而且采用小括号会报错。
实例:
编写一个解方程的程序:
例如求方程的根,
定义函数:
function [x,y]=equal(a,b,c)
d=b^2-4*a*c;
x=(-b+sqrt(d))/(2*a);
y=(-b-sqrt(d))/(2*a);
文件保存为equal
主程序调用:[r1 r2]=myfunction(2,3,-7)
结果:r1 =1.2656 r2 = -2.7656
还是上面的例子,实现函数中调用函数:
定义函数1:
function [testfun]=supple(j)
testfun =j+5;
保存文件为supple(此处不一定要和函数名相同)
定义函数2:
function [x,y]=equal(a,b,c)
c=supple(c); %调用了一个函数
d=b^2-4*a*c;
x=(-b+sqrt(d))/(2*a);
y=(-b-sqrt(d))/(2*a);
文件保存为equal主程序调用:
[r1 r2]=myfunction(2,3,-12) %(将c有-7改为-12)
结果:r1 =1.2656
r2 = -2.7656 %计算结果相同,说明函数中调用函数成功。