[MATLAB] Dónde está el fallo?

oZk4h

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.

oZk4h

Resumiendo: necesito saber-> cómo meter en una variable (Output_exp1 p.ej) la columna de un archivo de texto cuyo nombre me viene especificado por una string. El caso es que, poniendo el nombre de la variable que contiene la string al realizar la asignación en Output_exp1 no es suficiente. Debo estar haciendo alguna barbaridad con el tipo de datos string pero no la veo (no soy informático, ni programo habitualmente, al menos desde 1ero de carrera xd, debe ser por ello el lío que llevo).

oZk4h

nada, solucionado xD, opté por preguntar al profesor, lo primero que debí hacer xD.

Usuarios habituales

  • oZk4h