Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Á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
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
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.
Ejemplo altura1.m
3
Ejemplo altura1.m
>> altura1
Alturacm =
172
Alturapulgadas =
67.7165
Alturapies =
5.6430
Ejemplo altura2.m
Ejemplo altura2.m
4
Alturacm=172;
>> altura2
Alturapulgadas =
67.7165
Alturapies =
5.6430
>> Alturacm=165;
>> altura2
Alturapulgadas =
64.9606
Alturapies =
5.4134
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.
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
5
Ejemplo altura3.m
>> altura3
Introduzca la altura en cm 172
Alturapulgadas =
67.7165
Alturapies =
5.6430
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:
El mandato disp
1 disp(nombre_variable) o disp(’Mensaje’)
6
Ejemplo
>> matriz=[1,2,3;4,5,6];
>> disp(matriz)
1 2 3
4 5 6
Ejemplo altura4.m
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
El mandato fprintf
\ n Salto de línea.
\ b Carácter de borrado.
\ t Tabulación horizontal.
Ejemplo
8
El mandato fprintf
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
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
Ejemplo ejemplo2_fprintf.m
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
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
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
El mandato fprintf
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’)
’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 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
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
Fichero Pulgadas.txt
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
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.
15
Ficheros function
1 >> exp(5)
2 ans =
3 148.4132
Ficheros function
16
2.1. Variables de entrada y salida
Ficheros function
Ficheros 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.
18
Almacenamiento de ficheros function
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.
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).
20
2.2. Funciones en línea
Funciones en línea
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
Funciones en línea
>> 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
>> 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
>> 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
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
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.
>> feval(’sqrt’,64)
ans =
8
>> feval(’sin’,pi/6)
ans =
0.5000
24
Ejemplo de feval con función definida por usuario
Ya hemos visto cómo para crear una cadena sólo hace falta teclear los carac-
teres que la forman entre comillas simples (’).
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
>>
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
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
or(A,B) Equivale a A | B
not(A) Equivale a ˜A
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.
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.
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
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 en Matlab
1 if condiciones
2 bloque 1
3 else
4 bloque 2
5 end
ejem_cond_doble.m
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
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
ejem_cond_multiple.m
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 en Matlab
1 for indice=vini:incremento:vfin
2 instrucciones
3 end
ejem_factorial.m
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 en Matlab
1 while expresión-lógica
2 instrucciones
3 end
ejem_while.m
ejem_while.m
>> ejem_while
Introduce el numero 7
1
2
3
4
34
5
6
7
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
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
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