SoloCodigo

Programación Específica => Matlab => Mensaje iniciado por: AdrianHdez en Viernes 25 de Mayo de 2007, 03:35

Título: Entrada De Datos Por Visual De Matlab
Publicado por: AdrianHdez en Viernes 25 de Mayo de 2007, 03:35
Necesito urgente que me expliquen cómo puedo entrar por un edit box u otro control de Matlab una matriz, para luego hacer operaciones con ella. Ya he probado con la función str2num pero no funciona.

Saludos..
Título: Re: Entrada De Datos Por Visual De Matlab
Publicado por: kaidok en Domingo 27 de Mayo de 2007, 19:15
¿Puedes poner el código por aquí?

Haciendo un str2num a cada elemento individual debería servir la verdad, a mí más o menos así me ha funcionado.
Título: Re: Entrada De Datos Por Visual De Matlab
Publicado por: Geo en Lunes 28 de Mayo de 2007, 02:55
Mmm, ¿cómo lo estás intentando?
Podrías, por ejemplo, colocar todos los números separados por un espacio (o algún caracter que tú definas) en un editbox, luego obtenerlos desde la propiedad 'String', lo que obtienes es una celda, úsala como string y sepárala con strtok, así puedes obtener cada uno de los elementos separados por espacios (u otro caracter). Claro, cada elemento será un string por lo que tienes que usar str2num para pasarlo a la matriz (si es numérica).

Suerte.
Título: Re: Entrada De Datos Por Visual De Matlab
Publicado por: AdrianHdez en Lunes 28 de Mayo de 2007, 02:57
Mira esto es más o menos un ejemplo:

A =str2num(get(handles.edit26,'String'));
B =str2num(get(handles.edit27,'String'));
C = A*B
set(handles.edit28, 'String',num2str©);


y me da este error, he probado entrando por el edit de muchas formas, por ejemplo [1 2 3], [1, 2, 3], '1 2 3' pero no pasa nada.



??? Error using ==> str2num
Requires string or character array input.

Error in ==> C:\Documents and Settings\docencia\Desktop\aaa\example.m (pushbutton1_Callback)
On line 162  ==> A =str2num(get(handles.edit26,'String'));

Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
On line 66  ==>         feval(varargin{:});

Error in ==> C:\Documents and Settings\docencia\Desktop\aaa\example.m
On line 42  ==>     gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback.
Título: Re: Entrada De Datos Por Visual De Matlab
Publicado por: kaidok en Lunes 28 de Mayo de 2007, 10:15
Es que un str2num puede convertir un sólo número no una matriz entera, lo mejor es que pruebes lo que ha dicho Geo.
Título: Re: Entrada De Datos Por Visual De Matlab
Publicado por: AdrianHdez en Lunes 28 de Mayo de 2007, 15:53
Si revisas bien la ayuda de Matlab comprobarás que es así, en la consola entra una matriz de string y luego str2num para que veas lo que ocurre. Los comandos que te permiten el trabajo con numeros son str2double y str2int, etc.

Saludos...
Título: Re: Entrada De Datos Por Visual De Matlab
Publicado por: Geo en Martes 29 de Mayo de 2007, 00:15
No puedes hacer esto:

Cita de: "AdrianHdez"
A =str2num(get(handles.edit26,'String'));
B =str2num(get(handles.edit27,'String'));
C = A*B
set(handles.edit28, 'String',num2str©);
por esto (atención a los mensajes de error, normalmente ahí ves el problema):

Cita de: "AdrianHdez"
??? Error using ==> str2num
Requires string or character array input.

Antes lo había apuntado:
Cita de: "Geo"
luego obtenerlos desde la propiedad 'String', lo que obtienes es una celda, úsala como string y sepárala con strtok, así puedes obtener cada uno de los elementos separados por espacios (u otro caracter).

Lo que intentas hacer, lo puedes conseguir así:
Código: Text
  1.  
  2. % Obtiene el contenido del cuadro de texto, el resultado es una celda (cell)
  3. aCelda = get( handles.txtNumeroA, 'String' );
  4. % Es una celda de string con un solo elemento, obtenemos su contenido.
  5. aString = aCelda{ 1, 1 };
  6. % Ahora si podemos convertirlo a número con str2num
  7. aNum = str2num( aString );
  8.  
  9. % Lo mismo para el segundo número
  10. bCelda = get( handles.txtNumeroB, 'String' );
  11. bNum = str2num( bCelda{ 1, 1} );
  12.  
  13. resultado = aNum * bNum;
  14. put( handles.txtResultado, 'String', num2str( resultado );
  15.  
  16.  
Como te imaginarás, txtNumeroA, txtNumeroB y txtResultado son cuadros de texto :).

Creo que ya no necesitas lo de obtener una matriz de un sólo cuadro de texto (para eso si usarías strtok), pero por si acaso, el código a continuación haría lo mismo que el anterior pero leyendo los dos números a multiplicar del mismo cuadro de texto separados por un espacio.
Código: Text
  1.  
  2. textoCelda = get( handles.txtMatriz, 'String' )
  3. textoString = textoCelda{ 1,1 }
  4.  
  5. [ s, textoString ] = strtok( textoString )
  6. a = str2num( s );
  7. [ s, textoString ] = strtok( textoString )
  8. b = str2num( s );
  9.  
  10. set( handles.txtResultado, 'String', num2str( a * b ) );
  11.  
  12.  

Suerte.