Está en la página 1de 37

Programación Científica

Grado de Física, curso 1

Programación con M ATLAB

Texto de las transparencias

Ánálisis Matemático
Ciencias de la Computación

Universidad de Córdoba
Dpto. Informática y Análisis Numérico

©2022-23
Índice
1. Archivos de mandatos 2
1.1. Entrada de variables . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Salida de variables . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Escritura en ficheros . . . . . . . . . . . . . . . . . . . . . . . . 11

2. Ficheros function 15
2.1. Variables de entrada y salida . . . . . . . . . . . . . . . . . . . . 16
2.2. Funciones en línea . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3. Definición con el símbolo de función @ . . . . . . . . . . . . . . 22
2.4. Mandato feval . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3. Operadores relacionales y lógicos 24

4. Programación en Matlab 28
4.1. Sentencia condicional simple . . . . . . . . . . . . . . . . . . . . 28
4.2. Sentencia condicional doble . . . . . . . . . . . . . . . . . . . . 29
4.3. Sentencia condicional múltiple . . . . . . . . . . . . . . . . . . . 31
4.4. Estructura de repetición indexada . . . . . . . . . . . . . . . . . . 32
4.5. Estructura de repetición condicional . . . . . . . . . . . . . . . . 33
4.6. Estructura de elección entre varios casos . . . . . . . . . . . . . . 34

Contenido

Índice

Archivos M

La programación en M ATLAB se realiza básicamente sobre archivos M.

Estos archivos, como ya habíamos comentado, son simplemente archivos


ASCII que pueden ser creados y modificados con cualquier editor de textos,
aunque nosotros usaremos el editor de textos que incluye M ATLAB.

Hay dos tipos diferentes de ficheros M:

• los archivos de mandatos o scripts y


• los ficheros function.

2
1. Archivos de mandatos

Archivos de mandatos
Los archivos de mandatos son archivos M que contienen una sucesión de instruccio-
nes M ATLAB.

Una vez editado, se guarda en algún directorio que se encuentre dentro del path de
búsqueda de M ATLAB, o bien dentro del directorio de trabajo.

Las instrucciones que contiene este archivo se ejecutan cuando el nombre del archi-
vo se introduce en la ventana de mandatos del sistema (sin la extensión .m).

Todas las variables que se hayan definido o creado dentro de este archivo, después
de su ejecución, pasarán a formar parte del espacio de trabajo (Workspace).

Se debe tratar, por tanto, que las variables del Workspace NO COINCIDAN con las
que aparecen en los archivos M que se han de ejecutar.

1.1. Entrada de variables

Valores de entrada en un fichero script

La asignación de valores a las variables utilizadas dentro de un script


puede hacerse de tres formas:

1. La variable se define y se asigna dentro del propio fichero.


2. La variable se define y se asigna en la Ventana de Mandatos.
3. La variable se define dentro del fichero pero se asigna en la Ventana de
Mandatos.

Ejemplo altura1.m

1 % Cálculo de la altura de una persona en pulgadas y pies.


2 % El dato es la altura en centímetros (Alturacm)
3 % La asignación de la variable se hace dentro del fichero
4 Alturacm = 172
5 % Cálculo de la altura en pulgadas (Alturapulgadas)
6 Alturapulgadas = Alturacm/2.54
7 % Cálculo de la altura en pies (Alturapies)
8 Alturapies = Alturapulgadas/12

3
Ejemplo altura1.m

>> altura1
Alturacm =
172
Alturapulgadas =
67.7165
Alturapies =
5.6430

Variables definidas y asignadas en Ventana de Mandatos

La asignación de la variable se hace en la Ventana de Mandatos y después se


ejecuta el script.

Si el usuario desea ejecutar el script con un valor diferente, ha de definirlo


en la Ventana de Mandatos y luego volver a ejecutar el script.

Ejemplo altura2.m

1 % Cálculo de la altura de una persona en pulgadas y pies.


2 % El dato es la altura en centímetros (Alturacm)
3 % La asignación de la variable se hizo en la
4 % Ventana de Mandatos antes de ejecutar este fichero
5 % Cálculo de la altura en pulgadas (Alturapulgadas)
6 Alturapulgadas = Alturacm/2.54
7 % Cálculo de la altura en pies (Alturapies)
8 Alturapies = Alturapulgadas/12

Ejemplo altura2.m

4
Alturacm=172;
>> altura2
Alturapulgadas =
67.7165
Alturapies =
5.6430
>> Alturacm=165;
>> altura2
Alturapulgadas =
64.9606
Alturapies =
5.4134

Variables definidas dentro del fichero y asignadas en la Ventana de Mandatos

La variable se define en el script y cuando se ejecuta se le pide al usuario un valor concreto a través
de la Ventana de Mandatos para asignárselo a dicha variable.

Para hacer esto se utiliza el mandato input.

La forma de usar este mandato es:

1 nombre_variable = input (’Mensaje que se muestra en la


2 Ventana de Mandatos’)

Cuando se ejecuta el mandato input aparece el mensaje en la Ventana de Mandatos que pide que se
introduzca el valor de la variable.

Una vez introducido el valor en la Ventana de Mandatos, se pulsa volver y este valor se almacena en la
variable.

Ejemplo altura3.m

1 % Cálculo de la altura de una persona en pulgadas y pies.


2 % El dato es la altura en centímetros (Alturacm)
3 % La asignación de la variable se pide en este fichero y
4 %se introduce en la Ventana de Mandatos
5 %
6 Alturacm = input(’Introduzca la altura en cm ’);
7 % Cálculo de la altura en pulgadas (Alturapulgadas)
8 Alturapulgadas = Alturacm/2.54
9 % Cálculo de la altura en pies (Alturapies)
10 Alturapies = Alturapulgadas/12

5
Ejemplo altura3.m

>> altura3
Introduzca la altura en cm 172
Alturapulgadas =
67.7165
Alturapies =
5.6430

1.2. Salida de variables

Mandatos de salida

Sabemos que M ATLAB presenta los valores de las variables si nos e añade
un ; al final del mandato que define la variable.

Pero otras veces es necesario mostrar mensajes que den más información.
Para ello pueden utilizarse dos mandatos:

• disp que muestra la salida por pantalla,


• fprintf que se suele utilizar para visualizar un resultado en la pan-
talla o para guardarlo en un fichero.

El mandato disp

Se usa para visualizar el contenido de una variable sin mostrar su nombre.

La forma de usar este mandato es:

1 disp(nombre_variable) o disp(’Mensaje’)

En un mandato disp sólo se puede visualizar una variable.

6
Ejemplo

>> matriz=[1,2,3;4,5,6];
>> disp(matriz)
1 2 3
4 5 6

>> disp(’Esto es un mensaje de texto’)


Esto es un mensaje de texto
>>

Ejemplo altura4.m

1 % Cálculo de la altura de una persona en pulgadas y pies.


2 % El dato es la altura en centímetros (Alturacm)
3 % La asignación de la variable se pide en este fichero y
4 % se introduce en la Ventana de Mandatos
5 %
6 Alturacm = input(’Introduzca la altura en cm ’);
7 % Cálculo de la altura en pulgadas (Alturapulgadas)
8 Alturapulgadas = Alturacm/2.54;
9 disp(’La altura en pulgadas es =’)
10 disp(Alturapulgadas)
11 % Cálculo de la altura en pies (Alturapies)
12 Alturapies = Alturapulgadas/12;
13 disp(’La altura en pies es =’)
14 disp(Alturapies)

Ejemplo altura4.m

>> altura4
Introduzca la altura en cm 172
La altura en pulgadas es =
67.7165

La altura en pies es =
5.6430

7
El mandato fprintf

Se usa para visualizar salidas de programas (texto y datos) en la pantalla, o


para almacenarlas en un fichero.

Con este mandato, la salida puede tener un formato preestablecido.

Se pueden combinar textos y resultados numéricos en la misma línea.

La forma de usar este mandato para visualizar mensajes de texto es

1 fprintf(’Mensaje en forma de cadena’)

El mandato fprintf

Para formatear la salida del texto se puede usar:

\ n Salto de línea.
\ b Carácter de borrado.
\ t Tabulación horizontal.

Cuando existe en un programa más de un mandato fprintf para que sus


salidas no continúen en la misma línea, es necesario añadir al final de la
anterior o al principio de la posterior el salto de línea \n.

Ejemplo

>> fprintf(’Este mensaje saldrá \n en dos líneas\n’)


Este mensaje saldrá
en dos líneas
>>

8
El mandato fprintf

Para visualizar texto y datos juntos, se usa la sintaxis

1 fprintf(’Texto %-5.2f texto adicional’,nombre_variable)

- Flag o bandera (opcional).


5.2 Ancho del campo y precisión (opcional).
f Carácter de conversión (obligatorio).

Posibles flag
signo menos (−) Justifica a izquierda el número dentro del campo %-5.2f
signo más (+) Visualiza el carácter de signo (+ o −) delante del número %+5.2f
espacio Inserta un espacio antes del valor % 5.2f
cero (0) Añade ceros si el número es más pequeño que el campo %05.2f

Ejemplo ejemplo1_fprintf.m

1 % Ejemplo 1 de formato de texto y


2 % variables con fprintf
3 %
4 fprintf(’Este valor %-5.2f es el de pi\n’,pi)
5 fprintf(’Este valor %+5.2f es el de pi\n’,pi)
6 fprintf(’Este valor % 5.2f es el de pi\n’,pi)
7 fprintf(’Este valor %05.2f es el de pi\n’,pi)

Ejemplo ejemplo1_fprintf.m

>> ejemplo1_fprintf
Este valor 3.14 es el de pi
Este valor +3.14 es el de pi
Este valor 3.14 es el de pi
Este valor 03.14 es el de pi
>>

9
Ancho de campo

La especificación del ancho y precisión del campo (5.2 en el ejemplo ante-


rior) es opcional.

El primer número (5 en el ejemplo) es el ancho del campo, el cual nos indica


el número de dígitos en la visualización (incluido el punto decimal).

Si el número que se visualiza es menor que el ancho del campo, se añadirán


ceros o espacios delante del número en cuestión.

El segundo número (2 en el ejemplo) corresponde a la precisión y especifica


el número de dígitos que se mostrarán a la derecha del punto decimal.

Ejemplo ejemplo2_fprintf.m

1 % Ejemplo 2 de formato de texto y variables


2 % con fprintf
3 %
4 fprintf(’Este valor %05.2f es el de pi\n’,pi)
5 fprintf(’Este valor %07.2f es el de pi\n’,pi)
6 fprintf(’Este valor %07.4f es el de pi\n’,pi)
7 fprintf(’Este valor %06.3f es el de pi\n’,pi)

Ejemplo ejemplo2_fprintf.m

>> ejemplo2_fprintf
Este valor 03.14 es el de pi
Este valor 0003.14 es el de pi
Este valor 03.1416 es el de pi
Este valor 03.142 es el de pi
>>

Formato de conversión

El último elemento es el formato de conversión (f en el ejemplo).

Esta especificación es obligatoria.

10
e Notación exponencial en minúscula
f Notación de punto fijo
g Representación en formato corto de las notaciones e o f
i Entero

Ejemplo ejemplo3_fprintf.m

1 % Ejemplo 3 de formato de texto y variables


2 % con fprintf
3 %
4 fprintf(’Esto %e es pi\n’,pi)
5 fprintf(’Esto %f es pi\n’,pi)
6 fprintf(’Esto %g es pi\n’,pi)
7 fprintf(’Esto %i es pi escrito como entero\n’,round(pi))
8 fprintf(’Esto %f es pi escrito en punto fijo\n’,round(pi))

Ejemplo ejemplo3_fprintf.m

>> ejemplo3_fprintf
Esto 3.141593e+00 es pi
Esto 3.141593 es pi
Esto 3.14159 es pi
Esto 3 es pi escrito como entero
Esto 3.000000 es pi escrito en punto fijo

1.3. Escritura en ficheros

El mandato fprintf

También se puede, con fprintf, volcar la salida en un fichero.

Para ello hay que:

1. Abrir el fichero usando el mandato fopen.


2. Escribir la salida al fichero usando el mandato fprintf.
3. Cerrar el fichero usando el mandato fclose.

11
Apertura del fichero
El mandato fopen abre un fichero vacío o abre un fichero ya existente.

La sintaxis es:

1 fid = fopen(’nombre_del_fichero’,’permisos’)

Apertura del fichero


fid es una variable denominada identificador del archivo. Guarda un escalar
correspondiente al fichero que se ha abierto.

Los permisos son

