本帖最后由 啵啵薄荷 于 2022-5-7 22:13 编辑 想请教一下各位大佬,我在用 MATLAB R2016a 中运行下面代码的时候,会有报错信息,不知道代码是哪里有问题,还是有其它的什么问题。请各位大佬指点一二,非常感谢!!(代码和报错信息都已经附上) 这是代码部分: function [x,val,k] = dampnm(fun,gfun,Hess,x0) %功能: 用阻尼牛顿法求解无约束问题: min f(x) %输入: x0是初始点, fun, gfun, Hess分别是求 % 目标函数值,梯度,Hesse 阵的函数 %输出: x, val分别是近似最优点和最优值, k是迭代次数. maxk=100; %给出最大迭代次数 rho=0.55;sigma=0.4; k=0; epsilon=0.001; while(k<maxk) gk=feval(gfun,x0); %计算梯度 Gk=feval(Hess,x0); %计算Hesse阵 dk=-Gk\gk; %解方程组Gk*dk=-gk, 计算搜索方向 if(norm(gk)<epsilon), break; end %检验终止准则 m=0; mk=0; while(m<20) % 用Armijo搜索求步长 if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk) mk=m; break; end m=m+1; end x0=x0+rho^mk*dk; k=k+1; end x=x0; val=feval(fun,x); function He = Hess(x) n = length(x); He = zeros(n,n); He=[2, 0; 0, 4]; x0 = [-2 2]'; [x, val, k] = dampnm('fun', 'gfun', 'Hess', x0) 这是报错部分: 错误使用 feval 未定义与 'double' 类型的输入参数相对应的函数 'gfun'。 出错 dampnm (line 10) gk=feval(gfun,x0); %计算梯度 |
3 条回复