--- inst/defuzz.m +++ inst/defuzz.m @@ -1,4 +1,4 @@ -## Copyright (C) 2011-2014 L. Markowsky <lmarkov@users.sourceforge.net> +## Copyright (C) 2011-2018 L. Markowsky <lmarkov@users.sourceforge.net> ## ## This file is part of the fuzzy-logic-toolkit. ## @@ -162,7 +162,16 @@ function crisp_x = mom (x, y) max_y = max (y); - y_val = @(y_val) if (y_val == max_y) 1 else 0 endif; + + function y_val = calc_yval(y_val) + if (y_val == max_y) + y_val = 1; + else + y_val = 0; + endif + endfunction + + y_val = @(y_val) calc_yval(y_val); max_y_locations = arrayfun (y_val, y); crisp_x = sum (x .* max_y_locations) / sum (max_y_locations); @@ -185,7 +194,16 @@ function crisp_x = som (x, y) max_y = max (y); - y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; + + function y_val = calc_yval(y_val) + if (y_val == max_y) + y_val = 1; + else + y_val = (NaN); + endif + endfunction + + y_val = @(y_val) calc_yval(y_val); max_y_locations = arrayfun (y_val, y); crisp_x = min (x .* max_y_locations); @@ -207,7 +225,16 @@ function crisp_x = lom (x, y) max_y = max (y); - y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; + + function y_val = calc_yval(y_val) + if (y_val == max_y) + y_val = 1; + else + y_val = (NaN); + endif + endfunction + + y_val = @(y_val) calc_yval(y_val); max_y_locations = arrayfun (y_val, y); crisp_x = max (x .* max_y_locations);