’r’ Indica que el fichero se abre para leer de él (incluida por defecto si se
abre sin especificar permiso.
’w’ Indica que el fichero se abre para escritura. Si ya existe será eliminado.
Si no existe se creará vacío.
’a’ Indica lo mismo que ’w’ pero si el fichero existe, los datos se añadirán
al final del fichero.

Escritura en el fichero
Una vez abierto el fichero, se usa el mandato fprintf para escribir en él.

Para ello, se incluye el identificador fid delante del texto y datos a imprimir.

1 fprintf(fid,’Texto %-5.2f texto adicional’,nombre_variable)

Cierre del fichero


Cuando se termina de escribir los datos en el archivo éste se cierra usando
fclose.

1 fclose(fid)

12
Más cosas sobre fprintf
El fichero se crea en el directorio de trabajo.
Se pueden abrir varios ficheros con diferentes identificadores fid1, fid2
. . . y luego escribir los datos en el que se desee.
Si se imprimen vectores o matrices en cada fila del fichero se imprime una
columna del array.

Ejemplo imprime_arrays.m

1 % Ejemplo de escritura de arrays


2 % Se escriben en diferentes ficheros
3 v=[1 2 3 4 5]
4 A=[1 2 3;4 5 6]
5 fid1=fopen(’vector.txt’,’w’);
6 fprintf(fid1,’%i \n’,v);
7 fid2=fopen(’matriz.txt’,’w’);
8 fprintf(fid2,’%i %i\n’,A);
9 fclose(fid1);
10 fclose(fid2);

Ejemplo imprime_arrays.m

>> imprime_arrays
v =
1 2 3 4 5
A =
1 2 3
4 5 6

Fichero vector.txt

1 1
2 2
3 3
4 4
5 5

13
Fichero matriz.txt

1 1 4
2 2 5
3 3 6

Ejemplo

1 % Ejemplo de escritura de datos en varios ficheros usando fprintf


2 clear all % Borra todas las variables del Workspace
3 % Se crea un vector de alturas de 5 en 5 cm
4 Alturacm=150:5:180;
5 % Se convierten a pulgadas y a pies
6 Alturapulgadas=Alturacm/2.54;
7 Alturapies=Alturapulgadas/12;
8 % Se crean las matrices para imprimir
9 tabla1=[Alturacm;Alturapulgadas];
10 tabla2=[Alturacm;Alturapies];
11 % Apertura de ficheros
12 fid1=fopen(’Pulgadas.txt’,’w’);
13 fid2=fopen(’Pies.txt’,’w’);
14 % Escritura en Pulgadas.txt
15 fprintf(fid1,’Tabla de conversión a pulgadas\n\n’);
16 fprintf(fid1,’cm pulgadas \n’);
17 fprintf(fid1,’%4.2f %4.2f\n’,tabla1);
18 % Escritura en Pies.txt
19 fprintf(fid2,’Tabla de conversión a pies\n\n’);
20 fprintf(fid2,’cm pies \n’);
21 fprintf(fid2,’%4.2f %4.2f\n’,tabla2);
22 % Se cierran los ficheros
23 fclose(fid1); fclose(fid2);

Fichero Pulgadas.txt

1 Tabla de conversión a pulgadas


2
3 cm pulgadas
4 150.00 59.06
5 155.00 61.02
6 160.00 62.99
7 165.00 64.96
8 170.00 66.93
9 175.00 68.90
10 180.00 70.87

Fichero Pies.txt

14
1 Tabla de conversión a pies
2
3 cm pies
4 150.00 4.92
5 155.00 5.09
6 160.00 5.25
7 165.00 5.41
8 170.00 5.58
9 175.00 5.74
10 180.00 5.91

Ejercicio

La velocidad v y la distancia d, en función del tiempo, de un coche que tiene


una aceleración constante a, vienen dadas por
1
v(t) = at y d(t) = at 2 .
2
Determina v y d para cada segundo, durante 10 segundos, para un coche con
una aceleración a = 1, 55 m/s2 . Muestra los resultados en una tabla de tres
columnas en las cuales la primera sea el tiempo (s), la segunda la distancia
(m) y la tercera la velocidad (m/s).

Solución
Fichero creado

2. Ficheros function

Ficheros function

Otro tipo de ficheros M ATLAB son los ficheros function. Estos ficheros
incluyen tanto las funciones como los procedimientos vistos en el tema an-
terior.

Una function de M ATLAB requiere una entrada que procesa y devuelve


el resultado como salida.

La entrada y la salida pueden estar compuestas por una o más variables, y


cada una de ellas puede ser un escalar, un vector o una matriz.

15
Ficheros function

M ATLAB contiene un gran número de ficheros function en su interior.


Esos ficheros van desde las funciones elementales (por ejemplo, exp y sin)
hasta un gran número de funciones especiales.

Un ejemplo sencillo de un fichero function es la función exponencial


exp(x) es decir, ex . Se introduce

1 >> exp(5)
2 ans =
3 148.4132

Ficheros function

Los ficheros function se pueden utilizar como subprogramas dentro de


otros programas de mayor tamaño.

Estos ficheros function se almacenan en disco de forma independiente y


pueden ser llamados desde otros programas.

M ATLAB proporciona también el mandato inline (que veremos más ade-


lante) que permite definir funciones matemáticas dentro de un programa (no
como fichero separado).

Creación de un fichero function

Los ficheros function se crean y editan como si fueran script.

La primera línea ejecutable de un fichero function debe ser la definición


de la propia función. Esta línea:

• Define que el fichero será tratado como un fichero function, no co-


mo un script.
• Define el nombre de la función.
• Define el número y orden de los argumentos de entrada y salida.

function [argumentos de salida] = nombre_función (argumentos de entrada)

16
2.1. Variables de entrada y salida

Ficheros function

El nombre de la función puede estar formado por letras, dígitos y el carácter


de subrayado.

Los argumentos de entrada se declaran entre paréntesis ( ) y los de salida


entre corchetes [ ].

Por lo general, las funciones se declaran con, al menos un argumento de


entrada, pero pueden no llevar ninguno.

Si hay varios argumentos de entrada se separan por comas (,).

Ficheros function

Los argumentos de salida pueden ser uno, varios o ninguno.

Si hay varios argumentos de salida se separan por comas (,).

Si hay un sólo argumento de salida no es necesario ponerlo entre corchetes.

A los argumento de salida se les deben asignar valores durante la ejecución


del código contenido en la función.

Si no existen argumento de salida, se puede omitir el operador de asignación


(=) en la definición de la función.

Puede que no haya argumento de salida si la función, por ejemplo, dibuja un


gráfico, o graba datos en un fichero.

Ejemplos de primera línea de function

1 function[area,volumen]=esfera(radio)

1 function[Alturapulgadas,Alturapies]=conversion(Alturacm)

1 function trayectoria(v,h,g)

17
Variables locales y globales
Todas las variables de un fichero function son locales.
Esto significa que cualquier variable definida dentro del fichero sólo se reco-
nocerán dentro de él.
Cuando se ejecuta una function, M ATLAB utiliza una porción de memo-
ria separada del Workspace utilizado por los ficheros script y la Ventana
de Mandatos.
Cada vez que se llama a una function se realiza una correspondencia
entre las variables con la que se llamó y las variables locales que aparecen
en su primera línea.
Esto quiere decir, que dentro del fichero function se pueden usar nombres
de variables que se hayan definido fuera ya que éstas no se machacan.

Variables locales y globales


Sin embargo, se pueden crear variables que se puedan reconocer en diferen-
tes ficheros function y en el Workspace.
Esto se hace declarando las variables como globales, usando:

1 global nombre_variable1 nombre_variable2 ...

Esta declaración ha de hacerse en cada uno de los ficheros function donde


se quiera que sean reconocidas.
Es conveniente que se haga al principio del fichero, después de la linea de
definición de la función y de los posibles comentarios.

Variables locales y globales


El mandato global debe ser tecleado en la Ventana de Mandatos y/o
dentro de un fichero para que una variable sea reconocida en el Workspace.
El valor de la variable puede ser asignado o reasignado en cualquier lugar
donde ésta sea de uso común.
Se recomienda usar letras mayúsculas para las variables globales, a fin de
distinguirlas bien.

18
Almacenamiento de ficheros function

Es muy recomendable que el fichero de function tenga el mismo nombre


que la función que contiene.

De esta forma, la función se podrá invocar utilizando su nombre.

Los ficheros function también llevan la extensión .m .

El usuario debe conocer los argumentos de entrada y salida de una función


para saber con cuántos argumentos la tiene que llamar y cuántos argumentos
va a recibir.

A veces, puede ser interesante escribir las posibles operaciones dentro del
fichero functionelemento a elemento dando la posibilidad de que la fun-
ción actúe sobre escalares o arrays.

Ejemplo función conversion.m

1 function[Alturapulgadas,Alturapies]=conversion(Alturacm)
2 % Funcion que calcula la altura de una persona en pulgadas y pies.
3 % Se llama con la altura en centímetros y
4 % devuelve un vector con dos valores la altura en pulgadas
5 % y la altura en pies
6 % Cálculo de la altura en pulgadas
7 Alturapulgadas = Alturacm/2.54;
8 % Cálculo de la altura en pies
9 Alturapies = Alturapulgadas/12;

Ejemplo conversion.m

>> [x,y]=conversion(172)
x =
67.7165
y =
5.6430

19
Ejemplo función celsius.m

1 function c=celsius(f)
2 % Funcion que convierte grados Fahrenheit
3 % a grados Celsius
4 % Puede entregarse un array de grados Fahrenheit
5 % y devuelve el array convertido a Celsius
6 % Recordemos que Celsius=(5/9)*(Fahrenheit-32)
7 c=5*(f-32)/9;

Ejemplo conversion.m

>> t=[80:5:100];
>> c=celsius(t)
c =
26.6667 29.4444 32.2222 35.0000 37.7778

Ficheros function
Generalmente, una function termina cuando se alcanza el final del fi-
chero, sin embargo se puede usar una instrucción return para forzar un
regreso en alguna línea anterior (cuando se cumple cierta condición).

Comparando ficheros script y function


Ambos de guardan con la extensión .m
La primera línea de un fichero function es la línea de definición de la
función.
Las variables de un fichero function son locales, las de un fichero script
son reconocidas en la Ventana de Mandatos.
Los ficheros script pueden usar cualquier variable definida en el Workspace.
Los ficheros function pueden aceptar datos a través de argumentos de
entrada y pueden devolver datos como argumentos de salida.
El nombre de un archivo function debe ser el mismo que el nombre de la
función que contiene.

20
2.2. Funciones en línea

Funciones en línea

Las funciones en línea se pueden usar para construir funciones matemáticas


sencillas.

Una función en línea se define directamente dentro del código del programa
y se usa también dentro del mismo código.

Se definen como

1 nombre = inline(’expresión matemática en forma de cadena’)

Funciones en línea

La expresión matemática puede tener una o varias variables independientes.

esta expresión puede incluir cualquier función predefinida M ATLAB o defi-


nida por el usuario.

La expresión ha de escribirse usando los operadores adecuados según la di-


mensión de los argumentos de entrada y salida (elemento a elemento o alge-
braicas).

La expresión no puede incluir variables predefinidas.

La función inline también puede usarse como argumento en otras funcio-


nes.

Ejemplo de función en línea


f (x) = cos(x) + sen(x).

>> definof=inline(’cos(x)+sin(x)’);
>> definof(pi)
ans =
-1.0000

21
Ejemplo de función en línea para arrays
ex
g(x) = √ .
x+3

>> definog=inline(’exp(x)./(sqrt(x)+3)’);
>> definog(10)
ans =
3.5744e+003
>> definog(3)
ans =
4.2446
>> definog([10 3]) % se usa un vector como argumento
ans =
1.0e+003 *
3.5744 0.0042

Función en línea con varias variables independientes

En el caso de que la función tenga más de una variable independiente, se


escribe:

nombre = inline(’expresión matemática’,’variable1’,’variable2’,...)

Si no se indican las variables, M ATLAB los extrae en orden alfabético.

Ejemplo de función en línea con varias variables


ex
h(x, y) = √ .
y+3

>> definoh=inline(’exp(x)./(sqrt(y)+3)’,’x’,’y’);
>> definoh(5,2)% Asocia x=5, y=2
ans =
33.6217

22
Ejemplo con varias variables omitiéndolas
ex
h(x, y) = √ .
y+3

>> definoh=inline(’exp(x)./(sqrt(y)+3)’);
>> definoh(5,2)% Asocia x=5, y=2 (orden alfabético)
ans =
33.6217

2.3. Definición con el símbolo de función @

Definición con el símbolo de función @

Otra forma de definir funciones en línea es usando el símbolo @.

De esta forma también podemos definir funciones con valores vectoriales


f : Rn → Rm .

Ejemplo de función h : R2 → R con @


ex
h(x, y) = √ .
y+3

>> mifuncion=@(x,y)(exp(x)./(sqrt(y)+3));
>> mifuncion(1,2)
ans
0.6158
>> mifuncion([1,2,3,4],[2,3,2,3]) % actúa sobre vectores
ans =
0.6158 1.5615 4.5502 11.5379

Ejemplo de función f : R → R2 con @


f (x) = (x3 + 4x2 , cos(x))

23
>> mifuncionvec=@(x)([x.^3+4*x.^2; cos(x)])
>> mifuncionvec(2)
ans =
24.0000
-0.4161
>> mifuncionvec([1,2,5,4]) % actúa sobre vectores
ans =
5.0000 24.0000 225.0000 128.0000
0.5403 -0.4161 0.2837 -0.6536

2.4. Mandato feval

El mandato feval
El mandato feval (’function evaluate’) evalúa el valor de una función para
un valor (o valores) dado del argumento (o argumentos) de la función.

1 variable = feval(’nombre_funcion’,valor_argumento)

El mandato feval
El nombre de la función debe introducirse en forma de cadena (entre comi-
llas).
La función puede ser una de M ATLAB u otra definida por el usuario.
Se puede introducir más de un argumento de entrada, separados entre comas.
Se puede establecer más de un argumento de salida. para ello se introduce la
variables de la izquierda de la igualdad entre corchetes.

Ejemplo de feval con funciones predefinidas

>> feval(’sqrt’,64)
ans =
8
>> feval(’sin’,pi/6)
ans =
0.5000

24
Ejemplo de feval con función definida por usuario

>> x=feval(’celsius’,80) %convertía a grados Celsius


x =
26.6667
>> [a,b]=feval(’conversion’,172)%convertía a pulgadas y pies
a =
67.7165
b =
5.6430

3. Operadores relacionales y lógicos

Cadenas de caracteres y variables tipo string

Una cadena o string es un array de caracteres.

Ya hemos visto cómo para crear una cadena sólo hace falta teclear los carac-
teres que la forman entre comillas simples (’).

Las cadenas pueden contener letras, dígitos, algunos símbolos y espacios.


No pueden contener acentos ni la letra ñ.

Cadenas de caracteres y variables tipo string

Una cadena se puede asignar a una variable, en este caso la variable es un


array cuyas componentes son cada uno de los caracteres de la cadena.

>> B=’Mi nombre es Juan Jose’


B =
Mi nombre es Juan Jose
>> B(6)
ans =
m
>> B(14:22)=’Federico ’
B =
Mi nombre es Federico

25
Cadenas de caracteres y variables tipo string
Una variable se puede definir como un número o una cadena que tenga los
mismos dígitos.

>> x=256
x =
256
>> y=’256’
y =
256
>>

Estas dos variables son completamente distintas, aunque en pantalla parecen


idénticas.
La variable x puede usarse en operaciones matemáticas, mientras que la y
no.

Operadores relacionales
Un operador relacional compara dos números determinando si el resultado
es verdadero = 1 o falso = 0.
Recordemos que los operadores relacionales eran:
Mayor >
Menor <
Mayor o igual >=
Menor o igual <=
Igual ==
Distinto ˜=

Operadores relacionales
Cuando se comparan dos escalares el resultado es un escalar (1 o 0).
Si se comparan dos arrays (sólo del mismo tamaño) la comparación se hace
elemento a elemento y el resultado es un array lógico de unos y ceros.
Si se compara un escalar y un array, el escalar se compara con todos los
elementos del array, y el resultado es un array lógico de unos y ceros.
Las operaciones aritméticas tienen mayor precedencia que los operadores
relacionales.

26
Operadores lógicos

Los operadores lógicos funcionan con números. Un número distinto de cero


es verdadero y un cero es siempre falso.

Los operadores lógicos se pueden utilizar con escalares y arrays, funcionan-


do igual que los relacionales.

Recordemos que los operadores lógicos eran:


Operador lógico y &
Operador lógico o |
Negación ˜

Operadores lógicos

Tabla de verdad:
A B A&B A|B
1 1 1 1
1 0 0 1
0 1 0 1
0 0 0 0

Funciones lógicas predefinidas

and(A,B) Equivale a A & B

or(A,B) Equivale a A | B

not(A) Equivale a ˜A

Funciones lógicas predefinidas

all(A) Si A es un vector, devuelve

1 (verdadero) si todos los elementos del vector A son verdaderos (dis-


tintos de cero).
0 (falso) si algún elemento del vector A es falso (cero).

Si A es una matriz, el operador trata las columnas como vectores y devuelve un


vector con unos y ceros.

27
Funciones lógicas predefinidas
any(A) Si A es un vector, devuelve
1 (verdadero) si algún elemento del vector A es verdaderos (distinto de
cero).
0 (falso) si todos los elementos del vector A son falsos (cero).
Si A es una matriz, el operador trata las columnas como vectores y devuelve un
vector con unos y ceros.

Funciones lógicas predefinidas


find(A) Si A es un vector, devuelve los índices de los elementos distintos de
cero.
find(A>d) Si A es un vector, devuelve los índices de los elementos que son ma-
yores que d.

4. Programación en Matlab

Estructuras en Matlab
Veamos, a continuación, cómo se escriben en M ATLAB las diferentes estruc-
turas de control que modifican el orden secuencial de un programa.

4.1. Sentencia condicional simple

Estructura condicional simple


...
si condiciones entonces
instrucciones
fin si
...

Estructura en Matlab

1 if condiciones
2 instrucciones
3 end

28
Ejemplo de estructura condicional simple
Algoritmo 4.1: Cálculo del producto y el cociente de dos números
DATOS: Números a y b
R ESULTADO: Producto a ∗ b y cociente a/b cuando b ̸= 0
ENTRADA: a, b
1 % Se calcula la división a/b si b ̸= 0
2 % Si b = 0 sólo se calcula el producto
3 si b ̸= 0 entonces
4 cociente = a/b
SALIDA: ’El cociente es’, cociente
5 fin si
6 producto = a ∗ b
SALIDA: ’ El producto es’, producto

ejem_cond_simple.m

1 % Cálculo del producto y del cociente (cuando sea posible)


2 % de dos números
3 a=input(’Introduce el valor de a ’);
4 b=input(’Introduce el valor de b ’);
5 if b~=0
6 cociente =a/b;
7 fprintf(’El cociente a/b es % f \n’, cociente)
8 end
9 producto=a*b;
10 fprintf(’El producto a*b es % f \n’, producto)

ejem_cond_simple.m

>> ejem_cond_simple
Introduce el valor de a 8.3
Introduce el valor de b 5.2
El cociente a/b es 1.596154
El producto a*b es 43.160000

ejem_cond_simple.m

>> ejem_cond_simple
Introduce el valor de a 6.3
Introduce el valor de b 0
El producto a*b es 0.000000

29
4.2. Sentencia condicional doble

Estructura condicional doble


...
si condiciones entonces
bloque 1
si no
bloque 2
fin si
...

Estructura en Matlab

1 if condiciones
2 bloque 1
3 else
4 bloque 2
5 end

Ejemplo de estructura condicional doble


Algoritmo 4.2: Cálculo de las raíces de ax2 + bx + c = 0
DATOS: Coeficientes a, b, c
R ESULTADO: Raíces de la ecuación ax2 + bx + c = 0
ENTRADA: a, b, c
1 % El algoritmo distingue el caso de raíces reales y complejas
2 d = b2 − 4 ∗ a ∗ c
3 invdosa = 1/(2 ∗ a)
4 si d ≥ 0 entonces

5 dd = d
6 x1 = (−b + dd) ∗ invdosa
7 x2 = (−b − dd) ∗ invdosa
SALIDA: ’La ecuación tiene raíces reales’, x1 , x2
8 si no √
9 dd = −d
10 Re = −b ∗ invdosa
11 Im = dd ∗ invdosa
SALIDA: ’La ecuación tiene raíces complejas conjugadas’
SALIDA: ’Parte real’, Re
SALIDA: ’Parte imaginaria’, Im
12 fin si

ejem_cond_doble.m

1 % Calcula las raices de una ecuacion de segundo grado


2 % Distingue el caso de raices reales y complejas
3 a=input(’Introduce el valor de a ’);
4 b=input(’Introduce el valor de b ’);
5 c=input(’Introduce el valor de c ’);
6 d=b^2-4*a*c;
7 invdosa=1/(2*a);
8 if d>=0
9 dd=sqrt(d); x1=(-b+dd)*invdosa; x2=(-b-dd)*invdosa;

30
10 fprintf(’La ecuacion tiene raices reales \n’)
11 fprintf(’x1 = %f \n’, x1)
12 fprintf(’x2 = %f \n’, x2)
13 else
14 dd=sqrt(-d);
15 real=-b*invdosa;
16 imag=dd*invdosa;
17 fprintf(’La ecuacion tiene raices complejas conjugadas \n’)
18 fprintf(’Parte real = %f \n’,real); fprintf(’Parte imaginaria = %f \n’,imag)
19 end

ejem_cond_doble.m

>> ejem_cond_doble
Introduce el valor de a 1
Introduce el valor de b -5
Introduce el valor de c 6
La ecuacion tiene raices reales
x1 = 3.000000
x2 = 2.000000

ejem_cond_doble.m

>> ejem_cond_doble
Introduce el valor de a 1
Introduce el valor de b 2
Introduce el valor de c 4
La ecuacion tiene raices complejas conjugadas
Parte real = -1.000000
Parte imaginaria = 1.732051

4.3. Sentencia condicional múltiple

Estructura condicional múltiple


...
si condición 1 entonces
bloque 1
si no si condición 2 entonces
bloque 2
si no si condición 3 entonces
bloque 3
...
si no
último bloque
fin si
...

31
Estructura Matlab

1 if condición (1)
2 bloque 1
3 elseif condición (2)
4 bloque 2
5 ...
6 else
7 último bloque
8 end

Ejemplo de estructura condicional múltiple


Algoritmo 4.3: Determina el signo de un número
DATOS: Número x
R ESULTADO: Signo de x
ENTRADA: x
1 si x > 0 entonces
SALIDA: ’El número es positivo’
2 si no si x < 0 entonces
SALIDA: ’El número es negativo
3 si no
SALIDA: ’El número es nulo’
4 fin si

ejem_cond_multiple.m

1 % Dado un numero dice si es positivo, negativo o nulo


2 x=input(’Introduce el numero ’);
3 if x>0
4 fprintf(’El numero es positivo \n’)
5 elseif x<0
6 fprintf(’El numero es negativo \n’)
7 else
8 fprintf(’El numero es nulo \n’)
9 end

ejem_cond_multiple.m

>> ejem_cond_multiple
Introduce el numero 24
El numero es positivo
>> ejem_cond_multiple
Introduce el numero 0
El numero es nulo
>> ejem_cond_multiple
Introduce el numero -4
El numero es negativo

32
4.4. Estructura de repetición indexada

Estructura de repetición indexada


...
Para índice=vini hasta vfin con salto incremento hacer
instrucciones
fin para
...

Estructura en Matlab

1 for indice=vini:incremento:vfin
2 instrucciones
3 end

Ejemplo de estructura de repetición indexada


Algoritmo 4.4: Calcula el factorial de un número
DATOS: Número natural n
R ESULTADO: Factorial de n
ENTRADA: n
1 % Recordemos que n! = 1 ∗ 2 ∗ · · · ∗ (n − 1) ∗ n
2 fac=1
3 para k=2 hasta n con salto 1 hacer
4 fac=fac*k
5 fin para
SALIDA: ’El factorial es’, fac

ejem_factorial.m

1 % Calcula el factorial de un numero


2 % n!=n*(n-1)*(n-2)...*2*1
3 n=input(’Introduce el numero ’);
4 fac=1;
5 for k=2:1:n % o bien k=2:n
6 fac=fac*k;
7 end
8 fprintf(’El factorial de % i es % i \n’,n,fac)

ejem_factorial.m

>> ejem_factorial
Introduce el numero 9
El factorial de 9 es 362880
>> ejem_factorial
Introduce el numero 0
El factorial de 0 es 1

33
4.5. Estructura de repetición condicional

Estructura de repetición condicional


...
mientras expresión-lógica hacer
instrucciones
fin mientras
...

Estructura en Matlab

1 while expresión-lógica
2 instrucciones
3 end

Ejemplo de estructura de repetición condicional


Algoritmo 4.5: Imprime los n primeros números naturales.
DATOS: Número natural n
R ESULTADO: Imprime los números naturales de 1 a n
ENTRADA: n
1 k=1
2 mientras k ≤ n hacer
SALIDA: k
3 k=k+1
4 fin mientras

ejem_while.m

1 % Imprime los numeros naturales hasta uno dado


2 n=input(’Introduce el numero ’);
3 k=1;
4 while k <= n
5 disp(k)
6 k=k+1;
7 end

ejem_while.m

>> ejem_while
Introduce el numero 7
1
2
3
4

34
5
6
7

4.6. Estructura de elección entre varios casos

Estructura de elección entre varios casos


...
Según caso expresión hacer
caso valor 1
instrucciones caso 1
caso valor 2
instrucciones caso 2
...
caso valor k
instrucciones caso k
En otro caso
instrucciones
fin Según caso
fin Según caso
...

Estructura en Matlab

1 switch expresión
2 case valor 1
3 instrucciones caso 1
4 case valor 2
5 instrucciones caso 2
6 ...
7 case valor k
8 instrucciones caso k
9 otherwise
10 instrucciones
11 end

Ejemplo de estructura de elección

35
Algoritmo 4.6: Dados dos números reales, a y b, y el símbolo, S (operador +, −, ∗, /), da el resultado de a S b
DATOS: Números a, b, Operación S
R ESULTADO: a S b
ENTRADA: a, b, S
1 Según caso S hacer
2 caso ’+’
SALIDA: ’El resultado es’, a + b
3 caso ’-’
SALIDA: ’El resultado es’, a − b
4 caso ’*’
SALIDA: ’El resultado es’, a ∗ b
5 caso ’/’
6 si b = 0 entonces
7 si a = 0 entonces
SALIDA: ’El resultado es’, NaN (indeterminación)
8 si no
SALIDA: ’El resultado es’, Inf (infinito)
9 fin si
10 si no
SALIDA: ’El resultado es’, a/b
11 fin si
12 En otro caso
SALIDA: ’El operador no se reconoce
13 fin Según caso
14 fin Según caso

ejem_case.m

1 % Dados dos numeros a,b y una operacion S


2 % Realiza, si se puede a S b
3 a=input(’Introduce el numero a ’);
4 b=input(’Introduce el numero b ’);
5 disp(’+ = 1’);disp(’- = 2’);disp(’* = 3’);disp(’/ = 4’)
6 S=input(’Introduce el numero de la operacion ’);
7 switch S
8 case 1
9 fprintf(’El resultado es % f\n’,a+b)
10 case 2
11 fprintf(’El resultado es % f\n’,a-b)
12 case 3
13 fprintf(’El resultado es % f\n’,a*b)
14 case 4
15 if b==0
16 if a==0
17 disp(’El resultado es Nan (indeterminacion)’)
18 else
19 disp(’El resultado es Inf (infinito)’)
20 end
21 else
22 fprintf(’El resultado es % f\n’,a/b)
23 end
24 otherwise
25 disp(’El operador no se reconoce’)
26 end

ejem_case.m

>> ejem_case
Introduce el numero a 8
Introduce el numero b 3
+ = 1
- = 2
* = 3
/ = 4
Introduce el numero de la operacion 2
El resultado es 5.000000

36
ejem_case.m

>> ejem_case
Introduce el numero a 7
Introduce el numero b 0
+ = 1
- = 2
* = 3
/ = 4
Introduce el numero de la operacion 4
El resultado es Inf (infinito)

ejem_case.m

>> ejem_case
Introduce el numero a 0
Introduce el numero b 0
+ = 1
- = 2
* = 3
/ = 4
Introduce el numero de la operacion 4
El resultado es Nan (indeterminacion)

37

También podría gustarte