Vous êtes sur la page 1sur 7

4 Prctica.

Matlab

Pgina 1

PROGRAMACIN EN MATLAB

PRCTICA 04 FUNCIONES, BUCLES Y BIFURCACIONES


EJERCICIO 1. EJERCICIO 1.1 EJERCICIO 1.2 EJERCICIO 1.3 EJERCICIO 2. EJERCICIO 2.1 EJERCICIO 2.2 EJERCICIO 3. EJERCICIO 3.1
QUE OCUPA

CREACIN DE UNA FUNCIN_____________________________________1 FUNCIN QUE OBTIENE LAS RACES DE UN POLINOMIO DE SEGUNDO GRADO ______2 FUNCIN QUE SUMA DOS NMEROS ____________________________________2 CONVERSIN DE COORDENADAS POLARES A COORDENADAS CARTESIANAS ______3 BUCLES FOR_____________________________________________________3 SUMA DE LOS ELEMENTOS DE UN VECTOR ________________________________4 CLCULO DEL FACTORIAL DE UN NMERO MEDIANTE UN BUCLE FOR __________4 BIFURCACIONES IF ______________________________________________5 OBTENCIN DEL MXIMO VALOR DE LOS ELEMENTOS DE UN VECTOR Y LA POSICIN 5 FUNCIN PARA DETERMINAR SI DOS NMEROS SON DIVISIBLES ENTRE SI ________5 FUNCIN QUE DEVUELVE EL RESTO DE UNA DIVISIN ENTERA ________________6 BUCLES WHILE __________________________________________________6 CLCULO DEL FACTORIAL DE UN NMERO MEDIANTE UN BUCLE WHILE _______6 TRABAJAR CON MATRICES ______________________________________7 SUMA DE MATRICES ________________________________________________7 MEJORA DEL EJERCICIO 5.1 ________________________________________7 TRASPUESTA DE UNA MATRIZ _________________________________________7

EJERCICIO 3.2 EJERCICIO 3.3 EJERCICIO 4. EJERCICIO 4.1 EJERCICIO 5. EJERCICIO 5.1 EJERCICIO 5.2 EJERCICIO 5.3

En primer lugar crea un directorio llamado Practica04 dentro de G:\Informatica1. En este directorio debers guardar todos los ficheros y todo el trabajo resultante de esta prctica. De esta forma te ser fcil encontrarlo ms adelante, si te hace falta. Despus arranca el programa MATLAB y coloca como directorio de trabajo o directorio activo el directorio creado previamente. Para ello basta con teclear en la ventana de comandos de MATLAB:
cd g:\Informatica1\Practica04

O bien hacerlo a travs de la ventana Current Directory. En ella podrs ver el contenido del directorio. Siempre que no se especifique algo en el enunciado, el cmo realizarlo se deja a la libre eleccin del alumno. Esto es extensible a todas las prcticas y exmenes que realicemos durante el curso. EJERCICIO 1. CREACIN DE UNA FUNCIN A estas alturas, usted ya ha utilizando funciones de Matlab. Por ejemplo, en la prctica 3 ha utilizado la sentencia inv(A), en donde se calculaba la inversa de A. Si observa detenidamente el proceso, se dar cuenta de que sucede algo as como cuando mete una moneda en una mquina de tabaco. Usted le da una cosa a la mquina (2 )1 y sta le devuelve otra cosa (un paquete de Fortuna con 19 cigarrillos). En el caso de
1

Esto era cierto hasta el 16 de Mayo de 2004. Escuela Superior de Ingenieros de San Sebastin Universidad de Navarra

Informtica 1 y Fundamentos de Computadores

Pgina 2

