我的情况如下:我有一个象征性的表达式:
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
有谁知道为什么会这样,如果有任何方式使用隐式表达式,因为这是一个特殊情况,但一般来说我有不同的隐式表达式,我的代码应该能够处理它们 .
我已经阅读了 gradient
和一些网站上的文档,但如果我找到了答案,我没有注意到 .
我相信我可以使用第二种形式但仍然,我对这个主题感到好奇 . 谢谢你的时间 .
1 回答
在第一个中,Sa是整个等式,包括
==
,而在第二个中,它是一个符号函数,取决于2个变量 .最终MATLAB似乎处理的方式是第一个不可导出(也依赖于另一个2
sym
变量,不知道它们是否与派生的变量相关),而第二个变量被识别出来作为一个函数(符号),可以得到 .