function [res,stepScale]=buildPDensity3(arg,steps)
% [res,stepScale]=buildPDensity3(arg,steps)
% Строит распределение встречающихся в квадратной матрице элементов
% Аргументы  : arg - матрица, распределение элементов которой строится
%              steps - количество шагов, на которые разбивается диапазон
%                значений элементов матрицы Arg (по умолчанию 50)
% Результаты : res - полученный вектор
%              stepScale - вектор отрезков, по которым происходило разбиение

[m,n]=size(arg);             % определяем размер исходной матрицы
if nargin==1                 % если не задан второй параметр - берем 50
    steps=50;
end
if n-m==2
    arg=arg(:,3:n);
elseif n-m==1
    arg=arg(:,2:n);
end
[m,n]=size(arg);             % определяем размер исходной матрицы
if (m~=1) && (n~=1)
    arg=arg-diag(diag(arg));
end
MATRIX_SIZE=m*n;             % визначаємо кількість елементів
% находим наименьшее и наибольшее значения в исходной матрице
argMin=min(min(arg));
% вычисляем шаг 
step=(max(max(arg))-argMin)/steps;
array(1,1:steps)=0;
for i=1:m
    for j=1:n
        if i~=j
            index=floor((arg(i,j)-argMin)/step)+1;
            if index>steps
                index=steps;
            end
            array(1,index)=array(1,index)+1;
        end
    end
end
res=array/MATRIX_SIZE;
stepScale(1,1:steps)=0;
for i=1:steps
    stepScale(1,i)=argMin+i*step-step/2;
end

I=find(res~=0);
res=res(I);
stepScale=stepScale(I);
hold on