代码: x = ones(1,sparse_degree)'; options = optimset('LargeScale','off','display','iter'); [x,fval] = fmincon(@(x)objfun1(x,AA,BB,CC,DD,EE,G,L,O,sparse_degree),ini_asset_ratios,A,b,[],[],lb,ub,options); x1 = x; obj1 = fval;报错为:错误使用 optimfcnchk (第 115 行) NONLCON must be a function. 出错 fmincon (第 442 行) confcn = optimfcnchk(NONLCON,'fmincon',length(varargin),funValCheck,flags.gradconst,false,true); 出错 sub_alg (第 58 行) [x,fval] = fmincon(@(x)objfun1(x,AA,BB,CC,DD,EE,G,L,O,sparse_degree),ini_asset_ratios,A,b,[],[],lb,ub,options);怎么修改
时间: 2023-09-22 12:06:47 浏览: 185
根据报错信息来看,错误出现在调用 `fmincon` 函数时,传递给它的 `NONLCON` 参数不是一个函数。
`fmincon` 函数的第一个输入参数是一个函数句柄,用于计算非线性约束条件。然而,在你的代码中,`NONLCON` 参数被设置为一个空的占位符 `[]`,这导致了报错。
要修复这个问题,你需要提供一个有效的非线性约束函数作为 `NONLCON` 参数。你可以在代码中定义一个非线性约束函数,并将其传递给 `fmincon` 函数。例如:
```matlab
function [c, ceq] = nonlcon(x)
% 在这里定义你的非线性约束条件
c = []; % 不等式约束条件
ceq = []; % 等式约束条件
end
```
然后,将修改后的非线性约束函数名称传递给 `fmincon` 函数:
```matlab
[x, fval] = fmincon(@(x)objfun1(x,AA,BB,CC,DD,EE,G,L,O,sparse_degree), ini_asset_ratios, A, b, [], [], lb, ub, @nonlcon, options);
```
通过这样的修改,你应该能够解决报错问题,并成功运行你的代码。请确保在定义非线性约束函数时,符合 `fmincon` 函数的要求,并正确地指定输入和输出参数。
阅读全文