📄 gridsearch.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>gridsearch.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>[min_x,min_y,X,Y]</span>=<span class=defun_name>gridsearch</span>(<span class=defun_in>Min,Max,Grid,nloops,fun,varargin</span>)
<br><span class=h1>% GRIDSEARCH Function minimization using grid search.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Synopsis:</span></span><br><span class=help>% [min_x,min_y,X,Y]=gridsearch(Min,Max,Grid,nloops,fun)
</span><br><span class=help>% [min_x,min_y,X,Y]=gridsearch(Min,Max,Grid,nloops,fun,varargin)
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Descritpion:</span></span><br><span class=help>% This function implements the grid search to find the minimum
</span><br><span class=help>% of a given function y = fun(x), x \in X.
</span><br><span class=help>% The domain X is discretized to the grid with minimal and
</span><br><span class=help>% maximal point given by Min and Max respectively. Number of points
</span><br><span class=help>% of the grid is given by Grid. The Max, Min and Grid are vectors
</span><br><span class=help>% their entries correspond to individual dimensions of X.
</span><br><span class=help>% After the mininum is found then the grid search is recursively
</span><br><span class=help>% repeated with a finer grid. Number of nested loops is given by nloops.
</span><br><span class=help>% The string fun determines function to be minimized. The function is
</span><br><span class=help>% called as y=feval(fun,x,varargin{:}).
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Input:</span></span><br><span class=help>% Min [dim x 1] Minimum point of the grid.
</span><br><span class=help>% Max [dim x 1] Maximum point of the grid.
</span><br><span class=help>% Grid [dim x 1] Number of point in the grid, i.e. grid density.
</span><br><span class=help>% nloops [1x1] Number of nested loops of the grid search.
</span><br><span class=help>% fun [string] Identifies the minimized function.
</span><br><span class=help>% varargin [cell] Additional arguments of the minimized function.
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Output:</span></span><br><span class=help>% min_x [dim x 1] Found minimum.
</span><br><span class=help>% min_y [1x1] min_y = fun(min_x).
</span><br><span class=help>% X [dim x n] Points which the grid search checked through.
</span><br><span class=help>% Y [1 x n] Y(i)=fun(X(:,i)).
</span><br><span class=help>%
</span><br><span class=help>% <span class=help_field>Example:</span></span><br><span class=help>% [min_x,min_y,X,Y]=gridsearch(0,10,10,3,'sin');
</span><br><span class=help>% figure; grid on; hold on;
</span><br><span class=help>% plot(X,Y,'.');
</span><br><span class=help>% plot(min_x,min_y,'+r');
</span><br><span class=help>%
</span><br><hr><br><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>% 18-July-2003, VF
</span><br><span class=help1>% 17-July-2003, VF
</span><br><br><hr>num_variables=length(Min);
<br>
<br><span class=keyword>if</span> num_variables > length(Grid),
<br> Grid = Grid*ones(size(Min));
<br><span class=keyword>end</span>
<br>
<br><span class=keyword>if</span> Grid > 1, step=(Max-Min)./(Grid-1); <span class=keyword>else</span> step = 0; <span class=keyword>end</span>
<br>x=Min;
<br>
<br>min_y = inf;
<br>stop = 0;
<br>
<br>X = [];
<br>Y = [];
<br>
<br><span class=keyword>while</span> ~stop,
<br>
<br> y = <span class=eval>feval</span>(fun, x, <span class=stack>varargin</span>{:});
<br>
<br> X = [X,x(:)];
<br> Y = [Y,y];
<br>
<br> <span class=keyword>if</span> y < min_y,
<br> min_y = y;
<br> min_x = x;
<br> <span class=keyword>end</span>
<br>
<br> x(1) = x(1) + step(1);
<br>
<br> <span class=keyword>if</span> Grid > 1,
<br>
<br> <span class=keyword>for</span> i=1:num_variables,
<br> <span class=keyword>if</span> x(i)-step(i)/2 > Max(i),
<br> x(i)=Min(i);
<br> <span class=keyword>if</span> i+1 <= length(x),
<br> x(i+1)=x(i+1)+step(i+1);
<br> <span class=keyword>else</span>
<br> stop=1;
<br> <span class=keyword>end</span>
<br> <span class=keyword>end</span>
<br> <span class=keyword>end</span>
<br> <span class=keyword>else</span>
<br> stop = 1;
<br> <span class=keyword>end</span>
<br><span class=keyword>end</span>
<br>
<br><span class=keyword>if</span> nloops > 1,
<br><span class=comment>% Min = min_x - step/2;
</span><br><span class=comment>% Max = min_x + step/2;
</span><br>
<br> tmp=2*step./Grid;
<br> Min = min_x - step + tmp;
<br> Max = min_x + step - tmp;
<br>
<br> [x, y, tmpX, tmpY]=gridsearch( Min, Max, Grid, nloops-1, fun, <span class=stack>varargin</span>{:});
<br>
<br> <span class=keyword>if</span> y < min_y,
<br> min_y = y;
<br> min_x = x;
<br> <span class=keyword>end</span>
<br>
<br> X = [X,tmpX];
<br> Y = [Y,tmpY];
<br>
<br><span class=keyword>end</span>
<br>
<br><span class=jump>return</span>;
<br><span class=comment>% EOF</span><br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -