Re: [問題] 函數有錯該如何修改(函數的建立和求min)已回收

看板MATLAB作者 (^^)時間16年前 (2009/02/12 10:28), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串3/4 (看更多)
※ 引述《WC (Without Charge)》之銘言: : ※ 引述《qwer098 (^^)》之銘言: : : 這是m-file裡: 變數有三個x(1),x(2),x(3) : : function[c,ceq] =objfun(x) : : y=rand(1,100); : : i=1:98; : : f(i)=2*log(1+x(3)*(y(i+2)*y(i+1)-x(1)*y(i+1)^2-x(1)*y(i+1)*y(i))+x(4)*(y(i+2)*y(i)-x(1)*y(i+1)*y(i)-x(2)*y(i)^2)); : : f=sum(f); : : Error in ==> fminunc at 184 : : f = feval(funfcn{3},x,varargin{:}); 那這個是matlab裡跑的..為什麼會出現錯誤? : 要嘛就用 for loop, 要用矩陣運算的話, 乘除請記得加 . : 如 y./x or y.*x : 你可以在指令列自己試試看 : 因為你用了 i (1x98 double) 所以你的 f(i) 就也變成了矩陣 (1x98) : 簡單的說, 你的問題只要把 i 改成 for i=1:98 : 就解決了 我照著你說的方式改了...但是程式還是會跑出錯誤 Error using ==> objfun Too many input arguments. (這是我變數太多..式子太複雜嗎.. 可是我沒辦法再化簡了...有什麼方法改進呢) Error in ==> fminunc at 184 f = feval(funfcn{3},x,varargin{:}); 我應該再怎麼修改呢..謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.203.217

02/12 12:29, , 1F
由簡入繁, 把 objfun 改成簡單一一點, 再去抓蟲
02/12 12:29, 1F

02/12 12:36, , 2F
應該就是 [c ceq] 的問題, 改成只傳回一個數值如 f=objfun(x)
02/12 12:36, 2F
文章代碼(AID): #19aub50v (MATLAB)
文章代碼(AID): #19aub50v (MATLAB)