Matlab渐变

时间:2016-05-09 15:31:20

标签: matlab gradient

在matlab中,我必须使用f(x)维度为5的向量来计算函数x的符号渐变。

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)

错误信息是:

  

未定义的运算符'。''表示'function_handle'类型的输入参数。

     

渐变错误> parse_inputs(第146行)           f = f。';

     

渐变错误(第48行)   [f,ndim,loc,rflag] = parse_inputs(f,varargin);

你知道错误在哪里吗?

2 个答案:

答案 0 :(得分:0)

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

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

另请查看此问题:Matlab gradient and hessian computation for symbolic vector function

编辑:该死的,在Yvon的评论之后有点太晚了: - )

答案 1 :(得分:0)

我只是在这里查看错误消息。 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)))))     

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