在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);
你知道错误在哪里吗?
答案 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的符号表达式数组。