la funcin inv lo que usted aporta es una matriz y lo que la mquina le devuelve es la inversa de esa matriz. A lo que se aporta se le llama Argumentos de entrada y lo que devuelve se le llama Valores de retorno o Argumentos de salida. En el caso de la funcin inv el nmero de argumentos de entrada era de uno (la matriz de la que se quiere obtener su inversa), pero hay otras funciones que requieren ms de un argumento de entrada, como la funcin power(A,B) que lo que hace es elevar A a la potencia B (AB). Del mismo modo, la funcin inv aporta un nico valor de retorno (la inversa de la matriz) pero las hay que devuelven ms de un valor, como la funcin size(A), que tiene dos valores de retorno, como son el nmero de filas y el nmero de columnas de la matriz A. Conocer cules son los argumentos de entrada y de salida de una funcin es VITAL, ya que, en realidad, es lo nico importante que hay que saber de una funcin. Tanto es as que si escribe por ejemplo: >>help size, lo nico de lo que se habla es de cules son los argumentos de entrada y de salida. EJERCICIO 1.1 Funcin que obtiene las races de un polinomio de segundo grado Cree un nuevo subdirectorio que se llame Ejercicio0101 y site el directorio de trabajo de Matlab dentro de l. A continuacin vamos a realizar una funcin que calcule las races de un polinomio de segundo grado. Esta funcin necesitar 3 argumentos de entrada (los valores a, b y c del polinomio) y 2 de salida (las dos races del polinomio). Guarde las siguientes instrucciones en un archivo llamado FuncionRaicesEcuacion.m, y compruebe que funciona: function [x1,x2]=FuncionRaicesEcuacion(a,b,c) x1=(-b+(b^2-4*a*c)^.5)/(2*a) x2=(-b-(b^2-4*a*c)^.5)/(2*a) Pruebe la funcin programada para los siguientes casos: a=1; b=3; c=2; Resultado: 2 races reales distintas. a=1; b=2; c=1; Resultado: 2 races reales iguales. a=1; b=1; c=1; Resultado: 2 races imaginarias. Observe como, al tener ms de un argumento de salida, en el encabezado de la funcin se escriben los argumentos de salida entre corchetes. EJERCICIO 1.2 Funcin que suma dos nmeros Cree un nuevo subdirectorio que se llame Ejercicio0102 y site el directorio de trabajo de Matlab dentro de l. Desarrolle ahora una funcin que tenga como argumentos de entrada dos nmeros y como argumento de salida la suma de esos dos nmeros. Guarde el programa en un fichero llamado CalcularSuma.m. El encabezado de la funcin debe ser:

TECNUN

4 Prctica. Matlab

Pgina 3

function s= CalcularSuma (a,b) Observe que esta funcin tiene dos argumentos de entrada (a y b) y un argumento de salida (s). EJERCICIO 1.3 Conversin de coordenadas polares a coordenadas cartesianas Cree un nuevo subdirectorio que se llame Ejercicio0103 y site el directorio de trabajo de Matlab dentro de l. Elabore una funcin en Matlab que convierta las coordenadas polares (,) de un punto, en coordenadas cartesianas (x,y). El encabezado de la funcin debe ser: function [x,y]=DePolarACartesiana(r,t) Donde r es y t es . Nota: (x=cos(), y=sen()). SENTENCIAS DE CONTROL DE FLUJO. Un aspecto importante a tener en cuenta cuando se escribe un programa (no importa en qu lenguaje) lo constituyen las sentencias que permiten realizar saltos entre las diferentes sentencias del programa. Hay casos que lo que se desea es ejecutar un conjunto de sentencias slo cuando se cumple una cierta condicin. Esto se consigue mediante la sentencia if, que representa una BIFURCACIN. En una forma u otra, esta sentencia est presente en todos los lenguajes de programacin de alto nivel. En otras ocasiones lo que interesa es ejecutar repetidamente un conjunto de sentencias un nmero fijo de veces, para ello existe la sentencia for; se corresponde con un BUCLE. A veces se desea ejecutar repetidamente un conjunto de sentencias sin conocer el nmero de veces que se va a ejecutar, para ello existe la sentencia while, que es tambin un BUCLE. Las bifurcaciones y los bucles constituyen el ncleo de cualquier lenguaje de programacin y con esta prctica de MATLAB se nos presenta una magnfica oportunidad para aprender a utilizarlos. EJERCICIO 2. BUCLES FOR El formato de los bucles for en MATLAB es el siguiente:
for variable = inicio : paso : final sentencia 1 sentencia 2 sentencia n end

Una de las caractersticas principales de los bucles for, la constituye la variable del bucle (variable). Esta variable va tomando valores entre inicio y final de paso en paso. Cada vez que se ejecuta el bucle, variable toma un valor diferente. Al inicio del bucle, variable es igual a inicio. La segunda vez, variable es igual a inicio+paso, y as
Escuela Superior de Ingenieros de San Sebastin Universidad de Navarra

Informtica 1 y Fundamentos de Computadores

Pgina 4

