La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Unidad V Funciones, subrutinas y Procedimientos Dr. J. D. Pope S.

Presentaciones similares


Presentación del tema: "Unidad V Funciones, subrutinas y Procedimientos Dr. J. D. Pope S."— Transcripción de la presentación:

1 Unidad V Funciones, subrutinas y Procedimientos Dr. J. D. Pope S.

2 Programación Modular en Matlab Un archivo que contiene un programa codificado en el lenguaje Matlab se le denomina M-files: Estos archivos pueden ser de dos tipos: function.- Son procedimientos semejantes a los usados en Fortran que aceptan argumentos y producen salidas. Scripts.- Son programas que ejecutan una serie de instrucciones codificadas en Matlab.

3 Script M-files No acepta argumentos de entrada o proporciona argumentos de salida Opera con datos proporcionados en el workspace Son muy útiles en el desarrollo de largas series de pasos que se desarrollan muchas veces. function M-files Puede aceptar argumentos de entrada o proporcionar argumentos de salida Las variables internas son localizadas por el programa en forma automática Son muy útiles para implementar aplicaciones especificas en Matlab.

4 Archivos Script Para problemas simples, introducir las preguntas en la línea de orden matlab es rápido y eficiente. Sin embargo, cuando aumenta el número de órdenes o, en el caso de que se desee cambiar el valor de una o más variables y reevaluar una serie de ordenes, escribir en línea de orden de Matlab se hace tedioso y poco practico. Matlab proporciona una solución lógica a este problema. Permite colocar órdenes de matlab en un simple archivo de texto y a continuación decirle a Matlab que lo abra y evalúe las ordenes exactamente como si hubiesen sido escritas desde la línea de orden de Matlab. Estos archivos se llaman Script o archivos -M. El termino Script simboliza el hecho de que matlab simplemente sigue el Script(guión) encontrado en el archivo. El termino archivo-M reconoce el hecho de que el nombre de los archivos Script deben finalizar con la extensión ‘m’.

5 Creación de un archivo-M 1.- Escoja New del menú File y seleccione M-file 2.- Introduzca las ordenes Matlab 3.- Escoja Save as del menú File del editor de textos y ponga un nombre al archivo. 4.- Para correr el archivo teclear Run nombre del archivo 5.- O bien seleccione Run Script del menú File y seleccione el archivo a correr en la ventana que se genera

6 Forma general de un programa function Línea de definición de la función function f = fact (n) Línea H1 (ayuda 1) % fact es el Factorial % Regresa el factorial de N usualmente denotado por N!. Texto de Ayuda % Poner simplemente que; Fact(N) es el prod(1:N). Línea en blanco para separar los comentarios del cuerpo de la función Cuerpo de la función f = prod (1:n);

7 Esta función tiene algunas elementos que son comunes a todas las funciones en Matlab. - Una línea de definición de la función. Esta línea define el nombre de la función, y el numero y orden de argumentos de entrada y salida. - Una línea H1. H1 se entiende para la línea “help 1”. Matlab despliega la línea H1 para una función cuando se usa lookfor o buscas ayuda en un directorio completo. - Texto Ayuda. MATLAB despliega el texto de ayuda junto con la línea H1 cuando se busca ayuda sobre una función especifica. - El cuerpo de la función. Esta parte de la función contiene códigos de que aseguran los cómputos actuales y asigna valores a cualquier argumento de salida.

8 Funciones Las funciones son Archivos-M que aceptan argumentos de entrada y proporcionan argumentos de salida. Estos archivos operan sobre variables en su propio espacio de trabajo, separadas del espacio que se accede mediante el prompt de comandos Matlab.

9 Ejemplo de una función simple La función average es un simple Archivo-M, el cual calcula la media de los elementos en un vector: function y = average(x) %media:calcula el promedio aritmético de los elementos del vector X %************************************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingeniería Química y Bioquímica * %*Este programa evalua la media de los elementos del vector x, * %*proporcionar entradas que no correspondan a un vector produce un error * %* Realizado por: * %* José Domingo Pope Solis * %************************************************************************** [m,n] = size(x) if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) error('los datos de entrada deben ser un vector') end y = sum(x)/length(x); % calculo de la media Trate de entender que hace cada comando, y programe estos comandos en un archivo que tendrá el nombre average.m. La función average acepta un simple argumento de entrada y regresa un simple argumentos de salida. Intente correr el programa para distintos vectores

10 Forma general de una función en Matlab Una función Archivo-M consiste de: - Una línea de la definición de la función. - Una línea H1 - Un texto de ayuda para comentarios sobre la función - El cuerpo de la función - Comentarios dentro de la función

11 Línea de definición de una función La línea de definición de una función informa a Matlab que el Archivo contiene una función, y específica la secuencia en que se llaman los argumentos de la función. La línea de la definición para la average de la función es: function y = average(x) argumento de entrada nombre de la función argumento de salida palabra clave

12 Si la función tiene mas de un argumento de salida, se encierra el argumento de salida entre corchetes. Los argumentos de entrada si es que los hay, son encerrados entre paréntesis. Use comas para separar los argumentos de entrada y de salida múltiples. function [arg_s1,...,arg_sN]=nombre_fun(arg_e1,...,arg_eM) Aquí esta un ejemplo: function [x,y,z] = esfera(theta,phi,rho) Si no hay salida, dejar en blanco function printresults(x) o usar corchetes vacíos function [] = printresults(x) Las variables que pasan a la función no necesitan tener el mismo nombre que estas en la línea de la definición de la función.

13 Línea H1 A la línea H1 se le llama así, ya que es el primer texto de ayuda en la función y se ubica después de la primera línea de definición de la función. Ya que es un comentario, la línea H1 se inicia con el símbolo de porcentaje %. para la función average, la línea H1 es %average:calcula el promedio aritmético de los elementos del vector X Esta es la primer línea que aparece cuando desde el workspace solicitas ayuda acerca de la función.Además, el comando loockfor busca y despliega solo la línea H1. Ya que esta línea provee un importante resumen de acerca de la función, es importante escribirla lo mas descriptivo posible.

14 Texto de ayuda (Help Text) Puedes crear líneas de ayuda adicionales para tus Archivos-M escribiendo un texto de una o mas líneas de comentario, inmediatamente después de la línea H1. El texto de ayuda para la función average es: %************************************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingeniería Química y Bioquímica * %* Este programa evalúa la media de los elementos del vector x, * %* proporcionar entradas que no correspondan a un vector produce un error * %* Realizado por: * %* José Domingo Pope Solis * %************************************************************************* Cuando usted teclea en el workspace Help “nombre de función”, MATLAB despliega las líneas de comentario que aparecen entre la línea de definición de la función y la primer línea ejecutable o en blanco. El sistema de ayuda ignora cualquier línea de comentario que aparezca después de este bloque de ayuda

