Source: https://www.docsity.com/es/apuntes-matlab-programacion/2873754/
Timestamp: 2018-10-17 07:52:49+00:00

Document:
Apuntes MATLAB (programación) - Apuntes de Física - Docsity
jazmin_lopez9052 3 de octubre de 2017
Apuntes MATLAB (programación), Apuntes de Física. Universidad Pontificia Comillas (ICAI-ICADE)
Asignatura: Física, Profesor: fernando gómez, Carrera: Ingeniería en Automática y Electrónica Industrial, Universidad: UPCO
Vista previa3 páginas / 145
3 páginas mostradas de 145 páginas totales
Apuntes de MATLAB orientados a métodos numéricos elementales
Rosa Echevarría Dpto. de Ecuaciones Diferenciales y Análisis Numérico
1. Introducción y elementos básicos 7
1.1. Comenzando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2. Objetos y sintaxis básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.1. Constantes y operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.2. Funciones elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.3. Uso como calculadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.4. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.5. Formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2.6. Algunos comandos utilitarios del sistema operativo . . . . . . . . . . . . . . . . 11
1.3. Documentación y ayuda on-line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4. Scripts y funciones. El editor integrado . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.1. Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4.2. M-Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4.3. Funciones anónimas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5. Workspace y ámbito de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6.1. Construcción de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6.2. Acceso a los elementos de vectores y matrices . . . . . . . . . . . . . . . . . . . 17 1.6.3. Operaciones con vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . 19
1.7. Dibujo de curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2. Programación con MATLAB 25
2.1. Estructuras condicionales: if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.2. Estructuras de repetición o bucles: while . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.3. Estructuras de repetición o bucles indexados: for . . . . . . . . . . . . . . . . . . . . . 30 2.4. Ruptura de bucles de repetición: break y continue . . . . . . . . . . . . . . . . . . . . . 32 2.5. Gestión de errores: warning y error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.6. Operaciones de lectura y escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.6.1. Instrucción básica de lectura: input . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.6.2. Impresión en pantalla fácil: disp . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.6.3. Impresión en pantalla con formato: fprintf . . . . . . . . . . . . . . . . . . . . . 35
2.7. Comentarios generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3. Lectura y escritura en ficheros 39 3.1. Lectura y escritura en ficheros: save y load . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1.1. Grabar en fichero el espacio de trabajo: orden save . . . . . . . . . . . . . . . . 39 3.1.2. Distintos tipos de ficheros: de texto y binarios . . . . . . . . . . . . . . . . . . . 41
3.2. Lectura y escritura en ficheros avanzada . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2.1. Apertura y cierre de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2.2. Leer datos de un fichero con fscanf . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.2.3. Escribir datos en un fichero con fprintf . . . . . . . . . . . . . . . . . . . . . . . 48
4. Resolución de sistemas lineales 53 4.1. Los operadores de división matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2. Determinante. ¿Cómo decidir si una matriz es singular? . . . . . . . . . . . . . . . . . 55 4.3. La factorización LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.4. La factorización de Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.5. Resolución de sistemas con características específicas . . . . . . . . . . . . . . . . . . . 60 4.6. Matrices huecas (sparse) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5. Interpolación y ajuste de datos 65 5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.2. Interpolación polinómica global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.3. Interpolación lineal a trozos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.4. Interpolación por funciones spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.5. Ajuste de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.5.1. Ajuste por polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.5.2. Otras curvas de ajuste mediante cambios de variable . . . . . . . . . . . . . . . 82
6. Resolución de ecuaciones no lineales 87 6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.2. Resolución de ecuaciones polinómicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.3. El comando fzero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.4. Gráficas para localizar las raíces y elegir el punto inicial . . . . . . . . . . . . . . . . . 93 6.5. Ceros de funciones definidas por un conjunto discreto de valores . . . . . . . . . . . . . 98
7. Integración numérica 101 7.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.2. La función integral (función quad en versiones anteriores) . . . . . . . . . . . . . . . . 102 7.3. La función trapz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.4. Cálculo de áreas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.5. Cálculo de integrales de funciones definidas por un conjunto discreto de valores . . . . 113 7.6. Funciones definidas a trozos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8. Resolución de ecuaciones y sistemas diferenciales ordinarios 125
8.1. Ecuaciones diferenciales ordinarias de primer orden . . . . . . . . . . . . . . . . . . . . 125 8.2. Resolución de problemas de Cauchy para edo de primer orden . . . . . . . . . . . . . . 126 8.3. Resolución de problemas de Cauchy para sdo de primer orden . . . . . . . . . . . . . . 130 8.4. Resolución de problemas de Cauchy para edo de orden superior . . . . . . . . . . . . . 133
9. Resolución de problemas de contorno para sistemas diferenciales ordinarios 135 9.1. La función bvp4c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.Resolución de problemas minimización 143 10.1. La función fmincon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
R. Echevarría Dpto. EDAN - Universidad de Sevilla
1 Introducción y elementos básicos MATLAB es un potente paquete de software para computación científica, orientado al cálculo numérico, a las operaciones matriciales y especialmente a las aplicaciones científicas y de ingeniería. Ofrece lo que se llama un entorno de desarrollo integrado (IDE), es decir, una herramienta que permite, en una sóla aplicación, ejecutar órdenes sencillas, escribir programas utilizando un editor integrado, compilarlos (o interpretarlos), depurarlos (buscar errores) y realizar gráficas. Puede ser utilizado como simple calculadora matricial, pero su interés principal radica en los cientos de funciones tanto de propósito general como especializadas que posee, así como en sus posibilidades para la visualización gráfica. MATLAB posee un lenguaje de programación propio, muy próximo a los habituales en cálculo numérico (Fortran, C, . . . ), aunque mucho más tolerante en su sintaxis, que permite al usuario escribir sus propios scripts (conjunto de comandos escritos en un fichero, que se pueden ejecutar con una única orden) para resolver un problema concreto y también escribir nuevas funciones con, por ejemplo, sus propios algoritmos, o para modularizar la resolución de un problema complejo. MATLAB dispone, además, de numerosas Toolboxes, que le añaden funcionalidades especializadas. Numerosas contribuciones de sus miles de usuarios en todo el mundo pueden encontrarse en la web de The MathWorks: http://www.mathworks.es
Al iniciar MATLAB nos aparecerá una ventana más o menos como la de la Figura 1.1 (dependiendo del sistema operativo y de la versión) Si la ubicación de las ventanas integradas es diferente, se puede volver a ésta mediante: Menú Desktop → Desktop Layout → Default Se puede experimentar con otras disposiciones. Si hay alguna que nos gusta, se puede salvaguardar con Menú Desktop → Desktop Layout → Save Layout . . . dándole un nombre, para usarla en otras ocasiones. De momento, sólo vamos a utilizar la ventana principal de MATLAB: Command Window (ventana de comandos). A través de esta ventana nos comu- nicaremos con MATLAB, escribiendo las órdenes en la línea de comandos. El símbolo >> al comienzo de una línea de la ventana de comandos se denomina prompt e indica que MATLAB está desocupado, disponible para ejecutar nuestras órdenes.
1.2 Objetos y sintaxis básicos
Las explicaciones sobre las funciones/comandos que se presentan en estas notas están muy resumidas y sólo incluyen las funcionalidades que, según el parecer subjetivo de la autora, pueden despertar más
1. Introducción y elementos básicos 8
Figura 1.1: La ventana de MATLAB
interés. La mayoría de las funciones tienen mas y/o distintas funcionalidades que las que se exponen aquí. Para una descripción exacta y exhaustiva es preciso consultar la Ayuda on-line. Los tipos básicos de datos que maneja MATLAB son números reales, booleanos (valores lógicos) y cadenas de caracteres (string). También puede manipular distintos tipos de números enteros, aunque sólo suele ser necesario en circunstancias específicas. En MATLAB, por defecto, los números son codificados como números reales en coma flotante en doble precisión. La precisión, esto es, el número de bits dedicados a representar la mantisa y el exponente, depende de cada (tipo de) máquina. MATLAB manipula también otros objetos, compuestos a partir de los anteriores: números complejos, matrices, cells, estructuras definidas por el usuario, clases Java, etc. El objeto básico de trabajo de MATLAB es una matriz bidimensional cuyos elementos son números reales o complejos. Escalares y vectores son considerados casos particulares de matrices. También se pueden manipular matrices de cadenas de caracteres, booleanas y enteras. El lenguaje de MATLAB es interpretado, esto es, las instrucciones se traducen a lenguaje máquina una a una y se ejecutan antes de pasar a la siguiente. Es posible escribir varias instrucciones en la misma línea, separándolas por una coma o por punto y coma. Las intrucciones que terminan por punto y coma no producen salida de resultados por pantalla. Algunas constantes numéricas están predefinidas (ver Tabla 1.1) MATLAB distingue entre mayúsculas y minúsculas: pi no es los mismo que Pi. MATLAB conserva un historial de las instrucciones escritas en la línea de comandos. Se pueden recu- perar instrucciones anteriores, usando las teclas de flechas arriba y abajo. Con las flechas izquierda y derecha nos podemos desplazar sobre la línea de comando y modificarlo. Se pueden salvaguardar todas las instrucciones y la salida de resultados de una sesión de trabajo de MATLAB a un fichero:
>> diary nombre_fichero >> diary off % suspende la salvaguarda
1. Introducción y elementos básicos 9
i, j Unidad imaginaria : 2+3i, -1-2j pi Número π Inf Infinito, número mayor que el más grande que se puede al-
macenar. Se produce con operaciones como x/0, con x 6= 0 NaN Not a Number, magnitud no numérica resultado de cálculos
indefinidos. Se produce con cálculos del tipo 0/0 o ∞/∞. (0+2i)/0 da como resultado NaN + Inf i
eps, intmax, intmin realmax, realmin
Otras constantes. Consultar la ayuda on-line.
Tabla 1.1: Algunas constantes pre-definidas en MATLAB. Sus nombres son reservados y no deberían ser usados para variables ordinarias.
1.2.1 Constantes y operadores
Números reales 8.01 -5.2 .056 1.4e+5 0.23E-2 -.567d-21 8.003D-12
Números complejos 1+2i -pi-3j
Booleanos true false
Caracteres Entre apóstrofes: 'esto es una cadena de caracteres (string)'
Operadores aritméticos + - * / ^
Operadores de comparación == ~= (ó <>) < > <= >=
Operadores lógicos (lo dos úl- timos sólo para escalares)
& | ~ && || && y || no evalúan el operando de la derecha si no es necesario.)
Tabla 1.2: Constantes y operadores de diversos tipos.
1.2.2 Funciones elementales
Los nombres de las funciones elementales son los habituales. Los argumentos pueden ser, siempre que tenga sentido, reales o complejos y el resultado se devuelve en el mismo tipo del argumento. La lista de todas las funciones matemáticas elementales se puede consultar en: Help → MATLAB → Functions: By Category → Mathematics → Elementary Math Algunas de las más habituales se muestran en la Tabla 1.3:
1.2.3 Uso como calculadora
Se puede utilizar MATLAB como simple calculadora, escribiendo expresiones aritméticas y terminando por RETURN (<R>). Se obtiene el resultado inmediatamente a través de la variable del sistema ans (de answer). Si no se desea que MATLAB escriba el resultado en el terminal, debe terminarse la orden por punto y coma (útil, sobre todo en programación).
1. Introducción y elementos básicos 10
sqrt(x) raiz cuadrada sin(x) seno (radianes)
abs(x) módulo cos(x) coseno (radianes)
conj(z) complejo conjugado tan(z) tangente (radianes)
real(z) parte real cotg(x) cotangente (radianes)
imag(z) parte imaginaria asin(x) arcoseno
exp(x) exponencial acos(x) arcocoseno
log(x) logaritmo natural atan(x) arcotangente
log10(x) logaritmo decimal cosh(x) cos. hiperbólico
rat(x) aprox. racional sinh(x) seno hiperbólico
mod(x,y) rem(x,y)
resto de dividir x por y Iguales si x, y > 0 . Ver help para definición exacta
fix(x) Redondeo hacia 0 acosh(x) arcocoseno hiperb.
ceil(x) Redondeo hacia +∞ asinh(x) arcoseno hiperb.
floor(x) Redondeo hacia −∞ atanh(x) arcotangente hiperb.
round(x) Redondeo al entero más próximo
Tabla 1.3: Algunas funciones matemáticas elementales.
Ejemplos 1.1 >> sqrt(34*exp(2))/(cos(23.7)+12)
ans = 1.3058717
>> 7*exp(5/4)+3.54 ans =
>> exp(1+3i) ans =
- 2.6910786 + 0.3836040i
En MATLAB las variables no son nunca declaradas: su tipo y su tamaño cambian de forma dinámica de acuerdo con los valores que le son asignados. Así, una misma variable puede ser utilizada, por ejemplo, para almacenar un número complejo, a continuación una matriz 25× 40 de números enteros y luego para almacenar un texto. Las variables se crean automáticamente al asignarles un contenido. Asimismo, es posible eliminar una variable de la memoria si ya no se utiliza.
1. Introducción y elementos básicos 11
Ejemplos 1.2 >> a=10
>> pepito=exp(2.4/3) pepito =
2.2255 >> pepito=a+pepito*(4-0.5i)
pepito = 18.9022 - 1.1128i
>> clear pepito
Para conocer en cualquier instante el valor almacenado en una variable basta con teclear su nombre (Atención: recuérdese que las variables AB, ab, Ab y aB son distintas, ya que MATLAB distingue entre mayúsculas y minúsculas). Otra posibilidad es hojear el Workspace ó espacio de trabajo, abriendo la ventana correspondiente. Ello nos permite ver el contenido de todas las variables existentes en cada momento e, incluso, modificar su valor. Algunos comandos relacionados con la inspección y eliminación de variables se describen en la tabla siguiente:
who lista las variables actuales
whos como el anterior, pero más detallado
clear elimina todas las variables que existan en ese momento
clear a b c elimina las variables a, b y c (atención: sin comas!)
Por defecto, MATLAB muestra los números en formato de punto fijo con 5 dígitos. Se puede modificar este comportamiento mediante el comando format
format Cambia el formato de salida a su valor por defecto, short
format short El formato por defecto
format long Muestra 15 dígitos
format short e Formato short, en coma flotante
format long e Formato long, en coma flotante
format rat Muestra los números como cociente de enteros
1.2.6 Algunos comandos utilitarios del sistema operativo
Están disponibles algunos comandos utilitarios, como
1. Introducción y elementos básicos 12
Lista de ficheros del directorio de trabajo
pwd Devuelve el nombre y la ruta (path) del directorio de trabajo
cd Para cambiar de directorio
clc Limpia la ventana de comandos Command Window
date Fecha actual
Tabla 1.4: Comandos utilitarios.
1.3 Documentación y ayuda on-line
Ayuda on-line en la ventana de comandos
>> help nombre_de_comando
La información se obtiene en la misma ventana de comandos. Atención:
Ayuda on-line con ventana de navegador
ó bien Menú Help ó bien Botón Start → Help.
Además, a través del navegador del Help se pueden descargar, desde The MathWorks, guías detalladas, en formato pdf, de cada capítulo.
1.4 Scripts y funciones. El editor integrado
1.4.1 Scripts
En términos generales, en informática, un script (guión o archivo por lotes) es un conjunto de instruc- ciones (programa), usualmente simple, guardadas en un fichero (usualmente de texto plano) que son ejecutadas normalmente mediante un intérprete. Son útiles para automatizar pequeñas tareas. También puede hacer las veces de un "programa principal" para ejecutar una aplicación. Así, para llevar a cabo una tarea, en vez de escribir las instrucciones una por una en la línea de comandos de MATLAB, se pueden escribir las órdenes una detrás de otra en un fichero. Para ello se puede utilizar el Editor integrado de MATLAB. Para iniciarlo, basta pulsar el icono hoja en blanco (New script) de la barra de MATLAB, o bien File → New → Script UN script de MATLAB debe guardarse en un fichero con sufijo .m para ser reconocido. El nombre del fichero puede ser cualquiera razonable, es decir, sin acentos, sin espacios en blanco y sin caracteres «extraños». Para editar un script ya existente, basta hacer doble-click sobre su icono en la ventana Current Folder. Para ejecutar un script que esté en el directorio de trabajo, basta escribir su nombre (sin el sufijo) en la línea de comandos.
1. Introducción y elementos básicos 13
1.4.2 M-Funciones
Una función (habitualmente denominadas M-funciones en MATLAB), es un programa con una «inter- faz» de comunicación con el exterior mediante argumentos de entrada y de salida. Las funciones MATLAB responden al siguiente formato de escritura:
function [argumentos de salida] = nombre(argumentos de entrada) % % comentarios % .... instrucciones (normalmente terminadas por ; para evitar eco en pantalla) ....
Las funciones deben guardarse en un fichero con el mismo nombre que la función y sufijo .m. Lo que se escribe en cualquier línea detrás de % es considerado como comentario.
Ejemplo 1.3 El siguiente código debe guardarse en un fichero de nombre areaequi.m.
function [sup] = areaequi(long) % % areaequi(long) devuelve el area del triangulo % equilatero de lado = long % sup = sqrt(3)*long^2/4;
La primera línea de una M-función siempre debe comenzar con la claúsula (palabra reservada) function. El fichero que contiene la función debe estar en un sitio en el que MATLAB lo pueda encontrar, normalmente, en la carpeta de trabajo. Se puede ejecutar la M-función en la misma forma que cualquier otra función de MATLAB:
Ejemplos 1.4 >> areaequi(1.5) ans =
0.9743 >> rho = 4 * areaequi(2) +1; >> sqrt(areaequi(rho)) ans =
Los breves comentarios que se incluyen a continuación de la línea que contiene la claúsula function deben explicar, brevemente, el funcionamiento y uso de la función. Además, constituyen la ayuda on-line de la función:
1. Introducción y elementos básicos 14
Ejemplo 1.5 >> help areaequi
areaequi(long) devuelve el area del triangulo equilatero de lado = long
Se pueden incluir en el mismo fichero otras funciones, denominadas subfunciones, a continuación de la primera1, pero sólo serán visibles para las funciones del mismo fichero. NO se pueden incluir M- funciones en el fichero de un script .
1.4.3 Funciones anónimas
Algunas funciones sencillas, que devuelvan el resultado de una expresión, se pueden definir mediante una sóla instrucción, en mitad de un programa (script o función) o en la línea de comandos. Se llaman funciones anónimas. La sintaxis para definirlas es:
nombre_funcion = @(argumentos) expresion_funcion
Ejemplo 1.6 (Función anónima para calcular el área de un círculo) >> area_circulo = @(r) pi * r.^2; >> area_circulo(1) ans =
3.1416 >> semicirc = area_circulo(3)/2 semicirc =
Las funciones anónimas pueden tener varios argumentos y hacer uso de variables previamente definidas:
Ejemplo 1.7 (Función anónima de dos variables) >> a = 2; >> mifun = @(x,t) sin(a*x).*cos(t/a); >> mifun(pi/4,1) ans =
Si, con posterioridad a la definición de la función mifun, se cambia el valor de la variable a, la función no se modifica: en el caso del ejemplo, seguirá siendo mifun(x,t)=sin(2*x).*cos(t/2).
1También es posible definir funciones anidadas, esto es, funciones «insertadas» dentro del código de otras funciones. (Se informa aquí para conocer su existencia. Su utilización es delicada.)
1. Introducción y elementos básicos 15
1.5 Workspace y ámbito de las variables
Workspace (espacio de trabajo) es el conjunto de variables que en un momento dado están definidas en la memoria del MATLAB. Las variables creadas desde la línea de comandos de MATLAB pertenecen al Base Workspace (espacio de trabajo base; es el que se puede «hojear» en la ventana Workspace). Los mismo sucede con las variables creadas por un script que se ejecuta desde la línea de comandos. Estas variables permanecen en el Base Workspace cuando se termina la ejecución del script y se mantienen allí durante toda la sesión de trabajo o hasta que se borren. Sin embargo, las variables creadas por una M-función pertenecen al espacio de trabajo de dicha función, que es independiente del espacio de trabajo base. Es decir, las variables de las M-funciones son locales: MATLAB reserva una zona de memoria cuando comienza a ejecutar una M-función, almacena en esa zona las variables que se crean dentro de ella, y «borra» dicha zona cuando termina la ejecución de la función. Esta es una de las principales diferencias entre un script y una M-función: cuando finaliza la ejecución de un script se puede «ver» y utilizar el valor de todas las variables que ha creado el script en el Workspace; en cambio, cuando finaliza una función no hay rastro de sus variables en el Workspace. Para hacer que una variable local de una funcion pertenezca al Base Workspace, hay que declararla global: la orden
global a suma error
en una función hace que las variables a, suma y error pertenezcan al Base Workspace y por lo tanto, seguirán estando disponibles cuando finalize la ejecución de la función.
Como ya se ha dicho, las matrices bidimensionales de números reales o complejos son los objetos básicos con los que trabaja MATLAB. Los vectores y escalares son casos particulares de matrices.
1.6.1 Construcción de matrices
La forma más elemental de introducir matrices en MATLAB es describir sus elementos de forma exhaustiva (por filas y entre corchetes rectos [ ]) : elementos de una fila se separan unos de otros por comas y una fila de la siguiente por punto y coma.
Ejemplos 1.8 (Construcciones elementales de matrices) >> v = [1, -1, 0, sin(2.88)] % vector fila longitud 4
>> w = [0; 1.003; 2; 3; 4; 5*pi] % vector columna longitud 6
>> a = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12] % matriz 3x4
1. Introducción y elementos básicos 16
Observación. El hecho de que, al introducirlas, se escriban las matrices por filas no significa que internamente, en la memoria del ordenador, estén así organizadas: en la memoria las matrices se almacenan como un vector unidimensional ordenadas por columnas.
Ejemplos 1.9 (Otras órdenes para crear matrices)
>> v1 = a:h:b % crea un vector fila de números regularmente espaciados % a a+h a+2h ... hasta c <= b < c+h
>> v2 = a:b % como el anterior, con paso h=1
>> v3 = v2' % matriz traspuesta (conjugada si es compleja)
>> v4 = v2.' % matriz traspuesta sin conjugar
Ejemplos 1.10 (Matrices construidas con bloques)
>> v1 = 1:4;
>> v2 = [v1, 5; 0.1:0.1:0.5]
>> v3 = [v2', [11,12,13,14,15]']
( 1 2 3 4 5
) v3 =
 1 0.1 11 2 0.2 12 3 0.3 13 4 0.4 14 4 0.5 15
