Matlab - Lectura de archivos dat en bucle

   
Vista:

Lectura de archivos dat en bucle

Publicado por Joan (2 intervenciones) el 21/11/2013 13:37:58
Hola,
Tengo un problema y no sé como solucionarlo, a ver si alguien me puede ayudar. Tengo escrito un programa que lee un archivo externo DAT (columnas de números) hace un cierto numero de calculos y escribe en otro archivo. Hasta aquí bién, pero me gustaría hacer lo mismo en 100 archivos más de manera automática y no sé como pedirle que que vaya cogiendo los archivos de uno en uno y aplique el programa. Los archivos tienen el mismo nombre y sólo cambia un numero al final del nombre por lo que intenté usar un for k=1:n però solo me funciona en la primera iteración. Me genera el fallo siguiente:

Subscripted assignment dimension mismatch.

Error in lecturaAD4campv2 (line 38)
Pcorr(:,1)=P(:,3);

Os dejo el programa por si alguién me puede ayudar. Gracias

function lecturaAD=lecturaAD(arxiu)

path = ['\Users\usuari\JoanTorrensSerra\recerca\matlab\frequenciamostra\Q1_sin_MT\']
temp=[1:1:26];
n= length (temp);

for k=1:n
name=[path,'ADQ1_',int2str(temp(k)),'.dat'];
A = dlmread(name,'\t',0,0);
%A = load(arxiu);

v=input('camp=')

mq=1.02;%input('Massa quars= ');
mm=0.15;%input('Massa mostra= ');
FQ=91352;%input('Frequencia del quarz= ');
IFQ=1.4e-4;%input('Friccio interna del quarz= ');
Cal=0.656;%input('calibracio= ');
Mcorr=(mq+mm)/mm;
M=(mq+mm);
%T=input('Temperatura= ');

amp=A(:,3);
[ampmax,I]=max(amp);
l=length(amp);

for j=3:5;
for i=1:I;
P(i,j)=A(i,j); %Pujada%
end
for i=I+1:l;
B(i-I,j)=A(i,j); %Baixada%
end
end

% correccions%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Pcorr(:,1)=P(:,3);
Bcorr(:,1)=B(:,3);

Pcorr(:,2)=Cal*(P(:,4)*M-(mq*IFQ))/mm;
Bcorr(:,2)=Cal*(B(:,4)*M-(mq*IFQ))/mm;


Pcorr(:,3)=(P(:,5)-((FQ*mq)/(mm+mq)))*Mcorr;
Bcorr(:,3)=(B(:,5)-((FQ*mq)/(mm+mq)))*Mcorr;




% plot(Pcorr(:,1),Pcorr(:,3))
% hold on
% plot(Bcorr(:,1),Bcorr(:,3))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
z(1)=v;

g=find(Pcorr(:,1)>=2.4e-7);
gg=min(g)
z(2)=Pcorr(gg,1);
z(3)=Pcorr(gg,2);
z(4)=Pcorr(gg,3);

r=find(Pcorr(:,1)>=9.5e-6)
rr=min(r)

z(5)=Pcorr(rr,1);
z(6)=Pcorr(rr,2)-Pcorr(gg,2);
z(7)=Pcorr(rr,3)-Pcorr(gg,3);
z(8)=Pcorr(rr,3)^2-Pcorr(gg,3)^2;

w(1)=v;

gb=find(Bcorr(:,1)>=2.4e-7)
ggb=max(gb)
w(2)=Bcorr(ggb,1);
w(3)=Bcorr(ggb,2);
w(4)=Bcorr(ggb,3);

rb=find(Bcorr(:,1)>=9.5e-6)
rrb=max(rb)

w(5)=Bcorr(rrb,1);
w(6)=Bcorr(rrb,2)-Bcorr(ggb,2);
w(7)=Bcorr(rrb,3)-Bcorr(ggb,3);
w(8)=Bcorr(rrb,3)^2-Bcorr(ggb,3)^2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
path = ['\Users\usuari\JoanTorrensSerra\recerca\matlab\frequenciamostra\Q1_sin_MT\'];


% v=input('vols gravar-ho? s/n: ','s')
% if v=='s'
% namep=[path,'p',arxiu];
% %nomesc=input('Nom fitxer pujada: ','s')
% dlmwrite(namep,Pcorr,'\t')
%
% %nomref=input('Nom fitxer baixada: ','s')
% nameb=[path,'b',arxiu];
% dlmwrite(nameb,Bcorr,'\t')
%
% namez=[path,'z',arxiu];
% dlmwrite(namez,z,'\t')
%
% namew=[path,'w',arxiu];
% dlmwrite(namew,w,'\t')
% else
end
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

Lectura de archivos dat en bucle

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 21/11/2013 20:33:29
Faltan los 100 archivos *.dat para probar tu código y filtrar el error.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura de archivos dat en bucle

Publicado por Joan (2 intervenciones) el 22/11/2013 11:18:52
He encontrado una solución, aunque poco elegante, funciona. El problema viene de las variables P y B que no és capaz de sobreescribirlas porque en cada iteración tienen longitudes diferentes (cosa que no pasa con las otras) así que he puesto un clear P* B* debajo del for y funciona.

Gracias de todos modos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar