Matlab梯度

Matlab gradient

在 matlab 中,我必须计算函数 f(x)x 一个 5 维向量的符号梯度。

x=sym('x',[1,2,3,4,5]);
c=[1 2 4 3 5 3 4 5 4 3 4 34 5 6];
d=[1 0 1 0 0 1 1 1 0 0 0 1 0 1];
f =@(x) sum(-0.5*log(x(1))+x(1)*0.5*(x(2+d)/x(1)-c).^2-log(exp(x(2+d).*c+x(4+d))./(exp(x(2)*c+x(4))+exp(x(3)*c+x(5)))))
grad_f=gradient(f)

错误信息是:

Undefined operator '.'' for input arguments of type 'function_handle'.

Error in gradient>parse_inputs (line 146) f = f.';

Error in gradient (line 48) [f,ndim,loc,rflag] = parse_inputs(f,varargin);

你知道哪里出错了吗?

我认为您必须指定要为其计算梯度的 symbolc 变量,并以不同方式指定 f(查看示例): https://de.mathworks.com/help/symbolic/gradient.html

他们在不使用函数句柄的情况下指定 f,因为符号工具箱会自行处理它。

也看看这个问题:Matlab gradient and hessian computation for symbolic vector function


编辑:该死,伊冯发表评论后有点太晚了:-)

我在这里只查看错误消息本身。 gradient 不喜欢函数句柄作为输入。

如果我将函数 f 定义为前面没有 @(x) 的纯符号

f =sum(-0.5*log(x(1))+x(1)*0.5*(x(2+d)/x(1)-c).^2-log(exp(x(2+d).*c+x(4+d))./(exp(x(2)*c+x(4))+exp(x(3)*c+x(5)))))     

然后输入 gradient 给我一个 5x1 的符号表达式数组。