[問題] fminsearch警告訊息已回收

看板MATLAB作者 (傲氣種狗)時間13年前 (2010/09/16 11:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
請教各位 我在執行fminsearch時會出現兩種訊息 第一個 Exiting: Maximum number of function evaluations has been exceeded - increase MaxFunEvals option. Current function value: -0.000000 在出現此訊息並不影響我的結果 但我看不懂這訊息的意義 第二個 ??? Input must be real. Error in ==> erfc at 23 y = erfcore(x,1); Error in ==> WSN>@(theta)0.5*erfc(((gamma)-(sqrt(((theta(3))*(do.^2))/((sqrt((BS(i,j,1)-theta(1)).^2+(BS(i,j,2)-theta(2)).^2)).^2))))/(sqrt(2))) at 81 k=@(theta) 0.5*erfc(((gamma)-(sqrt(((theta(3))*(do.^2))/((sqrt((BS(i,j,1)-theta(1)).^2+(BS(i,j,2)-theta(2)).^2)).^2))))/(sqrt(2))); Error in ==> WSN>@(theta)(1-k(theta))*kfun(theta) at 116 kfun=@(theta) (1-k(theta))*kfun(theta); Error in ==> fminsearch at 320 x(:) = xr; fxr = funfcn(x,varargin{:}); Error in ==> WSN at 135 Mt_cu=fminsearch(kfun,[0,0,30000]); 出現這訊息我的程式無法執行 以下是我的程式 =================================主程式=============================== clear all X_aq(5,5)=zeros; X_as(6,5)=zeros; rmse_ca=0; rmse_cu=0; rmsep_ca=0; rmsep_cu=0; count=1;~~~~~~~~~~~~~~~~~~~~~~~~~count過大超過20就會出現第二個訊息 q0=0.00001; q1=0.00001; N=144; for j=1:1:5 for i=1:1:count [y1,y2,y3,y4]=WSN(q0,q1,N); rmse_ca=rmse_ca+y1; rmse_cu=rmse_cu+y2; rmsep_ca=rmsep_ca+y3; rmsep_cu=rmsep_cu+y4; end; X_aq(j,1)=q0; X_aq(j,2)=rmse_ca/count; X_aq(j,3)=rmse_cu/count; X_aq(j,4)=rmsep_ca/count; X_aq(j,5)=rmsep_cu/count; q0=q0*10; %調整 q q1=q1*10; rmse_ca=0; rmse_cu=0; rmsep_ca=0; rmsep_cu=0; end; rmse_ca=0; rmse_cu=0; rmsep_ca=0; rmsep_cu=0; q0=0.1; q1=0.1; for j=1:1:6 N=((j+4)*2)^2; %調整N for i=1:1:count [y1,y2,y3,y4]=WSN(q0,q1,N); rmse_ca=rmse_ca+y1; rmse_cu=rmse_cu+y2; rmsep_ca=rmsep_ca+y3; rmsep_cu=rmsep_cu+y4; end; X_as(j,1)=N; X_as(j,2)=rmse_ca/count; X_as(j,3)=rmse_cu/count; X_as(j,4)=rmsep_ca/count; X_as(j,5)=rmsep_cu/count; rmse_ca=0; rmse_cu=0; rmsep_ca=0; rmsep_cu=0; end; =================================WSN function================================ %只要丟進去N,q1,q0就可輸出四種不同的rmse function [rmse_ca,rmse_cu,rmsep_ca,rmsep_cu] =WSN(q0,q1,N) SN=sqrt(N); %根據N產生BS BS(SN,SN,2)=zeros; BS(1,:,2)=100-(200/SN)/2; BS(:,1,1)=-100+(200/SN)/2; for i=2:1:SN BS(i,:,2)=BS(i-1,1,2)-(200/SN); end; for i=2:1:SN BS(:,i,1)=BS(1,i-1,1)+(200/SN); end; Po=25000; %參數 gamma=1.7; do=1; MS=[10,20]; di(SN,SN)=zeros; ai(SN,SN)=zeros; si(SN,SN)=zeros; M(SN,SN)=zeros; M_hat(SN,SN)=zeros; khatfun=@(theta) -1; %要找最大所以先乘-1 kfun=@(theta) -1; for i=1:1:SN; for j=1:1:SN; k=@(theta) 0.5*erfc(((gamma)-(sqrt(((theta(3))*(do.^2))/ ((sqrt((BS(i,j,1)-theta(1)).^2+ (BS(i,j,2)-theta(2)).^2)).^2)))) /(sqrt(2))); kk=@(theta) (k(theta)*(1-q1)+(1-k(theta))*q0); di(i,j)=sqrt((BS(i,j,1)-MS(1)).^2+(BS(i,j,2)-MS(2)).^2); ai(i,j)=sqrt((Po*(do.^2))/((di(i,j)).^2)); si(i,j)=ai(i,j)+randn(1); if si(i,j)>gamma M(i,j)=1; else M(i,j)=0; end; %判決每個BS接受1或0 q=rand(1); %BS傳回中心的值 if M(i,j)==1; if q>q1 M_hat(i,j)=1; khatfun=@(theta) kk(theta)*khatfun(theta); kfun=@(theta) k(theta)*kfun(theta); else M_hat(i,j)=0; khatfun=@(theta) (1-kk(theta))*khatfun(theta); kfun=@(theta) (1-k(theta))*kfun(theta); end; else if q>q0 M_hat(i,j)=0; khatfun=@(theta) (1-kk(theta))*khatfun(theta); kfun=@(theta) (1-k(theta))*kfun(theta); else M_hat(i,j)=1; khatfun=@(theta) kk(theta)*khatfun(theta); kfun=@(theta) k(theta)*kfun(theta); end; end; end; end; %統計中心接收到的0or1 %產生兩種累積相乘的函數 %khatfun kfun Mt_ca=fminsearch(khatfun,[0,0,30000]); Mt_cu=fminsearch(kfun,[0,0,30000]); rmse_ca=sqrt((MS(1)-Mt_ca(1))^2+(MS(2)-Mt_ca(2))^2); rmse_cu=sqrt((MS(1)-Mt_cu(1))^2+(MS(2)-Mt_cu(2))^2); rmsep_ca=sqrt((Po-Mt_ca(3))^2); rmsep_cu=sqrt((Po-Mt_cu(3))^2); -- A:當兵在幹嘛 B:你知道詹姆士嗎?就是做詹姆士的工作 A:情報員?廚師? B:都不對是狗狗猩猩大冒險的詹姆士 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.144.32
文章代碼(AID): #1CaOmYg9 (MATLAB)