[已解决] fmincon函数调用时,执行fun1时出错

[复制链接]
天辰の星 发表于 2021-5-15 15:17:29
运行f函数后出现提示
  1. 尝试将 SCRIPT fun1 作为函数执行:
  2. C:\Users\75407\Desktop\fun1.m

  3. 出错 fmincon (line 536)
  4.       initVals.f = feval(funfcn{3},X,varargin{:});

  5. 出错 fxx (line 24)
  6. [x,fval]=fmincon('fun1',rand(10,1),[],[],[],[],zeros(10,1),[],'mycon21',options);

  7. 原因:
  8.     Failure in initial objective function evaluation. FMINCON cannot continue.
复制代码
求助大佬
这是 fun1函数
  1. function f=fun(~)
  2. f=(x4 - 18).^2 + (x8 - 174).^2 + (x7 - 238).^2 + (x5 - 292).^2 + (x6 - 374).^2 + (x10 - 379).^2 + (x3 - 390).^2 + (x1 - 601).^2 + (x2 - 620).^2 + (x9 - 723).^2;
  3. end
复制代码


最佳答案


WarnerChang 发表于 2021-5-15 15:52:07
这样呢:
至于options,自己添加吧
f=@(x)(x(4) - 18).^2 + (x(8) - 174).^2 + (x(7) - 238).^2 + (x(5) - 292).^2 +...
    (x(6) - 374).^2 + (x(10) - 379).^2 + (x(3) - 390).^2 + (x(1) - 601).^2 + ...
    (x(2) - 620).^2 + (x(9) - 723).^2;
[x,fval]=fmincon(f,rand(10,1),[],[],[],[],zeros(10,1),[]);
回复此楼

6 条回复


WarnerChang 发表于 2021-5-15 15:52:07
这样呢:
至于options,自己添加吧
f=@(x)(x(4) - 18).^2 + (x(8) - 174).^2 + (x(7) - 238).^2 + (x(5) - 292).^2 +...
    (x(6) - 374).^2 + (x(10) - 379).^2 + (x(3) - 390).^2 + (x(1) - 601).^2 + ...
    (x(2) - 620).^2 + (x(9) - 723).^2;
[x,fval]=fmincon(f,rand(10,1),[],[],[],[],zeros(10,1),[]);
回复此楼

天辰の星 发表于 2021-5-15 16:04:32
WarnerChang 发表于 2021-5-15 15:52
这样呢:
至于options,自己添加吧
f=@(x)(x(4) - 18).^2 + (x(8) - 174).^2 + (x(7) - 238).^2 + (x(5) -  ...

更改之后还是一样的错误原因

WarnerChang 发表于 2021-5-15 17:35:30
天辰の星 发表于 2021-5-15 16:04
更改之后还是一样的错误原因

我单独运行没有问题啊!!!把所有代码上传
把我之前的代码放一个脚本里,不需要单独建立函数了

天辰の星 发表于 2021-5-15 18:45:47
WarnerChang 发表于 2021-5-15 17:35
我单独运行没有问题啊!!!把所有代码上传
把我之前的代码放一个脚本里,不需要单独建立函数了
...

谢谢大佬帮助 萌新今天又有了一点进步

天辰の星 发表于 2021-5-15 19:26:11
WarnerChang 发表于 2021-5-15 17:35
我单独运行没有问题啊!!!把所有代码上传
把我之前的代码放一个脚本里,不需要单独建立函数了
...

大佬大佬,就是我再加入了约束条件之后,又出错误了... 这是约束条件
  1. function[g,ceq]=mycon2(~)
  2. g=@(x)[x(1)-601;x(2)-620;x(3)-390;x(4)-18;x(5)-292;x(6)-374;x(7)-238;x(8)-174;...
  3.     x(9)-723;x(10)-379;601/2-x(1);310-x(2);195-x(3);9-x(4);146-x(5);187-x(6);...
  4.     119-x(7);87-x(8);723/2-x(9);379/2-x(10)];
  5. ceq=[];
  6. end
复制代码


这是求解

  1. options=optimset;
  2. f=@(x)(x(4) - 18).^2 + (x(8) - 174).^2 + (x(7) - 238).^2 + (x(5) - 292).^2 +...
  3.     (x(6) - 374).^2 + (x(10) - 379).^2 + (x(3) - 390).^2 + (x(1) - 601).^2 + ...
  4.     (x(2) - 620).^2 + (x(9) - 723).^2;
  5. [x,fval]=fmincon(f,rand(10,1),[],[],[],[],zeros(10,1),[],'mycon21',options);
复制代码


但是她的出错提示我看的有点不懂
  1. 函数的输入参数包括冒号运算符。要输入冒号字符,请改用 ':'。

  2. 出错 fmincon (line 634)
  3.     initVals.ncineq = ctmp(:);

  4. 出错 fun3 (line 5)
  5. [x,fval]=fmincon(f,rand(10,1),[],[],[],[],zeros(10,1),[],'mycon21',options);
复制代码


我看不懂这个 这是因为什么呀

WarnerChang 发表于 2021-5-16 09:33:13
天辰の星 发表于 2021-5-15 19:26
大佬大佬,就是我再加入了约束条件之后,又出错误了... 这是约束条件

主程序:
  1. options=optimset;
  2. f=@(x)(x(4) - 18).^2 + (x(8) - 174).^2 + (x(7) - 238).^2 + (x(5) - 292).^2 +...
  3.     (x(6) - 374).^2 + (x(10) - 379).^2 + (x(3) - 390).^2 + (x(1) - 601).^2 + ...
  4.     (x(2) - 620).^2 + (x(9) - 723).^2;
  5. [x,fval]=fmincon(f,rand(10,1),[],[],[],[],zeros(10,1),[],'mycon2',options);
复制代码

约束条件:
  1. function[g,ceq]=mycon2(x)
  2. g=[x(1)-601;x(2)-620;x(3)-390;x(4)-18;x(5)-292;x(6)-374;x(7)-238;x(8)-174;...
  3.     x(9)-723;x(10)-379;601/2-x(1);310-x(2);195-x(3);9-x(4);146-x(5);187-x(6);...
  4.     119-x(7);87-x(8);723/2-x(9);379/2-x(10)];
  5. ceq=[];
  6. end
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表