Anda di halaman 1dari 207

Tema 3:

Fundamentos de Programacin
Informtica Aplicada a Biologa

Curso 2014/2015
Departamento de Ciencias de la Computacin e
Inteligencia Artificial

ndice
Introduccin.
Etapas de la programacin.
El concepto de algoritmo.
Lenguajes de programacin.

Introduccin
Informacin

Decodificacin

Hechos, ideas,
objetos, del
mundo real.

Datos /S

Codificacin
Transformacin en
smbolos procesables.

Datos E/

Datos
Representacin de la
informacin.

Hardware
Ordenador, circuitos,
componentes fsicos.

Software
Programas
(instrucciones)

Cmo construimos los programas?


3

Etapas de la programacin
1.- Definicin y anlisis del problema
Definicin y comprensin del problema.
Identificar datos de E/S (tipos, restricciones, etc).
Plantear como vamos a resolver el problema.
2.- Diseo general de la solucin
Objetivo: encontrar un algoritmo que resuelva el problema.
Estructurar/organizar la informacin.
Descomposicin del problema en subproblemas.

80%

3.- Diseo detallado de la solucin


Detallar los algoritmos de la etapa anterior.
4.- Implementacin
Traducir los algoritmos a un lenguaje de programacin.
20%
5.- Ejecucin y obtencin de resultados
4

El concepto de algoritmo
Abu Ja'far Muhammad ibn Musa al Khwarizmi
Matemtico, astrnomo y gegrafo musulmn (780-850)

Receta de cocina.
Instrucciones de uso de un electrodomstico.
Partituras de msica.
Planos de una maqueta.
Pasos para hacer un truco de magia.
Algoritmos matemticos:
Algoritmo de Euclides (clculo del M.C.D.).
Criba de Eratstenes (clculo de nmeros primos).
Descomposicin factorial de un nmero.
Clculo de races cuadradas, Pi, etc.

Muy variados

Un algoritmo es un conjunto finito de instrucciones o pasos


que sirven para ejecutar una tarea o resolver un problema.

El concepto de algoritmo
Lenguajes escritos:

Lenguaje natural (Expresivo, ambiguo)


Lenguaje algortmico (No-ambguo)

Lenguajes grficos:

Organigramas (o diagramas de flujo)


Diagramas de Nassi
Fciles de seguir
Tablas de decisin
visualmente
Etc ...

Ejemplo: Calcular la hipotenusa de un tringulo rectngulo

Ambiguo!

Lenguaje algortmico:
LEER a, b
cuad1=a2
cuad2=b2
suma=cuad1+cuad2
c=RAZ(suma)
ESCRIBIR c

Inicio
Organigrama:

Lenguaje natural:
Se leen los catetos a y b, se
calcula la hipotenusa c como
la raz cuadrada de la suma de
los catetos al cuadrado y se
escribe el resultado c.

a,b
c=RAZ(a2+b2)
c
Fin

El concepto de algoritmo
Raiz cuadrada de un nmero n
(Hern de Alejandra, primer siglo antes de Cristo)
Instrucciones:

1. Propn un nmero g.
2. Si g*g se parece mucho a n para.
3. Calcula un nuevo g como la media aritmtica de g
y n/g.
4. Con este nuevo valor vuelve al paso 2

El concepto de algoritmo
Raiz cuadrada del nmero 25
Sea n igual a 25:

g*g

n/g

*( g+n/g)

8.33

5.69

5.69

32.5

4.41

5.04

5.04

25.4

4.96

5.00

5.00

25.00

El concepto de algoritmo
RECETA DEL PASTEL DE CALABAZA
Instrucciones:

1. Mezclar la calabaza, el azcar, la sal, el jengibre,


la canela y la melaza.
2. A continuacin agregar los huevos y la leche.
3. Mezclar bien.
4. Vierta la mezcla en la base sin hornear
5. Meta el pastel
6. Espera hasta que al insertar un cuchillo ste salga
limpio

Lenguajes de programacin
Etapas en la construccin de programas
1.- Definicin y anlisis del problema
2.- Diseo general de la solucin
3.- Diseo detallado de la solucin
4.- Implementacin
5.- Ejecucin y obtencin de resultados

Cmo le explicamos al ordenador nuestro algoritmo?


El ordenador slo puede trabajar con 0s y 1s

Las instrucciones deben ser secuencias de 0s y 1s


(analoga con los datos).
Ese lenguaje primario se denomina cdigo mquina y es el nico
comprensible por la Unidad de Control de la CPU.

Lenguajes de programacin
Caractersticas del cdigo mquina
Las instrucciones son secuencias de 0s y 1s.
Es muy diferente a cualquier lenguaje humano.
Es muy difcil construir programas.
Es el nico comprensible (ejecutable) por la CPU.
Cada tipo de CPU tiene un lenguaje diferente: no hay portabilidad.
Est muy ligado al hardware: poca portabilidad.
La sintaxis es extremadamente rgida.
Las instrucciones realizan operaciones muy bsicas (suma, resta, ).

Tiene muchos
inconvenientes

pero

Es el nico que
entiende el ordenador

Lenguajes de programacin
Sera posible solucionar los inconvenientes del cdigo mquina?
Para hacerlo algo ms sencillo de comprender por personas:
podemos cambiar las secuencias de 0s y 1s por palabras
Ejemplo: supongamos que la instruccin que permite sumar dos nmeros es
01101101.
01101101

lo cambiamos por

SUMA

Problema: SUMA no es comprensible por el ordenador

Solucin: construir un programa que traduzca el nuevo lenguaje a cdigo


mquina

Con esta idea surge el lenguaje ensamblador

Lenguajes de programacin
El lenguaje ensamblador
Mejora algunos aspectos del cdigo mquina:
Usa nemnicos (palabras) en lugar de ceros y unos.
Permite construir macros (similares a subprogramas).
Permite usar comentarios en los programas.
Permite usar el concepto de variable.
No soluciona los otros inconvenientes:
Poca portabilidad, muy ligado al hardware,
Sigue siendo bastante complejo
Al programa encargado de traducir de ensamblador a C.M. se le denomina
Ensamblador (tambin).
Actualmente nadie usa directamente el cdigo mquina sino que usa, si es
necesario, el lenguaje ensamblador.

Lenguajes de programacin
Los lenguajes de alto nivel
Para solucionar el resto de problemas se idearon los lenguajes de alto nivel
(LAN)
Dependiendo del lenguaje concreto, se parecen ms al lenguaje
algortmico, natural o matemtico.
Suelen ser ms fciles de leer y escribir.
Suelen ser muy portables:
Independientes del tipo de CPU.
Independientes del hardware concreto.
Pueden realizar operaciones muy complejas de forma simple.
Inconvenientes:
Necesitan de un programa que los traduzca a C.M.
Son menos eficientes que el C.M. o el L.E.
Ejemplos: Fortran, C, C++, Pascal, Algol, Basic, Cobol, Logo,
Modula-2, Lisp, ADA, Prolog, Simula, APL, Java, ...

Lenguajes de programacin
55
8B EC
53
56
57

push
mov
push
push
push

ebp
ebp,esp
ebx
esi
edi

PROGRAM Ejemplo
INTEGER :: x,y

C7 05 00 33 42 00 02 00 00 00

mov

dword ptr [Y (00423300)],00000002

y=2

A1 00 33 42 00
83 C0 03
A3 04 33 42 00

mov
add
mov

eax,dword ptr [Y (00423300)]


eax,00000003
dword ptr [X (00423304)],eax

x=y+3

6A
6A
6A
6A
6A
68
E8
83
6A
68
E8
83
FF
E8
83
E8

push
push
push
push
push
push
call
add
push
push
call
add
push
call
add
call

00000000
00000000
00000000
00000000
00000000
ffff7b30
_f90_write (00401080)
esp,00000018
00000007
00422648
_lwrite_ch (004013d0)
esp,00000008
dword ptr [X (00423304)]
_lwrite_i (004012b0)
esp,00000004
_f90_endwrite (00401260)

PRINT *, "X vale ", x

xor
pop
pop
pop
leave
ret

eax,eax
edi
esi
ebx

00
00
00
00
00
30
45
C4
07
48
86
C4
35
58
C4
00

33c0
5F
5E
5B
C9
C3

7B FF FF
00 00 00
18
26
03
08
04
02
04
02

42 00
00 00
33 42 00
00 00
00 00

END PROGRAM Ejemplo

Lenguajes de programacin
Traduccin y ejecucin lnea a lnea

Intrprete

y=2

Traducir

x=y+3

Traducir

Compilador

y=2
x=y+3

C7 05 00 33 42 00 02 00 00 00
A1 00 33 42 00
83 C0 03
A3 04 33 42 00

Ejecutar

Ejecutar

1 Traduccin completa, 2 Ejecucin

Traducir

Ventajas del compilador

C7
A1
83
A3

05
00
C0
04

00 33 42 00 02 00 00 00
33 42 00
03
33 42 00

Ejecutar

1 traduccin N ejecuciones
Permite optimizacin de cdigo
Ejecucin ms rpida
No necesitamos cdigo fuente para ejecutar

Qu hemos visto?
Introduccin.
Etapas de la programacin.
El concepto de algoritmo.
Lenguajes de programacin.

17

Tema 4:
Matlab

Informtica Aplicada a Biologa

Curso 2014/2015
Departamento de Ciencias de la Computacin e
Inteligencia Artificial

ndice
Introduccin a Matlab
Matlab como sistema interactivo de
clculo:

Interaccin con Matlab


Operadores y precedencia
Uso de funciones
Constantes
Precisin de los resultados
Variables
Comentarios
19

ndice

Matlab como sistema interactivo de


clculo:

Cadenas de caracteres
Vectores y matrices

Programando en Matlab:
Fundamentos de la programacin en Matlab
Ficheros script
Lectura de datos
20

ndice

Programando en Matlab:

Escritura de datos
Operadores relacionales y lgicos
Sentencias condicionales
Sentencias de repeticin
Funciones
Fuciones script vs funciones

21

Tema 4: Programacin en Matlab

Introduccin a Matlab

Curso 2014/2015
Departamento de Ciencias de la Computacin e
Inteligencia Artificial

22

Introduccin a Matlab
MATLAB = MATrix LABoratory.
Originalmente desarrollado para realizar clculos
con matrices.
Actualmente sistema interactivo para realizar
clculos tcnicos y cientficos.
Calculadora avanzada + lenguaje de
programacin.
Comercial desde 1984.
Muy utilizado en multitud de aplicaciones y reas.
Disponible en mltiples plataformas (Windows,
Linux, Mac OS,).
23

Introduccin a Matlab
Ofrece funcionalidades bsicas para:
Clculo matricial,
anlisis numrico,
representaciones grficas.
Toolboxes (cajas de herramientas): Extensiones
con nuevas funcionalidades en campos de
aplicacin especficos.
M-files (ficheros-m): ficheros conteniendo cdigo
fuente del lenguaje de programacin de Matlab y
que son interpretados (ejecutados).
24

Introduccin a Matlab
Dos formas de utilizar Matlab:
Como sistema interactivo de clculo
(calculadora avanzada interactiva): para
clculos sencillos y que se repiten pocas veces.
Como lenguaje de programacin: clculos
ms complejos y muy utilizados.

25

Tema 4: Programacin en Matlab

Matlab como sistema interactivo de


clculo

Curso 2014/2015
Departamento de Ciencias de la Computacin e
Inteligencia Artificial

26

Interaccin con Matlab


Matlab nos ofrece un prompt o indicador, a partir
del cual podemos escribir las operaciones que
queremos realizar (>>):
Justo despus de escribir la operacin, y pulsar
<ENTER>, nos devuelve el resultado (ans =
answer).
>> 3 + 5 <ENTER>
ans=
8

27

Operaciones y precedencia
Operacin

Smbolo

Ejemplo

Precedencia

Suma

6+2

Resta

62

Multiplicacin

6*2

Divisin

6/2

Potenciacin

6^2

Precedencia:
orden establecido para evaluar las
operaciones de una expresin cuando no hay
parntesis.
28

Operaciones y precedencia
Ejemplo

Descripcin

>> 3 + 6/2
ans=
6

Se calcula inicialmente 6/2 ya que / tiene ms precedencia


que +.

>> (3 + 6)/2
ans=
4.5

Se obtiene primero (3+6) ya que los parntesis tienen


mayor precedencia que cualquier otro operador y, por
tanto, lo que haya dentro se evala antes.

>> 27 ^(1/3)+32^2
ans=
1027

Se calcula el resultado de la expresin de dentro de los


parntesis. En este caso, (1/3). Seguidamente se ejecutan
las dos potencias, (27^0.33) y (32^2), y finalmente la
suma.

>> 5^2*4+5
ans=
105

Aplicamos directamente el orden de precedencia: en


primer lugar se evala la potencia (5^2), seguidamente, el
producto (25*4) y finalmente la suma (100+5).

29

Uso de funciones
En las expresiones podemos introducir funciones
matemticas que nos ofrece MATLAB:
>> 3 + sqrt(25)
ans=
8

30

Uso de funciones
Funcin

Descripcin

Ejemplo

sqrt(x)

Raz cuadrada de un nmero

exp(x)

Exponencial (ex)

abs(x)

Valor absoluto

>> abs(-35)
ans=
35

log(x)

Logaritmo en base e (ln)


(log10(x) en base 10)

>> log(1000)
ans=
6.9078

log2(x)

Logaritmo en base 2

>> log2(16)
ans=
4.0000

pow2(x)

Potencia en base 2 de x

>> pow2(4)
ans=
16.0000

>> sqrt(81)
ans=
9
>> exp(5)
ans=
148.4132

31

Uso de funciones
Funcin
factorial(x)

Descripcin

Ejemplo

Factorial de un entero positivo (x!) >> factorial(5)


ans=
120

sin(x)

Seno del ngulo x (en radianes)


En grados, sind(x)

>> sin(pi/6)
ans=
0.5000

cos(x)

Coseno del ngulo x (en radianes)


En grados, cosd(x)

>> cos(pi/6)
ans=
0.8660

tan(x)

Tangente del ngulo x (en radianes) >> tan(pi/6)


ans=
0.5774

cot(x)

Cotangente del ngulo (en


radianes)

>> cot(pi/6)
ans=
1.7321

32

Uso de funciones
Funcin

Descripcin

Ejemplo

round(x)

Redondea al entero ms prximo

>> round(17/5)
ans=
3

fix(x)

Redondea hacia el entero ms


cercano a cero

>> fix(13/5)
ans=
2

rem(x,y)

Devuelve el resto de la divisin de


x entre y

>> rem(13,5)
ans=
3

sign(x)

Devuelve 1 si x>0, -1 si x<0 y 0 si


x=0

>> sign(15)
ans=
1

33

Constantes

Constantes: nmeros muy comunes que suelen


referenciarse bajo un nombre concreto.

Constante

Descripcin

Ejemplo

pi

Nmero

>> pi
ans=
3.14159265358979

exp(1)

Nmero e

>> exp(1)
ans=
2.71828182895905

inf

Infinito (1/0)
>> 1/0
(-inf = menos infinito) ans=
Inf

NaN

Indeterminacin (0/0)
(Not a Number)

>> 0/0
ans=
NaN

34

Precisin de los resultados


MATLAB trabaja internamente con clculos
exactos.
Pero permite establecer la precisin (nmero de
decimales) con que se desea mostrar los
resultados para facilitar su interpretacin.
Se hace mediante el mandato format, seguido de
ciertos argumentos que establecen la precisin.
Una vez establecido, los resultados se mostrarn
segn el formato elegido, hasta nuevo cambio.
35

Precisin de los resultados


Funcin

Descripcin

Ejemplo

format long

Resultados con 16 cifras


decimales

>> format long; 174/13


ans=
13.38461538461539

format short

Resultados con 4 cifras


decimales. Formato por defecto
de MATLAB.

>> format short; 174/13


ans=
13.3846

format long e

Resultados en notacin
cientfica con 16 decimales ms
la potencia de 10 necesaria.

>> format long e; 174/13


ans=
1.338461538461539e+001

format short e

Resultados con 4 decimales en


notacin cientfica ms la
potencia de 10 necesaria.

>> format short e; 174/13


ans=
1.3385e+001

36

Comentarios
Comienzan por un carcter %.
El texto despus de ese carcter no es
interpretado por Matlab.
Sirven para hacer indicaciones o aclaraciones
tiles.
>> % Calculo de la integral del polinomio.
>> r = integral(p);

37

Variables
Nombres que reciben los valores que se van
calculando, con objeto de poder utilizarlos en
siguientes clculos.
No necesitan declararse previamente, sino
simplemente inicializarlas y utilizarlas en
expresiones matemticas:
>> resultado = 3 + 5
resultado =
8
>> cuadrado = resultado ^ 2
cuadrado =
64
38

Variables
Qu ocurre si queremos usar una variable que
no hemos inicializado previamente?
>> resultado = 3 + resultado_antiguo
ans =
Qu nos dir Matlab?

39

Variables
La asignacin se hace mediante el operador =.
nombre_variable = valor numrico o expresin

La parte izquierda slo puede ser una variable.


La parte derecha, un nmero o expresin (que
puede contener nmeros o variables previamente
inicializadas).
La expresin se evala y el resultado se asigna a
la variable.

40

Variables
Ejemplo:
>> a =
a =
12
>> b =
b =
4
>> c =
c =
16
>> a =
a =
6

12

a vale 12

b vale 4

c vale 16

(a-b)+ 8

a vale 6 y c sigue
valiendo 16
41

Variables
Ejemplo:
>> x = 10
x =
10
>> x = 3*x - 12
x =
18

x vale 10
3*10 - 12 vale 18

Una vez calculado se asigna a x


que ahora vale 18

42

Variables
Ejemplo:
>> a = 12
a =
12
>> b= 4
b =
4
>> c = (a-b)+40-a/b*10
c =
18
43

Variables
Ejemplo (continuacin):
>> a = 12;
>> b = 4;
>> c = (a-b)+40-a/b*10
c =
18
>> a = 12, b = 4; c =
(a-b)+40-a/b*10
a =
12
c =
18
44

Variables
Algunos smbolos interesantes:
Con ; no se muestra el resultado de evaluar la
expresin.
Con , se permiten poner varias expresiones en la
misma lnea.
Con , si no nos cabe una expresin en una
lnea, podemos continuar por la siguiente.

45

Variables
Se pueden utilizar como argumentos de las
funciones.
>> angulo = 0.75;
>> resultado = sin(angulo)^2 +
cos(angulo)^2
resultado =
1

46

Variables
Reglas de definicin de variables:
Todos los nombres deben empezar con una letra
(altura, por ejemplo).
Longitud mxima de 63 caracteres en el nombre.
Slo se pueden usar letras, nmeros y _ (guin
bajo). Por ejemplo, gen1, long_cadena. No
pueden comenzar por un nmero.

47

Variables
Reglas de definicin de variables:
Se suelen usar letras maysculas para nombrar
constantes, aunque las que emplea MATLAB
suelen ser minsculas (AVOGADRO,
NUM_MESES).
MATLAB es sensible a las letras maysculas y
minsculas (x es diferente de X, y veloCIDAD de
VELOcidad).

48

Variables
Reglas de definicin de variables:
No se pueden usar como nombres de variables
las siguientes palabras reservadas de Matlab:
>> iskeyword %Mandato que las lista.
ans =
break case catch continue
else elseif end for
function global if otherwise
persistent return switch try
while
49

Variables
Reglas de definicin de variables:
No es conveniente utilizar como nombres de
variables nombres de funciones. Si se hace as,
no se podrn utilizar como funciones.
>> which sin
ans =
c:\MATLAB7\toolbox\matlab\elfun\sin.m
>> sin = 4;
>> which sin
ans =
sin is a variable.
>> sin(3)
ans =
??? Index exceeds matrix dimensions
50

Variables
Reglas de definicin de variables:
ans: variable del sistema donde, por defecto, se
almacenan los resultados de clculos que no han
sido asignados a variables.
>> 0.75
ans =
0.75
>> resultado = sin(ans)^2 + cos(ans)^2
resultado =
1
51

Variables
Son correctos los nombres de variables?

test
Test
if
mi-libro

Esteesunnombremuylargoperoinclusoasisepermite?

1ergrupo
Grupo_uno
zzaAbc1
z34wAwy%12#

52

Variables
Son correctos los nombres de variables?

test: s.
Test: s, pero es diferente de test.
if: no se permite es una palabra reservada.
mi-libro: no, porque contiene un guin.
Esteesunnombremuylargoperoinclusoasisep
ermite?: no, porque lleva el signo de interrogacin.
De todas formas, no es muy apropiado.
1ergrupo: no, porque no puede empezar con un
nmero.
Grupo_uno: s.
zzaAbc1: s, pero no es muy significativo.
z34wAwy%12#: no porque contiene % y #.
53

Variables
Ejemplo:
sen(2) para = 3.
>> theta= 3*pi;
>> sin(2*theta)
ans =
-7.3479e-016
sen-1(1).
>> asin(1)
ans =
1.5708
54

Variables
Ejemplo:
cos(45)
>> cos(45*pi/180)
ans =
0.7071
>> cosd(45)
ans=
0.7071

55

Variables
Ejemplo:
Un objeto con una temperatura inicial T0 se
introduce en el instante t dentro de una
cmara que tiene una temperatura constante
Ts. El objeto experimenta un cambio de
temperatura que se corresponde con la
ecuacin:
kt

T = Ts + (To Ts )e ,
donde T es la temperatura final del objeto en
el instante t y k una constante
56

Variables
Ejemplo (continuacin):
Una lata de un refresco olvidada en un coche
a una temperatura de 42C se introduce en
un frigorfico que tienen en su interior una
temperatura de 4C. Calcular la temperatura
de la lata despus de tres horas
considerando k=0.45, redondeando el
resultado al grado ms prximo.
>>Ts= 4; T0= 42; k=0.45; t=3;
>> T = round (Ts + (T0-Ts) * exp(-k*t))
T =
14
57

Variables
Ejemplo:
La energa emitida por un terremoto de escala M en la
Escala Richter viene dada por:
3

E = E0 e 2

donde E es la energa emitida por el terremoto y E0 = 104.4


julios es una constante (energa de un terremoto ms
pequeo de referencia). Determina cuntas veces ms
energa emite un terremoto que registra 7.2 en la Escala
Richter respecto a otro que registra 5.3.
>> E0= 10 ^ 4.4; M1 = 7.2; M2 = 5.3;
>> E1 = E0*exp(3/2*M1);
>> E2 = E0*exp(3/2*M2);
>> E1/E2
ans =
58
17.2878

Cadenas de caracteres
Serie de letras, nmeros u otros smbolos.
Se encierran entre comillas simples.
Ejemplos: Hola, Mundo, Introduzca el valor,
gen,

>> cad = Esto es una cadena


cad =
Esto es una cadena

59

Cadenas de caracteres
>> cad = abcdefg123456?&%#
cad =
abcdefg123456?&%#
>> cad =
cad =

1
1

60

Cadenas de caracteres
Si la cadena de caracteres contiene una comilla
hay que poner otra antes de ella para que Matlab
no crea que se acaba la cadena.
>> cad = dont
ans =
dont

61

Cadenas de caracteres
El nmero de caracteres de la cadena es su
longitud.
Cada carcter de la cadena ocupa una posicin
en ella. El primero estar situado en la primera y
el ltimo en la que equivale a la longitud.
Se acceden a ellos mediante el nombre de la
cadena y entre parntesis el ndice (la posicin)
que se desea obtener.

62

Cadenas de caracteres
>> cad = abcdefg123456?&%#;
>> cad(1)
ans =
a
>> cad(5)
ans =
e
>> cad(19)
ans =
#

63

Cadenas de caracteres
Se pueden obtener subcadenas (secuencia de
caracteres consecutivos dentro de una cadena
original), indicando el rango de las posiciones de
los caracteres.
>> cad = Esto es una cadena;
>> cad(3:10)
ans =
to es un

64

Cadenas de caracteres
Funcin

Descripcin

Ejemplo

length(c)

Devuelve la longitud de una cadena

>> a=hola; length(a)


ans=
4

strcmp(c1,c2)

Compara dos cadenas de


caracteres. Si son iguales, devuelve
1, y 0 en caso contrario.

>> strcmp(Hola,hola)
ans=
0

str2num(c)

Convierte una cadena a un valor


numrico

>> 2 * str2num(123)
ans=
246

65

Cadenas de caracteres
Funcin

Descripcin

Ejemplo

strrep(c1,c2,c3)

Reemplaza una subcadena c2


por otra c3 en una cadena c1

>> strrep(una prueba,una,la)


ans=
la prueba

upper(c)

Convierte los caracteres de una >> upper(se pasar a mayscula)


cadena a maysculas
ans=
SE PASAR A MAYSCULA

lower(c)

Convierte los caracteres de una >> lower(SE PASAR A


cadena a minsculas
MINSCULA)
ans=
se pasar a minsculas

66

Vectores y matrices
Un vector es una sucesin de nmeros distribuida
en una fila o una columna.
Nombre_variable = [ elementos del vector ]

Vector fila: nmeros separados por comas o


espacios en blanco.
anios = [1989, 1999, 2009]
Vector columna: nmeros separados por punto y
coma.
anios = [1989; 1999; 2009]
67

Vectores y matrices
Ejemplos:
>> anios = [1989, 1999, 2009] % Vector fila
anios =
1989 1999 2009
>> anios = [1989; 1999; 2009] %Vector columna
anios =
1989
1999
2009

68

Vectores y matrices
Se pueden inicializar con la especificacin del
primer valor, el ltimo y la distancia:
vector = [p:d:u] vector = p:d:u
donde:
p = primer valor,
u = ltimo valor y
d = distancia entre los trminos.
>> x = [1:2:13]
x =
1 3 5 7 9 11 13
69

Vectores y matrices
Ejemplos:
>> x = [1:2:13]
x =
1 3 5 7 9 11 13
>> x = [1.5:0.1:2.1]
x =
1.5000 1.6000 1.7000 1.8000 1.9000 2.000
2.1000
>> x = [-3:7] %El incremento es 1 por defecto
x =
-3 -2 -1 0 1 2 3 4 5 6 7
70

