Matlab中隐式符号表达的梯度

时间:2018-04-16 15:15:06

标签: matlab gradient symbolic-math

我的情况如下: 我有一个象征性的表达,如:

syms X Y Z K
Ra=51.7;
P=[0 0 200];

Sa=sym('Ra^2==(Z-P(3))^2+(Y-P(2))^2')

YZ定义为符号。 RaP是向量。 我需要获得Sa的渐变,但是我收到错误:

G=gradient(Sa,[Y Z]);

Error using symengine (line 59)
The first argument must be of type 'Type::Arithmetical'.

Error in sym/gradient (line 39)
    res = mupadmex('symobj::gradient',fsym.s,x.s);

但如果我写相同的表达式:

Sa(Y,Z)=((Z-P(3))^2+(Y-P(2))^2-Ra^2);

我得到了预期的结果

G=gradient(Sa,[Y Z])

G(X, Y, Z) =

       2*Y
 2*Z - 400

有谁知道为什么会这样,如果有任何方式使用隐式表达式,因为这是一个特殊情况,但一般来说我有不同的隐式表达式,我的代码应该能够处理它们。 / p>

我已经阅读了gradient和某些网站上的文档,但如果我找到了答案,我没有注意到。

我相信我可以使用第二种形式但仍然,我对这个主题感到好奇。 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

在第一个中,Sa是整个等式,包括==,而在第二个中,它是一个符号函数,取决于2个变量。

最终MATLAB似乎处理的方式是第一个不可导出(也依赖于另外2个sym变量,它们不知道它们是否与派生的相关) ,而第二个被识别为一个函数(符号),可以得到。