Want more features on Pastebin? Sign Up, it's FREE!
Guest

Option Overlay - Permutations

By: eacousineau on Sep 20th, 2011  |  syntax: MatLab  |  size: 1.38 KB  |  views: 72  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. % optPermute()
  2. % Generate a set of full factorial permutations based on arguments given as
  3. % fields in a structure.
  4. % Meant to be used stand-alone or in conjunction with optOverlay()
  5. %
  6. %       optVars = struct('mass', {{5, 10, 15}}, 'pos', {{1, 2}}, 'extra', struct('x', {{2, 3}}))
  7. %       optSet = optPermute(optVars);
  8.  
  9. function [optSet] = optPermute(optVars)
  10.         optSet = {};
  11.        
  12.         %Test overlay?
  13.        
  14.         % Full factorial experiment
  15.         fields = fieldnames(optVars);
  16.         fieldCount = length(fields);
  17.        
  18.         % Start recursion
  19.         optBlank = struct();
  20.         doRecursion(optBlank, 1);
  21.        
  22.         function doRecursion(optCur, index)
  23.                 if index <= fieldCount
  24.                         field = fields{index};
  25.                         value = optVars.(field);
  26.                         if iscell(value)
  27.                                 % Loop through, concatenate
  28.                                 for i = 1:length(value)
  29.                                         optCur.(field) = value{i};
  30.                                         % Recurse through the rest of the options
  31.                                         doRecursion(optCur, index + 1);
  32.                                 end
  33.                         elseif isstruct(value)
  34.                                 % Recurse with a new set of options for that given option...
  35.                                 % Get the set of options for that set
  36.                                 % Incorporate these into permutations
  37.                                 optSubSet = optPermute(value);
  38.                                 % And like normal
  39.                                 for i = 1:length(optSubSet)
  40.                                         optCur.(field) = optSubSet{i};
  41.                                         % And so on
  42.                                         doRecursion(optCur, index + 1);
  43.                                 end
  44.                         end
  45.                 else
  46.                         % End of permute
  47.                         % Add final options to the list of permutations
  48.                         optSet{end + 1} = optCur;
  49.                 end
  50.         end
  51. end
clone this paste RAW Paste Data