Está en la página 1de 6

Prcticas de Matemtica Aplicada.

Introduccion a la programacin (con MATLAB) Estructuras de datos, vectores, matrices y cadenas de caracteres. MatLab nos permite trabajar con diversos tipos de datos. De momento introducimos variables que pueden ser escalares, vectores o cadenas de caracteres. Cuando utilizamos alguna variable en Matlab ha de tener algn valor asignado o nos dar error. >>x ??? Undefined function or variable 'x'. Para asignar valor a las variables usamos = por ejemplo un escalar x, un vector v y una matriz A >>x=3 >>v=[2 3 21 2] >>A=[2 4 5;3 3 5] Si queremos modificar el valor de una variable existente en funcin de su valor actual lo haremos con una expresion del tipo x=f(x) por ejemplo si queremos multiplicar el valor actual de x por 2 haremos: >>x=2*x Podemos leer esta expresion como: valor nuevo de x=2*valor antiguo de x. Para aumentar en 5 el valor de x escribimos >>x=x+5

function y=f(x) % una funcin que me devuelve el doble de x y=2*x; Guardaremos la funcin en nuestra carpeta con el nombre resto.m. La primera lnea del programa es la declaracin de la funcin. Un fichero cuya primera lnea es una declaracin de funcin se llama fichero de funcin. El nombre de la funcin debe coincidir con el nombre del fichero sin la extensin .m. As pues el nombre que daremos al fichero que contiene el programa es doble.m. En esta primera sentencia se declaran las variables de entrada, en este caso x, y la variable de salida, en este caso y. Las variables que se crean en un fichero *.m de funcin, pertenecen al espacio de trabajo de dicha funcin, por tanto las letras que las designan pueden ser usadas de nuevo. El signo % precede a los comentarios de ayuda. Indica que lo que le sigue ser ignorado cuando se ejecute el programa. MATLAB imprimir en pantalla los comentarios de ayuda que escribimos en el fichero, cuando se use el comando help. De este modo contribuimos a la opcin help que proporciona MATLAB. A continuacin de los comentarios de ayuda se escribe el ncleo del programa. A la variable y le asignamos el valor 2*x; Esta operacin y el ; sirve para que no aparezca en pantalla el resultado antes del final de la ejecucin del programa. Veamos ahora un ejemplo de script que me da un numero al azar entre 1 y 10 >> edit v=randperm(10); %esta instruccin me da una permutacion %de los 10 primeros numeros numero=v(1) Guardamos este fichero en aleatorio.m y ejecutamos >> aleatorio Notar que no podemos utilizar la salida de aleatorio para asignar un valor 1

Ficheros de funcin y scripts. La diferencia entre las dos es que una funcin puede tener argumentos de entrada salida y un script no. Comenzamos con un ejemplo sencillo que consiste en definir una nueva funcin. >> edit

>> x=aleatorio da un error porque el script no tiene un valor de salida. Operadores relacionales El lenguaje de programacin de MATLAB dispone de los siguientes operadores relacionales: < menor que > mayor que <= menor o igual que >= mayor o igual que == igual que ~= distinto que (el carcter ~ se consigue pulsando Alt 126, manteniendo pulsado Alt hasta que se complete el 126). En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un significado especial. Si una comparacin se cumple el resultado es 1 (cierto), mientras que si no se cumple es 0 (falso). Cuando los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamao, la comparacin se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del mismo tamao, que recoge el resultado de cada comparacin entre elementos. Considrese el siguiente ejemplo como ilustracin de lo que se acaba de decir: A=[1 2;0 3]; B=[4 2;1 5]; A==B ans = 0 1 0 0 A~=B ans = 1 0 1 1 Operadores lgicos Los operadores lgicos de MATLAB son los siguientes: & y | o ~ negacin lgica Los operadores lgicos se combinan con los relacionales para poder comprobar el cumplimiento de condiciones mltiples.

CONSTRUCCIONES BSICAS DE PROGRAMACIN La bifurcacin if Una bifurcacin if(si) es una construccin de la forma if condicin sentencias end Se puede interpretar como Si se cumple condicin hacer sentencias fin Las sentencias se ejecutan en el caso de que la condicin no sea 0 (falsa). Hay que tener en cuenta que en MATLAB A==B, A<=B, etc. son funciones que toman el valor 0 o 1. Frecuentemente una bifurcacin se escribe if condicin sentencias 1 else sentencias 2 end En este caso else se puede traducir como en otro caso es decir, si la condicin se cumple(1) se ejecutan las sentencias 1 y si no se cumple se ejecutan las sentencias 2. Podemos incorporar ms condiciones con elseif if condicin A sentencias 1 elseif condicin B sentencias 2 end

En este caso si la condicin A no es 0 se ejecutan las sentencias 1 y si es 0 y la condicin 2 no es 0, se ejecutan las sentencias 2. Si las condiciones 1 y 2 son 0 la bifurcacin termina Ejemplos. Vamos a disear una funcion que nos diga si un numero que introducimos es mayor o menor que 0. >>edit function f(x) if x<0 'menor que 0' elseif x>0 'mayor que 0' else 'el numero es 0' end Guardar el fichero como escero.m Ejecutar para varios numeros, por ejemplo >>escero(3) Veamos como hacer algo similar con un script utilizando la entrada desde teclado input. >>edit x=input('introduce un numero ') if x<0 'menor que 0' elseif x>0 'mayor que 0' else 'el numero es 0'

Resolver una ecuacin de segundo grado. function r=g(y) % g(y) es el vector que da las soluciones reales de % la ecuacin y=0,donde y es el vector de los % coeficients de un polinomio de segundo % grado y(1)*x^2+y(2)*x+y(3). if y(2)^2-4*y(1)*y(3) >=0 r(1)= (-y(2)+sqrt(y(2)^2-4*y(1)*y(3)))/(2*y(1)); r(2)= (-y(2)-sqrt(y(2)^2-4*y(1)*y(3)))/(2*y(1)); else 'la ecuacin no tiene raices reales' end BUCLES MATLAB dispone de dos comandos for (para) y while (mientras), para repetir la ejecucin de sentencias. Esto aade flexibilidad a la ejecucin repetida de sentencias, sujetas a un control lgico. Bucles for Bsicamente, un bucle for es una construccin de la forma for i=1:n, sentencias end Se puede interpretar como desde i=1 hasta n hacer sentencias fin Ejemplos

Vamos a hacer un script que nos de una cuenta atrs. Necesitaremos las funciones strcat que une varias cadenas de caracteres y num2str que transforma un numero 3

en una cadena de caracteres (necesario para usar strcat). Pot ultimo pause hace una pausa de 1 segundo para dar mas realismo a nuestro programa. for i=1:9 strcat(num2str(11-i), ' segundos para el lanzamiento') pause(1) end strcat(num2str(1), ' segundo para el lanzamiento') pause(1) 'ignicion' Guardamos en cuentatras.m y ejecutamos >>cuentatras

for i=1:length(V) V(i) end Guardamos el fichero y ejecutamos: >>recorrevector(V) Ahora queremos que nos cuente el numero de doses que aparecen en el vector. Para ello hacemos una nueva funcin: function n=cuentadoses(V) n=0; %antes de empezar a contar no tengo ningun dos for i=1:length(V) if V(i)==2 n=n+1; %si en la posicion en la que estoy end %hay un dos aumento en uno el valor end %de n. Podemos hacer lo mismo que antes con matrices. En primer lugar dada la matriz A el comando size me da un vector de 2 columnas con el numero de filas en la primera componente y el numero de columnas en la segunda. >> A=[[1 2 2];[4 2 5]] A = 1 4 >> size(A) ans = 2 3 Ahora queremos escribir una funcion que escriba todos los elementos uno por uno: function recorrematriz(A) [nfilas ncolumnas]=size(A); 4 2 2 2 5

Veamos como recorrer todos los elementos de un vector o matriz. Dado un vector V podemos calcular su longitud con el comando length Ejemplo: >>V=[1 2 4 4 2 3 4]; >>length(V) nos da la respuesta ans= 7 Ahora si queremos hacer un programa que dado el vector v nos escriba sus elementos un por uno: >>edit ya en el editor: function recorrevector(V)

for i=1:nfilas for j=1:ncolumnas A(i,j) end end finalmente una funcin que cuente cuantos doses hay: function n=cuentadosmatriz(A) [nfilas ncolumnas]=size(A); n=0; for i=1:nfilas for j=1:ncolumnas if A(i,j)==2 n=n+1; end end end

Sentencia break Hace que se termine la ejecucin del bucle cuando se cumple una condicin lgica. if condicin break end Ejemplos: Cuantos nmeros pares hay debajo de uno dado. function k=npares(x) k=0; while 2*k<x k=k+1; end

Ejemplo/Ejercicio Combinar ejemplos anteriores y hacemos un juego en el que el ordenador genera un numero aleatorio que nosotros habremos de adivinar y en cada intento nos diga si nos hemos pasado o nos hemos quedado cortos.

Bucles while El comando while repite las sentencias tantas veces como una expresin lgica sea verdadera. En general un bucle while es de la forma: while expresin lgica A sentencias end. Se puede interpretar como Mientras se cumple la condicion A hacer Sentencias Hasta que ya no se cumpla. Hay que tener aqu mucho cuidado con no hacer bucles infinitos. Para ello es a veces util la siguiente sentencia:

EJERCICIOS. 1. 2. 3. 4. 5. a) b) c) d) Escribir una funci\'on de MATLAB para calcular la media aritmtica de n datos. Escribir un programa en MATLAB que calcule la suma de los elementos de una matriz nxn Escribir un programa en MATLAB que determine si dados 4 nmeros a, b, c, d estn en progresin aritmtica Escribir las sentencias de MATLAB necesarias para obtener los cuadrados de los nmeros pares entre 0 y 50. Crear una tabla con cada entero y su cuadrado. Determinar cuantas veces se ejecutar un bucle for si escribimos: for n = 7:10 for j = 7:-1:10 for i = 1:10:10 for 10:3:-7

end 7. Examinar los siguientes bucles while y determinar el valor de la variable x al final de cada uno de ellos. Cuntas veces se ejecuta el bucle? a) x = 2; while x <= 200 x = x^2; end b) x = 2; while x > 200 x = x^2; end 8. Disear un programa que dado una cadena de caracteres con las letras ATCG, cuente cuantas veces aparece la letra T y nos diga si aparece o no la secuencia ATTC. (por ejemplo probar con C1=ATTACAATTTATATTATTAAAT y con la secuencia C2=ATTACAAACAATATATATATATTACAGATTA, notar que que C1(k) me da la letra en el lugar k de C1

for x2 = x1:10 if x2 >6 break; end x = x + 1; end

6. Determinar el valor de x al final de los siguientes bucles: a) x= 0; for x = 1:10 x = x+1; end b) x = 0; for x = 1:10 y = x + x; end c) x = 0; for x1 = 1:10 6

También podría gustarte