首页 文章

Matlab中隐式符号表达的梯度

提问于
浏览
0

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

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 和一些网站上的文档,但如果我找到了答案,我没有注意到 .

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

1 回答

  • 0

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

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

相关问题