15 Cuerpo de la funcion El cuerpo de la función contiene todos los códigos que aseguran los cálculos y asignan valores a los argumentos de salida. Las declaraciones en el cuerpo de la función pueden consistir de llamadas de funciones, estructuras de programacion; Tales como controles de flujo e interactivas, input/output, cálculos, asignaciones, comentarios, y líneas en blanco. [m,n] = size(x) if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) error(’Los datos de entrada deben ser un vector') end y = sum(x)/length(x); % calculo de la media

16 Comentarios Como se menciono antes, las líneas de comentarios se escriben con un símbolo de porcentaje (%) al inicio de la línea. Las líneas de comentarios pueden aparecer en cualquier parte un archivo, y se pueden añadir el final de una línea de código. Por ejemplo, y = sum(x)/length(x); % calculo de la media La primera línea de comentario inmediatamente despues de línea de definición de la función es considerada la línea H1 de la función. La línea H1 y las líneas de comentarios inmediatamente después de esta constituyen las información basica del archivo. Para finalizar las líneas de comentarios relacionadas con textos de ayuda se puede insertar líneas en blanco para indicar el fin de esta parte del programa en un archivo-M.

17 Nombres de funciones (function names) Los nombres de las funciones Matlab tienen las mismas reglas que los nombres de variables. Matlab utiliza los primeros 31 caracteres de para dar nombres. Los nombres de las funciones tienen que empezar con una letra; los demás caracteres pueden ser combinaciones de letras, números, y subrayados. Algunos sistemas operativos pueden restringir los nombres de la función a longitudes más cortas. El nombre de una función Matlab consiste en el nombre de la función con la extensión ‘.m’. Por ejemplo: average.m Si el nombre del archivo y el nombre de la función en la línea de definición son diferentes, el nombre del archivo prevalece y el nombre interior se ignora. Así que, es muy recomendable que use el mismo nombre para ambos.

18 Como trabajan las funciones Se puede llamar una función guardada en un archivo-M.desde un comando en el workspace o dentro de una línea en otro archivo-M. Debe asegurarse que se incluyan todos los argumentos necesarios, especificando los argumentos de entrada en paréntesis y argumentos de salida en corchetes. Solucion de función cuando es le llamada Cuando Matlab descubre un nuevo nombre de una función, esta se resuelve siguiendo los siguientes pasos: 1.Revisar si el nombre es una variable. 2.Revisar si el nombre es una subfunción, una función Matlab que reside en el mismo Archibvo-M que la función llamada. Las Subfunciones serán vistas mas delante 3.Revisar si el nombre es una función privada, una función Matlab que reside en un directorio privado, un directorio accesible solo para los Archivos- M en el directorio inmediatamente arriba de este. 4.Revisar sí el nombre de la función en el camino buscador de Matlab. Matlab usa el primer archivo que encuentra con el nombre especificado. Si se duplica el nombre de la función, Matlab ejecuta la primera función encontrada usando las reglas arriba expuestas.

19 Que pasa cuando se llama a una funcion Cuando se llama a una función de Archivo.M de o dentro de otro Archivo-M, de comando. Matlab cambia la función a un pseucodigo y lo almacena en memoria. Este prevención de Matlab es para evitar reescribir una función cada vez que se tenga que hacer uso de ellas durante la sesión. El Seudocodigo permanece en memoria hasta que sea borrado usando el comando clear, o hasta que sea quitado de Matlab. Las variantes del comando clear que se puede usar para borrar las funciones de la memoria incluyen: Clear ‘nombre de la función’ Remueve la función especifica del área de trabajo Clear functions Remueve todas la M-functions compiladas. Clear all Remueve todas las variables y funciones.

20 Transformación de coordenadas polares a rectangulares Análisis Entrada: Radio y ángulo Salida: X, Y La transformación se obtiene a partir de un análisis geométrico x y R  Y = R · Seno(  ) X = R · Coseno(  )

21 function polar(R,T) %convertir: coordenadas polares a coordenadas rectangulares %******************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingenierias Química y Bioquímica * %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %******************************************************** Tcoord = 3.1416*T/180.0; disp('Coordenadas rectangulares ') X = R*cos (Tcoord) Y = R*sin (Tcoord) % fin Programa Polar a rectangular

22 Revisando el numero de argumentos de la funcion Las funciones nargin y nargout, permiten determinar cuantos argumentos de entrada y de salida existen en una función. Se puedes entonces usar estatutos condicionales para asegurar diferentes tareas dependiendo del numero de argumentos function c = testarg1(a,b) if (nargin == 1) c = a.^2; elseif (nargin == 2) c= a+b; end Dando un simple argumento de entrada, esta función eleva al cuadrado el valor de entrada, dando dos entradas, esta las suma.

23 Calcular la hipotenusa de un triángulo rectángulo con el teorema de Pitagoras Análisis: Entrada: x,y Salida: Hipotenusa El teorema de Pitagoras es: a 2 + b 2 = c 2 Donde c = hipotenusa function hipotenusa = hipo(x,y) % Evalua: La hipotenusa de un triangulo rectangulo %************************************************** %* Instituto Tecnológico de Durango * %*Departamento de Ingenierias Química y Bioquímica* %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %************************************************** disp(‘hipotenusa de un triangulo rectangulo ') if nargin < 1 x = input( ' Introducir x '); y = input( ' Introducir y '); end hipotenusa = sqrt(x^2 + y^2); disp('hipotenusa = ') disp(hipotenusa) c b a Triángulo rectángulo

24 a = x 0 x1x1 b= x n x2x2 x3x3 x4x4 x n-3 x n-2 x n-1 y=f(x) y x Integración Numérica por Regla Trapezoidal Un método para aproximar la integral consiste en dividir el intervalo [a,b] en n subintervalos de longitud  x = (b-a) / n usando los puntos x 1, x 2, x 3,.........., x n-1. Calculando el área de cada subintervalo suponiendo que es un trapezoide, y sumando todas las áreas para calcular el valor de la integral.

25 Seudocodigo Leer a,b, y n  x  (b-a) / n x  a Sum  0 Desde Indice = Inicio, hasta, fin, Incrementando, uno x  x +  x y  f(x) Sum  Sum + y Fin desde Sum   x ·[( f(a)+ f(x) ) / 2.+ Sum] Imprimir n y sum.

26 function area=trapecios(a,b,m) % Regla Trapezoidal: Calcula la integral de un función. %****************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingenierias Química y Bioquímica * %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %****************************************************** if nargin < 1 a=input('Dame el extremo izquierdo del intervalo '); b=input('Dame el extremo derecho del intervalo '); end if nargin < 3 m=input('Dame el número de subintervalos '); end h=(b-a)/m; x=a:h:b; sum=0; for i=2:m sum=sum+f(x(i)); end Area = (h/2)*(f(a)+f(b)+2*sum); function y=f(x) y=x^2-1;

27 function area=trapecios(a,b,m) % Práctica 7.1: Regla de los trapecios. global fname fname=input('Dame la función f(x) entre comillas '); if nargin < 1 a=input('Dame el extremo izquierdo del intervalo '); b=input('Dame el extremo derecho del intervalo '); end if nargin < 3 m=input('Dame el número de subintervalos '); end h=(b-a)/m; x=a:h:b; sum=0; for i=2:m sum=sum+f(x(i)); end area=(h/2)*(f(a)+f(b)+2*sum); function y=f(u) global fname % Con este "truco" se puede pedir la función por % pantalla como "string" y, después, evaluarla como si fuera % una función matemática. x=u; y=eval(fname);

28 Como pasa en Matlab con los argumento de una funcion Desde la perspectiva del programador, MATLAB parece pasar todos los argumentos de la función por un valor, Actualmente, como sea, MATLAB pasa los valores solo aquellos argumentos que una función modifica. Si una función no altera ningún argumento pero simplemente usa esto en un calculo, MATLAB pasa los argumentos por referencias para optimizar el uso de memoria.

29 Funcion workspace Cada función de Archivo-M tiene un área de memoria, separada de la base de trabajo de Matlab, en la cual esta opera. Esta área es llamada espacio de trabajo de la función, con cada función teniendo su propio espacio de contexto. Usando MATLAB, las únicas variables que puedes accesar son aquellas en el contexto de llamada, siendo esta la base de espacio de trabajo o aquella de otra función. Las variables que se pasan a una función deben de estar en el contexto de llamada, y la función regresa sus argumentos de salida a el espacio de contexto o de llamada. Se puede, definir variables como variables globales explícitas, siguiendo mas de un espacio de contexto para accesorios.

30 Varibles locales y globales Las mismas reglas que se aplican en las líneas de comando en las variables de Matlab, también aplica para las variables en los M- files: -No se necesita declarar las variables. Antes de asignar una variable a otra. Sin embargo, se debe estar seguro que esa variable tenga un valor asignado. -Cualquier operación que asigne un valor a una variable crea la variable si es necesario, o sobrescribe el valor actual si este existe. -Los nombres de variables Matlab consisten de una letra seguida de cualquier numero de letras, dígitos, y subrayado. Matlab distingue entre caracteres mayúsculas y minúsculas, así que A y a no son las mismas variables. -Matlab usa solo los primeros 30 caracteres para dar nombres a las variables.

31 Ordinariamente, cada función en Matlab, esta definida por un archivo-M, y tiene sus propias variables locales, las cuales están separadas de otras funciones, y de estas del workspace de entrada. Sin embargo, si varias funciones, y posiblemente el workspace, declaran un nombre particular de una variable como global, entonces ellos toman una copia de esa sola variable. En cualquier función, una variable es valida para todas las funciones declarándola como global. -Declara la variable como global en todas las funciones que requieras accesarla. Para habilitar el espacio de trabajo o para accesar una variable global, también declararla como global desde la línea de comando. -En cada función, muestra el comando global antes de la primera ocurrencia del nombre de la variable. El limite de los M.file es recomendado.

32 La Programación modular Uno de los métodos mas eficaces para resolver un problema complejo es dividir el problema en subproblemas, y a continuación resolver los problemas mas pequeños. Estos subproblemas pueden dividirse a su vez en otros subproblemas mas pequeños, repitiendo sucesivamente estas divisiones, hasta llegar a subproblemas fáciles de solucionar. Este método se denomina refinamiento sucesivo ( “Stepwise refinament”), diseño descendente (“Topdown”) o divide y vencerás (Divide and Conquer”). El refinamiento sucesivo es el proceso de romper un problema en problemas mas pequeños que pueden desarrollarse independientemente entre si. El problema principal se resuelve con el correspondiente programa principal y los subproblemas se resuelven con subprogramas conocidos como Subrutinas, funciones y procedimientos.

33 Subprogramas Un subprograma es un programa auxiliar independiente que especificara (codificación de un modulo o subproblema) como implementar la solución de un problema particular. Los subprogramas se dividen en tres categorías: Subrutinas Procedimientos Funciones En Matlab estas tres categorías de engloban en los programas function. Los subprogramas para ser ejecutados, deben ser invocados desde el programa principal. El símbolo de los subprogramas en los diagramas de flujo es :

34 function nombre [declaración de proporciones no ejecutables] [declaración de proporciones ejecutables] Un procedimiento es un subprograma que realiza las instrucciones necesarias para solucionar un subproblema dado, es decir ejecuta una tarea especifica. Forma general para uso de subprogramas internos en un programa principal Los procedimientos son invocados o llamados por su nombre. Las variables, expresiones o constantes que aparecen en la sentencia function se denominan parámetros formales o ficticios, mientras que la lista de argumentos que aparecen en la llamada al procedimiento se denominan parámetros actuales o argumentos.

35 Formato general para procedimientos. function Nombre (lista de parámetros formales o ficticios) Declaración de sentencias no ejecutables Declaración de sentencias ejecutables % fin del procedimiento Para llamar el procedimiento desde el programa principal se usa: Nombre (lista de parámetros actuales o reales)

36 Paso de parámetros Cada vez que se llama a un procedimiento se establece una correspondencia entre los parámetros actuales de cada llamada en particular y los parámetros ficticios del procedimiento. Cuando se llama al procedimiento, los valores asignados a los respectivos parámetros se pasa a sus respectivos valores del procedimiento. Cuando el procedimiento concluye regresa valores al programa principal, en este intercambio es posible que los parámetros modifiquen su valor, ya que la localización en la memoria para los parámetros ficticios y reales es la misma. Por lo que para su posterior utilización deberá tomar en cuenta esta posibilidad.

37 La varianza de una muestra x 1, x 2,......,x n se define por la fórmula:

38 function y = varianza(x) % Calcula la varianza de un conjunto de datos mu=sum(x)/length(x); tot=sqsum1(x,mu); y=tot/(length(x)-1); function tot=sqsum1(x,mu) % subprograma function tot=0; for i=1:length(x) tot=tot+(x(i)-mu).^2; end

39 function y = variance(x) % Calcula la varianza de un conjunto de datos mu=sum(x)/length(x); tot=sqsum(x,mu); y=tot/(length(x)-1); Un archivo aparte function tot=sqsum(x,mu) % subrutina de apoyo a programa function % variance tot=0; for i=1:length(x) tot=tot+(x(i)-mu).^2; end

40 Inicio n, a Media, Std, Vmin, Vmax Fin Media y Desviación estándar Valor máximo Valor mínimo Diagrama de flujo para encontrar: La media, la desviación estándar, el valor mínimo y máximo de un conjunto de datos, usando la programación modular.

41 %***************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingenierías Química y Bioquímica * %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %***************************************************** % Evalúa: Estadística de un conjunto de datos a=[2.1,3.2,5.2,4.2,5.3,3.8]; n = length(a); [media,d_std]= mean_std(n,a) [real_max,imax] = rmax(n,a) [real_min,imin] = rmin(n,a) % Fin Programa Estadística

42 function [media,d_std] = mean_std(n,a); %Calcula: Media y la Desviación estándar %***************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingenierias Química y Bioquímica * %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %***************************************************** %Inicialización de sumas en cero sum_x = 0;sum_x2= 0;sum_x3= 0; for i = 1:n sum_x = sum_x + a(i); sum_x2= sum_x2 + a(i)^2; end %Calcular la media y la desviación estándar media = sum_x / n; for i = 1:n sum_x3= sum_x3 + (a(i)-media)^2; end d_std = sqrt(sum_x3/(n-1));

43 function [real_max,imax]=rmax(n,a); %Encuentra:El elemento de mayor valor y su localización %***************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingenierias Química y Bioquímica * %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %***************************************************** %Asignación del máximo valor al primer elemento del arreglo real_max = a(1); imax = 1; % Encontrar el máximo valor for i = 2:n if (a(i) > real_max); real_max = a(i); imax = i; end

44 function [real_min,imin]= rmin(n,a); % Encuentra:El elemento de menor valor y su localización %***************************************************** %* Instituto Tecnológico de Durango * %* Departamento de Ingenierías Química y Bioquímica * %* Programación usando Matlab * %* Instructor: Dr. José Domingo Pope Solis * %***************************************************** %Asignación del máximo valor al primer elemento del arreglo real_min = a(1); imin = 1; % Encontrar el máximo valor for i=2:n if (a(i) < real_min) real_min = a(i); imin = i; end


Descargar ppt "Unidad V Funciones, subrutinas y Procedimientos Dr. J. D. Pope S."

Presentaciones similares


Anuncios Google