Advertisement
desdemona

matlaby siem zbiegają

May 20th, 2013
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.15 KB | None | 0 0
  1. % Metody teoretyczne
  2.  
  3. clear
  4. N=1; T=2; % falsz, prawda
  5.  
  6. %zadawanie wartosci prawdopodobienstw
  7.  
  8. %Pr - błąd programisty
  9. pPr(T) = 0.70;
  10. pPr(N) = 1-pPr(T);
  11.  
  12. %N - skok napięcia
  13. pN(T) = 0.07;
  14. pN(N) = 1-pN(T);
  15.  
  16. %B - błąd w systemie
  17. pBpr(T, T) = 0.13; %blad programisty -> blad w systemie
  18. pBpr(N, T) = 0.05;
  19. pBpr(N, N) = 1 - pBpr(N, T);
  20. pBpr(T, N) = 1 - pBpr(T,T);
  21.  
  22. % bład na dysku przy skoku napiecia i bledzie programisty
  23. pDnb(T,T,T) = 0.80;
  24. pDnb(T,T,N)= 1-pDnb(T,T,T);
  25. pDnb(N,T,T)= 0.15;
  26. pDnb(N,T,N) = 1-pDnb(N,T,T);
  27. pDnb(T,N,T) = 0.45;
  28. pDnb(T,N,N) = 1-pDnb(T,N,T);
  29. pDnb(N,N,T) = 0.06;
  30. pDnb(N,N,N) = 1-pDnb(N,N,T);
  31.  
  32. % utrata danych przy bledzie na dysku i bledzie w systemie
  33. pUdb(T,T,T) = 0.5;
  34. pUdb(T,T,N) = 1 - pUdb(T,T,T);
  35. pUdb(N,T,T) = 0.3;
  36. pUdb(N,T,N) = 1 - pUdb(N,T,T);
  37. pUdb(T,N,T) = 0.2;
  38. pUdb(T,N,N) = 1 - pUdb(T,N,T);
  39. pUdb(N,N,T) = 0.05;
  40. pUdb(N,N,N) = 1 - pUdb(N,N,T);
  41.  
  42. % tablica prawdopodobienstw lacznych
  43.  
  44. for Pr=1:2
  45.   for B=1:2
  46.     for Ni=1:2
  47.       for D=1:2
  48.         for U=1:2
  49.           p(Pr,B,Ni,D,U)=pPr(Pr)*pN(Ni)*pBpr(Pr,B)*pDnb(Ni,B,D)*pUdb(D,B,U);                  
  50.         end
  51.       end
  52.     end
  53.   end
  54. end
  55.  
  56. % Sprawdzenie czy suma wszystkich prawdopodobienstw jest rowna 1
  57. sum(sum(sum(sum(sum(p)))))
  58.  
  59.  
  60. % Na podstawie tablicy prawdopodopienstw lacznych mozna obliczyc dowolne prawdopodobienstwo, np.P(A|S)=P(A,S)/P(S)
  61.  
  62. %pwas=sum(sum(sum(p(2,:,2,:,:))))/sum(sum(sum(sum(p(:,:,2,:,:)))))
  63. %pwnas=sum(sum(sum(p(1,:,2,:,:))))/sum(sum(sum(sum(p(:,:,2,:,:)))))
  64. pD=sum(sum(sum(sum(p(:,:,:,2,:)))));
  65. pPrd=sum(sum(sum(p(2,:,:,2,:))))/sum(sum(sum(sum(p(2,:,:,:,:)))));
  66. pD
  67. pPrd
  68. % -------------------------------------------------------
  69. % Metody Monte Carlo
  70.  
  71. K=10000; % jednorazowa porcja taktow
  72. close
  73. hold on                             % polecenie zostawia wykres, nastepne beda rysowane na tym samym
  74. plot([1 10],[pPrd pPrd])          % wykres P(A|S) wyznaczonego teoretycznie
  75. axis([0 10 0 1])                % zadanie skali rysunku
  76.  
  77. sredniaD(1)=0;
  78. sredniaPrD(1)=0;
  79. for j=1:1000
  80.     %w=rand(1,K)<pw(T);
  81.     %u=rand(1,K)<pu(T);
  82.     %aNN=rand(1,K)<pwawu(T,N,N);
  83.     %aNT=rand(1,K)<pwawu(T,N,T);
  84.     %aTN=rand(1,K)<pwawu(T,T,N);
  85.     %aTT=rand(1,K)<pwawu(T,T,T);
  86.     %a=(w&u&aTT)|(w&~u&aTN)|(~w&u&aNT)|(~w&~u&aNN);
  87.  
  88.     pr=rand(1,K)<pPr(T);
  89.     n=rand(1,K)<pN(T);
  90.     bT=rand(1,K)<pBpr(T,T);
  91.     bN=rand(1,K)<pBpr(N,T);
  92.     bb=(pr&bT)|(~pr&bN);
  93.    
  94.     dNN=rand(1,K)<pDnb(N,N,T);
  95.     dNT=rand(1,K)<pDnb(N,T,T);
  96.     dTN=rand(1,K)<pDnb(T,N,T);
  97.     dTT=rand(1,K)<pDnb(T,T,T);
  98.     dd=(n&bb&dTT)|(~n&~bb&dNN)|(n&~bb&dTN)|(~n&bb&dNT);
  99.     % ......itd.............
  100.  
  101.     % obliczenie czestosci w j-tym kroku na podstawie odpowiednich tablic jedynek, np. P(A|S)= sum(a&s)/sum(s)
  102.     PD=sum(dd)/length(dd);
  103.     PPrD=(sum(dd&pr)/length(dd))/(sum(pr)/length(pr));
  104.    
  105.     sredniaPrD(j+1) = sredniaPrD(j)+ (PPrD-sredniaPrD(j))/j;
  106.     sredniaD(j+1) = sredniaD(j) + (PD-sredniaD(j))/j;
  107.     % usrednienie czestosci dla wszystkich dotychczasowych krokow
  108. plot([1:j+1], sredniaPrD);
  109.     % narysowanie wykresu: plot([1:j], tablica_srednich_czestosci)
  110.     %plot([1:j+1], sredniaD);
  111.     %pause
  112.  
  113. end
  114. sredniaPrD(1001)
  115. sredniaD(1001)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement