Matlab - oloranube

 
Vista:

oloranube

Publicado por Victor (1 intervención) el 02/06/2005 10:49:02
Hola amigo

A ver si me puedes ayudar, tengo un problema con un editbox, Necesito leer de él funciones, como por ejemplo sin o cos, para después rellenar una matriz ya hecha.

Si conoces algún comando que lea las funciones de un edit te lo agradecería mucho.

Para que te hagas una idea, quiero que funciones como el command window.

Gracias y un saludo.

Víctor Pizarro Sánchez
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

RE:oloranube

Publicado por oloranube (10 intervenciones) el 02/06/2005 11:02:42
Para obtener el nombre de la función del edit necesitas obtener el valor de la propiedad String del mismo. Esto es:

nombrefuncion=get(handles.miEdit, 'String');

Luego para evaluar un string como fuera un comando utiliza la función eval.
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

RE:oloranube

Publicado por Victor (20 intervenciones) el 02/06/2005 11:15:23

De acuerdo, entonces nos quedaría de la siguiente manera, para aclararme y solucionar ya mi proyecto.

Introduzco un valor en el edit: sin

Luego lo guardo en una variable con get(...)

Y a continuación utilizo eval, pero la cuestión es que eval nunca lo he utilizado y la ayuda no me explica muy bien como hacerlo.

Si la variable se llama nombrefunción, que hacemos :

Por ejemplo // valor = eval (nombrefunción) ??

Además yo luego lo quiero meter en un for, imagino que debería definir valor con la longitud del for previamente, no?

te explico, teng una matriz de dos columnas por N filas, siendo N el espacio que divide a 360º, por ejemplo si N = 90, nos queda 0,90, 180, 270. Ok entonces ahora quiero rellenar con la función seno, la segunda parte de la matriz. Me puedes argumentar como lo harías??

Muchas gracias, la verdad es que eres una de las personas que he visto que más sabes de ésto, enhorabuena.

Un saludo,

Víctor Pizarro Sánchez
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

RE:oloranube

Publicado por oloranube (10 intervenciones) el 02/06/2005 12:10:43
A ver si aclaramos un poco las ideas.

1) ¿Como construyo la matriz?

Esto lo puedes probar desde línea de comandos.

Partimos de que hemos asignado un valor a n y ninguno a la matriz m. Para la primera columna:

m( : ,1)= 0:360/n:360;

Para la segunda columna:

m(:,2) = sin( 0:360/n:360 );

Si bien, aunque no sea trascendente, para este caso creo que sería más diáfano utilizar una matriz de 2xn en vez de nx2. Así lo haríamos en una línea:

m=[ 0:360/n:360 ; sin( 0:360/n:360 ) ];

También se puede hacer lo anterior y luego transponer la matriz:

m = m' ;

... bueno me estoy llendo un poco por la ramas en algo que no es de importancia.

2) ¿Cómo funciona eval?

La verdad es que yo tampoco he utilizado esta función nunca. Parece ser que su funcionamiento más primario es:

resultado = eval( comando );

donde comando es una cadena que contiene un comando de matlab, como si lo introdujeras en la línea de comandos.

Para probar como funciona sería bueno que experimentaras desde la línea de comandos. Por ejemplo:

eval('sin( 0)' )

¿Qué devuelve?

3) Unamos conceptos

Tengo ya el nombre de la función en la variable nombrefunción. Ahora lo que tengo que hacer es construir el comando completo.

comando = [ '[ 0:360/n:360 ;' nombrefuncion '( 0:360/n:360 )]' ]

y ejecutarlo con eval

m = eval(comando)

4) Apuntes Adicionales

¿Tienes que aceptar cualquier función o sólo unas pocas como seno, coseno, etc.? Porque si es así sería mejor que utilizaras un ListBox o PopUpMenu en vez del editbox, así te aseguras que el usuario no introduzca funciones que no existen.

Me acabo de dar cuenta que la función seno (sin) funciona con radianes. Así que tendrás que cambiar una cosa:

sin(0:2*pi/n:2*pi)

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