FAIRMAX Same as built-in MAX, except breaks ties randomly. [VAL, IDX] = FAIRMAX(X) takes a vector as an argument and returns the same output as the built-in function MAX with two output parameters, except that where the maximum value occurs at more than one position in the vector, the index is chosen randomly from these positions as opposed to just choosing the first occurance. See also MAX.
0001 function [val, idx] = fairmax(x) 0002 %FAIRMAX Same as built-in MAX, except breaks ties randomly. 0003 % [VAL, IDX] = FAIRMAX(X) takes a vector as an argument and returns 0004 % the same output as the built-in function MAX with two output 0005 % parameters, except that where the maximum value occurs at more 0006 % than one position in the vector, the index is chosen randomly 0007 % from these positions as opposed to just choosing the first occurance. 0008 % 0009 % See also MAX. 0010 0011 % MATPOWER 0012 % $Id: fairmax.m,v 1.7 2010/04/26 19:45:25 ray Exp $ 0013 % by Ray Zimmerman, PSERC Cornell 0014 % Copyright (c) 1996-2010 by Power System Engineering Research Center (PSERC) 0015 % 0016 % This file is part of MATPOWER. 0017 % See http://www.pserc.cornell.edu/matpower/ for more info. 0018 % 0019 % MATPOWER is free software: you can redistribute it and/or modify 0020 % it under the terms of the GNU General Public License as published 0021 % by the Free Software Foundation, either version 3 of the License, 0022 % or (at your option) any later version. 0023 % 0024 % MATPOWER is distributed in the hope that it will be useful, 0025 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0026 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0027 % GNU General Public License for more details. 0028 % 0029 % You should have received a copy of the GNU General Public License 0030 % along with MATPOWER. If not, see <http://www.gnu.org/licenses/>. 0031 % 0032 % Additional permission under GNU GPL version 3 section 7 0033 % 0034 % If you modify MATPOWER, or any covered work, to interface with 0035 % other modules (such as MATLAB code and MEX-files) available in a 0036 % MATLAB(R) or comparable environment containing parts covered 0037 % under other licensing terms, the licensors of MATPOWER grant 0038 % you additional permission to convey the resulting work. 0039 0040 val = max(x); %% find max value 0041 i = find(x == val); %% find all positions where this occurs 0042 n = length(i); %% number of occurences 0043 idx = i( fix(n*rand)+1 ); %% select index randomly among occurances