?? exm041022_2.m
字號:
%exm041022_2.m 利用偽線性和fminsearch混合法進行非線性參數估計
k_noise=0.3; %控制噪聲水平
[x,y,STDY]=xydata(k_noise); %運行仿真數據產生程序,產生數據
a0=[1 2]'; %非線性參數的初試猜測
options=optimset('fminsearch');%這步在MATLAB6.0版中是必須的
options.TolX=0.001; %控制被估參數的迭代精度
options.Display='off'; %避免顯示收斂信息
%下面是偽線性和fminsearch交互使用的迭代循環
while 1
Mb=exp(-x*a0'); %利用初試猜測a0,構成線性估計的系數矩陣。
b=Mb\y; %線性最小二乘求線性參數b
a=fminsearch(@twoexps2,a0,options,x,y,b); %利用b估計非線性參數
r=norm(a-a0)/norm(a);%計算非線性參數估計的相對誤差
if r<0.001;break;end %估計精度控制
a0=a;
end
chi_est=twoexps2(a,x,y,b)/STDY^2; %估計參數下的Chi2量計算
freedom=length(x)-length([a;b]); %自由度
Q=1-chi2cdf(chi_est,freedom); %適當度
%以下用于繪圖
y_est=b(1)*exp(-a(1)*x)+b(2)*exp(-a(2)*x);
ych='y_e_s_t='; %注意:該格式使圖形中est三個字母成為下標
b1=num2str(b(1));b2=num2str(b(2));a1=num2str(a(1));a2=num2str(a(2));
char_y_est=[ych ,b1,'*exp(-',a1,'*x) + ',b2,'*exp(-',a2,'*x)'];
plot(x,y,'b+');hold on;plot(x,y_est,'r');hold off;axis([0,4,0,16])
text(0.4,14,'y=3*exp(-0.4*x)+12*exp(-3.2*x)');text(0.4,12,char_y_est)
text(2.5,9,['chi2=' , num2str(chi_est)])
text(2.5,7,['freedom=' , num2str(freedom)])
text(2.5,5,['Q=' , num2str(Q)])
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -