[問題] fmincon副程式及迴圈使用問題已回收

看板MATLAB作者時間15年前 (2010/08/16 09:51), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/2 (看更多)
恩...我又來了 問題還是沒有解決>"< 我想求存有非線性限制式下的最適解 目標函數為線性 限制式函數有非線性 也有線性 因為上次w大的解說 fmincon只能適用單變數 而我須求的變數總共有5個 2個為向量 3個為矩陣 因此我將此5個變數都弄在x矩陣裡 可是在跑的時候卻出現了問題 因為有好幾組資料下去跑 因此採用迴圈的形式 跑到最後一組後 此時求出來的整個x解應該是 [2*K+2+c , K] 這樣大小的矩陣 剛剛先寫成沒有迴圈的形式 結果是對的 但寫成迴圈 卻跑出錯誤 但不可能一個一個寫阿 >"< 可能是迴圈使用方式不對 想請大家幫我看一下... (恩 講好長= =) -------------------------------------------------------------------------- 我的資料總共有K組 利用迴圈後 可得到 [2*K+2+c , K] 的變數解 (不是目標函數) ========================================================================== 執行檔: ---- 資料及參數輸入 (略)---- for i=1:K A=[X_vk_B(:,i),zeros(v,1),X_vk_B,zeros(v,K),zeros(v,c); Y_rk_I(:,i),zeros(r,1),-Y_rk_I,zeros(r,K),zeros(r,c); zeros(r,1),zeros(r,1),zeros(r,K),Y_minus_one,zeros(r,c); zeros(m,1),Y_mk_F(:,i),zeros(m,K),-Y_mk_F,zeros(m,c)]; B=[X_vk_B(:,i);-Y_rk_I(:,i);Y_minus_one(:,i);-Y_mk_F(:,i)]; Aeq=[]; Beq=[]; lb=[0;0;zeros(K,1);zeros(K,1);repmat(0.1,[c,1])]; ub=[[];[];[];[];repmat(0.3,[c,1])]; x0=zeros(2*K+c+2,1); [x(i,:),fval(i)]=fmincon(@myfun_DMN_DEA,x0,A,B,Aeq,Beq,lb,ub,@mynoncon_DMN_DEA) end =========================================================================== 目標函數的m檔:myfun_DMN_DEA.m function f=myfun_DMN_DEA(x) --- 資料輸入(略)--- for i=1:K wB=1/2; wF=1/2; f(i)=-wB*x(1,i)-wF*x(2,i); end =========================================================================== 非線性限制式函數的m檔: mynoncon_DMN_DEA.m function [ce ceq]=mynoncon_DMN_DEA(x) for i=1:K ce(2*i-1,:)=X_ck_BF*x(3:K+2,i).*x(2*K+3:2*K+2+c,i)- (1-x(1,i))*X_ck_BF(:,i).*x(2*K+3:2*K+2+c,i); ce(2*i,:)=X_ck_BF*x(K+3:2*K+2,i).*x(2*K+3:2*K+2+c,i)- (1-x(2,i))*X_ck_BF(:,i).*(ones(c,1)-x(2*K+3:2*K+2+c,i)); ceq=[]; end 結果卻出現: ??Attempted to access x(1,2); index out of bounds because size(x)=[74,1]. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這應該是說我x維度的問題 他說我只有[74,1]的大小 但我卻要跑出x(1,2) 可是我就是想一個一個跑.... Error in ==> myfun_DMN_DEA at 17 f(i)=-wB*x(1,i)-wF*x(2,i); Error in ==> fmincon at 540 initVals.f = feval(funfcn{3},X,varargin{:}); Error in ==> DMN_DEA at 39 [x(i,:),fval(i)]=fmincon(@myfun_DMN_DEA,x0,A,B,Aeq,Beq,lb,ub,@mynoncon_DMN_DEA); Caused by: Failure in initial user-supplied objective function evaluation. FMINCON cannot continue. 恩 我用i=1去跑 沒有迴圈形式 答案是對的(不過非常慢 有點疑惑@"@) 但用迴圈就出現錯誤了.... 請各位幫忙!!! 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.126.147.48

08/16 10:04, , 1F
剛剛用i=2也不行耶...
08/16 10:04, 1F

08/16 13:20, , 2F
我是沒遇過最佳化對象是矩陣的 我也不相信是最佳化矩陣 !
08/16 13:20, 2F

08/16 13:21, , 3F
其實由題目本身應該就知道最佳化對象是單值還是矩陣 !
08/16 13:21, 3F

08/16 13:22, , 4F
我建議妳還是把題目po出但不要用程式講解題目 !
08/16 13:22, 4F

08/16 13:23, , 5F
若bbs不容易表達 那就放在網路上讓大家下載 !
08/16 13:23, 5F
文章代碼(AID): #1CQ9cLyx (MATLAB)
文章代碼(AID): #1CQ9cLyx (MATLAB)