Estoy programando en Matlab una aplicación para calcular, a partir de un archivo de texto con datos, etc. una función.
Bien, el Matlab me tira el siguien error:
"??? Error using ==> iddata.iddata at 215
Property names and their values must be specified in pairs.
Error in ==> ASIGNACIONmio at 27
ze=iddata(Output_exp1,Input_exp1,Ts);"
El error, por fuerza, tiene que estar antes de los plot y tal, ya que no hace ninguno.
La cosa es que no veo nada raro ahí, incluso he pillado una funcion que me kita el ".txt" (me kita caracteres de un string, vamos) de FileName para pasárselo en condiciones a la funcion iddata :/.
Tb me he leído todo todito el HELP de MATLAB y concretamente el apartado del iddata, además he probado a meter solo ese trozo de código con un fichero sin pasar por el "uigetfile" y me ha funcionado (es decir, me ha generado el iddata, que viene a ser un .txt mas ordenado).
%Quiero archivo de experimento 1
i=0; % 5 escalones... [esc0...esc4]
fprintf('\nDame archivo de datos del escalon %d (experimento1)(carpeta Path Matlab)',i);
[FileName Path]=uigetfile({'*.txt'},'Abrir hoja de datos');
if isequal(FileName,0) % problemas
else
FileName=substr(FileName,0,-4);
Output_exp1=FileName(:,2); Input_exp1=FileName(:,4);
end
%Quiero archivo de experimento 2
fprintf('Dame un archivo de datos del escalon %d (validación)(carpeta Path Matlab)',i);
[FileName Path]=uigetfile({'*.txt'},'Abrir hoja de datos');
if isequal(FileName,0) % problemas
else
FileName=substr(FileName,0,-4);
Output_exp2=FileName(:,2); Input_exp2=FileName(:,4);
end
Ts=0.015; % PERIODO MUESTREO
FITmax=-1;
FITmin=101;
SumaFIT=0;
Tp1=0; Tz=0; K=0;
while (i<5) % 5 escalones a simular
ze=iddata(Output_exp1,Input_exp1,Ts);
zv=iddata(Output_exp2,Input_exp2,Ts);
% ze.TimeUnit='seg';
% ze.InputName='voltios';
% ze.OutputName='posicion';
% ze.InputUnit='V';
% ze.OutputUnit='cm';
plot(ze);
figure; % Open a new MATLAB Figure window
plot(zv); % Plot the validation data
Ze1=ze(1:1000);
Zv1=zv(1:1000);
midproc0=idproc('P1IZ');
midproc=pem(Ze1,midproc0);
[YH,FIT,X0]=compare(Zv1,midproc);
resid(Zv1,midproc); % dibuja las graficas estadisticas, etc..
if(FIT> FITmax)
FITmax=FIT; % coge el porcentaje más grande
end
if(FIT<FITmin)
FITmin=FIT; % coge el porcentaje más peq
end
SumaFIT=SumaFIT+FIT; % Suma para la media de % semejanza
Tp1=Tp1+midproc.Tp1.value;
Tz=Tz+midproc.Tz.value;
K=K+midproc.K.value;
i=i+1;
%Quiero nuevo archivo de experimento 1
fprintf('\nDame archivo de datos del escalon %d (experimento1) nuevo (carpeta Path Matlab)',i);
[FileName Path]=uigetfile({'*.txt'},'Abrir hoja de datos');
if isequal(FileName,0) % problemas
else
FileName=substr(FileName,0,-4);
Output_exp1=FileName(:,2); Input_exp1=FileName(:,4);
end
%Quiero nuevo archivo de experimento 2
fprintf('Dame un archivo de datos del escalon %d (validación) nuevo (carpeta Path Matlab)',i);
[FileName Path]=uigetfile({'*.txt'},'Abrir hoja de datos');
if isequal(FileName,0) % problemas
else
FileName=substr(FileName,0,-4);
Output_exp2=FileName(:,2); Input_exp2=FileName(:,4);
end
end;
%Estado final de parametros del proceso ( Tp1f, Tzf, Kf, FITf , FITmax, FITmin)
Tp1f=Tp1/5;
Tzf=Tz/5;
Kf=K/5;
FITf=SumaFIT/5;
No suelo postear por aquí y no sé cómo se mete lo del código. (edit: vale, ya lo descubrí xD)
Saludos, espero haber sido lo suficientemente claro xD.
EDIT última hora:
Probando, ahora me sale esto, más intriga, MV-programadores, os invoco! xD:
Linea de comandos de Matlab:
[FileName Path]=uigetfile({'*.txt'},'Abrir hoja de datos');
if isequal(FileName,0) % problemas
else
cad=substr(FileName,0,-4);
Output_exp1=cad(:,2); Input_exp1=cad(:,4);
end
Output_exp1
Output_exp1 =
a
Cómo coño es posible que devuelva "a" WTF? debería devolver el nombre del archivo, que se llama "datos7p25.txt", o sea "datos7p25".
Por si no queda claro, "datos7p25.txt" es un archivo con muuuchas filas y 4 columnas, de las cuales solo me interesan 2.