Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Matlab para principiantes, Apuntes de Programación Funcional

detalla los conceptos básicos para inicio del uso del software MAtlab

Tipo: Apuntes

2017/2018

Subido el 29/10/2021

erubio
erubio 🇲🇽

2 documentos

1 / 20

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
MATLAB para principiantes 1
MATLAB PARA PRINCIPIANTES
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Vista previa parcial del texto

¡Descarga Matlab para principiantes y más Apuntes en PDF de Programación Funcional solo en Docsity!

MATLAB PARA PRINCIPIANTES

Universidad Nacional Autónoma de México

Centro de Física Aplicada y Tecnología Avanzada

Matlab para principiantes

D.R. © 2012

Universidad Nacional Autónoma de México

Av. Universidad 3000

Ciudad Universitaria, Delegación Coyoacán,

04510, México ,D. F.

Centro de Física Aplicada y Tecnología Avanzada

Boulevard Juriquilla 3001

76230 Juriquilla, Querétaro

ISBN: 978-607-02-3578- Diseño de cubierta: D.G. Anahit Indra Ortiz Molina Edición a cargo de: Jit Press, S.A. de C.V. General Santana 253 Col. M. Carrera 07070 México, D.F., Tel. (55) 5794 5198

DERECHOS RESERVADOS

Queda prohibida la reproducción o transmisión total o parcial del texto o las ilustraciones de la presente obra bajo cualesquiera formas, electrónicas o mecánicas, incluyendo fotocopiado, almacenamiento en algún sistema de recuperación de información, dispositivo de memoria digital o grabado sin el consentimiento previo y por escrito del editor.

Impreso y hecho en México Printed in México

Emprendemos la redaccion de este texto como resultado de que el alfabetismo en MATLAB en las universidades continúa siendo muy bajo y de que la necesidad de emplear las buenas herramientas de cómputo matemático de manera más extendida esté presente.

El material aquí contenido está pensado para estudiantes que desconocen MATLAB, pero que les gustaría introducirse en él de manera autodidácta. También puede ser de utilidad para estudiantes de computación y métodos numéricos ya que los ejemplos y el interés principal es el control de las acciones de la máquina por medio de la sintaxis de MATLAB.

Suponemos que existe un genuino interés o una necesidad en introducirse en esta temática, que se tiene un conocimiento básico de álgebra y que se aceptan los retos con singular alegría.

Tabla de contenido

  • 1 Introducción..................................................................................................................
    • 1.1 MATLAB por primera vez .................................................................................
    • 1.2 Uso elemental de MATLAB
    • 1.3 La ayuda en MATLAB
    • 1.4 Definición de variables.....................................................................................
    • 1.5 Exhibición de resultados
    • 1.6 Representación de números en MATLAB......................................................
    • 1.7 Guardar el trabajo
    • 1.8 Ejercicios...........................................................................................................
  • 2 Arreglos y matrices...................................................................................................
    • 2.1 Construcción de arreglos de números
    • 2.2 Manipulación de los números en los arreglos.................................................
    • 2.3 Operaciones con matrices
    • 2.4 Operaciones con arreglos
    • 2.5 Ejercicios...........................................................................................................
  • 3 Programas (scripts) y funciones (functions)............................................................
    • 3.1 Programas ( Scripts )
    • 3.2 Funciones ( Functions )......................................................................................
    • 3.3 Trabajo y mejora de programas ( scripts )
    • 3.4 Funciones de funciones
    • 3.5 Ejercicios...........................................................................................................
  • 4 Control de flujo de programa
    • 4.1 Uso fundamental...............................................................................................
    • 4.2 Ejemplo: Autómatas unidimensionales...........................................................
    • 4.3 Ejemplo: Autómatas bidimensionales
    • 4.4 Ejercicios...........................................................................................................
  • 5 Métodos numéricos...................................................................................................
    • 5.1 Mínimos cuadrados, modelo lineal..................................................................
    • 5.2 Promedio y desviación estándar
    • 5.3 Algoritmo simplex............................................................................................
    • 5.4 Método indirecto de solución de ecuaciones simultáneas
    • 5.5 Raíces de polinomios (Método de Laguerre)..................................................
    • 5.6 Runge Kutta
    • 5.7 Descomposición de LU
    • 5.8 Interpolación suave (splines)
  • 6 Gráficos
    • 6.1 Dos dimensiones...............................................................................................
    • 6.2 Tres dimensiones
    • 6.3 Guardar imágenes
    • 6.4 Ejercicios...........................................................................................................
  • 7 Prácticas de buena programación...........................................................................
    • 7.1 Elegir vectores en lugar de bucles.
    • 7.2 Evitar que los arreglos crezcan mientras se corre el programa.
    • 7.3 Escritura de MEX-File cuando los bucles son inevitables...........................
    • 7.4 Evitar variables que cambian de tamaño en gráficas activas
    • 7.5 Acceso a archivos
    • 7.6 Otras consideraciones.....................................................................................
    • 7.7 Ejercicios.........................................................................................................
  • 8 GUI
    • 8.1 Ejemplo de script para FFT
    • 8.2 Ejemplo de function para FFT
    • 8.3 Ejemplo de GUI para FFT
    • 8.4 Construcción del archivo ejecutable..............................................................
    • 8.5 Ejercicios.........................................................................................................
  • 9 Conexión con C.......................................................................................................
    • 9.1 MATLAB Coder
    • 9.2 MATLAB Compiler
  • 10 Simulink
    • 10.1 Simulink y solución de ecuaciones algebraicas............................................
    • 10.2 Simulink y solución de ecuaciones diferenciales
    • 10.3 Simulink y solución de sistemas de ecuaciones diferenciales
  • 11 SimMechanics
  • Apéndice A. control de accesorios de PC......................................................................
    • A.1 Instrucciones para el control de un micrófono...................................................
    • A.2 Instrucciones para el control de una cámara

donde se escriben los comandos, inmediatamente frente al prompt >> (rectángulo punteado) y donde aparecen las respuestas numéricas.

Figura 1.1 Multipaneled desktop en MATLAB.

MATLAB es un lenguaje de programación que interpreta las instrucciones línea por línea, a diferencia de otros lenguajes de programación que compilan el programa total. Esta es una afirmación correcta en parte, ya que como veremos existen las funciones que no se interpretan o incluso programas completos en MATLAB que pueden ser ejecutables. Esta parte se aclarará al ver MEX files y GUI en los capítulos 7 y 8.

Workspace (elipse continua) muestra las variables definidas e información al respecto; en un principio está vacía, pero al definir variables o realizar operaciones se acumulan y se pueden editar. Al hacer doble clic sobre la variable inicia un editor que permite su visualización y edición, siempre que sea menor a 65 536 renglones o columnas. En esta misma área se puede visualizar la carpeta en la que se está trabajando al seleccionar la pestaña correspondiente a Current Directory , MATLAB solo ve el contenido de la carpeta que está seleccionada. Para cambiar el directorio se emplea el acceso rápido (circulo segmentado, arriba al centro).

Command History (rectángulo continuo) lista las acciones solicitadas en Command Window , de la más reciente a la más antigua y se pueden pasar a la zona de trabajo navegando por medio de las flecha en el teclado (arriba y abajo) o haciendo doble clic en la línea histórica deseada.

Start (rectángulo segmentado) es el puerto de entrada a muchas de las funciones de MATLAB, herramientas de trabajo, ayudas y más. Usualmente debe estar preparado para pasar horas de sano entretenimiento en los ejemplos y guías de uso. Cuando se le ha pedido a MATLAB que realice una actividad que toma tiempo, desaparece el prompt y a la derecha de Start aparece la leyenda Busy , que indica la necesidad de tener paciencia. Si

prompt

Start

se desea cancelar el proceso se puede hacer presionando al mismo tiempo las teclas ctrl-c restableciendo el prompt y aparece la leyenda Ready a la derecha de Start.

En cálculo numérico elemental, un camino trivialmente simplista es usar una calculadora cuando la tarea es muy simple, después utilizar Excel si se requiere de gráficas más elaboradas y finalmente C++ cuando se tienen en mente acciones no desarrollas por un programa particular. El salto de una herramienta a la otra puede ser intimidante e incluso limitante. Si quisiéramos que MATLAB estuviera presente en esta evolución, igualmente puede ser una alternativa a cualquiera de las herramientas anteriores. Una de las limitaciones para iniciar a usar MATLAB como calculadora (inicialmente y después el cielo es el límite ) es que no se parece a una. Superando esta diferencia, se puede fácilmente superar las ventajas de Excel como hoja de cálculo y de ahí pasar a usar MATLAB con más provecho.

1.2 Uso elemental de MATLAB

Si se escribe una expresión válida en el área de Command Window , la respuesta aparece de manera inmediata.

5*3 (presionar la tecla de cambio de línea, enter , )

ans =

15

La multiplicación de dos números se realiza y el resultado se guarda en la variable ans. El prompt indica que está listo para nuevas instrucciones.

3^

ans =

27

La potencia es igualmente evidente, el resultado se escribe en la variable ans, sustituyendo cualquier valor o contenido que tuviera anteriormente.

1/ Warning: Divide by zero.

ans =

Inf

Aquí Inf es la manera de representar ∞, que indica un número más grande que cualquiera que puede ser escrito y que en este caso resulto de intentar dividir el número uno entre cero.

cos(pi/4)

ans =

2.2204e-

