【发布时间】:2018-04-16 15:15:06
【问题描述】:
我的情况如下: 我有一个象征性的表达方式:
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 和一些网站上的文档,但如果我找到了答案,我没有注意到。
我相信我可以使用第二种形式,但我仍然对这个主题感到好奇。 感谢您的宝贵时间。
【问题讨论】:
-
我假设它是因为在第二个中,您明确定义
Sa依赖于Y和Z而在第一个中它是一个方程,而不是您可以推导出的函数 -
@AnderBiguri,感谢您的评论。我以前没有注意到,但关于您的评论,我检查了
Sa的第一个定义@ 其类sym,而第二个定义的类是symfun。也许这有关系。
标签: matlab gradient symbolic-math