在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)
错误信息是:
未定义的运算符' . ''表示'function_handle'类型的输入参数 . gradient> parse_inputs中的错误(第146行)f = f . ';渐变错误(第48行)[f,ndim,loc,rflag] = parse_inputs(f,varargin);
你知道错误在哪里吗?
2 回答
我认为您必须指定要为其计算渐变的symbolc变量,并以不同方式指定f(请查看示例):https://de.mathworks.com/help/symbolic/gradient.html
它们在不使用函数句柄的情况下指定f,因为符号工具箱将自行处理它 .
还看看这个问题:Matlab gradient and hessian computation for symbolic vector function
编辑:该死的,在Yvon的评论后有点太晚了:-)
我只是在这里查看错误消息 . gradient不喜欢函数句柄作为输入 .
如果我将函数
f
定义为前面没有@(x)
的纯符号然后输入渐变给我一个5x1的符号表达式数组 .