Информационная безопасность - последнее - - первая лабораторная - матлаб

Внимание - в ходе решения данной задачи (был 8-ой вариант) - самым сложным оказалось решение проблемы построения 3-ёхмерного графика пользовательской функции, делается это так

clear();
  figure
 
[X,Y] = meshgrid(1:1:32, 0:0.01:1); % values of x and y at which we want to evaluate

for x = 1:101
  for y = 1:32
    Z(x,y) = ppscq(X(x,y), Y(x,y));
  end
end

surf(X,Y,Z);

hold on;
 figure
 
[X,Y] = meshgrid(1:1:32, 0:0.01:1); % values of x and y at which we want to evaluate

for x = 1:101
  for y = 1:32
%     Z(x,y) = ppscq(X(x,y), Y(x,y));
    Z(x,y) = dsp(X(x,y), Y(x,y));
  end
end

surf(X,Y,Z);

обёртка предпериода:

function R = ppscq(S, n)
    
  % format long 
   
  disp ('N = :')
  disp  (n);
  disp ('R = :')
  disp  (S);
  
    for k = 1:1:30
%           disp (k); disp ' =======';
%     disp (S);
        S = (1/pi)*acos(cos(10^n)*S);
        U(k) = S;
    end;
  % U = [1,2,3,4,7,8,5,5,5,5];
% U = [ 0.6528   , 0.6087   , 0.6011  ,  0.5998  ,  0.5996   , 0.5996, 0.5996]; 
    %disp('Сведения о последовательности:');
    %    disp(ndims(U))
    %    disp(size(U))
  %  disp('ВЫводим последовательность');
  %  disp(U);
     

  
  disp ('математическое ожидание:')
  disp (mean(U));
  disp ('дисперсия:')
  disp (std(U));
    R2 =  preperiod(U);
    R = R2;

предпериод:

% предположим ,что у нас есть некоторая ограниченная математическая
% последовательность, в начале которой идут изменяющиеся числа (различные),
% а в конце повторяется одно и тоже число. - данная функция определит
% длинну предпериода такой последовательности
% (то есть число первых неповторяющихся значений)
function R = preperiod(U)  
 
 U2 = fliplr(U); % ивертируем последовательность
%  disp('ВЫводим инверсию =');
% disp(U2);
len = length(U2);
 
  i = 0;
%    disp('======U2(1) = ');
            disp(U2(1));
  for x=1:len
%       disp(x);  
%       disp('---U2(x) = ');
%           disp(U2(x)); 
%           disp('-U2(1) = ');
%           disp(U2(1)); 
         %if (isequal(U2(x),U2(1)))
% здесь мы используем "округление" при сравнении
        if (isequal( round(U2(x)*10000),round(U2(1)*10000)))
%              disp('увеличиваем i');
            i = i + 1; % наращиваем счётчик повторов
         else
%              disp ('значения НЕ равны')
             break
        end
%       disp('--------------');
  end
  
  R1 = len - i + 1;
%   disp ('Предпериод = ');
%   disp (R1);
 R = R1;
end

дисперсия:

function R = dsp(S, n)
    
    for k = 1:1:30
%           disp (k); disp ' =======';
%     disp (S);
        S = (1/pi)*acos(cos(10^n)*S);
        U(k) = S;
    end;
    R = std(U);