Вы находитесь на странице: 1из 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 !, un vector v " una matriz # >>x=3 >>v=[2 3 21 2] >>A=[2 4 5;3 3 5] $i queremos modi%icar el valor de una variable e!istente en %unci&n de su valor actual lo haremos con una e!presion del tipo ! %'!( por ejemplo si queremos multiplicar el valor actual de ! por ) haremos* >>x=2 x Podemos leer esta e!presion como* valor nuevo de x=2*valor antiguo de x. Para aumentar en + el valor de ! escribimos >>x=x!5

function y=f(x) % una funcin que me devuelve el doble de x y=2*x; ,uardaremos la %unci&n en nuestra carpeta con el nombre resto.m. La primera l-nea del programa es la declaraci&n de la %unci&n. .n %ichero cu"a primera l-nea es una declaraci&n de %unci&n se llama fichero de funcin. /l nombre de la %unci&n debe coincidir con el nombre del %ichero sin la e!tensi&n .m. #s- pues el nombre que daremos al %ichero que contiene el programa es doble.m. /n esta primera sentencia se declaran las variables de entrada, en este caso ", " la variable de salida, en este caso y. Las variables que se crean en un %ichero *.m de %unci&n, pertenecen al espacio de trabajo de dicha %unci&n, por tanto las letras que las designan pueden ser usadas de nuevo. /l signo 0 precede a los comentarios de a"uda. 1ndica que lo que le sigue ser ignorado cuando se ejecute el programa. M#2L#3 imprimir en pantalla los comentarios de a"uda que escribimos en el %ichero, cuando se use el comando help. De este modo contribuimos a la opci&n help que proporciona M#2L#3. # continuaci&n de los comentarios de a"uda se escribe el ncleo del programa. # la variable y le asignamos el valor )4!5 /sta operaci&n " el 65 6 sirve para que no aparezca en pantalla el resultado antes del %inal de la ejecuci&n del programa. 7eamos ahora un ejemplo de script que me da un numero al azar entre 8 " 89 >> edit v=rand"er#$1%&; 'e(ta in(trucci)n #e da una "er#utacion 'de lo( 1% "ri#ero( nu#ero( nu#ero=v$1& ,uardamos este %ichero en aleatorio.m " ejecutamos >> aleatorio :otar que no podemos utilizar la salida de aleatorio para asignar un valor >> x=aleatorio 8

Fic eros de !uncin y scripts. La di%erencia entre las dos es que una %unci&n puede tener argumentos de entrada salida " un script no. Comenzamos con un ejemplo sencillo que consiste en de%inir una nueva %unci&n. >> edit

da un error porque el script no tiene un valor de salida. #peradores relacionales /l lenguaje de programaci&n de M#2L#3 dispone de los siguientes operadores relacionales* ; menor que < ma"or que ; menor o igual que < ma"or o igual que igual que = distinto que 'el carcter = se consigue pulsando #lt 8)>, manteniendo pulsado #lt hasta que se complete el 8)>(. /n M#2L#3 los operadores relacionales pueden aplicarse a vectores " matrices, " eso hace que tengan un signi%icado especial. $i una comparaci&n se cumple el resultado es 8 (cierto(, mientras que si no se cumple es 9 (falso(. Cuando los operadores relacionales de M#2L#3 se aplican a dos matrices o vectores del mismo tama?o, la comparacin se realiza elemento a elemento, " el resultado es otra matriz de unos " ceros del mismo tama?o, que recoge el resultado de cada comparaci&n entre elementos. Consid@rese el siguiente ejemplo como ilustraci&n 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 #peradores lgicos Los operadores l&gicos de M#2L#3 son los siguientes* A $y% B $o% = negaci&n l&gica Los operadores l&gicos se combinan con los relacionales para poder comprobar el cumplimiento de condiciones mltiples.

&#'(T)*&&I#'E( B+(I&A( ,E -)#.)AMA&I/' La 0i!urcacin 6i%C .na bi%urcaci&n 6i%C'si( es una construcci&n de la %orma if condicin sentencias end $e puede interpretar como $i se cumple condici&n hacer sentencias %in Las sentencias se ejecutan en el caso de que la condici&n no sea 1 '%alsa(. Da" que tener en cuenta que en M#2L#3 A==B, A; 3, etc. son %unciones que toman el valor 1 o 2. Erecuentemente una bi%urcaci&n se escribe if condicin sentencias 1 else sentencias 2 end /n este caso else se puede traducir como 6en otro casoC es decir, si la condici&n se cumple'2( se ejecutan las sentencias 1 " si no se cumple se ejecutan las sentencias 2. Podemos incorporar ms condiciones con elsei% if condicin A sentencias 1 elseif condicin B sentencias 2 end /n este caso si la condici&n # no es 1 se ejecutan las sentencias 1 " si es 1 " la condici&n ) no es 1, se ejecutan las sentencias 2. $i las condiciones 8 " ) son 1 la bi%urcaci&n termina )

E3emplos. 7amos a dise?ar una %uncion que nos diga si un numero que introducimos es ma"or o menor que 9. >>edit function f$x& if x*% '#enor +ue %' elseif x>% '#a,or +ue %' else 'el nu#ero e( %' end ,uardar el %ichero como escero.m /jecutar para varios numeros, por ejemplo >>e(cero$3& 7eamos como hacer algo similar con un script utilizando la entrada desde teclado input. >>edit x=in"ut$'introduce un nu#ero '& if x*% '#enor +ue %' elseif x>% '#a,or +ue %' else 'el nu#ero e( %' Fesolver una ecuaci&n de segundo grado.

