【问题标题】:Gradient of implicit symbolic expression in MatlabMatlab中隐式符号表达的梯度
【发布时间】: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')

其中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

有谁知道为什么会这样,以及是否有任何使用隐式表达式的方法,因为这是一种特殊情况,但总的来说,我有不同的隐式表达式,我的代码应该能够处理它们。

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

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

【问题讨论】:

  • 我假设它是因为在第二个中,您明确定义 Sa 依赖于 YZ 而在第一个中它是一个方程,而不是您可以推导出的函数
  • @AnderBiguri,感谢您的评论。我以前没有注意到,但关于您的评论,我检查了Sa 的第一个定义@ 其类sym,而第二个定义的类是symfun。也许这有关系。

标签: matlab gradient symbolic-math


【解决方案1】:

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

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

【讨论】:

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