Advertisement
aidanozo

Untitled

Jan 19th, 2025
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.21 KB | None | 0 0
  1. function M = mcmmpe_armax(D, si)
  2.     n_alfa = 60;
  3.     n_beta = 60;
  4.     na = si(1);
  5.     nb = si(2);
  6.     nc = si(3);
  7.     nk = si(4);
  8.  
  9.     N=250;
  10.     model_arx = arx(D, [n_alfa n_beta 1]);
  11.    
  12.     epsilon_tilda = pe(model_arx, D);
  13.     epsilon_tilda = epsilon_tilda.OutputData;
  14.     y = D.OutputData;
  15.     u = D.InputData;
  16.  
  17.     phi = zeros(N,na+nb+nc);
  18.     for n=1:N
  19.         for i=1:na
  20.             if (n-i)<= 0
  21.                 phi(n,i) = 0;
  22.             else
  23.                 phi(n,i) = -y(n-i);
  24.             end
  25.         end
  26.        
  27.         for i = 1:nb
  28.             if (n-i)<=0
  29.                 phi(n,i+na)=0;
  30.             else
  31.                 phi(n,i+na) = u(n-i);
  32.             end
  33.         end
  34.        
  35.         for i = 1: nc
  36.             if (n-i)<=0
  37.                 phi(n,i+na+nb)= 0;
  38.             else
  39.                 phi(n,i+na+nb)= epsilon_tilda(n-i);
  40.             end
  41.         end
  42.     end
  43.    
  44.     a = (1/N)*(phi'*phi);
  45.     b = (1/N)*(phi'*y);
  46.  
  47.     theta_hat = a\b
  48.    
  49.     A_estimat = [1 theta_hat(1) theta_hat(2)];
  50.     B_estimat = [0 theta_hat(3) theta_hat(4)];
  51.     C_estimat = [1 theta_hat(5) theta_hat(6)];
  52.  
  53.     M = idpoly(A_estimat,B_estimat,C_estimat);
  54. end
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. clc
  83.  
  84. N = 250;
  85. A = [1 -1.5 0.7];
  86. B = [0 1 0.5];
  87. C = [1 -1 0.2];
  88.  
  89. u_id = sign(randn(N,1));
  90. e_id = randn(N,1);
  91. y_id = filter(B,A,u_id) + filter(C,A,e_id);
  92.  
  93. u_va = sign(randn(N,1));
  94. e_va = randn(N,1);
  95. y_va = filter(B,A,u_va) + filter(C,A,e_va);
  96.  
  97.  
  98. Did = iddata(y_id, u_id);
  99. Dva = iddata(y_va, u_va);
  100.  
  101. si = [2 2 2 1];
  102. M = mcmmpe_armax(Did, si)
  103.  
  104. eps_id = pe(M,Did);
  105. eps_id = eps_id.OutputData;
  106. disp_id = var(eps_id);
  107.  
  108. eps_va = pe(M,Dva);
  109. eps_va = eps_va.OutputData;
  110. disp_va = var(eps_va);
  111.  
  112. E_id = 100 * (1 - sqrt( sum(eps_id.^2) / sum( (y_id - sum(y_id)/N).^2)));
  113. E_va = 100 * (1 - sqrt( sum(eps_va.^2) / sum( (y_va - sum(y_va)/N).^2)));
  114.  
  115.  
  116. [y_sim_id,~, ~] = compare(Did, M);
  117. y_sim_id = y_sim_id.OutputData;
  118.  
  119. [y_sim_va,~, ~] = compare(Dva, M);
  120. y_sim_va = y_sim_va.OutputData;
  121.  
  122. figure;
  123. hold on;
  124. plot(y_id, 'b', 'DisplayName', 'Iesire masurata');
  125. plot(y_sim_id, 'r', 'DisplayName', 'Iesire simulata');
  126. hold off;
  127.  
  128. title('Set identificare: Iesire masurata si simulata');
  129. xlabel('Timp');
  130. ylabel('Amplitudine');
  131. legend show;
  132. grid on;
  133. text(100,13, sprintf('Fitness: %.2f%%', E_id), 'FontSize', 10, 'Color', 'k', 'BackgroundColor', 'w');
  134.  
  135. figure;
  136. hold on;
  137. plot(y_va, 'b', 'DisplayName', 'Iesire masurata');
  138. plot(y_sim_va, 'r', 'DisplayName', 'Iesire simulata');
  139. hold off;
  140.  
  141. title('Set validare: Iesire masurata si simulata');
  142. xlabel('Timp');
  143. ylabel('Amplitudine');
  144. legend show;
  145. grid on;
  146. text(100,13, sprintf('Fitness: %.2f%%', E_va), 'FontSize', 10, 'Color', 'k', 'BackgroundColor', 'w');
  147.  
  148.  
  149. figure;
  150. plot(eps_id, 'b');
  151. title('Set identificare: Eroare de predictie');
  152. xlabel('Timp');
  153. ylabel('Amplitudine');
  154. grid on;
  155. text(200,2, sprintf('Dispersia: %.2f%%', disp_id), 'FontSize', 10, 'Color', 'k', 'BackgroundColor', 'w');
  156.  
  157. figure;
  158. plot(eps_va, 'b');
  159. title('Set validare: Eroare de predictie');
  160. xlabel('Timp');
  161. ylabel('Amplitudine');
  162. grid on;
  163. text(200,2, sprintf('Dispersia: %.2f%%', disp_va), 'FontSize', 10, 'Color', 'k', 'BackgroundColor', 'w');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement