查看: 1915|回復: 9|關注: 0
打印 上一主題 下一主題

l辽宁快乐12开奖结果i: [已解決] MATLAB進行fmincon函數優化時非線性不等式約束總是報錯

[復制鏈接]

新手

7 麥片

財富積分


辽宁快乐12预测一号码推荐号码 www.exedlj.com.cn 050


1

主題

9

帖子

0

最佳答案
跳轉到指定樓層
1#
%1-函數文件objfun.m
function f=objfun(x)
a=10;
d=2*(x(1).*cos(x(5)*pi/180)-x(2).*cos(x(4)*pi/180));
s=2*x(1).*cos(x(5)*pi/180);
b=cos((x(4)-a)*pi/180);
c=d./2+x(2).*b;
e=c./x(1);
t=2*x(1).*e;
g=t-s+0.0001*(x(3)+x(6));
f=-g;
end

%2-非線性約束函數文件confun.m
function [c,ceq]=confun(x)
c=[x(2).*cos(x(4)*pi/180)-x(1).*cos(x(5)*pi/180);(x(1).*sin(x(5)*pi/180)+x(2).*sin(x(54)*pi/180))./(cos(x(6)*pi/180)+x(3).*sin(x(6)*pi/180));(2*x(1).*cos(x(5)*pi/180))./(cos(x(6)*pi/180))-100;2*x(1).*cos(x(5)*pi/180)-2*x(2).*cos(x(4)*pi/180)-20;15-2*x(1).*cos(x(5)*pi/180)+2*x(2).*cos(x(4)*pi/180)];
%5個不等式非線性約束
ceq=[];
end  

%3-優化函數應用
x0=[30 30 13 57 34 50];
%經過核對,初值全部符合原不等式非線性約束
A=[0 -1 1 0 0 0;
   -1 0 1 0 0 0;
   -1 1 0 0 0 0;
   0 0 0 -1 0 0];
b=[0 0 0 -10];
Aeq=[];beq=[];
lb=[20,20,10,10,10,20];
ub=[60,50,20,70,70,70];
options=optimset('largescale','off','display','iter');
[xopt,fval,exitflag,output]=fmincon(@objfun,x0,A,b,Aeq,beq,lb,ub,@confun,options)

出來的結果是這樣
>> Untitled3
索引超出矩陣維度。

出錯 confun (line 6)
c=[x(2).*cos(x(4)*pi/180)-x(1).*cos(x(5)*pi/180);(x(1).*sin(x(5)*pi/180)+x(2).*sin(x(54)*pi/180))./(cos(x(6)*pi/180)+x(3).*sin(x(6)*pi/180));(2*x(1).*cos(x(5)*pi/180))./(cos(x(6)*pi/180))-100;2*x(1).*cos(x(5)*pi/180)-2*x(2).*cos(x(4)*pi/180)-20;15-2*x(1).*cos(x(5)*pi/180)+2*x(2).*cos(x(4)*pi/180)];

出錯 fmincon (line 623)
        [ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});

出錯 Untitled3 (line 13)
[xopt,fval,exitflag,output]=fmincon(@objfun,x0,A,b,Aeq,beq,lb,ub,@confun,options)

原因:
    Failure in initial nonlinear constraint function evaluation. FMINCON cannot continue.

就是感覺這個約束咋有毛病哦~


新手

7 麥片

財富積分


050


1

主題

9

帖子

0

最佳答案
2#
 樓主| 發表于 2019-3-10 01:28:40 | 只看該作者
原先設定的約束條件及變量確定在圖片,求大神指點迷津

論壇優秀回答者

權威

9161 麥片

財富積分



11

主題

1萬

帖子

1994

最佳答案
  • 關注者: 545
3#
發表于 2019-3-10 21:35:53 | 只看該作者
就這一點錯:
  1. b=[0 0 0 -10]'
復制代碼

xopt =   57.8951   50.0000   19.9995   70.0000   34.3694   69.9991

fval =  -15.8070

新手

7 麥片

財富積分


050


1

主題

9

帖子

0

最佳答案
4#
 樓主| 發表于 2019-3-10 21:38:37 | 只看該作者
