Professional Documents
Culture Documents
1. Generar 50 números entre 0 y 1 con los siguientes parámetros: a = 19, c = 33, Xo = 37, y m =
100.
for i=1:n
x(i)=mod((19*s)+33,100);
s=x(i);
u(i)=s/100;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
for i=1:n
x(i)=mod((13*s)+7,8);
s=x(i);
u(i)=s/8;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
for i=1:n
x(i)=mod((50*s)+17,64);
s=x(i);
u(i)=s/64;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
c) 𝐗 𝐧+𝟏 = (𝟓𝐗 𝐧 + 𝟐𝟒)𝐦𝐨𝐝 𝟑𝟐 𝐗𝟎 = 𝟕
% Xn+1 = (a(s) + c) Mod m
function [x,u]=gmixto(s)
for i=1:n
x(i)=mod((5*s)+24,32);
s=x(i);
u(i)=s/32;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
d) 𝐗 𝐧+𝟏 = (𝟓𝐗 𝐧 + 𝟐𝟏)𝐦𝐨𝐝 𝟏𝟎𝟎 𝐗𝟎 = 𝟑
% Xn+1 = (a(s) + c) Mod m
function [x,u]=gmixto(s)
for i=1:n
x(i)=mod((5*s)+21,100);
s=x(i);
u(i)=s/100;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
for i=1:n
x(i)=mod((21*s),32);
s=x(i);
u(i)=s/32;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
for i=1:n
x(i)=mod((211*s),100000000);
s=x(i);
u(i)=s/100000000;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
c) 𝐗 𝐧+𝟏 = (𝟐𝟐𝟏𝐗 𝐧 )𝐦𝐨𝐝 𝟏𝟎𝟑 𝐗𝟎 = 𝟑
% Xn+1 = (a(s)) Mod m
function [x,u]=gmulti(s)
for i=1:n
x(i)=mod((221*s),1000);
s=x(i);
u(i)=s/1000;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
for i=1:n
x(i)=mod((5*s),64);
s=x(i);
u(i)=s/64;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
4. Estúdiese (ui, ui+1) e (n, ui) para los generadores congruenciales de los ejercicios 1, 2 y 3. ¿Qué
puede concluir?
En el ejercicio 3, cuando “m” toma el valor “p^d” se facilita el cálculo de número uniforme (Un =
xn+1/m), ya que solo se corre el punto binario o decimal a la izquierda del número.
5. Generar, a partir del generador cuadrático, suficientes números enteros hasta alcanzar el
periodo de vida, considerando los siguientes parámetros: d = 27, a = 26, c = 27, xo = 13, y m = 8.
% Xn+1 = ((d*(Xo^2))+(a*Xo)+c) Mod m
function [x,u]=gmulti(s)
for i=1:n
x(i)=mod((27*(s^2))+(26*s)+27,8);
s=x(i);
u(i)=s/8;
fprintf('%6.0f %3.4f\t\n',i,u(i));
end
a) Algoritmo de cuadrados medio: Generar los primeros 15 números ri a partir de una semilla X0 =
5735.
b) Algoritmo de productos medios Generar los primeros 15 números ri a partir de una semilla X0 =
5015 y X1 = 5734.
c) Algoritmo de multiplicador constante Generar los primeros 15 números ri a partir de una semilla
X0 = 9803 y constante c = 6965
for i=1:n
y=c0*x0;
if y >9999999
ystr=num2str(y); %Paso el número a cadena
d1=ystr(3:6); %Obtengo los 4 dígitos centrales
end
if y < 9999999 && y >999999
ystr=num2str(y); %Paso el número a cadena
ystr=strcat('0',ystr); % Le añado un cero al principio de la cadena.
d1=ystr(3:6); %Obtengo los 4 dígitos centrales
end
if y > 99999 && y < 999999
ystr=num2str(y); %Paso el número a cadena
d1=ystr(2:5); %Obtengo los 4 dígitos centrales
end
if y < 99999 && y >9999
ystr=num2str(y); %Paso el número a cadena
ystr=strcat('0',ystr); % Le añado un cero al principio de la cadena.
d1=ystr(2:5); %Obtengo los 4 dígitos centrales
end
if y > 999 && y < 10000
ystr=num2str(y); %Paso el número a cadena
d1=ystr(1:4); %Obtengo los 4 dígitos centrales
end
if y < 1000
fprintf('Imposible continuar \n');
break;
end
u1=str2num(d1); %Convierto la cadena a número
x0=u1; %guardo la siguiente semilla.
u1=u1/10000; %Divido para obtener el número aleatorio entre 0 y 1
fprintf('%6.0f %6.0f\t %2.4f\n',i,x0,u1);
end