1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件

例:自定义求和函数

需要自定义一个 my_sum.m 的文件来存放函数


function[s]=my_sum(n)
s=0;
for i=1:n
    s=s+i;
end


注意:函数名(my_sum)必须与文件名(my_sum.m)一致


调用函数的时候函数文件放在当前工作目录下面。


2、函数文件+子函数:定义一个具有多个子函数的M文件

例:求最大值函数


function son_function( )        %主函数必须位于最上方
%子函数举例
max1=find_max(1,2,3)
max2=find_max(7,3,9)

function max=find_max(a,b,c)    %子函数
if (a>=b)&(a>=c)
    max=a;
elseif (b>=a)&(b>=c)
    max=b;
else
    max=c;
end



注意:一个m文件可以写多个function,但是只有第一个能够在其他文件中调用,其余的函数只能在该文件中调用。

函数名要与主函数名一致


3、Inline:无需M文件,直接定义

%inline命令用来定义一个内联函数:f=inline(‘函数表达式’, ‘变量1’,’变量2’,……)。
调用方式:y=f(数值列表) %注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。

例:


f=inline('x^2+y','x','y');
z=f(2,3)

例:

inline函数调用格式如下所示:


>> fname = inline('sum(1:n)','n')

此时会输出:

fname =
     Inline function:
     fname(n) = sum(1:n)



首先构造函数句柄,随后就可利用feval函数计算:


>> calsum = feval(fname,100)


此时就会输出:


calsum =
        5050



4、匿名函数

使用matlab函数句柄操作符@,可以定义指向matlab内置函数和用户自定义函数的函数句柄,函数句柄也可以像函数一样的使用。

例:

x=-pi:0.1:pi;
fh={@cos,@sin};
plot(fh{2}(x))

fh=

    @cos     @sin

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