1.3 La ayuda en MATLAB

MATLAB contiene un enorme material que es imposible dominarlo todo y menos aún recordarlo todo, por lo que es importante aprenda a aprender y recordar de manera eficiente. No es por accidente que al iniciar el programa, la primera línea invite a explorar el material de ayuda que contiene:

To get started, select MATLAB Help or Demos from the Help menu.

El texto subrayado es una liga directa a la ayuda en MATLAB, que abre una ventana como la mostrada en la figura 1.2.

En la figura 1.2 se ve la ventana de ayuda; en el panel izquierdo está el navegador, en el que se puede explorar por contenido, por índice, hacer búsquedas o explorar las demostraciones. Aquí se muestra el navegador por contenido (elipse continua), el libro de MATLAB (elipse segmentada), las funciones por categoría (elipse punteada) y las funciones matemáticas elementales. En el panel derecho se ve la lista de funciones exponenciales, haga doble clic en cualquier nombre en azul para ver la ayuda preparada en cuanto a su definición y uso.

log(x) es logaritmo natural de x log10(x) es el logaritmo base 10 de x atan(x) es el ángulo en radianes cuya tangente es x sinh(x) es el seno hiperbólico de x sqrt(x) raíz cuadrada de x

Algunas palabras reservadas en MATLAB log(x) es el logaritmo natural de x log10(x) es el logaritmo base 10 de x atan(x) es el ángulo en radianes cuya tangente es x sinh(x) es el seno hiperbólico de x sqrt(x) es la raíz cuadrada de x

Figura 1.2 Ventana de ayuda de MATLAB.

Muchas veces no se recuerda o conoce el nombre de la función que hace lo que buscamos, para esas ocasiones la búsqueda alfabética de funciones puede ser útil. Si recordamos el nombre de la función pero no su uso, podemos emplear Command Window y teclear help y el comando del que requiere ayuda, por ejemplo help log y aparece en el Command Window la ayuda al respecto, usualmente simplificada.

1.4 Definición de variables

Se pueden almacenar las variables usadas en el cálculo de las expresiones

a=exp(1)

a =

Aquí a tiene el valor de la constante de Euler.

c=a*b ??? Undefined function or variable 'b'.

Aquí intentamos guardar en la variable c el resultado de multiplicar el número de Euler (a) por el contenido de b. Como no habíamos definido previamente el valor de b se nos indica. El prompt regresa en espera de una instrucción válida. La multiplicación a*b tiene la notación correcta, (a)(b) no es aceptable como multiplicación, como tampoco

  1. 375  2 x 102  7 x 101  3 x 100  3 x 10 ^1  7 x 10 ^2  5 x 10 ^3

Esta representación es tan común e intuitiva que no abundaremos en ella, pero la representación de este mismo número en base binaria y hexadecimal es interesante de recordar.

  1. 375  100010001. 011  1 x 28  1 x 24  1 x 20  0 x 2 ^1  1 x 2 ^2  1 x 2 ^3 D B o

  2. 375  111. 6  1 x 162  1 x 161  1 x 160  6 x 16 ^1 D H

Donde los subíndices D, B y H se refieren a decimal, binario y hexadecimal, respectivamente. Binario y hexadecimal son intercambiados fácilmente si agrupamos los binarios en 4 números, partiendo del punto. En este ejemplo: 0001 0001 0001.0110 (^) B, que son 1 1 1.6 (^) H

Decimal Binario Hexadecimal 00 0000 0 01 0001 1 02 0010 2 03 0011 3 04 0100 4 05 0101 5 06 0110 6 07 0111 7 08 1000 8 09 1001 9 10 1010 a 11 1011 b 12 1100 c 13 1101 d 14 1110 e 15 1111 f

MATLAB tiene una representación de los números en notación binaria de 64 bits que cumple la norma IEEE 754 y que es:

(  1 ) s^ 2 (^ ^1022 )( f ), si e = 0 (  1 ) s^ 2 (^ e ^1023 )( 1  f ), si e = [1, 2046] Representación especial, si e = 2047

donde s representa al signo del número y se representa con un bit 0 o 1.

e representa al exponente del número y se define con 11 bits que cubre del entero decimal 1 al 2046, en cuyo caso se llaman números normales. En caso de que e sea cero su

representación se denomina número subnormal y en tal caso el término (1+ f ) se sustituye sólo por f. En caso de que e sea 2047 se reserva para representaciones especiales tales como NaN o inf.

f representa a la mantisa del número y está formada por 52 bits, lo que produce números

desde el número decimal 2 ^52 al número (^)  

 52

1

n

n (^) ; también puede ser cero y en tal caso el

número es una potencia de 2.

La siguiente tabla ilustra los números en MATLAB de acuerdo con la norma IEEE 754, en particular los valores para s , e y f.

