Problema con los ciclos
Publicado por Javier Her (3 intervenciones) el 18/01/2011 14:13:05
Hola, soy nuevo aqui, y me he animado a entrar porque creo que soy incapaz de sacar este problema yo solo y agradeceria cualquier tipo de ayuda.
El problema es el siguiente: Tengo que crear una simulación que se basa en la creación aleatoria de una matriz con 1,-1 y 0. El tamaño de la matriz y la probabilidad de que en una posición halla un 1, o un -1 se introducen manualmente(p y q). Esta parte creo que la tengo, el problema es que a partir de esta matriz inicial hay que conseguir que esta se actualice por ciclos en función de su entorno. Me explico, en la matriz actualizada, el valor de una posición de la matriz es la suma de los puntos que lo rodean (N,S,E yO). Como ejemplo, si tenemos esta matriz: [0,1;-1,-1], la matriz despues de un ciclo debe ser: [0,-1;-1,0]. Me surgen dos problemas en esta parte:
- me aparecen valores de 2 ó -2 (la matriz que yo uso es de 4x4).
- No se como hacer que el proceso se repita x ciclos (en mi caso 20).
Os adjunto el código de lo que tengo, a ver si alguien logra ayudarme.
function x=bosque(m,n,p,q)
m=input ('Introducir el número de filas: ');
n=input ('Introducir el número de columnas: ');
p=input ('Introducir valor p: ');
q=input ('Introducir valor q: ');
y=rand(m,n);
for i=1:m;
for j=1:n;
if p>q;
if y(i,j)>p;
x(i,j)=1;
elseif y(i,j)>q;
x(i,j)=-1;
else;
x(i,j)=0;
end;
elseif q>p;
if y(i,j)>q;
x(i,j)=-1;
elseif y(i,j)>p;
x(i,j)=1;
else;
x(i,j)=0;
end;
else;
if y(i,j)>p&&y(i,j)>q;
x(i,j)=1;
else;
x(i,j)=-1;
end;
end;
end;
end;
function v=ambiente(m,n,p,q,T)
x=bosque
[m,n]=size(x);
T=input('Introducir número de ciclos: ');
z=zeros(m,n);
v=zeros(m,n);
for t=1:T;
for k=1:m;
for l=1:n;
if k>1&&k~=m
z(k,l)=x(k-1,l)+x(k+1,l)
elseif k==1
z(k,l)=x(k+1,l)
elseif k==m
z(k,l)=x(k-1,l)
elseif l>1&&l~=n
z(k,l)=x(k,l-1)+x(k,l+1)
elseif l==1
z(k,l)=x(k,l+1)
elseif l==n
z(k,l)=x(k,l-1)
if z(k,l)>=1
z(k,l)=1
elseif z(k,l)<=-1
z(k,l)=-1
else
z(k,l)=0
end
end
end
end
v(t)=v+z
end
El problema es el siguiente: Tengo que crear una simulación que se basa en la creación aleatoria de una matriz con 1,-1 y 0. El tamaño de la matriz y la probabilidad de que en una posición halla un 1, o un -1 se introducen manualmente(p y q). Esta parte creo que la tengo, el problema es que a partir de esta matriz inicial hay que conseguir que esta se actualice por ciclos en función de su entorno. Me explico, en la matriz actualizada, el valor de una posición de la matriz es la suma de los puntos que lo rodean (N,S,E yO). Como ejemplo, si tenemos esta matriz: [0,1;-1,-1], la matriz despues de un ciclo debe ser: [0,-1;-1,0]. Me surgen dos problemas en esta parte:
- me aparecen valores de 2 ó -2 (la matriz que yo uso es de 4x4).
- No se como hacer que el proceso se repita x ciclos (en mi caso 20).
Os adjunto el código de lo que tengo, a ver si alguien logra ayudarme.
function x=bosque(m,n,p,q)
m=input ('Introducir el número de filas: ');
n=input ('Introducir el número de columnas: ');
p=input ('Introducir valor p: ');
q=input ('Introducir valor q: ');
y=rand(m,n);
for i=1:m;
for j=1:n;
if p>q;
if y(i,j)>p;
x(i,j)=1;
elseif y(i,j)>q;
x(i,j)=-1;
else;
x(i,j)=0;
end;
elseif q>p;
if y(i,j)>q;
x(i,j)=-1;
elseif y(i,j)>p;
x(i,j)=1;
else;
x(i,j)=0;
end;
else;
if y(i,j)>p&&y(i,j)>q;
x(i,j)=1;
else;
x(i,j)=-1;
end;
end;
end;
end;
function v=ambiente(m,n,p,q,T)
x=bosque
[m,n]=size(x);
T=input('Introducir número de ciclos: ');
z=zeros(m,n);
v=zeros(m,n);
for t=1:T;
for k=1:m;
for l=1:n;
if k>1&&k~=m
z(k,l)=x(k-1,l)+x(k+1,l)
elseif k==1
z(k,l)=x(k+1,l)
elseif k==m
z(k,l)=x(k-1,l)
elseif l>1&&l~=n
z(k,l)=x(k,l-1)+x(k,l+1)
elseif l==1
z(k,l)=x(k,l+1)
elseif l==n
z(k,l)=x(k,l-1)
if z(k,l)>=1
z(k,l)=1
elseif z(k,l)<=-1
z(k,l)=-1
else
z(k,l)=0
end
end
end
end
v(t)=v+z
end
Valora esta pregunta


0