我的情况如下: 我有一个象征性的表达,如:
syms X Y Z K
Ra=51.7;
P=[0 0 200];
Sa=sym('Ra^2==(Z-P(3))^2+(Y-P(2))^2')
将Y
和Z
定义为符号。 Ra
和P
是向量。
我需要获得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
和某些网站上的文档,但如果我找到了答案,我没有注意到。
我相信我可以使用第二种形式但仍然,我对这个主题感到好奇。 谢谢你的时间。
答案 0 :(得分:0)
在第一个中,Sa是整个等式,包括==
,而在第二个中,它是一个符号函数,取决于2个变量。
最终MATLAB似乎处理的方式是第一个不可导出(也依赖于另外2个sym
变量,它们不知道它们是否与派生的相关) ,而第二个被识别为一个函数(符号),可以得到。