sucesivamente, hasta que al final variable es igual a final. Si se omite el paso, MATLAB entiende que el paso es igual a uno. Es muy importante mantener unas ciertas cuestiones de estilo de programacin. Por eso, deben sangrarse o indentarse adecuadamente todas las sentencias que se ejecuten dentro del bucle, segn se ha hecho en el programa anterior. El editor de Matlab lo hace automticamente. EJERCICIO 2.1 Suma de los elementos de un vector Construya un nuevo subdirectorio que se llame Ejercicio0201 y site, como siempre, el directorio de trabajo de Matlab dentro. En este primer ejercicio se ver una sencilla aplicacin de los bucles for. El ejercicio consiste en crear una funcin de MATLAB llamada CalularSumaVector.m, que sume los elementos de un vector que se pasa por ventana, y un fichero ejercicio0201.m, que contenga el programa principal con la llamada a la funcin CalularSumaVector. El programa principal debe realizar las siguientes operaciones: 9 Borrar todas las variables mediante la funcin clear. 9 Generar un vector fila aleatorio (x) de dimensin 5 (ver la funcin rand) 9 Realizar la suma de los elementos con la nueva funcin CalularSumaVector y almacenar el resultado en la variable y1 (la llamada desde el programa principal es y1 = CalularSumaVector (x)) La funcin CalularSumaVector (fichero CalularSumaVector.m) debe ser la siguiente:
function s = CalularSumaVector (x) s = 0; n= length(x); for i=1:n s = s + x(i); end

Ahora utilice el debugger para ejecutar el programa instruccin a instruccin. La variable del bucle (i) es utilizada en este caso para acceder a los elementos del vector. Tiene por tanto un papel de ndice de acceso al vector. La variable s almacena la suma de todos los elementos del vector. As, inicialmente se hace cero, y a medida que se ejecuta el bucle, va sumando los elementos del vector. Como se ejecuta el bucle tantas veces como la longitud del vector, al final la variable s contiene la suma de todos los elementos del vector x. Es muy importante entender bien este programa tan sencillo, porque este tipo de construcciones se utilizan con muchsima frecuencia. EJERCICIO 2.2 Clculo del factorial de un nmero mediante un bucle FOR Construya un nuevo subdirectorio que se llame Ejercicio0202 y site el directorio de trabajo de Matlab dentro. En este ejercicio se deber construir una funcin de MATLAB (CalcularFactorial.m), que calcule el factorial de un nmero que se pasa por ventana. Escriba en un fichero llamado ejercicio0202.m el programa principal con la llamada a la funcin factorial. El programa principal debe realizar las siguientes operaciones:

TECNUN

4 Prctica. Matlab

Pgina 5

9 Borrar todas las variables (ver clear) 9 Pedir por teclado el nmero (n) del que se desea conocer su factorial (ver funcin input) 9 Realizar el factorial con una llamada a la funcin CalcularFactorial creada por uno mismo y almacenar el resultado en la variable y ( es decir, y = CalcularFactorial (n)) Para escribir la funcin que calcule el factorial conviene tener en cuenta lo siguiente: Como factorial(n) = 1*2*3*4*...*n Variando i desde 1 hasta n suceder que: Cuando i=1 y = 1 Cuando i=2 y = (1)*2; Cuando i=3 y = (1*2)*3; Cuando i=n Donde n es el nmero entero del que se quiere calcular el factorial f es el valor del factorial n (valor de retorno de la funcin) CalcularFactorial es el nombre de la funcin. EJERCICIO 3. BIFURCACIONES IF EJERCICIO 3.1 Obtencin del mximo valor de los elementos de un vector y la posicin que ocupa Construya un nuevo subdirectorio que se llame Ejercicio0301 y site el directorio de trabajo de Matlab dentro. Elabore una funcin en Matlab que devuelva el mximo valor de los elementos de un vector, as como la posicin que ocupa dicho elemento dentro del vector. El encabezado de la funcin debe ser: function [Numero,Posicion]=CalcularMaximo(Vector) Donde Numero es el valor mximo de los elementos del vector, Posicion es la posicin que ocupa Numero en el vector y Vector es el vector que se le pasa a la funcin. EJERCICIO 3.2 Funcin para determinar si dos nmeros son divisibles entre si Construya un nuevo subdirectorio que se llame Ejercicio0302 y site el directorio de trabajo de Matlab dentro. y = (1*2*3**n-1)*n; El encabezado de la funcin ser function f= CalcularFactorial (n)

Escuela Superior de Ingenieros de San Sebastin Universidad de Navarra

Informtica 1 y Fundamentos de Computadores

Pgina 6

Dados dos nmeros a y b, siendo a>=b>0, realice una funcin que devuelva un 1 si b es divisor de a y un 0 si no lo es. Aydese realizando previamente un diagrama de flujo Guarde el programa en un fichero llamado EsDivisible.m. El encabezado de la funcin debe ser: function d=EsDivisible(a,b) EJERCICIO 3.3 Funcin que devuelve el resto de una divisin entera Construya un nuevo subdirectorio que se llame Ejercicio0303 y site el directorio de trabajo de Matlab dentro. En este ejercicio vamos a crear una funcin llamada CalcularResto que se guardar en un fichero llamado CalcularResto.m. Esta funcin debe probar a dividir a entre b y devolver el resto de la divisin. El encabezado de la funcin ser el siguiente: function r=CalcularResto(a,b) Siendo r el resto de la divisin. EJERCICIO 4. BUCLES WHILE EJERCICIO 4.1 Clculo del factorial de un nmero mediante un bucle WHILE Construya un nuevo subdirectorio que se llame Ejercicio0401 y site el directorio de trabajo de Matlab dentro. En este ejercicio se deber construir una nueva funcin de MATLAB que recibir el nombre de CalcularFactorial2. Esta funcin deber calcular de nuevo el factorial de un nmero. La diferencia que tendr con el EJERCICIO 2.2, realizado anteriormente, es que en lugar de utilizar un bucle for, deber utilizar un bucle while. El encabezado de la funcin ser function f= CalcularFactorial2(n) Donde n es el nmero entero del que se quiere calcular el factorial f es el valor de retorno de la funcin. Se corresponde con el valor del factorial de n CalcularFactorial es el nombre de la funcin. El contenido del programa ser muy parecido en ambos ejercicios con dos diferencias: El proceso se realizar iterativamente mientras que se cumpla la condicin de chequeo del bucle: while(i<=n). En el EJERCICIO 2.2, la variable i se incrementaba automticamente debido a que era la variable del bucle for, ahora hay que incrementarla explcitamente con una instruccin del tipo i=i+1.

TECNUN

4 Prctica. Matlab

Pgina 7

EJERCICIO 5. TRABAJAR CON MATRICES EJERCICIO 5.1 Suma de matrices Construya un nuevo subdirectorio que se llame Ejercicio0501 y site el directorio de trabajo de Matlab dentro. En este ejercicio se deber construir una funcin de MATLAB (SumaMatrices.m), que calcule la suma de dos matrices, y un fichero ejercicio0501.m, que contenga el programa principal con la llamada a la funcin SumaMatrices. El programa principal debe realizar las siguientes operaciones: 9 9 9 9 Borrar todas las variables (ver clear) Crear la matriz M1 de dimensin 3x3, con la funcin magic. Crear la matriz M2 identidad de dimensin 3x3, con la funcin eye. Realizar la suma de matrices, mediante la funcin SumaMatrices creada por uno mismo y almacenar el resultado en la variable M3. 9 Para comprobar que la funcin programada por nosotros mismos calcula de forma correcta la suma entre dos matrices, realizar la suma de las matrices M1 y M2 mediante el operador suma (+) y almacenar el resultado en la variable M4. La funcin SumaMatrices creada tendr dos bucles for anidados. Con el primero se recorren todas las filas, y con el segundo, para cada fila, se recorren todas las columnas. EJERCICIO 5.2 Mejora del EJERCICIO 5.1 Construya un nuevo subdirectorio que se llame Ejercicio0503 y site el directorio de trabajo de Matlab dentro. En el EJERCICIO 5.1, se pide programar una funcin que sume dos matrices que se pasan por ventanilla. Ahora se pide hacer una versin nueva que incluya un paso previo a la suma de las dos matrices M1 y M2. Este paso previo consiste en que el programa cheque si el tamao de M1 y M2 coincide. En caso de que coincida realizar la suma, pero si no, el nuevo programa debe sacar por pantalla el siguiente mensaje: Error: las dos matrices no se pueden sumar EJERCICIO 5.3 Traspuesta de una matriz Construya un nuevo subdirectorio que se llame Ejercicio0502 y site el directorio de trabajo de Matlab dentro. En este ejercicio se deber construir una funcin de MATLAB (CalcularTraspuesta.m), que calcule la traspuesta de una matriz y un fichero ejercicio0502.m, que contenga el programa principal con la llamada a la funcin CalcularTraspuesta.

Escuela Superior de Ingenieros de San Sebastin Universidad de Navarra

Vous aimerez peut-être aussi