Re: [討論] 關於fmincon限制式的問題(有附檔案連結)

看板MATLAB作者 (eji)時間12年前 (2013/04/12 15:22), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《Dora (小叮噹)》之銘言: : 各位前輩大家好 : 我想請問一下關於fmincon的限制式寫法我有一些疑惑 : 我先說目前的問題是:我最佳化疊代的結果沒有依照我給的範圍去解 : 答案會超出限制式範圍 : 先附上檔案以方便前輩們幫忙 : https://dl.dropbox.com/u/43545062/sample.rar : 我的題目是這樣的 : 限制式: : 0 < x < 2.875 : 0 < D < 0.05 : D= 0.38 / ( -15.58+19.27 * X ) : 目標: : 求 min T : T= sqrt(D^2) 我跑的結果顯示 Maximum number of function evaluations exceeded; increase OPTIONS.MaxFunEvals. 也就是函數呼叫的次數到達上限 這時候跳出來的答案並不是解 另外不等式的限制式其實比較不好處理 可以把這題看成雙變數 x(1)代表原本的x, x(2)代表D x和D的範圍當作lower and upper bounds x和D的關係當作等式限制 改寫如下 程式的寫法 主程式 =================================== close all; clear; format long; options = optimset('Display','iter','Algorithm','active-set'); [xStr, f_xStr] = ... fmincon(@objfun,[1;0.01],[],[],[],[],[0;0],[2.875;0.05],@confun,options) =================================== 限制式副程式 =================================== function [c, ceq] = confun(x) c = [ ]; ceq = [ 0.38 / ( -15.58+19.27 * x(1) )-x(2) ]; =================================== 目標副程式 =================================== function f = objfun(x) D = x(2); f=sqrt(D^2); =================================== 這樣會解出x=2.875時 D有最小值0.009542643688985 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.146.175
文章代碼(AID): #1HPxPDFI (MATLAB)
文章代碼(AID): #1HPxPDFI (MATLAB)