Matlab - problema de acceso a elemento de matriz

 
Vista:

problema de acceso a elemento de matriz

Publicado por volk (1 intervención) el 17/11/2013 20:53:57
Hola! estoy programando el campo de temperaturas función del tiempo en una chapa de aluminio sometida a unas condiciones determinadas. se almcenan en la matriz Temp la temperatura en 4nodos espaciales en el instante i por columnas. con lo que se tiene una matriz de dimensiones 4xi siendo i cada vuelta del bucle. El caso es que en cada vuelta hay que acceder a elementos de anteriores columnas de la matriz que se va generando para hacer nuevos cálculos. Es símple.

Mi problema es que exactamente en la vuelta i=8 matlab me muestra un error diciendo que no puede acceder a elementos de la columna anterior(la 7 que ya está generada). Me parece muy raro ya que si fuese un error de programación este error debería salir ya en la primera vuelta del bucle, sin embargo hasta i=8 accede sin problema y justo en esa vuelta tiene el problema. Es evidente que hay algo que se me escapa. Os dejo el código y el error a continuación por si a alguien se le ocurre algo.
gracias de anemano!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [] = programa(T1)
ro=2719;
c=871;
k=202.4;
alfa=k/(c*ro);
dx=0.0015/3;
dt=0.0025;
Fo=alfa*dt/dx^2

Temp(:,1)=[326;344;344;T1]

for time=dt:dt:10*dt

i=time/dt+1

if mod(i,2)~= 0

x=inv([1+2*Fo,-2*Fo;-Fo,1+Fo])*[Temp(1,i-1)-2*Fo*100*dx/k;Temp(2,i-1)+Fo*(Temp(3,i-1)-Temp(2,i-1))]


Temp(1,i)=x(1)
Temp(2,i)=x(2)
Temp(3,i)=(Temp(3,i-1)+Fo*(Temp(2,i)-Temp(3,i-1)+Temp(4,i-1)))/(1+Fo)
Temp(4,i)=T1

else
Temp(4,i)=T1;
Temp(3,i)=(Temp(3,i-1)+Fo*(T1-Temp(3,i-1)+Temp(2,i-1)))/(1+Fo)
Temp(2,i)=(Temp(2,i-1)+Fo*(Temp(3,i)-Temp(2,i-1)+Temp(1,i-1)))/(1+Fo)
Temp(1,i)=(Temp(1,i-1)+2*Fo*(Temp(2,i)-100*dx/k))/(1+2*Fo)

end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Al ejecutar resulta lo siguiente:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Temp =

326.0000 332.1230 337.2408 338.8099 340.2342 340.9431 341.6228
344.0000 335.7054 340.2352 339.7281 341.0677 341.3581 342.0208
344.0000 344.0000 342.2651 342.1291 342.5022 342.5314 342.9728
344.0000 344.0000 344.0000 344.0000 344.0000 344.0000 344.0000

i =

8.0000

Attempted to access Temp(1,7); index must be a positive integer or logical.

Error in programa (line 18)
x=inv([1+2*Fo,-2*Fo;-Fo,1+Fo])*[Temp(1,i-1)-2*Fo*100*dx/k;Temp(2,i-1)+Fo*(Temp(3,i-1)-Temp(2,i-1))]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
el error en i=8 como ya os comenté;


Un saludo y gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder