ayuda con el Método del cuadrado medio-Matlab
Publicado por manuel ruiz (3 intervenciones) el 22/03/2011 11:31:52
Hola, estoy haciendo un código en matlab. El problema es generar número seudoaleatorio por medio del método del cuadrado medio.
Su idea consistía en tomar el cuadrado del número aleatorio anterior y extraer los dígitos
del medio; por ejemplo, si estamos generando números de 4 dígitos y partimos de 5729
(semilla) , lo elevamos al cuadrado, obtenemos 32821441; el próximo número se forma tomando
los 4 dígitos centrales 8214 y repitiendo el proceso se obtienen los sucesivos números
pseudoaleatorios
Mi código es el siguiente:
clear all
x0=3234
for I=1:100 %realizar el ciclo 100 veces
y=x0^2;
%Ahora tenemos que tomar los 4 dígitos centrales. Para eso, tenemos que transformar al
%número ‘y’ en la cadena
%de caracteres ‘ystr’. Una vez que tenemos la cadena de caracteres, podemos
%manipularla como si fuera un vector:
if y > 9000
ystr=num2str(y); %Paso el número a cadena
x1=ystr(3:6); %Obtengo los 4 dígitos centrales
end
if y < 9000
ystr=num2str(y); %Paso el número a cadena
ystr=strcat('0',ystr); % Le añado un cero al principio de la cadena.
x1=ystr(2:5); %Obtengo los 4 dígitos centrales
end
u1=str2num(x1); %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
end
el problema es que hasta 64 números me sale bien, pero luego me dice exceso de matrix, pero ese número se debería de corregir en el segundo if, de echo manual sale
Gracias por vuestra atención.
Su idea consistía en tomar el cuadrado del número aleatorio anterior y extraer los dígitos
del medio; por ejemplo, si estamos generando números de 4 dígitos y partimos de 5729
(semilla) , lo elevamos al cuadrado, obtenemos 32821441; el próximo número se forma tomando
los 4 dígitos centrales 8214 y repitiendo el proceso se obtienen los sucesivos números
pseudoaleatorios
Mi código es el siguiente:
clear all
x0=3234
for I=1:100 %realizar el ciclo 100 veces
y=x0^2;
%Ahora tenemos que tomar los 4 dígitos centrales. Para eso, tenemos que transformar al
%número ‘y’ en la cadena
%de caracteres ‘ystr’. Una vez que tenemos la cadena de caracteres, podemos
%manipularla como si fuera un vector:
if y > 9000
ystr=num2str(y); %Paso el número a cadena
x1=ystr(3:6); %Obtengo los 4 dígitos centrales
end
if y < 9000
ystr=num2str(y); %Paso el número a cadena
ystr=strcat('0',ystr); % Le añado un cero al principio de la cadena.
x1=ystr(2:5); %Obtengo los 4 dígitos centrales
end
u1=str2num(x1); %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
end
el problema es que hasta 64 números me sale bien, pero luego me dice exceso de matrix, pero ese número se debería de corregir en el segundo if, de echo manual sale
Gracias por vuestra atención.
Valora esta pregunta


0