draft/prob/prob.m
author fabien
Mon, 02 Jan 2006 19:04:39 -0500
brancharpeges
changeset 3 7df299660e76
parent 0 1397c2bfefa2
permissions -rw-r--r--
[svn] r2069@freebird: fabien | 2006-01-02 17:04:56 -0500 Ajout des enjeux, et des motivations.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     1
# Nombre de résultats calculés
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     2
# de -N à +N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     3
N = 20;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     4
# Taille du dé
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     5
M = 10;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     6
# Nombre de résultats affichés
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     7
# de -R à +R
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     8
R = 20;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
     9
# Nombre de dés
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    10
J = 2;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    11
# Nombre de résultats affichés
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    12
# de -R à +R
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    13
R = 20;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    14
# Prob de 1 à N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    15
P1N = 1:N;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    16
# Prob de -N à N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    17
PDN = 0:2*N;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    18
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    19
NSG = 0:2*N;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    20
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    21
function y = P1_ferme(x,M,J)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    22
  if ((x < 1) || (x > M))
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    23
    y = 0;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    24
  else
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    25
    y = 1/M;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    26
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    27
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    28
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    29
function y = P1_limite(x,M,J)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    30
  if (x < 1)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    31
    y = 0;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    32
  elseif (x < M)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    33
    y = 1/M;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    34
  elseif (x < J*M)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    35
    y = P1_limite(x-M,M,J)/M;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    36
  elseif (x == J*M)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    37
    y = (1/M)^J;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    38
  else
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    39
    y = 0;	
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    40
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    41
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    42
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    43
function y = P1_ouvert(x,M,J)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    44
  if (x < 1)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    45
    y = 0;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    46
  elseif (x < M)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    47
    y = 1/M;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    48
  else
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    49
    y = P1_ouvert(x-M,M)/M;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    50
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    51
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    52
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    53
function y = P1(x,M,J)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    54
  y = P1_limite(x,M,J);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    55
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    56
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    57
function y = diff(x,P1N,N)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    58
  if (x < 0)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    59
    c = -x;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    60
  else
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    61
    c = x;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    62
  end
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    63
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    64
  if (c >= N)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    65
    y = 0;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    66
    return;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    67
  end
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    68
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    69
  y = 0;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    70
  for i = (c+1):N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    71
    y = y + P1N(i) * P1N(i-c);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    72
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    73
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    74
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    75
function y = prob_real(N, M, J)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    76
# usage: y = prob_real(N, M, J)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    77
# Return a -N:N vector containing
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    78
# the compute value of probability
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    79
# for J M-side dices.
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    80
  for i = 1:N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    81
    p1(i) = P1(i,M,J);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    82
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    83
  for i = -N:N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    84
    y(i+N+1) = diff(i,p1,N);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    85
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    86
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    87
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    88
function y = prob_theo(N)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    89
# usage: y = prob_theo(N)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    90
# Return a -N:N vector containing
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    91
# the theorical value of probability
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    92
  for i = -N:N
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    93
    if (i < 0)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    94
      y(i+N+1) = 0.5 * 2^(i/3);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    95
    else
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    96
      y(i+N+1) = 1 - 0.5 * 2^(-i/3);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    97
    end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    98
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
    99
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   100
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   101
PDN = prob_real(N,M,J);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   102
IPDN = cumsum(PDN);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   103
NSG = prob_theo(N);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   104
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   105
RANGE=-R:R;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   106
IRANGE=N-R+1:N+R+1;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   107
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   108
# Affichage des résultats
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   109
IPDN(IRANGE)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   110
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   111
title("courbe de probabilité");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   112
plot(RANGE, IPDN(IRANGE), "-.", RANGE, NSG(IRANGE), "-");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   113
r = scanf("%s","C");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   114
title("erreur absolue");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   115
plot(RANGE, abs(IPDN(IRANGE)-NSG(IRANGE))*100);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   116
r = scanf("%s","C");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   117
title("erreur relative");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   118
plot(RANGE, abs(IPDN(IRANGE)-NSG(IRANGE))./NSG(IRANGE)*100);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   119
r = scanf("%s","C");
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   120
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   121
function y = diff_sum(P,R)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   122
  Psize = size(P,1)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   123
  Rsize = size(R,1)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   124
  for i = 1:Rsize-1
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   125
    off = R(i+1)-1
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   126
    y(i) = sum(P(R(i):off))
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   127
  end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   128
  y(Rsize) = sum(P(R(Rsize):Psize))
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   129
end;
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   130
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   131
X = PDN(N:-1:1);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   132
X = X / sum(X);
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   133
S = [1;5;10;15]
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   134
diff_sum(X,S)
1397c2bfefa2 [svn] r1946@freebird: fabien | 2005-12-26 19:20:33 -0500
fabien
parents:
diff changeset
   135