matlab⾃定义函数的⼏种⽅法
1、函数⽂件+调⽤命令⽂件:需单独定义⼀个⾃定义函数的M⽂件;
2、函数⽂件+⼦函数:定义⼀个具有多个⾃定义函数的M⽂件;
3、Inline:⽆需M⽂件,直接定义;
4、匿名函数;
5、Syms+subs: ⽆需M⽂件,直接定义;
6、字符串+subs:⽆需M⽂件,直接定义;
7、直接通过@符号定义.
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
matlab求导
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. 匿名函数
使⽤matlab函数句柄操作符@,可以定义指向matlab内置函数和⽤户⾃定义函数的函数句柄,函数句柄也可以像函数⼀样的使⽤。例如:
>>x=-pi:0.1:pi;
>> fh={@cos,@sin};
fh =
@cos    @sin
>>plot(fh{2}(x))
5、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)
注:该⽅法的缺点是,由于使⽤符号运算内核,运算速度会⼤⼤降低。
6、字符串+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
7、直接通过@符号定义.
⽰例如下:
>> f=@(x,y)(x.^2-sin(y))
f =
@(x,y)(x.^2-sin(y))
>> f(2,3)
ans =
3.8589