首页 文章

Matlab渐变

提问于
浏览
1

在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 回答

  • 0

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

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

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


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

  • 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的符号表达式数组 .

相关问题