problem running fmincon, 'Input arguments to function include colon operator.'

2 ビュー (過去 30 日間)
I am trying to run fmincon and i get this error:
'Input arguments to function include colon operator.
To input the colon character, use ':' instead.'
I cannot understand why I get this error.
My code is below.
Anyone any ideas? Thank you.
% code
low_b = zeros(size(param));
options = optimoptions('fmincon', ...
'Algorithm','interior-point', ...
'DerivativeCheck', 'on',...
'GradObj', 'on',...
'HessFcn', @hessfh, ...
'Hessian', 'user-supplied',...
'Display','final');
[xfinal,fval,exitflag,output] = fmincon(@fh,[0.1;0.1],[],[],[],[],low_b,[],[],options);
% code
function [f,gradfh]=fh(param)
syms param1 param2 real
param=[param1;param2];
f3 =((191352748222723/(7128637342969177/1125899906842624)^((param1 - 1)/param1)/(7128637342969177/1125899906842624)^(1/param1))/9511602413006487552 + ((2733703199318633/70368744177664 - param2)^(1 - param1)*(2733703199318633/70368744177664 - param2)^param1)/(561*(param2 - 2733703199318633/70368744177664)))^2 + (log(2733703199318633/70368744177664 - param2)/561 + 2074186557694359/(1125899906842624*param1) - log(-(param2 - 2733703199318633/70368744177664)*(2733703199318633/70368744177664 - param2)^param1)/(2733703199318633/70368744177664 - param2)^param1)^2
f = matlabFunction(f3,'vars',{param});
gradf3 = jacobian(f3,param).';
gradfh = matlabFunction(gradf3,'vars',{param});
end
% code
function hessf=hessfh(param)
syms param1 param2 real
param=[param1;param2]
f3 =((191352748222723/(7128637342969177/1125899906842624)^((param1 - 1)/param1)/(7128637342969177/1125899906842624)^(1/param1))/9511602413006487552 + ((2733703199318633/70368744177664 - param2)^(1 - param1)*(2733703199318633/70368744177664 - param2)^param1)/(561*(param2 - 2733703199318633/70368744177664)))^2 + (log(2733703199318633/70368744177664 - param2)/561 + 2074186557694359/(1125899906842624*param1) - log(-(param2 - 2733703199318633/70368744177664)*(2733703199318633/70368744177664 - param2)^param1)/(2733703199318633/70368744177664 - param2)^param1)^2
gradf3 = jacobian(f3,param).';
hessf3 = jacobian(gradf3,param);
hessf = matlabFunction(hessf3,'vars',{param});
end

採用された回答

Walter Roberson
Walter Roberson 2017 年 1 月 1 日
The second output of the objective function should be the gradient evaluated at the input point, not a function handle. Likewise the hessian should be the value of the hessian, not a function handle.
  11 件のコメント
Rustem Devletov
Rustem Devletov 2019 年 4 月 26 日
Hello, friend. I'm really really feeling despondent. I don't know how to implement the following idea. My supervisor told me to supple the gradient to a function from another file. How can I implement this? Can you suggest anything?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSolver Outputs and Iterative Display についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by