Mathematica的纯函数是否在MATLAB Symbolic Toolbox中以某种方式实现?我想计算嵌套的差异。
一个简单的例子: 我想在最大变化的方向上得到2D函数的方向导数。
syms f x y w
w = [ diff(f,x); diff(f,y) ] / sqrt(diff(f,x) + diff(f,y));
d = w * [ diff(f,x), diff(f,y) ];
我想得到答案:
d = sqrt(diff(f,x)^2 + diff(f,y)^2);
这不起作用,因为MATLAB评估diff(f,x)= diff(f,y)= 0(它不知道它是否是函数)。 MATLAB符号工具箱是否能够实现我想要实现的目标?
答案 0 :(得分:1)
从你的问题:
这不起作用,因为MATLAB评估diff(f,x)= diff(f,y)= 0(它不知道它是否是函数)。
这不是异常行为,而是预期行为。当您将f
初始化为符号变量时,没有与f
相关联的定义,因此导数wrt x
应该返回0
并且衍生工具本身应该返回1
。 Mathematica表现完全相同:
syms f x
diff(f,x)
ans =
0
diff(f,f)
ans =
1
In[1]:= D[f, x]
D[f, f]
Out[1]= 0
Out[2]= 1
对于纯函数,定义与实际函数无关,如果你查看任何参数,它应该对它进行评估。例如,衍生物w.r.t的纯函数定义。 mathematica中的x
,D[#, x] &
In[3]:= D[#, x] &[a x^2 + b x + c]
Out[3]= 2 a x
In[4]:= D[#, x] &[a x^3 + b f]
Out[4]= 3 a x^2
MATLAB中与此最接近的称为anonymous function。上述功能的定义是
syms f x a b c
y=@(f)diff(f,x);
y(a*x^2+b*x+c)
ans =
b + 2*a*x
现在你要做的是,在Mathematica中有可能保持某些表达式不被评估并按下它以使其成为你想要的最终输出形式。但是,我不知道在MATLAB中使用符号工具箱的这种功能。