📄 gat1dsearch.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>gat1dsearch.m</title><link rel="stylesheet" type="text/css" href="../../../m-syntax.css"></head><body><code><span class=defun_kw>function</span> <span class=defun_out>t</span>=<span class=defun_name>gat1dsearch</span>(<span class=defun_in>MI,SG,alpha,dalpha,tmax,tdelta</span>)<br><span class=h1>% GAT1DSEARCH 1D search along improving direction in the GAT.</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% t=gat1dsearch(MI,SG,alpha,dalpha,tmax,tdelta)</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% Auxciliary function for the 'ganders' algorithm.</span><br><span class=help>% It implements 1D-search based on the cutting interval </span><br><span class=help>% algorithm according to the Fibonacci series. </span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% GANDERS</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>About:</span> Statistical Pattern Recognition Toolbox</span><br><span class=help1>% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac</span><br><span class=help1>% <a href="http://www.cvut.cz">Czech Technical University Prague</a></span><br><span class=help1>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a></span><br><span class=help1>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a></span><br><br><span class=help1>% <span class=help1_field>Modifications:</span></span><br><span class=help1>% 21-may-2004, VF</span><br><span class=help1>% 17-sep-2003, VF</span><br><span class=help1>% 24. 6.00 V. Hlavac, comments polished.</span><br><br><hr>LO_TH=0;<br><br><span class=comment>% default setting</span><br><span class=keyword>if</span> <span class=stack>nargin</span> < 5,<br> tmax = inf;<br> delta=1e-6;<br><span class=keyword>elseif</span> <span class=stack>nargin</span> < 6,<br> delta=0;<br><span class=keyword>end</span><br><br><span class=comment>% get dimension N and the # of distributions</span><br>K = size(MI,2);<br>N = size(MI,1);<br><br><span class=comment>% compute constants</span><br><span class=keyword>for</span> j = 1:K,<br> s(j)= alpha'*MI(:,j);<br> ss(j) = dalpha'*MI(:,j);<br> ds(j) = ss(j) - s(j);<br> sga(j) = alpha'*SG(:,:,j)*alpha;<br> sgd(j) = dalpha'*SG(:,:,j)*dalpha;<br> sgad(j) = dalpha'*SG(:,:,j)*alpha;<br><span class=keyword>end</span><br><br><br><span class=comment>% first step</span><br>F1=1;<br>F2=1;<br>tbeg=0;<br>tend=1;<br>tmid=0.5*(tend+tbeg);<br><br>fmid=max([LO_TH,min( (s+tmid*ds)./sqrt( (1-tmid)^2*sga + 2*tmid*(1-tmid)*sgad + tmid^2*sgd ) )]);<br>fbeg=max([LO_TH,min( (s+tbeg*ds)./sqrt( (1-tbeg)^2*sga + 2*tbeg*(1-tbeg)*sgad + tbeg^2*sgd ) )]);<br><br><span class=keyword>if</span> sqrt( (1-tend)^2*sga + 2*tend*(1-tend)*sgad + tend^2*sgd ) == 0,<br> fend=0;<br><span class=keyword>else</span><br> fend=max([LO_TH,min( (s+tend*ds)./sqrt( (1-tend)^2*sga + 2*tend*(1-tend)*sgad + tend^2*sgd ) )]);<br><span class=keyword>end</span><br><br><br><span class=comment>% start up</span><br>stop=0;<br><span class=keyword>while</span> stop==0 & tmax > 0,<br> tmax=tmax-1;<br><br> <span class=comment>% store fmid</span><br> oldfmid=fmid;<br><br> <span class=comment>% Fibonacci, F(k)=F(k-1)+F(k-2)</span><br> F=F2+F1;<br><br> <span class=comment>% find larger interval</span><br> <span class=keyword>if</span> (tmid-tbeg) < (tend-tmid),<br> <span class=comment>% new bound</span><br> t=tmid+F1*(tend-tmid)/F;<br><br> fvalue=max([LO_TH,min( (s+t*ds)./sqrt( (1-t)^2*sga + 2*t*(1-t)*sgad + t^2*sgd ) )]);<br><br> <span class=keyword>if</span> fvalue < fmid,<br> tend=t;<br> fend=fvalue;<br> <span class=keyword>else</span><br> tbeg=tmid;<br> fbeg=fmid;<br> tmid=t;<br> fmid=fvalue;<br> <span class=keyword>end</span><br> <span class=keyword>else</span><br> <span class=comment>% new bound</span><br> t=tbeg+F1*(tmid-tbeg)/F;<br><br> fvalue=max([LO_TH,min( (s+t*ds)./sqrt( (1-t)^2*sga + 2*t*(1-t)*sgad + t^2*sgd ) )]);<br><br> <span class=keyword>if</span> fvalue < fmid,<br> tbeg=t;<br> fbeg=fvalue;<br> <span class=keyword>else</span><br> tend=tmid;<br> fend=fmid;<br> tmid=t;<br> fmid=fvalue;<br> <span class=keyword>end</span><br> <span class=keyword>end</span><br><br> <span class=comment>% update Fibonacci F(k-2)=F(k-1) and F(k-1)=F(k);</span><br> F2=F1;<br> F1=F;<br><br> <span class=comment>% stop condition</span><br> <span class=keyword>if</span> tend-tbeg < tdelta,<br> stop=1;<br> <span class=keyword>end</span><br><br><span class=keyword>end</span><br><br><span class=comment>% get the bigest value</span><br>fvalues=[fbeg fmid fend];<br>tvalues=[tbeg tmid tend];<br><br>[fmax, imax]=max(fvalues);<br>tmaxim=tvalues(imax);<br><br><span class=comment>% compute new alpha</span><br><span class=comment>%alpha=alpha*(1-tmaxim)+dalpha*tmaxim;</span><br>t=tmaxim;<br><br><span class=jump>return</span>;<br><br><span class=comment>% debugging</span><br><span class=keyword>if</span> 1==1,<br> vals=[];<br> <br> <span class=keyword>for</span> t=0:0.01:1,<br> <br> fvalue=min( (s+t*ds)./sqrt( (1-t)^2*sga + 2*t*(1-t)*sgad + t^2*sgd ) );<br><br> vals=[vals,fvalue];<br> <span class=keyword>end</span><br><br> <span class=graph>figure</span>;<br> hold on;<br> <span class=graph>plot</span>(0:0.01:1,vals,<span class=quotes>'g'</span>);<br> win=<span class=graph>axis</span>;<br> <span class=graph>line</span>([tmid tmid],[ win(3) win(4)],<span class=quotes>'Color'</span>,<span class=quotes>'k'</span>);<br> <span class=graph>line</span>([0 1],[vals(1) vals(1)],<span class=quotes>'Color'</span>,<span class=quotes>'r'</span>);<br> drawnow;<br><span class=keyword>end</span><br><br><span class=io>pause</span>;<br><span class=jump>return</span>;<br><br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -