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

看板MATLAB作者 (^^)時間17年前 (2009/02/16 20:36), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串4/4 (看更多)
前面有問過..但還是有錯..請問應再如何修改 x0=[0.2 0.3 1 1]; [x,fval,exitflag,output] = fminunc(@myobj,x0,[],[],[],[],[],[],@myconstr); %--------------------------------------------------------- function f = myobj(x) for 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)); end f=sum(f); %--------------------------------------------------------- function [c, ceq] = myconstr(x) c=[]; ceq=[eq11,eq22]; for i=1:98; eq1(i)=(y(i+2).*y(i+1)-x(1).*y(i+1)^2-x(2).*y(i+1).*y(i)) / (1+x(3).*(y(i+2).*y(i+1)-x(1).*y(i+1)^2-x(2).*y(i+1).*y(i))+x(4).*(y(i+2).*y(i)-x(1).*y(i+1).*y(i)-x(2).*y(i)^2)); eq2(i)=(y(i+2).*y(i)-x(1).*y(i+1).*y(i)-x(2).*y(i)^2) /(1+x(3).*(y(i+2).*y(i+1)-x(1).*y(i+1)^2-x(2).*y(i+1).*y(i))+x(4).*(y(i+2).*y(i)-x(1).*y(i+1).*y(i)-x(2).*y(i)^2)); end eq11=sum(eq1); eq22=sum(eq2); y是由matlab先跑出的一筆資料...請問我應該先把y存成矩陣放在m-file嗎? 還有會出現錯誤 Error using ==> objfun Too many input arguments. Error in ==> fminunc at 184 f = feval(funfcn{3},x,varargin{:}); <=這個到底該怎麼修改...這不是matlab 原有的嗎..怎會出錯 請問我的程式到底哪出錯...請知道的人說明一下..謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.44.26

02/16 21:43, , 1F
fminunc 跟 fmincon 不一樣,另外你程式結構有點問題,
02/16 21:43, 1F

02/16 21:44, , 2F
你還是確定一下,否則算出不是你要的答案
02/16 21:44, 2F

02/16 22:10, , 3F
請問程式哪邊有問題..可以說明一下嗎
02/16 22:10, 3F

02/16 22:14, , 4F
f是想算i=:1:98代入的總和..程式哪有錯呢?
02/16 22:14, 4F

02/17 15:17, , 5F
y請記得給值,還有ceq=[eq11,eq22];放前面的原因是?
02/17 15:17, 5F

02/17 16:43, , 6F
ceq是限制方程式..有分前後嗎..放哪不是都一樣?
02/17 16:43, 6F

02/17 17:22, , 7F
放前面 eq11, eq22 都還沒算就回傳到 ceq,
02/17 17:22, 7F

02/17 17:22, , 8F
你先仔細想想,不要急著回答
02/17 17:22, 8F
文章代碼(AID): #19cLt006 (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #19cLt006 (MATLAB)