jingzhaos 發表于 2019-3-10 21:35
就這一點錯:
xopt =   57.8951   50.0000   19.9995   70.0000   34.3694   69.9991

可是這個結果不符合我設定的非線性約束呀,我驗證了。這個結果跟我不設置非線性約束條件是差不多的。。。。

論壇優秀回答者

權威

9161 麥片

財富積分



11

主題

1萬

帖子

1994

最佳答案
  • 關注者: 545
5#
發表于 2019-3-10 21:49:12 | 只看該作者 |此回復為最佳答案
本帖最后由 jingzhaos 于 2019-3-10 22:02 編輯
愛楊公子的瘋子 發表于 2019-3-10 21:38
可是這個結果不符合我設定的非線性約束呀,我驗證了。這個結果跟我不設置非線性約束條件是差不多的。。。 ...

這只能說語法沒有問題了,至于邏輯問題,你再好好看看。
另外fmincon是局部最有解,也可能在別的地方的解滿足你的要求。事實是,confun(xopt)<0,滿足約束的。

哈哈....,你的代碼里面竟然有個x(54)? 是x(5)還是x(4)

新手

7 麥片

財富積分


050


1

主題

9

帖子

0

最佳答案
6#
 樓主| 發表于 2019-3-10 22:12:19 | 只看該作者
jingzhaos 發表于 2019-3-10 21:49
這只能說語法沒有問題了,至于邏輯問題,你再好好看看。
另外fmincon是局部最有解,也可能在別的地方的解 ...

啊,看到了。54這個打錯了。。。然后重新運行了一遍,是可以出結果的,就是嗯結果跟我想象中不一樣,謝謝啦。您是說這個程序的語法上沒有錯誤是嗎

論壇優秀回答者

權威

9161 麥片

財富積分



11

主題

1萬

帖子

1994

最佳答案
  • 關注者: 545
7#
發表于 2019-3-10 22:37:32 | 只看該作者
愛楊公子的瘋子 發表于 2019-3-10 22:12
啊,看到了。54這個打錯了。。。然后重新運行了一遍,是可以出結果的,就是嗯結果跟我想象中不一樣,謝謝 ...

是。語法有錯誤,就不能正常運行了。

新手

7 麥片

財富積分


050


1

主題

9

帖子

0

最佳答案
8#
 樓主| 發表于 2019-3-10 23:48:27 | 只看該作者
jingzhaos 發表于 2019-3-10 22:37
是。語法有錯誤,就不能正常運行了。

只是很尷尬的是,這個結果還不如我的初值結果。。。。

論壇優秀回答者

權威

9161 麥片

財富積分



11

主題

1萬

帖子

1994

最佳答案
  • 關注者: 545
9#
發表于 2019-3-11 07:21:44 | 只看該作者
本帖最后由 jingzhaos 于 2019-3-11 07:25 編輯
愛楊公子的瘋子 發表于 2019-3-10 23:48
只是很尷尬的是,這個結果還不如我的初值結果。。。。

這一行錯了吧?括號放的位置與你手寫的不一致。
(x(1).*sin(x(5)*pi/180)+x(2).*sin(x(54)*pi/180))./(cos(x(6)*pi/180)+x(3).*sin(x(6)*pi/180));
-55也沒有寫上。 這個結果是不是你要的。

xopt =   50.0000   50.0000   10.0000   47.5703   28.9923   20.0000


fval =  -11.7951

新手

7 麥片

財富積分


050


1

主題

9

帖子

0

最佳答案
10#
 樓主| 發表于 2019-3-11 12:49:33 | 只看該作者
jingzhaos 發表于 2019-3-11 07:21
這一行錯了吧?括號放的位置與你手寫的不一致。
(x(1).*sin(x(5)*pi/180)+x(2).*sin(x(54)*pi/180))./(cos ...

驗證了下,是符合我的所有不等式約束的:loveliness:超級謝謝。今天又想到了其他的約束,得加上去看看,謝謝哈。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關閉

站長推薦上一條 /3 下一條

快速回復 辽宁快乐12预测一号码推荐号码 返回列表