用于符号矢量函数Matlab的梯度和麻布计算(Matlab gradient and hessian

2019-10-22 14:41发布

我试图使用Matlab的“梯度”和“粗麻布”函数来计算一个符号矢量函数的导数相对于一个矢量。 以下是使用S形函数1 /(1 + E ^( - a))的一个例子,其中一个是乘以权重的特征向量。 下面的所有版本返回一个错误。 我是新来的Matlab和非常感激的任何建议。 该解决方案可能是我的鼻下的文件 ,但我一直没能解决的问题。 预先感谢您的帮助!

%version 1
syms y w x
x = sym('x', [1 3]);
w = sym('w', [1 3]);
f = (y-1)*w.*x + log(1/(1+exp(-w.*x)));
gradient(f, w)

%version 2
syms y w1 w2 w3 x1 x2 x3 x w
x = [x1,x2,x3];
w = [w1,w2,w3];
f = (y-1)*w.*x + log(1/(1+exp(-w.*x)));

%version 3
syms y w1 w2 w3 x1 x2 x3
f = (y-1)*[w1,w2,w3].*[x1,x2,x3] + log(1/(1+exp(-[w1,w2,w3].*[x1,x2,x3])));

Answer 1:

谢谢,丹尼尔 - 原来的问题是在没有使用点()取w和x的点积。 两者的diff()和梯度(),得到相同的溶液,如下所示:

syms y
x = sym('x', [1 3]);
w = sym('w', [1 3]);
f = (y-1)*dot(w,x) + log(1/(1+exp(dot(-w,x))));
diff(f, w(1))
gradient(f, w(1))

%ans =
%x1*(y - 1) + (x1*exp(- x1*conj(w1) - x2*conj(w2) - x3*conj(w3)))/
    (exp(-x1*conj(w1) - x2*conj(w2) - x3*conj(w3)) + 1)


文章来源: Matlab gradient and hessian computation for symbolic vector function