function r=-$,& ' -$,& e( el vector +ue da la( (olucione( reale( de ' la ecuaci)n ,=%.donde , e( el vector de lo( ' coeficient( de un "olino#io de (e-undo ' -rado ,$1& x/2!,$2& x!,$3&. if ,$2&/204 ,$1& ,$3& >=% r$1&= $0,$2&!(+rt$,$2&/204 ,$1& ,$3&&&1$2 ,$1&&; r$2&= $0,$2&0(+rt$,$2&/204 ,$1& ,$3&&&1$2 ,$1&&; else 'la ecuaci)n no tiene raice( reale(' end B*&LE( M#2L#3 dispone de dos comandos !or 'para( " 4 ile 'mientras(, para repetir la ejecuci&n de sentencias. /sto a?ade %le!ibilidad a la ejecuci&n repetida de sentencias, sujetas a un control l&gico. Bucles $!or% 3sicamente, un bucle 6%orC es una construcci&n de la %orma for i=1:n, sentencias end $e puede interpretar como desde i 8 hasta n hacer sentencias %in E3emplos

7amos a hacer un script que nos de una cuenta atrs. :ecesitaremos las %unciones strcat que une varias cadenas de caracteres " num)str que trans%orma un numero en una cadena de caracteres 'necesario para usar strcat(. Pot ultimo pause hace una pausa de 8 segundo para dar mas realismo a nuestro programa. G

for i=123 (trcat$nu#2(tr$110i&. ' (e-undo( "ara el lan4a#iento'& "au(e$1& end (trcat$nu#2(tr$1&. ' (e-undo "ara el lan4a#iento'& "au(e$1& 'i-nicion' ,uardamos en cuentatras.m " ejecutamos >>cuentatra(

,uardamos el %ichero " ejecutamos* >>recorrevector$5& #hora queremos que nos cuente el numero de doses que aparecen en el vector. Para ello hacemos una nueva %unci&n* function n=cuentado(e($5& n=%; 'ante( de e#"e4ar a contar no ten-o nin-un do( for i=12len-t6$5& if 5$i&==2 n=n!1; '(i en la "o(icion en la +ue e(to, end '6a, un do( au#ento en uno el valor end 'de n. Podemos hacer lo mismo que antes con matrices. /n primer lugar dada la matriz # el comando size me da un vector de ) columnas con el numero de %ilas en la primera componente " el numero de columnas en la segunda. >> A=[[1 2 2];[4 2 5]] A = 1 4 >> (i4e$A& an( = 2 3 #hora queremos escribir una %uncion que escriba todos los elementos uno por uno* function recorre#atri4$A& [nfila( ncolu#na(]=(i4e$A&; for i=12nfila( for 8=12ncolu#na( A$i.8& end end H 2 2 2 5

7eamos como recorrer todos los elementos de un vector o matriz. Dado un vector 7 podemos calcular su longitud con el comando length /jemplo* >>5=[1 2 4 4 2 3 4]; >>len-t6$5& nos da la respuesta an(= 7 #hora si queremos hacer un programa que dado el vector v nos escriba sus elementos un por uno* >>edit "a en el editor* function recorrevector$5& for i=12len-t6$5& 5$i& end

E3emplos6 %inalmente una %unci&n que cuente cuantos doses ha"* Cuantos nmeros pares ha" debajo de uno dado. function n=cuentado(#atri4$A& [nfila( ncolu#na(]=(i4e$A&; n=%; for i=12nfila( for 8=12ncolu#na( if A$i.8&==2 n=n!1; end end end function 9=n"are($x& 9=%; while 2 9*x 9=9!1; end

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

Bucles $4 ile% /l comando 6IhileC repite las sentencias tantas veces como una e!presi&n l&gica sea verdadera. /n general un bucle Ihile es de la %orma* while expresin lgica sentencias end. $e puede interpretar como Mientras se cumple la condicion # hacer $entencias Dasta que "a no se cumpla. Da" que tener aqu- mucho cuidado con no hacer bucles in%initos. Para ello es a veces util la siguiente sentencia* (entencia $0rea5% Dace que se termine la ejecuci&n del bucle cuando se cumple una condici&n l&gica. if condicin break end +

E8E)&I&I#(. 2. 9. :. ;. <. a& b& c& d& /scribir una %unciJKon de M#2L#3 para calcular la media aritm@tica de n datos. /scribir un programa en M#2L#3 que calcule la suma de los elementos de una matriz n!n /scribir un programa en M#2L#3 que determine si dados H nmeros a, b, c, d estn en progresi&n aritm@tica /scribir las sentencias de M#2L#3 necesarias para obtener los cuadrados de los nmeros pares entre 9 " +9. Crear una tabla con cada entero " su cuadrado. Determinar cuantas veces se ejecutar un bucle %or si escribimos* for n = 721% for 8 = 720121% for i = 121%21% for :1%23207

end >. /!aminar los siguientes bucles <6ile " determinar el valor de la variable x al %inal de cada uno de ellos. LCuntas veces se ejecuta el bucleM a& x = 2; <6ile x *= 2%% x = x/2; end b& x = 2; <6ile x > 2%% x = x/2; end ?. Dise?ar un programa que dado una cadena de caracteres con las letras #2C,, cuente cuantas veces aparece la letra 2 " nos diga si aparece o no la secuencia #22C. 'por ejemplo probar con C8 N#22#C##222#2#22#22###2N " con la secuencia C) N#22#C###C##2#2#2#2#2#22#C#,#22#N, notar que que C8'O( me da la letra en el lugar O de C8

=. Determinar el valor de ! al %inal de los siguientes bucles* a& x= %; for x = 121% x = x!1; end b& x = %; for x = 121% , = x ! x; end c& x = %; for x1 = 121% for x2 = x121% if x2 >; brea9; end x = x ! 1; end >

Вам также может понравиться