Nombre Decimal aproximado Hexadecimal s e f -inf --------------------^ fff 0000000000000 1 2047 0 -realmax= (-)(2^1023)(1+ 2^-1+2^-2+…)

-1.797693134862316e+308 (^) ffe fffffffffffff 1 2046  

 52

1

n

n

(-)(2^1023)(1) -8.988465674311580e+307^ ffe 0000000000000 1 2046 0 -1=(-)(2^0)(1) -1^ bff 0000000000000 1 1023 0 -realmin=(-)(2^- 1022)(1)

-2.225073858507201e-308 (^) 801 0000000000000 1 1 0

0 0 000 0000000000000 0 0 0 eps(0)=(+) (2^-1022)(2^-52)

4.940656458412465e-324 (^) 000 0000000000001 0 0 52 2 

realmin=2^-1022 2.225073858507201e-308^ 001 0000000000000 0 1 0 realmin+ eps(realmin)

2.225073858507202e-308 (^) 001 0000000000001 0 1 2  52

1=(+)(2^0)(1) 1 3ff 0000000000000 0 1023 0 3=(+)(2^1)(1+.5) 3 400 8000000000000 0 1024 2 ^1 pi 3.141592653589793^ 400 921fb54442d18 0 1024 0.57079… (+)(2^1023)(1) 8.988465674311580e+307^ 7fe 0000000000000 0 2046 0 realmax= (+)(2^1023)(1+ 2^-1+2^-2+…)

1.797693134862316e+308 (^) 7fe fffffffffffff 0 2046  

(^52) 

1

n

n

Inf=realmax+ eps(realmax)

--------------------- (^) 7ff 0000000000000 0 2047 0

NaN ---------------------^ fff 8000000000000 (^1 2047).

Los números reales son necesarios para las operaciones aritméticas; y acceder a ellos permite disponer de un continuo de números, que se pueden visualizar como cualquier punto de la recta numérica, no así el conjunto de números que se puede representar en MATLAB, que es diferente en dos aspectos fundamentales:

  1. Existen vacíos entre los números; qué tan grande es este vacío depende del número en cuestión.
  2. No es posible representar de manera exacta a todos los números reales.

Por ejemplo los números reales entre 72057594037927932 y 72057594037927944 se representan por el mismo número en MATLAB (4370000000000000 (^) H) =

n

n f n n 1.

El problema es que si desarrollamos el paréntesis, resulta que f ( n ) es cero para cualquier valor de n. MATLAB, sin embargo, realiza las operaciones en el orden de su prioridad, primero potencia, después multiplicación y división y finalmente suma y resta, (los paréntesis tienen preferencia sobre el orden de prioridad). En este caso se sumará n + antes de dividir entre n , después se resta el uno, y todo se multiplica por n , y lo que resulte se resta al uno. Como resultado, entonces, de este orden de operaciones y de la representación numérica, f(n) no vale cero para toda n.

En MATLAB el código para ilustrar la función anterior es el siguiente, donde eps se emplea para aumentar y normalizar la diferencia con el cero.

n=1:500; f=(1-n.((n+1)./n-1))./eps(n); plot(n,f,'')

Figura 1.3 Diferencia artificialmente introducida por MATLAB por el orden de las operaciones, solo las n que son potencias de 2 dan cero para la función f ( n ).

1.7 Guardar el trabajo

Si se desea guardar las variables se procede por File-Save workspace as y se guarda con el nombre deseado. Para guardar la historia de comandos se procede a seleccionarlos en el panel de Command History y con el botón derecho del ratón se selecciona Create M- File y aparece otra ventana con la historia de los comandos y ahí se puede guardar su contenido en un archivo. Más adelante se verá cómo generar las figuras, las cuales se pueden guardar en formatos muy diversos. *.fig es el formato nativo de MATLAB, es modificable y es el más conveniente ya que guarda los valores que lo generaron. *.eps es postscript y se pueden anexar a documentos Word y la calidad no cambia al cambiar el tamaño. *.jpg es el más común pero la calidad es muy limitada y disminuye rápidamente al cambiar de tamaño. Este comentario se basa en que las imágenes bitmap (como las jpg) fundamentan su calidad en el tamaño del pixel. Las imágenes vectoriales basan su calidad en fórmulas que describen los objetos así que se pueden ampliar o reducir sin alterar la calidad.

1.8 Ejercicios

  1. Evalúe las siguientes expresiones en MATLAB.

a)

e^ e Ae

b) (^)  

B cos 1

c) (^)  

log  C e

d) determine qué número del conjunto es primo {0,1,2,3,4,5,6,7,8,9,10,97,99}

Respuestas: a) A =3.8143e+ b) B =1.9106 [rad] c) C =0. d) [2, 3, 5, 7, 97]