Vectores y matrices
>> x = linspace(0,8,6)
x =
0 1.6000 3.2000 4.8000 6.4000 8.000
Crea un vector de 6 elementos (ltimo valor) que
van desde 0 a 8. Matlab determina la distancia
correcta entre ellos.

71

Vectores y matrices
Se pueden crear vectores que contengan otros
vectores ya creados:
>> v1 = [ 3.0 5.6];
>> v2 = [6.0 v1]
v2 =
6.0 3.0 5.6

72

Vectores y matrices
Acceso a los elementos individuales de un vector:
nombre_vector(ndice)
ndice va desde 1 hasta la longitud del vector.
>> s = [ 1 3 5 7 9];
>> s(1)
s(1) =
1
>> s(4)
s(4) =
7
73

Vectores y matrices
Ejemplos:
>> s = [ 1 3 5 7 9];
>> s(3) = 22; %Asignacin de un valor
>> s
s =
1 3 22 7 9
>> s(10) = 9 %Se extiende el vector
s =
1 3 22 7 9 0 0 0 0 9
>> s = [ 1 3 5 7 9];
>> s(3) = [] %Eliminacin de un valor
s =
1 3 7 9
74

Vectores y matrices
Matrices (vectores bidimensionales): distribuye los
nmeros en filas y columnas.
nombre_matriz = [ elementos primera fila;
elementos segunda fila;

elementos ltima fila]

75

