首页 文章

符号向量函数的Matlab梯度和粗糙度计算

提问于
浏览
1

我试图使用Matlab "gradient"和"hessian"函数来计算符号向量函数相对于向量的导数 . 下面是使用sigmoid函数1 /(1 e ^( - a))的示例,其中a是特征向量乘以权重 . 以下版本都会返回错误 . 我是Matlab的新手,非常感谢任何建议 . 解决方案很可能在documentation中,但我无法解决问题 . 预先感谢您的帮助!

%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])));

1 回答

  • 1

    谢谢,Daniel - 事实证明问题在于没有使用dot()来获取w和x的点积 . diff()和gradient()都给出了相同的解决方案,如下所示:

    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)
    

相关问题