function y = dataProcess(x,way,ind,best) [n,m] = size(x); if nargin == 1 way = 1; ind = zeros(m,1); best = zeros(m,2); elseif nargin == 2 ind = zeros(m,1); best = zeros(m,2); elseif nargin == 3 best = zeros(m,2); end for i = 1:m if ind(i) == 1 x(:,i) = min_to_max(x(:,i)); elseif ind(i) == 2 x(:,i) = mid_to_max(x(:,i),best(i,1)); elseif ind(i) == 3 x(:,i) = sec_to_max(x(:,i),best(i,1),best(i,2)); end end if way == 1 y = x ./ repmat(sum(x),n,1); % 这种写法等价于 % for i=1:n % for j=1:m % p(i,j)=y(i,j)/sum(y(:,j)); % end % end elseif way == 2 xMax = max(x); xMin = min(x); helperMax = 0.996; helperMin = 0.002; helper = helperMax - helperMin; y = zeros(size(x)); for i = 1:m temp = xMax(i) - xMin(i); y(:,i) = helper*(x(:,i)-xMin(i))/temp + helperMin; end elseif way == 3 y = x ./ repmat(sqrt(sum(x.*x)), n, 1); end return; end function [y] = min_to_max(x) y = max(x) - x; return; end function [y] = mid_to_max(x,best) M = max(abs(x-best)); y = 1 - abs(x-best) / M; end function [y] = sec_to_max(x,min_n,max_n) n = size(x,1); M = max([min_n-min(x),max(x)-max_n]); y = zeros(n,1); for i = 1: n if x(i) < min_n y(i) = 1-(min_n-x(i))/M; elseif x(i) > max_n y(i) = 1-(x(i)-max_n)/M; else y(i) = 1; end end end