📄 nnd17lls.m
字号:
'fontsize',12,...
'horizontalalignment','left')
text(x+30,y-28+len,'-1',...
'color',nndkblue,...
'fontw','bold',...
'fontsize',12,...
'horizontalalignment','right');
w1_1_bar = uicontrol(...
'units','points',...
'position',[x y-25 16 len],...
'style','slider',...
'backg',nnltgray,...
'callback',[me '(''w1_1'')'],...
'min',-2,...
'max',-1,...
'value',w1_1);
% BUTTONS
uicontrol(...
'units','points',...
'position',[400 145 60 20],...
'string','Reset',...
'callback',[me '(''reset'')'])
uicontrol(...
'units','points',...
'position',[400 110 60 20],...
'string','Contents',...
'callback','nndtoc')
uicontrol(...
'units','points',...
'position',[400 75 60 20],...
'string','Close',...
'callback',[me '(''close'')'])
% DATA POINTERS
fa_ptr = uicontrol('visible','off','userdata',fa_plot);
fa_ptr2 = uicontrol('visible','off','userdata',fa_plot2);
fa_ptr3 = uicontrol('visible','off','userdata',fa_plot3);
fa_ptr4 = uicontrol('visible','off','userdata',fa_plot4);
fb_ptr = uicontrol('visible','off','userdata',fb_plot);
rand_ptr = uicontrol('visible','off','userdata',randseq);
% SAVE WINDOW DATA AND LOCK
H = [fig_axis desc_text s1_bar s1_text fa_axis fa_ptr fa_ptr2 fa_ptr3 ...
fa_ptr4 fb_axis fb_ptr sigma_bar sigma_text npts_bar npts_text ...
freq_bar freq_text ro_bar ro_text phase_bar phase_text ...
bias_bar bias_text bias_checkbox w1_1_bar w1_1_text rand_ptr];
set(fig,'userdata',H,'nextplot','new')
% INSTRUCTION TEXT
feval(me,'instr');
% LOCK WINDOW
set(fig,'nextplot','new','color',nnltgray);
nnchkfs;
%==================================================================
% Display the instructions.
%
% ME('instr')
%==================================================================
elseif strcmp(cmd,'instr') & (fig)
nnsettxt(desc_text,...
'Basis functions are ',...
'spaced evenly. You',...
'can change the first',...
'center location and',...
'the bias. The automatic',....
'bias will produce',...
'overlap at 0.5.',...
'',...
'Blue - Function',...
'Red - Network Response')
%==================================================================
% Respond to hidden neuron slider.
%
% ME('s1')
%==================================================================
elseif strcmp(cmd,'s1')
if strcmp(get(s1_bar,'enable'),'off')
return
end
set(s1_bar,'enable','off');
s1 = get(s1_bar,'value');
s1 = round(s1);
set(s1_text,'string',sprintf('%g',s1))
%set(fig,'nextplot','add')
%delete(get(fa_axis,'children'))
%P = -2:(.4/i):2;
%T = 1 + sin(i*pi*P/4);
%axes(fa_axis)
%plot(P,T,'+','color',nnred);
%set(get(fa_axis,'ylabel'),...
% 'string','Target')
%set(fig,'nextplot','new')
cmd='update';
%==================================================================
% Respond to difficulty index slider.
%
% ME('sigma')
%==================================================================
elseif strcmp(cmd,'sigma')
if strcmp(get(sigma_bar,'enable'),'off')
return
end
set(sigma_bar,'enable','off');
sigma = get(sigma_bar,'value');
sigma = round(sigma*10)/10;
set(sigma_text,'string',sprintf('%g',sigma))
% With new sigma value, we change random sequence
randseq = randn(1,20);
set(rand_ptr,'userdata',randseq);
%set(fig,'nextplot','add')
%delete(get(fa_axis,'children'))
%P = -2:(.4/i):2;
%T = 1 + sin(i*pi*P/4);
%axes(fa_axis)
%plot(P,T,'+','color',nnred);
%set(get(fa_axis,'ylabel'),...
% 'string','Target')
%set(fig,'nextplot','new')
cmd='update';
%==================================================================
% Respond to Number of Points slider.
%
% ME('npts')
%==================================================================
elseif strcmp(cmd,'npts')
if strcmp(get(npts_bar,'enable'),'off')
return
end
set(npts_bar,'enable','off');
npts = get(npts_bar,'value');
npts = round(npts);
set(npts_text,'string',sprintf('%g',npts))
cmd='update';
%==================================================================
% Respond to Regularization slider.
%
% ME('ro')
%==================================================================
elseif strcmp(cmd,'ro')
if strcmp(get(ro_bar,'enable'),'off')
return
end
set(ro_bar,'enable','off');
ro = get(ro_bar,'value');
ro = round(ro*10)/10;
set(ro_text,'string',sprintf('%g',ro))
cmd='update';
%==================================================================
% Respond to Frequency slider.
%
% ME('freq')
%==================================================================
elseif strcmp(cmd,'freq')
if strcmp(get(freq_bar,'enable'),'off')
return
end
set(freq_bar,'enable','off');
freq = get(freq_bar,'value');
freq = round(freq*100)/100;
set(freq_text,'string',sprintf('%g',freq))
cmd='update';
%==================================================================
% Respond to phase slider.
%
% ME('phase')
%==================================================================
elseif strcmp(cmd,'phase')
if strcmp(get(phase_bar,'enable'),'off')
return
end
set(phase_bar,'enable','off');
phase = get(phase_bar,'value');
phase = round(phase);
set(phase_text,'string',sprintf('%g',phase))
cmd='update';
%==================================================================
% Respond to bias slider.
%
% ME('bias')
%==================================================================
elseif strcmp(cmd,'bias')
if strcmp(get(bias_bar,'enable'),'off')
return
end
set(bias_bar,'enable','off');
bias = get(bias_bar,'value');
bias = round(bias*100)/100;
set(bias_text,'string',sprintf('%g',bias))
cmd='update';
%==================================================================
% Respond to bias checkbox.
%
% ME('bias_checkbox')
%==================================================================
elseif strcmp(cmd,'bias_checkbox')
if get(bias_checkbox,'value') == 1
set(bias_bar,'enable','off');
else
set(bias_bar,'enable','on');
bias = get(bias_bar,'value');
bias = round(bias*100)/100;
set(bias_text,'string',sprintf('%g',bias))
end
cmd='update';
%==================================================================
% Respond to w1_1 slider.
%
% ME('w1_1')
%==================================================================
elseif strcmp(cmd,'w1_1')
if strcmp(get(w1_1_bar,'enable'),'off')
return
end
set(w1_1_bar,'enable','off');
w1_1 = get(w1_1_bar,'value');
w1_1 = round(w1_1*10)/10;
set(w1_1_text,'string',sprintf('%g',w1_1))
cmd='update';
%==================================================================
% Respond to reset button.
%
% ME('reset')
%==================================================================
elseif strcmp(cmd,'reset')
if strcmp(get(s1_bar,'enable'),'off') | strcmp(get(sigma_bar,'enable'),'off') ...
| strcmp(get(npts_bar,'enable'),'off') | strcmp(get(ro_bar,'enable'),'off') ...
| strcmp(get(freq_bar,'enable'),'off') | strcmp(get(phase_bar,'enable'),'off')
return
end
set(s1_bar,'enable','off');
set(sigma_bar,'enable','off');
set(npts_bar,'enable','off');
set(ro_bar,'enable','off');
set(freq_bar,'enable','off');
set(phase_bar,'enable','off');
S1 = 5;
set(s1_bar,'value',S1);
set(s1_text,'string',sprintf('%g',S1))
sigma = 0;
set(sigma_bar,'value',sigma);
set(sigma_text,'string',sprintf('%g',sigma))
npts = 10;
set(npts_bar,'value',npts);
set(npts_text,'string',sprintf('%g',npts))
freq = 1/2;
set(freq_bar,'value',freq);
set(freq_text,'string',sprintf('%g',freq))
ro = 0;
set(ro_bar,'value',ro);
set(ro_text,'string',sprintf('%g',ro))
phase = 90;
set(phase_bar,'value',phase);
set(phase_text,'string',sprintf('%g',phase))
range = [-2 2];
delta = (range(2)-range(1))/(S1-1);
bias=1.6652/delta; %sqrt(S1)/delta;
set(bias_bar,'value',bias);
set(bias_text,'string',sprintf('%g',round(bias*100)/100))
set(w1_1_bar,'value',range(1));
set(w1_1_text,'string',sprintf('%g',round(range(1)*10)/10))
cmd='update';
end
%==================================================================
% Train and update the figures.
%
% ME('update')
%==================================================================
if strcmp(cmd,'update')
S1=str2num(get(s1_text,'string'));
npts=str2num(get(npts_text,'string'));
phase=str2num(get(phase_text,'string'));
ro=str2num(get(ro_text,'string'));
freq=str2num(get(freq_text,'string'));
sigma=str2num(get(sigma_text,'string'));
bias=str2num(get(bias_text,'string'));
w1_1=str2num(get(w1_1_text,'string'));
range = [-2 2];
d1 = (range(2)-range(1))/(npts-1);
p = range(1):d1:range(2);
%t = sin(2*pi*(freq*p + phase/360))+1 + sigma*randn(size(p));
randseq = get(rand_ptr,'userdata');
t = sin(2*pi*(freq*p + phase/360))+1 + sigma*randseq(1:length(p));
%delta = (range(2)-w1_1)/(S1-1);
delta = (range(2)-range(1))/(S1-1);
if get(bias_checkbox,'value') == 1
b=1.6652/delta; %sqrt(S1)/delta;
bias=b;
%set(bias_bar,'value',bias);
set(bias_text,'string',sprintf('%g',round(bias*100)/100))
else
set(bias_bar,'value',bias);
set(bias_text,'string',sprintf('%g',round(bias*100)/100))
b=bias; %sqrt(S1)/delta;
end
total = range(2)-range(1);
%W1 = w1_1:delta:range(2);
W1 = (range(1):delta:range(2))+(w1_1-range(1));
W1 = W1(1:(end))';
b1 = b*ones(size(W1));
Q = length(p);
pp = repmat(p,S1,1);
n1 = abs(pp-W1*ones(1,Q)).*(b1*ones(1,Q));
a1 = exp(-n1.^2);
Z = [a1;ones(1,Q)];
%x=inv(Z*Z'+ro*eye(S1+1))*Z*t';
%x=(Z*Z'+ro*eye(S1+1))\Z*t';
x=pinv(Z*Z'+ro*eye(S1+1))*Z*t';
W2 = x(1:end-1)';
b2 = x(end);
a2 = W2*a1 + b2*ones(1,Q);
p2 = range(1):(total/1000):range(2);
Q2 = length(p2);
pp2 = repmat(p2,S1,1);
n12 = abs(pp2-W1*ones(1,Q2)).*(b1*ones(1,Q2));
a12 = exp(-n12.^2);
a22 = W2*a12 + b2*ones(1,Q2);
t_exact = sin(2*pi*(freq*p2 + phase/360))+1;
temp=[(W2'*ones(1,Q2)).*a12; b2*ones(1,Q2)];
%sse = sumsqr(t-a2);
sse = sum(sum((t-a2).*(t-a2)));
set(fig,'nextplot','add')
delete(get(fa_axis,'children'))
axes(fa_axis)
cc=get(fa_axis,'color');
fa_plot = plot(p,t,'ok');
hold on
fa_plot2 = plot(p2,temp,':k');
fa_plot3 = plot(p2,t_exact,'b','LineWidth',2);
fa_plot4 = plot(p2,a22,'r','LineWidth',1);
hold off
set(fa_axis,'color',cc);
set(get(fa_axis,'ylabel'),...
'string','a^2','FontSize',12,'FontWeight','bold')
set(get(fa_axis,'title'),...
'string','Function Approximation','FontSize',12,'FontWeight','bold')
set(fa_axis,'ylim',[-2 4])
delete(get(fb_axis,'children'))
axes(fb_axis)
fb_plot = plot(p2,a12,'k');
%fa_plot=get(fa_ptr,'userdata');
%set(fa_plot,'xdata',p,'ydata',t);
%fa_plot2=get(fa_ptr2,'userdata');
%set(fa_plot2,'xdata',p2,'ydata',temp);
%fa_plot3=get(fa_ptr3,'userdata');
%set(fa_plot3,'xdata',p2,'ydata',t_exact);
%fa_plot4=get(fa_ptr4,'userdata');
%set(fa_plot4,'xdata',p2,'ydata',a22);
%fb_plot=get(fb_ptr,'userdata');
%set(fb_plot,'xdata',p2,'ydata',a12);
% DATA POINTERS
set(fa_ptr,'userdata',fa_plot);
set(fa_ptr2,'userdata',fa_plot2);
set(fa_ptr3,'userdata',fa_plot3);
set(fa_ptr4,'userdata',fa_plot4);
set(fb_ptr,'userdata',fb_plot);
% SAVE WINDOW DATA AND LOCK
H = [fig_axis desc_text s1_bar s1_text fa_axis fa_ptr fa_ptr2 fa_ptr3 ...
fa_ptr4 fb_axis fb_ptr sigma_bar sigma_text npts_bar npts_text ...
freq_bar freq_text ro_bar ro_text phase_bar phase_text ...
bias_bar bias_text bias_checkbox w1_1_bar w1_1_text rand_ptr];
set(fig,'userdata',H,'nextplot','new')
set(sigma_bar,'enable','on');
set(s1_bar,'enable','on');
set(npts_bar,'enable','on');
set(ro_bar,'enable','on');
set(freq_bar,'enable','on');
set(phase_bar,'enable','on');
set(w1_1_bar,'enable','on');
if get(bias_checkbox,'value') == 0
set(bias_bar,'enable','on');
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -