使用函数句柄创建创建函数和声明 syms 有什么区别?

What is the difference between creating creating functions using function handle and declaring syms?

看来,要创建一个函数 f(x,y)=x+y,我可以有两种方法。

  1. syms x y; f(x,y) = x+y
  2. f = @(x,y) x+y

看起来很像,不知道有没有细微的差别。

通常,如果我需要评估输入或许多样本的函数,我会选择使用第二种方法(函数 handles/anonymous 函数)。

方法一:符号函数

此方法允许使用 subs() 替换函数在特定 point/value 处计算函数。两个图都可以使用 fsurf().

绘制
clear;
syms x y
f(x,y) = x+y;
fsurf(f);

subs(f,[x y],[5 5])

符号函数的变体和偏移可以类似于匿名 functions/function 句柄来完成,但需要注意的是不需要在 @().

中包含输入参数
g = f(x,y) + f(x-5,y-5) 
fsurf(g);

方法 2:匿名 Functions/Function 句柄

此方法允许您直接将值输入函数 f(x,y)。我更喜欢匿名函数,因为它们看起来更灵活。

clear;
f = @(x,y) x+y;
fsurf(f);

f(5,5)

您可以做的一些很酷的事情是抵消和轻松添加匿名函数的变体。输入也可以是数组的形式。

x = 10; y = 2;
f(x-5,y-5) + f(x,y)

g = @(x,y) f(x,y) + f(x-5,y-20);
fsurf(g);

运行 使用 MATLAB R2019b