Las siguientes funciones generan vectores de elementos regularmente espaciados, útiles en muchas circunstancias, especialmente para creación de gráficas.
linspace(a,b,n) Si a y b son números reales y n un número entero, genera una partición regular del intervalo [a,b] con n nodos (n-1 subintervalos)
linspace(a,b) Como el anterior, con n=100
Las siguientes funciones generan algunas matrices especiales que serán de utilidad.
1. Introducción y elementos básicos 17
zeros(n,m) matriz n×m con todas sus componentes iguales a cero
ones(n,m) matriz n×m con todas sus componentes iguales a uno
eye(n,m) matriz unidad n×m: diagonal principal = 1 y el resto de las componentes = 0
diag(v) Si v es un vector, es una matriz cuadrada de ceros con diagonal principal = v
diag(A) Si A es una matriz, es su diagonal principal
MATLAB posee, además, decenas de funciones útiles para generar distintos tipos de matrices. Para ver una lista exhaustiva consultar: Help → MATLAB → Functions: By Category → Mathematics → Arrays and Matrices
1.6.2 Acceso a los elementos de vectores y matrices
El acceso a elementos individuales de una matriz se hace indicando entre paréntesis sus índices de fila y columna. Se puede así utilizar o modificar su valor
Ejemplos 1.11 (Acceso a elementos individuales de una matriz) >> A = [1, 2, 3; 6, 3, 1; -1, 0, 0; 2, 0, 4] A =
-1 0 0 2 0 4
>> A(2, 3) ans =
1 >> A(4, 2) = 11 A =
-1 0 0 2 11 4
Se puede acceder al último elemento de un vector mediante el índice simbólico end:
Ejemplos 1.12 (Último índice de un vector) >> w = [5, 3, 1, 7, 3, 0, -2]; >> w(end) ans =
-2 >> w(end-1) = 101 w =
5 3 1 7 3 101 -2
Se puede acceder a una fila o columna completa sustituyendo el índice adecuado por : (dos puntos)
1. Introducción y elementos básicos 18
Ejemplos 1.13 (Acceso a filas o columnas completas) >> A = [1, 2, 3; 6, 3, 1; -1, 0, 0; 2, 0, 4]; >> A(:, 3) ans =
>> A(2, :) ans =
6 3 1 >> A(3, :) = [5, 5, 5] A =
1 2 3 6 3 1 5 5 5 2 0 4
También se puede acceder a una “submatriz” especificando los valores de las filas y columnas que la definen:
Ejemplos 1.14 (Acceso a “submatrices”) >> w = [5, 3, 1, 7, 3, 0, -2]; >> w([1,2,3]) % o lo que es lo mismo w(1:3) ans =
5 3 1 >> A = [1, 2, 3; 6, 3, 1; -1, 0, 0; 2, 0, 4]; >> A(1:2, :) = zeros(2, 3) A =
>> B = A(3:4, [1,3]) B =
-1 0 2 4
1. Introducción y elementos básicos 19
1.6.3 Operaciones con vectores y matrices
Los operadores aritméticos representan las correspondientes operaciones matriciales siempre que tengan sentido.
Sean A y B dos matrices de elementos respectivos aij y bij y sea k un escalar.
A+B, A-B matrices de elementos respectivos aij + bij , aij − bij (si las dimensiones son iguales)
A+k, A-k matrices de elementos respectivos aij + k, aij − k.
k*A, A/k matrices de elementos respectivos k aij , 1
k aij
A*B producto matricial de A y B (si las dimensiones son adecuadas)
Aˆn Si n es un entero positivo, A*A*...*A
Además de estos operadores, MATLAB dispone de ciertos operadores aritméticos que operan elemento a elemento. Son los operadores .* ./ y .ˆ, muy útiles para aprovechar las funcionalidades vectoriales de MATLAB.
Sean A y B dos matrices de las mismas dimensiones y de elementos respectivos aij y bij y sea k un escalar.
A.*B matriz de la misma dimensión que A y B de elementos aij × bij
A./B ídem de elementos aij bij
A.ˆB ídem de elementos aijbij
k./A matriz de la misma dimensión que A, de elementos k
A.ˆk ídem de elementos akij
k.ˆA ídem de elementos kaij
Por otra parte, la mayoría de las funciones MATLAB están hechas de forma que admiten matrices como argumentos. Esto se aplica en particular a las funciones matemáticas elementales y su utilización debe entenderse en el sentido de elemento a elemento. Por ejemplo, si A es una matriz de elementos aij , exp(A) es otra matriz con las mismas dimensiones que A, cuyos elementos son eaij .
Algunas otras funciones útiles en cálculos matriciales son:
1. Introducción y elementos básicos 20
sum(v) suma de los elementos del vector v
sum(A) sum(A,1)
suma de los elementos de la matriz A, por columnas
sum(A,2) suma de los elementos de la matriz A, por filas
prod(v), prod(A) prod(A,1) prod(A,2)
como la suma, pero para el producto
max(v), min(v) máximo/mínimo elemento del vector v
max(A), min(A) máximo/mínimo elemento de la matriz A, por colum- nas
mean(v) promedio de los elementos del vector v
mean(A) promedio de los elementos de la matriz A, por colum- nas.
1.7 Dibujo de curvas
La representación gráfica de una curva en un ordenador es una línea poligonal construida uniendo mediante segmentos rectos un conjunto discreto y ordenado de puntos: {(x1, y1), (x2, y2), . . . , (xn, yn)}.
Figura 1.2: Línea poligonal determinada por un conjunto de puntos.
La línea así obtenida tendrá mayor apariencia de «suave» cuanto más puntos se utilicen para cons- truirla, ya que los segmentos serán imperceptibles. Para dibujar una curva plana en MATLAB se usa el comando
siendo x e y dos vectores de las mismas dimensiones conteniendo, respectivamente, las abscisas y las ordenadas de los puntos de la gráfica.
1. Introducción y elementos básicos 21
Ejemplo 1.15 Dibujar la curva y =
x+ 5 para x ∈ [−2, 3]
>> f = @(x) (x.^2+2)./(x+5); >> x = linspace(-2,3); >> plot(x,f(x))
Se pueden dibujar dos o más curvas de una sóla vez, proporcionando al comando plot varios pares de vectores abscisas-ordenadas, como en el ejemplo siguiente.
Ejemplo 1.16 Dibujar las curvas y = 2 sen3(x) cos2(x) e y = ex − 2x− 3 para x ∈ [−1.5, 1.5]
>> f1 = @(x) 2 * sin(x).^3 .* cos(x).^2; >> f2 = @(x) exp(x) - 2*x -3; >> x = linspace(-1.5,1.5); >> plot(x,f1(x),x,f2(x))
A cada par de vectores abscisas-ordenadas en el comando plot se puede añadir un argumento opcional de tipo cadena de caracteres, que modifica el aspecto con que se dibuja la curva. Para más información, hojear el help (help plot).
Ejemplo 1.17 Las siguientes órdenes dibujan la curva y = sen3(x) en color rojo (r, de red) y con marcadores ∗, en lugar de una línea contínua.
>> x = linspace(0,pi,30); >> plot(x,sin(x).^3,'r*')
La orden siguiente dibuja la curva y = sen3 x en color negro (k, de black), con marcadores ∗ y con línea punteada, y la curva y = cos2 x en color azul (b, de blue) y con marcadores +
>> plot(x,sin(x).^3,'k*:', x, cos(x).^2,'b+')
Ademas, mediante argumentos opcionales, es posible modificar muchas otras propiedades de las curvas. Esto se hace siempre mediante un par de argumentos en la orden de dibujo que indican
'Nombre de la Propiedad', Valor de la propiedad
1. Introducción y elementos básicos 22
Esta propiedad afectará a todas las curvas que se dibujen con la misma orden.
Ejemplo 1.18 Para establecer un grosor determinado de las líneas se usa la propiedad LineWidth (atención a las mayúsculas):
>> plot(x,sin(x).^3,'k*:', x, cos(x).^2,'b+', 'LineWidth', 1.1)
Se pueden añadir elementos a la gráfica, para ayudar a su comprensión. Para añadir una leyenda que identifique cada curva se usa el comando siguiente, que asigna las leyendas a las curvas en el orden en que han sido dibujadas.
legend('Leyenda1', 'Leyenda2')
Para añadir etiquetas a los ejes que aclaren el significado de las variables se usan los comandos
xlabel('Etiqueta del eje OX') ylabel('Etiqueta del eje OY')
Se puede añadir una cuadrícula mediante la orden
También es muy útil la orden, siguiente, que define las coordenadas mínimas y máximas del rectángulo del plano OXY que se visualiza en la gráfica.
Cada nueva orden de dibujo borra el contenido previo de la ventana gráfica, si existe. Para evitar esto existen la órdenes
1. Introducción y elementos básicos 23
La orden hold on permanece activa hasta que se cierre la ventana gráfica o bien se dé la orden hold off
Ejemplos 1.19 Las siguientes órdenes darán como resultado la gráfica de la figura 1.3
x = linspace(0,pi,30); axis([-0.5,pi+0.5,-0.5,1.5]) hold on plot(x,sin(x).^3,'g', x, cos(x).^2,'b+', 'LineWidth', 1.1) x = linspace(-0.95, pi); plot(x, log(x+1)/2, 'r', 'LineWidth', 1.1) plot([-5,5], [0, 0], 'k', 'LineWidth', 1) plot([0, 0], [-5,5], 'k', 'LineWidth', 1) legend('Leyenda1', 'Leyenda2', 'Leyenda3') xlabel('Etiqueta del eje OX') ylabel('Etiqueta del eje OY') hold off shg
−0.5 0 0.5 1 1.5 2 2.5 3 3.5 −0.5
Etiqueta del eje OX
E ti q u e ta
d e l e je
Figura 1.3: Varias curvas con leyenda y etiquetas.
1. Introducción y elementos básicos 24
2 Programación con MATLAB Los condicionales y los bucles o repeticiones son la base de la programación estructurada. Sin ellas, las instrucciones de un programa sólo podrían ejecutarse en el orden en que están escritas (orden secuencial). Las estructuras de control permiten modificar este orden y, en consecuencia, desarrollar estrategias y algoritmos para resolver los problemas. Los condicionales permiten que se ejecuten conjuntos distintos de instrucciones, en función de que se verifique o no determinada condición. Los bucles permiten que se ejecute repetidamente un conjunto de instrucciones, ya sea un número pre-determinado de veces, o bien mientras que se verifique una determinada condición.
2.1 Estructuras condicionales: if
Son los mecanismos de programación que permiten “romper” el flujo secuencial en un programa: es decir, permiten hacer una tarea si se verifica una determinada condición y otra distinta si no se verifica. Evaluar si se verifica o no una condición se traduce, en programación, en averiguar si una determinada expresión con valor lógico da como resultado verdadero o falso Las estructuras condicionales básicas son las representadas en los diagramas de flujo siguientes:
!"#$!%&'() &(%*$+,,&-(!%) *$+!)
./0%!)
Figura 2.1: Estructura condicional simple: Si expresión toma el valor lógico true, se ejecu- tan las instrucciones del bloque instrucciones y, después, el programa se continúa ejecutando por la instrucción siguiente. Si, por el contrario, la expresión toma el valor lógico false, no se ejecutan las instrucciones, y el programa con- tinúa directamente por la instrucción siguiente.
!"#$!%&'() &(%*$+,,&-(!%./) *$+!)012%!)
&(%*$+,,&-(!%.3)
Figura 2.2: Estructura condicional doble: Si expresión toma el valor lógico true, se ejecutan las instrucciones del bloque instrucciones 1. Si, por el contrario, la expresión toma el valor lógico false, se ejecuta el bloque de instrucciones 2. En ambos casos, el programa continúa ejecutándose por la instrucción siguien- te.
En casi todos los lenguajes de programación, este tipo de estructuras se implementan mediante una ins- trucción (o super-instrucción) denominada if, cuya sintaxis puede variar ligeramente de unos lenguajes a otros. En MATLAB, concretamente, su forma es la siguiente:
programaciòn en matlab
Laboratorio de Programación - Apuntes - Programación
MATLAB MATRICES Y ARREGLOS
Lenguaje de programación - Apuntes - Programación

References: Resolución 
 Resolución 
 Resolución 
 Resolución 
 Resolución 
 Resolución 
 Resolución 
 Resolución 
 Resolución 
 resolución