Matlab - Matlab Reemplazo de inline

   
Vista:

Matlab Reemplazo de inline

Publicado por Ester de la Torre esterdelat@gmail.com (5 intervenciones) el 15/10/2015 13:35:16
Hola a todos! deseo saber cuál es la forma de "reemplazar" inline por funciones anónimas y que no se pierda la esencia del programa. La idea es que se pueda ejecutar ingresando funciones f distintas y posteriormente puedan ser evaluadas. Mi función se llama prueba y ahora funciona según este código

1
2
3
4
5
6
7
8
function prueba
fprintf('\n')
f=input('Ingrese la expresión de la función f entre apóstrofes, \n f=');
f=inline(f);
disp('a será un valor a ingresar')
a=input('Ingrese el valor de a, \n a=');
e=f(a);
fprintf('e=%2.10f \n', e)

Gracias
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

Matlab Reemplazo de inline

Publicado por JOSE JEREMIAS CABALLERO (3432 intervenciones) el 15/10/2015 17:04:11
1
2
3
4
5
6
7
8
function prueba
fprintf('\n')
f=input('Ingrese la expresión de la función f(x)=','s');
f=inline(f);
disp('a será un valor a ingresar')
a=input('Ingrese el valor de a=');
e=f(a);
fprintf('e=%13.10f \n', e)
1
2
3
4
5
6
7
8
9
10
11
12
>> prueba
 
Ingrese la expresión de la función f(x)=x+sin(x)
a será un valor a ingresar
Ingrese el valor de a=7
e= 7.6569865987
>> prueba
 
Ingrese la expresión de la función f(x)=cos(x)+exp(x)
a será un valor a ingresar
Ingrese el valor de a=0
e= 2.0000000000



Saludos
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-3
Comentar
Imágen de perfil de Royeth

Matlab Reemplazo de inline

Publicado por Royeth jesus.royeth@gmail.com (742 intervenciones) el 15/10/2015 17:28:31
Para reemplazar Inline por funciones anónimas


1
2
3
4
5
6
7
8
function prueba
fprintf('\n')
f=input('Ingrese la expresión de la función f entre apóstrofes, \n f=');
f=str2func(strcat('@(a) ',f));
disp('a será un valor a ingresar')
a=input('Ingrese el valor de a, \n a=');
e=f(a);
fprintf('e=%2.10f \n', e)


Ejecución :

1
2
3
4
5
6
7
8
prueba
 
Ingrese la expresión de la función f entre apóstrofes,
 f='a+8'
a será un valor a ingresar
Ingrese el valor de a,
 a=5
e=13.0000000000


Saludos
https://www.facebook.com/royethmatlab/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar

Matlab Reemplazo de inline

Publicado por Ester de la Torre (5 intervenciones) el 16/10/2015 13:05:37
Sr Royeth

Gracias por su respuesta, la verdad no se me hubiera ocurrido. Ahora buscaré información sobre la forma del reemplazo para entender que es lo que se hace. Le comento que cambié @(a), por @(x) y sirve para evaluar la función en cualquier valor.

Saludos cordiales


Ester de la Torre
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
Imágen de perfil de Royeth

Matlab Reemplazo de inline

Publicado por Royeth jesus.royeth@gmail.com (742 intervenciones) el 16/10/2015 16:10:35
Efectivamente en la versión 2014 dice que inline será removido en futuras versiones y que se recomienda usar funciones anónimas , aquí te explico lo que hice :

una función anónima se declara de la siguiente forma

Y=@(x) x+1 quiere decir funcion=@(parámetros) expresión , otro ejemplo :
Z=@(x,y) x+y+5


entonces cuando al usuario se le pide la expresión él escribe por ejemplo x+1 pero esto es un texto porque está entre comilla sencilla , pero entonces hace falta el @(x) para que sea una función por lo tanto se usa strcat que sirve para concatenar dos textos , los une de tal manera que strcat('@(x) ',f) donde f es x+1 entonces esa unión te queda '@(x) x+1' luego lo que hay que hacer es que ese texto o string deje de ser texto y pase a ser función que es lo que hace el comando str2func quiere decir string to function , de texto a función y de esa manera ya tienes declarada tu función anónima en la cual puedes evaluar puntos

f(5),etc

un saludo
espero te sea de ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Matlab Reemplazo de inline

Publicado por Ester de la Torre (5 intervenciones) el 17/10/2015 00:15:42
Por su puesto que es de mucha ayuda.

Este problema apareció con Matlab2015 antes todo funcionaba de maravillas con inline!!
Yo hasta la parte de definir una función anónima llegaba pero no sabía de el resto. Y ni lerda ni perezosa luego de tu anterior respuesta me informé y supe lo que se hacía, pero con tu explicación me queda muchísimo más claro y así se lo puedo transmitir a mis alumnos.
Agradezco tu disposición para completar la respuesta anterior!!!

Saludos

Ester de la Torre
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

Matlab Reemplazo de inline

Publicado por Ester de la Torre (5 intervenciones) el 16/10/2015 12:54:48
Sr. Caballero:

Gracias por la respuesta, pero yo deseaba dejar de usar inline, ya que en Matlab2015 cualquier función en la que tengo inline me da error. De todos modos voy a probar con su sugerencia, quizás sea su respuesta la forma correcta de usar inline.

Saludos Cordiales

Ester de la Torre
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

Matlab Reemplazo de inline

Publicado por María vega (1 intervención) el 21/10/2015 20:43:54
Buenas Royeth espero te encuentres bien , veo que tienes una muy buena pedagogía para explicar y me gustaría que me ayudaras diciéndome que bases necesito en matlab para afrontar este gran problema :

En una industria manufacturera, disponen de una máquina que realiza un proceso en tres fases, cada una de ellas se desarrolla en un tiempo calculado por un instrumento anexo que devuelve tres números binario cada uno de 13 bits, dichos números representan el intervalo de tiempo de duración de cada fase (el tiempo mínimo de cada fase no era inferior a 5 segundos). Adicionalmente la máquina dispone de un conjunto de leds dispuestos en forma de matriz de 10 por 5, a partir de ellos se identificaba la fase y a través de un código visual se daba una aproximación del tiempo que restaba para finalizar el proceso (a través de juego de luces que se actualizaba cada segundo). En este momento el código de programación que realizaba dicho proceso sufrió un daño irreparable, por tanto es necesario generar un nuevo código a nivel de prototipo, que responda a estas condiciones, esto para que sea estudiado y viabilizar su aplicación… Los datos de entrada y salida se deben dar a partir de los recursos del PC, y usando Matlab como lenguaje de programación.


quedare atente a tu respuesta , gracias por anticipado
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
Imágen de perfil de Royeth

Matlab Reemplazo de inline

Publicado por Royeth jesus.royeth@gmail.com (742 intervenciones) el 21/10/2015 21:00:54
bueno necesitas para esto lo que son el manejo de datos y conversión de datos, manipulación de matrices , bucles , y algunas funciones de catenación y tiempo por supuesto , bueno en el caso de que el prototipo quiera ser más real debes saber tratamiento de imágenes pues el recurso a usar puede ser la cámara del pc y esta debe terminar generando una matriz binaria mediante el tratamiento de imágenes
pero como también debes ver si es viable hay que hacer un anális de rendimiento , es un problema donde hay que aplicar varias cosas de la ingeniería del software , incluso puedes someter tu algoritmo a alguna prueba (como pruebas de caja blanca, etc) con esto para la viabilidad


si tienes alguna duda puedes contactarme y con gusto puedo aclarártela

saludos
https://www.facebook.com/royethmatlab/
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