[問題] fminsearch警告訊息已回收
請教各位
我在執行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