使用diff或gradient进行符号计算?

时间:2014-12-15 14:12:17

标签: matlab symbolic-math

我正在使用虚拟势场来控制2D环境中一组机器人的移动,它们的位置由x和y坐标矩阵给出。虚拟势场取决于许多变量,其中一个是机器人间距离。我的代码的简短(简化)示例如下所示。

x = sym('x',[4 2]);             % four robots with x and y coordinates
xd = sym('xd',[1 2]);           % a single destination

F = sym(ones(4,1));            % one potential function for each robot

for i=1:size(x,1)
    for j=1:size(x,1)
        if i~=j
            F(i) = F(i)/norm(x(i,:)-x(j,:))^2;        % infinite potential when any two robots collide
        end
    end
    F(i) = F(i) * norm(x(i,:)-xd)^2;                  % add an attraction force to the goal
end

所以现在我已经为潜在的领域创建了符号表达式,我需要找到它们的衍生物,这样我才能应用最陡的下降。现在我想知道:我是否使用函数gradientdiff获取关于位置的导数是否有所不同?澄清一下:对于机器人i,我想采用与xi_1xi_2相关的衍生物。

1 个答案:

答案 0 :(得分:1)

如上所述,你的问题接近于数学而非编程。 gradient只是将导数推广到多维度。是的,对于2-D平面中的移动,使用sym/gradient是有意义的。如the documentation states,如果您仅为第二个参数指定标量,则sym/gradient将等同于sym/diff。要正确计算二维渐变,第二个参数必须是双元素向量,例如[xi_1 xi_2]