Vectores y matrices
Ejemplos:
>> a = [ 1 2 3; 4 5 6; 7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> b = [ 9 8 7
6 5 4
3 2 1]
b =
9 8 7
6 5 4
3 2 1

76

Vectores y matrices
Ejemplo:
>> a = [ 1:2:11; 0:5:25;
linspace(10,60,6);
67 2 43 68 4 13]

a =
1
0
10
67

3
5
20
2

5
10
30
43

7
15
40
68

9
20
50
4

11
25
60
13
77

Vectores y matrices
Ejemplo:
% Inicializacin de matrices a 0s y 1s.
% 2 filas y 3 columnas
>> ceros = zeros(2,3)
ceros =
0 0 0
0 0 0
>> unos = ones(2,3)
unos =
1 1 1
1 1 1
78

Vectores y matrices
Ejemplo:
% Inicializacin de matrices con
% diagonal 1
% 3 filas y 3 columnas
>> diag= eye(3,3)
diag =
1 0 0
0 1 0
0 0 1

79

Vectores y matrices
Acceso a elementos: matriz(fila, columna)
>> mat =
mat =
3 11 6
4 7 10
13 9 0

[3 11 6 5; 4 7 10 2; 13 9 0 8]
5
2
8

% mat(1,1) es igual a 3
% mat (2,3) es igual a 10

% El 8 se sustituye por un 23
>> mat(3,4) = 23;

80

Vectores y matrices
Acceso a partes de la matriz:
Para vectores:
v(m:n) referencia a todos los valores
comprendidos entre la fila m y la columna
n de v.

81

Vectores y matrices
Acceso a partes de la matriz:
mat(:,n) refiere a los valores de la columna n de
mat.
mat(m,:) indica los elementos de la fila m de mat.
mat(:,m:n) devuelve los valores entre las
columnas m y n.
mat(m:n,:) referencia los valores entre las filas m
y n.
mat(m:n,p:q)
devuelve
los
elementos
comprendidos entre las filas m y n y las columnas p y
q.

82

Vectores y matrices
Ejemplo:
>> m = [1 3 5 7 9 11; 2 4 6 8 10 12;
3 6 9 12 15 18;
4 8 12 16 20 24;
5 10 15 20 25 30]
m =
1
3
5
7
9 11
2
4
6
8 10 12
3
6
9 12 15 18
4
8 12 16 20 24
5 10 15 20 25 30
83

Vectores y matrices
Ejemplo (continuacin):
>> m2 = m(:,3)
m2 =
5
6
9
12
15

84

Vectores y matrices
Ejemplo (continuacin):
>> m3 = m(2,:)
m3 =
2 4 6 8 10 12
>> m4 = m(2:4,:)
m4 =
2
3
4

4
6
8

6
9
12

8 10 12
12 15 18
16 20 24
85

Vectores y matrices
Ejemplo (continuacin):
>> m5 = m(1:3,2:4)
m5=
3
4
6

5
6
9

7
8
12

86

Vectores y matrices
Ejemplo (continuacin):
>> m(7,:)= [10:2:20]
m =
1
3
5
7
9
2
4
6
8 10
3
6
9 12 15
4
8 12 16 20
5 10 15 20 25
0
0
0
0
0
10 12 14 16 18

11
12
18
24
30
0
20

87

Vectores y matrices
Ejemplo (continuacin):
>> m8= m(6:7,5:6)
m8 =
0
0
18 20

88

Vectores y matrices
Ejemplo:
% end hace referencia a la fila o
% columna final de una matriz.
>> a = [ 1 2 3 0; 4 5 6 0; 7 8 9 0; 9 8 7 0]
a =
1 2 3 0
4 5 6 0
7 8 9 0
9 8 7 0
>> a(1,2:end)
ans =
2 3 0
89

Vectores y matrices
Algunas funciones tiles:
Funcin

Descripcin

Ejemplo

length(A)

Devuelve el nmero de
elementos del vector

>> a = [ 1 2 3 4];
>> length(a)
ans =
4

size(a)

Devuelve un vector con


dos elementos [m,n],
donde m es el nmero de
filas y n el de columnas.

>> a = [ 1 2 3 4; 3 4 5 6];
>> size(a)
ans =
24

90

Vectores y matrices
Algunas funciones tiles:
Funcin

Descripcin

Ejemplo

diag(v)
diag(a)

Cuando v es un vector,
creea una matriz cuadrada
con los elementos en la
diagonal.
Cuando a es una matriz,
crea un vector a partir de
los elementos de la
diagonal

>> a = [ 1 2 3 ];
>> m = diag(a);
m=
100
020
003
>> c = diag(m)
c=
123

91

Vectores y matrices
Operaciones con matrices:

Suma (+) y resta (-): a + b y a - b


Multiplicacin (*): a * b
Divisin (/): a/b= a-1b
Divisin ( \): a\b = ab-1
Matriz transpuesta (): a
Inversa de una matriz: inv(a)
Multiplicacin elemento a elemento (.*):
a .* b
Exponenciacin elemento a elemento (.^):
a .^b
Suma, resta, multiplicacin y divisin por escalares:
escalar*a
92

Vectores y matrices
Ejemplo:
>> a = [3 5; 7 9]
a =
3
5
7
9
>> b = [2 4; 6 8]
b =
2
4
6
8

93

Vectores y matrices
Ejemplo:
>> a
ans =
3
5

7
9

>> b
ans =
2
4

6
8

94

Vectores y matrices
Ejemplo:
>> a+b
ans =
5
13

9
17

>> a-b
ans =
1
1

1
1

95

Vectores y matrices
>> a*b
ans =
36
68

52
100

>> a.*b
ans =
6
42

20
72

96

Vectores y matrices
>> a^2
ans =
44
84

60
116

>> a.^2
ans =
9
49

25
81

97

Vectores y matrices
Ejemplo:
El nmero de ptalos de 13 flores de una
determinada especie es el siguiente: 8, 10, 6,
5, 8, 11, 8, 10, 7, 10, 7, 10 y 9. Calcular la
media.
>> V = [8,10,6,5,8,11,8,10,7,10,7,10,9];
>> media = mean(v)
media =
8.3846

98

Vectores y matrices
Ejemplos:

Define el vector a = (2.3, 5.8, 9).


Encuentra el seno de a.
Suma 3 a cada elemento de a.
Define el vector b = (5.2, 3.14, 2).
Suma cada elemento del vector a y b.
Multiplica cada elemento del vector a por el
correspondiente de b.
Eleva al cuadrado cada elemento de a.

99

Vectores y matrices
Ejemplos:
Define el vector a = (2.3, 5.8, 9).

>> a = [2.3 5.8 9];


Encuentra el seno de a.

>> sin(a)
ans =
0.7457 -0.4646 0.4121
Suma 3 a cada elemento de a.

>> a + 3
ans =
5.3000 8.8000 12.0000
Define el vector b = (5.2, 3.14, 2).

>> b = [5.2 3.14 2];


100

Vectores y matrices
Ejemplos:
Suma cada elemento del vector a y b.
>> a + b
ans =
7.5000 8.9400 11.000
Multiplica cada elemento del vector a por el
correspondiente de b.
>> a .* b
ans =
11.9600 18.2120 18.0000
Eleva al cuadrado cada elemento de a.
>> a .^ 2
ans =
5.2900 33.6400 81.000
101

Vectores y matrices
Ejemplos:
Crea un vector c de valores igualmente
espaciados, desde 0 hasta 10, con incremento 1.

>> c = 0:10 c = [0:10]


Crea un vector d de valores igualmente
espaciados desde 20 a -10 con incremento -2.

>> d = 20:-2:-10 d =[20:-2:-10]


Emplea la funcin linspace para crear una matriz
de seis valores espaciados desde 10 a 20.

>> linspace(10,20,6)
ans =
10 12 14 16 18 20
102

Vectores y matrices
Ejemplo:
Crea un vector c de valores igualmente espaciados,
desde -10 hasta 11, con incremento 3 y calcula el
resultado de dividirlo por 3 y el resto de dividirlo por
el mismo divisor.
>> c = -10:3:11
c =
-10 -7 -4 -1 2 5 8 11
>> c/3
ans =
-3.333 -2.333 -1.333
1.666 2.666 3.666
>> rem(c,3)
ans =
-1 -1 -1 -1 2 2 2 2

-0.333

0.666

103

Vectores y matrices
Ejemplo:
Dada la variable v inicializada como sigue,
calcular la diferencia entre sus elementos.
>> V= [8,10,6,5,8,11,8,10,7,10,7,10,9];
>> diferencias= diff(v)
diferencias =
2 -4 -1 3 3 -3 2 -3 3 -3 3 -1

104

Vectores y matrices
Ejemplo:
Dada la matriz a inicializada como sigue,
calcular max(sum(a)).
>> a = [1 2 3; 4 5 6; 7 8 9];
>> sum(a)
ans =
12

15

18

>> max(sum(a))
ans =
18
105

Vectores y matrices
Ejemplo:
El coeficiente de friccin se puede calcular
midiendo la fuerza F requerida para mover la
masa m de la siguiente forma: = F / (m*g)
donde g = 9,81 m/s2. Dada la siguiente tabla
con
seis
experimentos,
determinar
el
coeficiente de friccin de cada uno de ellos y el
valor medio.
Experimento

Masa m (kg)

10

20

50

Fuerza F (N)

12,5

23,5

30

61

118

294

106

Vectores y matrices
Ejemplo (continuacin):
>> m = [2 4 5 10 20 50];
>> F = [12.5 23.5 30 61 117 294];
>> mu = F ./ (m*9.81)
mu =
0.6371 0.5989 0.6116 0.6218 0.5963 0.5994
>> mu_media= mean(mu)
mu_media =
0.6109

107

Tema 4: Programacin en Matlab

Programando en Matlab

Curso 2014/2015
Departamento de Ciencias de la Computacin e
Inteligencia Artificial

108

Fundamentos de programacin Matlab


MATLAB
proporciona
programacin muy potente.

un

lenguaje

de

Con l podemos automatizar tareas y crear


nuestras propias funciones adaptadas a reas de
aplicacin concretas.

109

Fundamentos de programacin Matlab


Se basa en la existencia de los denominados mfiles (ficheros-M):
ficheros de texto con extensin .m, que pueden
contener:
expresiones MATLAB,
definicin de funciones,
sentencias de entrada/salida,
repeticin y
bifurcacin, entre otras
(ficheros script o ficheros funcin).

110

Fundamentos de programacin Matlab


En la ventana de mandatos de Matlab podemos
introducir mandatos, normalmente en un nmero
pequeo, y ejecutarlos.
Aparecen varios problemas si es mayor ste
nmero de mandatos:
Para repetir un conjunto de mandatos hay que
teclearlos de nuevo.
Si se necesita hacer alguna modificacin sobre
los mandatos introducidos anteriormente, por
ejemplo, por que nos hayamos equivocado, hay
que volver a introducirlos todos.
111

Ficheros script
Son secuencias de mandatos MATLAB.
MATLAB ejecuta los mandatos del fichero en
orden de aparicin, igual que si se introdujeran en
la lnea de mandatos.
Cuando se ejecuta un mandato, se produce una
salida o resultado en la ventana de mandatos,
salvo que se ponga un ; al final.
Los ficheros pueden ser editados (corregidos o
modificados) y ejecutados cuantas veces se
desee.
112

Fundamentos de programacin Matlab


La interactividad con MATLAB se hace tediosa
entonces.
Por qu no crear un fichero de texto y meter en
l los mandatos que se ejecutarn posteriormente
tantas veces como queramos con un mnimo
esfuerzo?
Estos tipos de ficheros-M se denominan Scripts
o guiones.

113

Ficheros script
Se ejecutan poniendo en la ventana de mandatos
el nombre del fichero sin extensin, como si
fueran otro mandato cualquiera.
Tambin se pueden ejecutar mediante el men de
la aplicacin.
MATLAB debe conocer la ubicacin fsica en el
sistema de ficheros del fichero-m para poder
ejecutarlo.

114

Ficheros script
Ejemplo (fichero cuadrados.m):
%
%
%
%
x
y

Fichero script: cuadrados.m


Calcula los cuadrados de los nmeros 1 a 10.
Visualiza el vector con esos 10 nmeros (x) y
posteriormente un vector, y, con sus cuadrados.
= [1:10]
= x.^2

115

Ficheros script
Ejemplo (fichero cuadrados.m - invocacin):
>> cuadrados
x =
1 2 3 4 5
y =
1 4 9 16

6
25

36

9
49

10
64 81 100

116

Ficheros script
Variables globales:
Aquellas que, una vez creadas en MATLAB se
reconocen en cualquier parte, tanto en el
entorno de trabajo, como en los ficheros script.
Cuando se crea una variable en el entorno de
trabajo, sta podr ser usada en un fichero
script.
Cuando se crea una variable en un fichero
script, sta podr se usada en el entorno de
trabajo, a partir de que se haya ejecutado el
guin.
117

Ficheros script
Ejemplo:
% Fichero script: media.m
% Guin que calcula la media de tres variables
% inicializadas en la ventana de trabajo.
media_3_numeros = (n1 + n2 + n3) / 3

118

Ficheros script
Ejemplo (continuacin):
>> n1 = 6; n2 = 4; n3 = 5;
>> media
>> media_3_numeros =
5
>> otra_operacion = n1
>> otra_operacion =
6

119

Ficheros script
Ejemplo (continuacin):
% Fichero script: media2.m
% Guin que calcula la media de tres variables
% creadas en el propio script.
n1= 6; n2= 4; n3= 5;
media_3_numeros = (n1 + n2 + n3) / 3

120

Ficheros script
Ejemplo (continuacin):
>> media2
>> media_3_numeros =
5
>> otra_operacion= n1 * n2 * n3
>> otra_operacion =
120

121

Lectura de datos
Si cada vez que queremos ejecutar un fichero
script hay que meter explcitamente los valores
con los que queremos operar, se pierde potencia.
Veamos el siguiente ejemplo:

122

Lectura de datos
>> n1 = 6; n2 = 4; n3 = 5;
>> media
>> media_3_numeros =
5
>> n1 = 10; n2 = 20; n3 = 30;
>> media
>> media_3_numeros =
20
(o bien modificando el fichero media2.m cada vez
que quisiramos hacer clculos con nmeros
diferentes)
123

Lectura de datos
Por qu no pedirle al usuario los valores con los
que operar cada vez?
Solucin: mandato input.
variable= input (Mensaje al usuario)
Al ejecutarse, muestra en la ventana de mandatos
en mensaje entre comillas y permite al usuario
que introduzca un valor.
Cuando lo hace y pulsa <ENTER>, ste se
asignar a la variable.
124

Lectura de datos
Ejemplo:
% Fichero script: media3.m
% Guin que calcula la media de tres variables
% introducidas por teclado.
n1= input('Introduce un numero: ');
n2= input('Introduce un segundo nmero: ');
n3= input('Introduce un tercer nmero: ');
media_3_numeros = (n1 + n2 + n3) / 3

125

Lectura de datos
Ejemplo (continuacin):

>> media3
Introduce un nmero: 5 <ENTER>
Introduce un segundo nmero: 10 <ENTER>
Introduce un tercer nmero: 0 <ENTER>
media_3_numeros =
5

126

Lectura de datos
input: permite introducir cualquier valor escalar,
vectores o matrices, utilizando la notacin ya
presentada, y cadenas de caracteres, entre
comillas:
>> cad = input(introduce tu nombre:)
Introduce tu nombre: Juanma <ENTER>
cad =
Juanma

127

Escritura de datos
Cmo podemos crear mensajes de salida ms
elaborados?
Por defecto, MATLAB muestra el valor de una
variable u operacin, salvo que pongamos ; al
final.
Pero podemos necesitar dar ms informacin. Por
ejemplo, mensajes informativos sobre la
naturaleza de ciertos datos.
Dos mandatos de MATLAB: disp y fprintf.
128

Escritura de datos
Mandato disp:
disp(nombre de variable) disp(texto)
Visualiza el contenido de una variable o la cadena
pasada como argumento (no muestra el nombre
de la variable).
>> disp(Error: divisin por cero.)
Error: divisin por cero.
>> a= 5;
>> disp(a)
5
129

Escritura de datos
Ejemplo:
% Fichero script: media4.m
% Guin que calcula la media de tres variables
% introducidas por teclado y muestra los resultados por
% pantalla con disp.
n1= input('Introduce un numero: ');
n2= input('Introduce un segundo nmero: ');
n3= input('Introduce un tercer nmero: ');
media_3_numeros = (n1 + n2 + n3) / 3;
disp(' ')

% Se deja una lnea en blanco.

disp('La media de los tres nmeros introducidos es:')


disp(media_3_numeros)

130

Escritura de datos
Ejemplo (continuacin):
>> media4
Introduce un nmero: 5 <ENTER>
Introduce un segundo nmero: 10 <ENTER>
Introduce un tercer nmero: 0 <ENTER>
La media de los tres nmeros introducidos es:
5

131

Escritura de datos
Algunas consideraciones sobre disp:
La salida aparece en una nueva lnea.
Slo se puede visualizar una sola variable o
texto a la vez.
Para visualizar ms de un dato, se suelen crear
variables vectores o matrices.

132

Escritura de datos
Mandato fprintf:
Permite combinar la salida de texto y variables.
fprintf(texto)
fprintf(texto en \n dos lneas)
fprintf(nueva lnea al final del texto\n)

\n = Nueva lnea.
\t = tabulador.

133

Escritura de datos
Datos y texto conjuntamente:
fprintf(texto %f texto, nombre_variable)

El valor de la variable se sustituir en el %f y se


mostrar todo por pantalla.
Se pueden poner tantas variables como se desee,
siempre con su % asociado.
fprintf(La altura es %f y el peso es %f\n,
alt, peso)

%i se utiliza cuando la variable es entera.


134

Operadores Relacionales
Permiten comparar dos escalares, matrices,
vectores, variables o resultados de evaluar una
expresin o funcin.
El resultado es 0 si es falso y 1 si es verdadero.

Igual ==
Distinto ~=
Mayor que >
Menor que <
Mayor o igual >=
Menor o igual <=
135

Operadores Relacionales
Ejemplo:
>> x = pi
x =
3.1416
>> x ~= 3, x ~= pi
ans =
1
ans =
0

136

Operadores Relacionales
Ejemplo:
>> x =
-2.0000 3.1416 5.0000
-1.0000 0 1.0000
% Se hace la comparacin elemento a elemento
% del vector.
>> x == 0
ans =
0 0 0
0 1 0
>> x > 1, x >=-1
ans =
0 1 1
0 0 0
ans =
0 1 1
1 1 1

137

Operadores Lgicos
Y (And): &&
True (1) si los dos operandos son true; false
(0) en caso contrario.
O (Or): ||
True (1) si algn operando es true, false (0)
en caso contrario.
No (Not): ~
True (1) lo convierte en false y false (1) en
true.

138

Operadores Lgicos
Ejemplo:
x =
-2.0000 3.1416 5.0000
-5.0000 -3.0000 -1.0000
>> x > 3 && x < 4
ans =
0 1 0
0 0 0
>> x > 3 || x == -3
ans =
0 1 1
0 1 0
139

Estructuras de Control
Hasta ahora nuestros ficheros script o funcin
contenan un mandato detrs de otro, sin
posibilidad de poder repetir mandatos o de
ejecutar unos si se dan ciertas condiciones u
otros, en caso que sean otras.
Ms potencia a los ficheros-m (script y funciones):
Estructuras de control.
Estructuras condicionales.
Estructuras de repeticin.
140

Sentencias Condicionales
if-end
A veces slo se desea ejecutar una sentencia o
conjunto de ellas si se cumple una condicin.
Expresin lgica (vale
verdadero o falso)

if expresin
sentencia(s)
end

Si vale verdadero se
ejecutan las sentencias

141

Sentencias Condicionales
if-end
A veces slo se desea ejecutar una sentencia o
conjunto de ellas si se cumple una condicin.
>> a = pi^exp(1); c = exp(pi);
>> if a >= c
b = sqrt(a^2 - c^2)
end

142

Sentencias Condicionales
if-else-end
En otras ocasiones, si la condicin se cumple
se ejecutarn una(s) sentencia(s) y si no, se
ejecutarn otra(s):
Expresin lgica (vale
verdadero o falso)

if expresin
sentencia(s)
else
sentencia(s)
end

Si vale verdadero se
ejecutan estas sentencias

Si vale falso se ejecutan


estas sentencias
143

Sentencias Condicionales
if-else-end
x = input('Escribe un nmero: ');
if rem(x,2) == 0
disp('El nmero es par')
else
disp('El nmero es impar')
end
disp('Fin del condicional')

144

Sentencias Condicionales
if-else-end
idiomas=input(Cuntos idiomas hablas?)
if idiomas > 1
disp(Muy bien)
else
disp(Tienes que aprender uno antes de
terminar el grado.)
end

145

Sentencias Condicionales
if-elseif-else-end

Permite anidar sentencias if dentro de otras.

Expresin lgica (vale


verdadero o falso)

Si expresion 1 es verdadero se
ejecutan estas sentencias

if expresin1
sentencia(s)
elseif expresin2
sentencia(s)
else
sentencia(s)
end

Si expresion1 vale falso se


evala expresion2
Si expresion2 es verdadero
se ejecutan estas sentencias

Si expresion2 vale falso se


ejecutan estas sentencias

146

Sentencias Condicionales
if-elseif-else-end
edad = input('Qu edad tienes?')
if edad < 18
disp('No puede sacarse el carnet de conducir.')
elseif edad <= 70 % edad >= 18
disp('Puede sacarse el carnet.')
else % edad > 70
disp('Requiere una licencia especial')
end

147

Sentencias Condicionales
Ejemplo:
Escribe el cdigo necesario para leer una nota de un
alumno (entre 0 y 10) y devuelva su calificacin
alfanumrica.
nota = input('introduce una nota:')
if nota >= 0 && nota < 5
nota_en_letra = 'suspenso'
elseif nota >5 && nota < 7
nota_en_letra = 'aprobado'
elseif nota >= 7 && nota < 9
nota_en_letra = 'notable'
elseif nota >= 9 && nota <= 10
nota_en_letra = 'matricula'
else
nota_en_letra = 'nota incorrecta'
end
148

Sentencias Condicionales
Combinndolo todo

x = input('Escribe un nmero: ');


if rem(x,2) == 0
if rem(x,3) == 0
disp('El nmero es divisible por 2 y 3')
else
disp('El nmero es divisible por 2 pero no por 3')
end
elseif rem(x,3) == 0
disp('El nmero es divisible por 3 pero no por 2')
end

149

Sentencias Condicionales
Ejemplo:
Qu se muestra por pantalla?
a = 10;
if a ~= 0
disp('a is not equal to 0')
end
a = 10;
if a > 0
disp('a is positive')
else
disp('a is not positive')
end

150

Sentencias Condicionales
Ejemplo (continuacin):
a = 5; b = 3; c = 2;
if a < b*c
disp('Hello world')
else
disp('Goodbye world')
end
a = 5; b = 3; c = 2;
if a*b < c
disp('Hello world')
else
disp('Goodbye world')
end
151

Sentencias Condicionales
Ejemplo (continuacin):
p1 = 3.14; p2 = 3.14159;
if p1 == p2
disp('p1 and p2 are equal')
else
disp('p1 and p2 are not equal')
end
a = 5; b = 10;
if a == b
disp('a and b are equal')
else
disp('a and b are not equal')
end
152

Sentencias Condicionales
Ejemplo (continuacin):
if a < 3 || a > 10
disp('Hello world')
else
disp('Goodbye world')
end
if a < 7 || a >= 3
disp('Hello world')
else
disp('Goodbye world')
end

153

Sentencias Condicionales
Ejemplo:
Para qu valores se imprimir Hello Word?
if

a == false
disp('Hello world')
else
disp('Goodbye world')
end
if a >= 0 && a < 7
disp('Hello world')
else
disp('Goodbye world')
end
154

Sentencias de Repeticin
En ocasiones hay que repetir la ejecucin de un
conjunto de sentencias un nmero determinado
de veces, o mientras se d una condicin.
Cada paso, se denomina iteracin.
La sentencia que permite dicha repeticin se
denomina bucle.
Existen dos tipos: for y while

155

Bucle for

Valor inicial de k

El incremento de k

Variable ndice del

(valor que tomar

(despus de cada

bucle

en el primer paso)

paso)

for k = p:l:f
.
. sentencias Matlab
.
end

ltimo valor que


puede tomar k
(valor final de k)

156

Sentencias de Repeticin
bucle for-end
Permite reiterar la ejecucin de un conjunto de
sentencias un nmero determinado de veces.
Formato general:
for k = p:l:f
sentencia(s)
end
Donde
k = variable contadora del bucle.
p = primer valor; l = incremento; f= ltimo valor.
157

Sentencias de Repeticin
bucle for-end
Si no se pone incremento, entonces se toma por
defecto 1 (for k = 1:5).
El incremento puede ser negativo
(for k=25:-5:5).
La variable contadora tambin puede tomar
valores especficos (for k= [ 4 5 6 9 10] ).
Cuando un bucle acaba, la variable contadora
toma el valor que se le haya dado en la ltima
158
iteracin.

Sentencias de Repeticin
bucle for-end
Ejemplo:
for k = 1:3:10
x= k^2;
end
k toma los valores 1, 4, 7 y 10, y x los valores 1,
16, 49 y 100, respectivamente.

159

Sentencias de Repeticin
Otro ejemplo
x =
for
y
x
end

0;
k = 1:3:10
= x + k;
= y;

12

12

10

22

Ejemplos
for k = 1:3:10
fprintf('%d al cuadrado es %d \n', k , k^2)
end
1 al cuadrado es 1
4 al cuadrado es 16
7 al cuadrado es 49
10 al cuadrado es 100

x = 2;
for k = 1:10
fprintf('%d por %d = %d \n', x,k, x*k)
end

for k = 10:-2:0
fprintf('%d \n',k)
end

10
8
6
4
2
0

2 por
2 por
2 por
..
2 por

1 = 2
2 = 4
3 = 6
10 = 20

Ejemplo

Leer 10 valores desde el teclado y


calcular su media.
suma = 0;
for t = 1:10
s = input('Valor:');
suma = suma + s;
end
fprintf('La media es:%f', suma/10)

Manipulacin de vectores usando for

El esquema bsico para recorrer un


vector utilizando un bucle for es:
Sea v un vector de longitud N
for i = 1:N
manipular v(i)
end

Dado un vector de enteros V, mostrar sus


elementos utilizando un bucle for.

v = [ 1 4 -1 -8 5 7 2 -10];
N = length(v)
for i = 1:N
fprintf('posic:%d,valor:%d \n',i,v(i))
end

posic:1,
posic:2,
posic:3,
posic:4,
posic:5,
posic:6,
posic:7,
posic:8,

valor:1
valor:4
valor:-1
valor:-8
valor:5
valor:7
valor:2
valor:-10

Manipulacin de vectores usando for

Mostrar los elementos positivos de V.

v = [ 1 4 -1 -8 5 7 2 -10]; N = length(v);
for i = 1:N
if v(i) >= 0
fprintf('posic:%d, valor:%d \n',i,v(i))
end
end

posic:1,
posic:2,
posic:5,
posic:6,
posic:7,

Contar cuantas veces aparece un valor k en V


v = [ 1 4 -1 -8 1 7 1 -10]; N = length(v);
k = 1;
cant = 0;
for i = 1:N
if v(i) == k
cant = cant + 1;
end
end
fprintf('El %d aparece %d veces',k,cant);

valor:1
valor:4
valor:5
valor:7
valor:2

Manipulacin de vectores usando for


Calcular la media de los elementos positivos de V
v = [ 1 4 -1 -8 5 7 2 -10];
N = length(v);
suma = 0;
cant_pos = 0;
for i = 1:N
if v(i) >= 0
suma = suma + v(i);
cant_pos = cant_pos + 1;
end
end
fprintf('La media es:%f', suma/cant_pos)

Sentencias de Repeticin
Bucles anidados
Permite ejecutar un bucle for un nmero repetido
de veces.
Formato general:
Por cada iteracin
del bucle externo

for i = p1:l1:f1
for j = p2:l2:f2
sentencia(s)
end
end

Se ejecuta el bucle
interno completo

166

Bucles anidados
El bucle interno se ejecuta completo para cada valor de la
variable contadora del bucle externo
m = 2; n = 3;
for i = 1:m
for j = 1:n
fprintf (i vale %d, j vale %d \n', i, j);
end
end

i
i
i
i
i
i

vale
vale
vale
vale
vale
vale

1,
1,
1,
2,
2,
2,

j
j
j
j
j
j

vale
vale
vale
vale
vale
vale

1
2
3
1
2
3

Manipulacin de matrices usando for


Siendo M una matriz de m x n
for fila = 1:m
for columna = 1:n
manipulo M(fila,columna)
end
end

Mostrar los elementos de la matriz mat


mat = [1 -2 3; 0 1 -3]
nCol = 3;
nFila = 2;
for fila = 1:nFil
for col = 1:nCol
fprintf ('fila vale %d, columna vale %d \n', fila, col);
fprintf ('El elemento vale %d \n', mat(fila,col);
end
end

Manipulacin de matrices usando for


Contar la cantidad de elementos positivos de M (asumimos
que ya est definida y tiene m filas y n columnas)
cant_pos = 0;
for i = 1:n
for j = 1:n
if M(i,j) > 0
cant_pos = cant_pos + 1;
end
end
end
fprintf('Hay %d positivos \n',cant_pos)

Manipulacin de matrices usando for

Mostrar los elementos de la triangular superior/inferior


de M (incluyendo la diagonal) M = 4
0
1
0
5

n = 5;
for i = 1:n
for j = 1:i
fprintf('%d
end
fprintf('\n');
end

n = 5;
for i = 1:n
for j = i:n
fprintf('%d
end
fprintf('\n');
end

-2
-10
-6
2

',M(i,j));

4
-2
-10
-6
2
4

',M(i,j));

2
-5
-6
-9

2
-5
-6
-9
0
2

3
-1
6
9

4
-1
-1
-7

-1
6 -1
9 -7
1
3
-1

0 5
4 -9
-1 8
-1 7
8

-9
8
7
8

Sentencias de Repeticin
Ejemplo:
Cuntas veces se ejecutan cada uno de estos
bucles?
for a = 0:50
disp('Hello World')
end
for a = -1:-1:-50
disp(Hola Mundo)
end
for a = -1:1:-50
disp('Bonjour Monde')
end
171

Sentencias de Repeticin
Ejemplo (continuacin):
for a = 10:10:50
for b = 0:0.1:1
disp('Hola Mundo')
end
end
for a = 10:10:50
for b = 0:0.1:-1
disp('Hola Mundo')
end
end

172

Sentencias de Repeticin
Ejemplo (continuacin):
count = 0;
for d = 1:7
for h = 1:24
for m = 1:60
for s = 1:60
count = count + 1;
end
end
end
end
count

173

Sentencias de Repeticin
Ejemplo:
Dada una lista de notas, mostrar por pantalla
cuntas corresponden a aprobado.
notas = [4, 6, 7, 9.9, 2, 3, 4.5]
contador = 0
for k=1:length(notas)
if notas(k) >= 5
contador = contador + 1
end
end
display(contador)
174

Sentencias de Repeticin
bucle while-end
Se emplean cuando se necesita un proceso
iterativo, pero no se conoce a priori cuntas veces
se ejecutar.
Las sentencias se repiten mientras se d una
condicin.
Expresin lgica (vale
verdadero o falso)

Si vale verdadero se ejecutan


estas sentencias y volvemos a

while expresion
sentencia(s)
end

evaluar la expresin

Si vale falso salimos del


bucle
175

Sentencias de Repeticin
bucle while-end
Se emplean cuando se necesita un proceso iterativo, pero
no se conoce a priori cuntas veces se ejecutar. Las
sentencias se repiten mientras se d una condicin.

while expresin_condicional
sentencia(s)
end

176

Sentencias de Repeticin
Un ejemplo
x = 0;
y = 1;
while x <= 15
x = x + 1;
y = 2 * y;
end

16

Sentencias de Repeticin
bucle while-end
La expresin condicional debe incluir al menos
una variable.
Dicha(s)
variable(s)
debe
tener
valores
previamente asignados al ejecutar el bucle while
por primera vez.
Al menos una variable debe de cambiar de valor
en el cuerpo del bucle while. En caso contrario, el
bucle no terminara nunca (bucle infinito).
178

Sentencias de Repeticin
Ejemplo (continuacin):
n = 1;
while n > 0
disp('Hello World')
n = n + 1;
end
n = 10;
while n > 0
disp('Hello World')
n = n - 1;
end

179

Sentencias de Repeticin
Ejemplo (continuacin):
a = 1
while a < 100
a = a*2
end
a = 1;
n = 1;
while a < 100
a = a*n
n = n + 1;
end

180

Funciones
Una funcin matemtica, f(x), asocia un nico
valor a cada uno de los valores de x con los que
se invoque: y = f(x)
Cuando se introduce un valor de entrada, x, se
obtiene otro de salida, y.
MATLAB ofrece muchas funciones siguiendo este
modelo matemtico (sin(x), sqrt(x),).
Qu ocurre cuando nos hace falta una funcin
que no est predefinida en MATLAB?
181

Funciones
Cuando la funcin es sencilla y slo se tiene que
ejecutar una vez, se introduce directamente en el
entorno de trabajo o en el fichero script.
Pero si se tiene que evaluar muchas veces para
diferentes argumentos, entonces es conveniente
crear una funcin definida por el usuario.
Una vez creada y almacenada, puede ser
empleada como cualquier otra funcin de
MATLAB.

182

Funciones
Las funciones se almacenan en los llamados
ficheros de funcin.
Tienen una entrada y una salida.
Los clculos de la funcin se hacen considerando
los datos de entrada y se sacan al exterior por
medio de la salida.
La entrada y la salida pueden estar compuestas
por una o varias variables, escalares o vectores.

183

Funciones
Las funciones suelen utilizarse dentro de otros
ficheros de funcin o scripts de mayor tamao.
De esta forma se pueden construir programas
grandes uniendo bloques ms pequeos, que se
pueden probar independientemente.

184

Estructura de una funcin


Cabecera de la funcin
function [cociente,resto] = division_entera(dividendo, divisor)
% Calcula y devuelve el cociente y el resto de una divisin.
% Arg. Entrada: dividendo = el dividendo de la divisin.
% Arg. Entrada: divisor = el divisor de la divisin.

Lnea
H1

% Arg. Salida: cociente = el cociente de la divisin.


% Arg. Salida: resto = el resto de la divisin.

resultado = dividendo/divisor;

Cuerpo de la funcin

Texto de
ayuda

cociente = fix(resultado);
resto = rem(dividendo,divisor);

Asignacin de valores a los


argumentos de salida
185

Funciones
Lnea de cabecera de la funcin:
Debe ser la definicin de la propia funcin.
Indica que es un fichero de funcin.
Define el nombre de la funcin.
Define el nmero y orden de los argumentos de
entrada y salida.
function [argumentos salida] =
nombre_funcion (argumentos entrada)

La palabra function debe ser la primera.


El nombre de la funcin sigue las reglas de
denominacin que las variables.
Evitar nombres de funciones ya existentes..
186

Funciones
Argumentos de entrada y salida:
Se emplean para transferir datos hacia dentro
de la funcin (los de entrada) y hacia fuera de
ella (los de salida).
Los de entrada se introducen entre parntesis y
separados por comas, justo despus del
nombre de la funcin.
Los de salida se introducen entre corchetes y
separados por comas, justo despus de la
palabra function.
Las funciones puede tener o no parmetros de
entrada y/o de salida.
187

Funciones
function [v, a] = vel_ace(s, t)
(Dos argumentos de entrada y dos de salida).
function [superf] = area(alto, largo)
(Uno de salida y dos de entrada)
function trayectoria (v,h,g)
(Tres de entrada y ninguno de salida)
function sinNada
(Sin argumentos de entrada ni de salida)

188

Funciones
Argumentos de entrada y salida:
Los argumentos de salida son aquellos que se
pueden insertar en una variable
Cuando se invoque a una funcin, a los
argumentos de salida se les deben asignar
valores durante la llamada a la misma:
area_rectangulo = area(5,10)
Tambin es posible transferir datos de entrada
y de salida mediante los mandatos input y
fprintf.
189

Funciones
Comentarios:
Comienzan por un carcter %.
La lnea H1 es la primera y contiene el nombre
de la funcin y una descripcin corta de la
misma.
Se emplea para posibilitar bsquedas con el
mandato lookfor.
El resto de lneas, antes de la primera
sentencia, se utilizan para describir los
argumentos de entrada y salida, as como para
realizar una explicacin ms detallada de lo
que hace la funcin.
190

Funciones
Comentarios:
Los comentarios que van entre la declaracin
de la funcin y la primera sentencia, se
muestran cuando se ejecuta el mandato
help nombre_funcion
en la ventana de mandatos.
En el resto de la funcin es conveniente
introducir comentarios para explicar las
diferentes operaciones que se estn realizando.
191

Funciones
Cuerpo de la funcin:
Contiene la secuencia de operaciones previstas
para realizar la accin para la que ha sido
diseada la funcin.
Puede contener cualquier mandato MATLAB
(clculos, operaciones, llamadas a funciones,
instrucciones de control de flujo, operaciones
de entrada y salida), comentarios, lneas en
blanco, etc.
Si la funcin tiene argumentos de salida,
entonces deber haber alguna sentencia que
asigne valores a ellos.
192

Funciones
Denominacin de los ficheros funcin:
Se suelen llamar igual que la funcin que
contienen, aadiendo la extensin .m.

193

Funciones
Utilizacin de los ficheros funcin:
Una funcin definida por el usuario se emplea
igual que una funcin predefinida en MATLAB.
Se puede ejecutar desde la ventana de
mandatos, un fichero script u otra funcin.

194

Funciones
Ejemplo:
>> [cociente, resto] = division_entera (17,3)
cociente =
5
resto =
2
>> var_1 = 23; var_2 = 5;
>> [x, y] = division_entera (var_1, var_2)
x =
4
y =
3

195

Ejemplo en detalle
>>

[cociente, resto] = division_entera (17,3)

function [cociente,resto] = division_entera(dividendo, divisor)


% Calcula y devuelve el cociente y el resto de una divisin.
resultado = dividendo/divisor;
cociente = fix(resultado);
resto = rem(dividendo,divisor);

cociente =
5
resto =
2

196

Ejemplo en detalle

>> var_1 = 23; var_2 = 5;

>> [x, y] = division_entera (var_1, var_2)


function [cociente,resto] = division_entera(dividendo, divisor)
% Calcula y devuelve el cociente y el resto de una divisin.
resultado = dividendo/divisor;
cociente = fix(resultado);
resto = rem(dividendo,divisor);

x =
4
y =
3
197

Funciones
Ejemplo:
Clculo de la energa cintica de un objeto en
movimiento.
function e = CalcularEnergiaCinetica(m,v)
% Calcula la energa cintica de un objeto en movimiento.
% Argumentos de entrada: m = masa, v = velocidad.
% Argumentos de salida: e = energa cintica del objeto.
e = 1/2 * m * v .^2

198

Funciones
Ejemplo (continuacin):
Clculo de la energa cintica de un objeto en
movimiento. Prueba de la funcin.
>> velocidad = 25; % m/s
>> masa = 1000; % Kg
>> energia = CalcularEnergiaCinetica(masa,velocidad)
energia =
312500
% julios.

199

Funciones
Ejemplo:
Resolucin de una ecuacin de segundo grado.
function [x1,x2]= ecuacion2(a,b,c)
% Esta funcin resuelve ecuacin de segundo grado
% Parmetros de entrada: a, b y c.
% Parmetros de salida: x1 y x2 (soluciones).
d=b^2-4*a*c;
x1= (-b+sqrt(d))/(2*a);
x2 = (-b-sqrt(d))/(2*a);

200

Funciones
Ejemplo:
Clculo del factorial de un nmero entero (n!).
function fact

= factorial (n)

% Calcula y devuelve el factorial de un entero.


% Arg. Entrada: n= nmero a calcular su factorial.
% Arg. Salida: fact = valor del factorial.
a=1
for i=1:n
a= i*a
end
fact= a
201

Funciones
Ejemplo:
Clculo del factorial de un nmero entero (n!),
comprobando que n es un entero positivo.
function fact

= factorial (n)

if n > 0
a=1
for i=1:n
a= i*a
end
fact= a
else
disp('la entrada debe ser un entero positivo')
fact = -1
end
202

Funciones
Ejemplo:
Dada una matriz de n x n de nmeros enteros,
escribe una funcin que muestre por la pantalla
las filas y columnas de los valores distintos de 0.
function distintoQueCero(matriz)
distintoQueCero(n, matriz)
function
forfila
fila= =1:size(matriz,1)
1:n
for
forcolumna=1:size(matriz,2)
columna=1:n
for
if matriz(fila,columna) ~= 0
if matriz(fila,columna) ~= 0
fprintf('matriz(%d,%d) == %d es distinto que 0', ...
fprintf('matriz(%d,%d)
== %d es distinto que 0', ...
fila,columna,matriz(fila,columna)
end fila,columna,matriz(fila,columna))
endend
end end
end
203

Ficheros script vs Funciones


Ficheros scripts

Ficheros funcin

No tienen argumentos

Pueden tomar argumentos de entrada y


devolver variables de salida

Se usan principalmente para la


automatizacin de una serie de
mandatos que deben introducirse
varias veces en una sesin interactiva.

Permiten extender el sistema MATLAB


con nuevos mandatos de un campo de
aplicacin especfica.

204

Tema 4: Programacin en Matlab

Qu hemos visto en este


tema?

205

Qu hemos visto en este tema?

Interccin con Matlab


Operadores y precedencia
Uso de funciones
Constantes
Precisin de los resultados
Variables
Comentarios
Cadenas de caracteres
Vectores y matrices
206

Qu hemos visto en este tema?

Programando en Matlab

Fundamentos de la programacin en Matlab


Ficheros script
Lectura de datos
Escritura de datos
Funciones
Fuciones script vs funciones
Operadores relacionales y lgicos
Sentencias condicionales
Sentencias de repeticin
207

Anda mungkin juga menyukai