【问题标题】:Are pure functions supported by MATLAB Symbolic Toolbox?MATLAB Symbolic Toolbox 是否支持纯函数?
【发布时间】:2011-05-19 15:09:45
【问题描述】:

Mathematica 的纯函数是否在 MATLAB Symbolic Toolbox 中以某种方式实现?我想计算嵌套微分。

一个简单的例子: 我想得到一个二维函数在最大变化方向上的方向导数。

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 符号工具箱是否能够实现我想要实现的功能?

【问题讨论】:

  • 你知道f是什么吗?还是您想要一般的f
  • 没有。它是 x 和 y 的任意可微函数。
  • 发表评论后我忘记回复您了...请在下面查看我的回答。我认为您尝试做的事情在 MATLAB 中是不可能的,但我很高兴知道是否可以。

标签: matlab


【解决方案1】:

根据您的问题:

这不起作用,因为 MATLAB 计算 diff(f,x)=diff(f,y)=0(它不知道它是否是一个函数)。

这不是异常行为,而是预期的行为。当您将 f 初始化为符号变量时,没有与 f 关联的定义,因此衍生 w.r.t x 应该返回 0 和衍生 w.r.t。本身应该返回1。 Mathematica 的行为完全相同:

MATLAB:

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 的纯函数定义。 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 中有这样的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多