1. 函数文件式定义

为函数新建一个同名m文件,文件中可定义其他辅助函数,辅助函数要定义在主函数之后,仅主函数可在文件外调用,辅助函数只能被同文件内的其他函数调用。

  1. function [a,b,c] = main(x,y,z)
  2. a=test();
  3. b=20;
  4. c=0;
  5. end
  6. function s=test()
  7. s=100;
  8. end

2. 直接inline式定义

这种函数定义方式简单快捷,无需创建m文件,直接在代码种定义即可。

  1. ...
  2. f=inline('x^2+y','x','y')
  3. z=f(1,2) %x=1,y=2
  4. ...

注意函数调用的时候参数顺序是按照定义时指定顺序传入的。
上述inline函数定义相当于:

  1. f =
  2. Inline function:
  3. f(x,y) = x^2+y

inline函数定义难以实现多返回值函数的定义。

3. @ 符号式函数定义@符号式函数定义

  1. f=@(x,y)(x^2+y)
  2. f(2,1) %5

4. @ 函数句柄

类似C++中的函数指针或引用,将函数句柄赋值给变量实现函数重命名。这种方式不能构建新的函数,只能用于现有函数。

  1. f=@cos
  2. f(0) % 1

5. 符号式函数定义

使用 syms 进行符号式定义,后代入 subs 变量求取函数值。

  1. syms f x y
  2. f=x^2+y
  3. subs(f,{'x','y'},{2,1}) % 5

符号式定义灵活性较高,代入的时候除直接代入变量值外,还可代入变量表达或计算式扩展或简化函数,例如:上述函数中 y=z^2 则可代入

  1. subs(f,'y','z^2')

符号式定义的缺点是执行效率低,毕竟使用的是符号解释内核。

6. 字符串式定义

字符串式定义具有与符号式定义相仿的灵活性和定义方式,但效率要高,定义格式也比较自由。

  1. f='x^2+y'
  2. subs(f,{'x','y'},{3,4}) % 13
  3. subs(f,'y','z^2') % f=x^2+z^2
  4. subs(f,{'x','z'},{3,4}) % f=y+9

我们可以在代入前定义同名变量,这样在代入时可免去指定代入值,直接将同名变量值作为代入值代入函数定义式计算。