📄 iterate_avg.m
字号:
% J. C. Spall, March 2001
% Code for carrying out iterate averaging, including the sliding window method.
% Code includes mechanism for blocking step if a change in an element of theta exceeds
% certain threshold.
%
global p z sigma
p=20;
% meas. noise standard deviation; multplies all elements of N(0,I)noise % vector
sigma=.10;
a=.2;
A=100;
alpha=.501;
n=1000; % no. of iterations
IA=1; % amt. of iterate averaging (1<=IA<=n)
% number of cases (replications)
cases=25;
randn('seed',311113)
thetamin=-500*ones(p,1); %Lower bounds on theta (in unconstrained, set to large neg. no.)
thetamax=500*ones(p,1); %Upper bounds on theta (in unconstrained, set to large pos. no.)
root='cubic_root';
%
%the loop 1:cases below is for doing multiple cases for use in %averaging to
%evaluate the relative performance.
%
errtheta=0;
%losstheta=0;
tolerancetheta=100; %iterate is blocked if change in theta exceeds this value
truetheta=zeros(p,1);
theta_0=ones(p,1);
for j=1:cases
caseiter=j
%INITIALIZATION
theta=theta_0;
%
% The iterations below are the basic R-M iterations.
% The overall loop is broken into two parts to accomodate a sliding window of
% the last IA iterates for an iterate averaging solution.
%
for k=0:n-IA-1
ak=a/(k+1+A)^alpha;
Yk=feval(root,theta);
thetalag=theta;
theta=theta-ak*Yk;
if max(abs(thetalag-theta)) > tolerancetheta;
theta=thetalag;
end
% Checking for constraints below
theta=min(theta,thetamax);
theta=max(theta,thetamin);
end
% Below invokes iterate averaging after the initial iterations
thetabar=0;
for k=n-IA:n-1
ak=a/(k+1+A)^alpha;
Yk=feval(root,theta);
thetalag=theta;
theta=theta-ak*Yk;
if max(abs(thetalag-theta)) > tolerancetheta;
theta=thetalag;
end
% Checking for constraints below
theta=min(theta,thetamax);
theta=max(theta,thetamin);
thetabar=thetabar+theta;
end
thetabar=thetabar/IA
errtheta=errtheta+(thetabar-truetheta)'*(thetabar-truetheta);
% lossthetasq=lossthetasq+loss4thorder(theta)^2;
% losstheta=losstheta+loss4thorder(theta);
end
% RMS error over all cases (square root of average MSE)
if cases > 1
((errtheta/cases)^.5)
else
errtheta^.5
end
% standard dev. of normalized loss values
%(lossthetasq/(cases*loss4thorder(theta_0)^2)-(losstheta/(cases*loss4thorder(theta_0)))^2)^.5
%losstheta/(cases*loss4thorder(theta_0))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -