Você está na página 1de 184

MATLAB

Iniciacin al Programa.
El Lenguaje de Computacin Tcnica MATLAB es un ambiente de computacin
tcnica integrada que combina computacin numrica, grficos y visualizacin
avanzada y un lenguaje de programacin de alto nivel.
Sea cual fuere el objetivo, un algoritmo, anlisis, grficos, informes o
simulacin, MATLAB lo lleva all. El lenguaje flexible e interactivo de MATLAB
permite a ingenieros y cientficos expresar sus ideas tcnicas con simplicidad. Los
poderosos y amplios mtodos de cmputo numrico y graficacin permiten la prueba y
exploracin de ideas alternativas con facilidad, mientras que el ambiente de desarrollo
integrado facilita producir resultados prcticos fcilmente.
MATLAB es la fundacin numrica y grfica para todos los productos de The
MathWorks. MATLAB combina computacin numrica, grficos 2D y 3D y
capacidades de lenguaje en un nico ambiente fcil de usar.
Con su amplio rango de herramientas para modelar sistemas de control, anlisis,
simulacin y procesamiento de prototipos, MATLAB es el sistema ideal para desarrollar
sistemas avanzados de control. Usted puede modelar su sistema de control usando las
cajas de herramientas para el diseo de controles avanzados de MATLAB - Control
System, Robust Control, -Analysis and Synthesis, Model Predictive Control, QTF
Control Design y LMI control. Posteriores anlisis y refinamientos pueden ser
efectuados estableciendo una simulacin interactiva en Simulink, y luego sintonizar
automticamente los parmetros usando el Nonlinear Control Design Blockset.
Finalmente, usted puede generar cdigo C para correr en controladores incrustados con
Real Time Workshop.
Combinando MATLAB con Signal Processing Toolbox, Wavelet Toolbox y un
conjunto de herramientas complementarias - tales como Image Processing, Neural
Network, Fuzzy Logic, Statistics y otras - usted puede crear un ambiente de anlisis
personalizado de seales y desarrollo de algoritmos DSP. Para simulacin y desarrollo
de prototipos usted puede agregar Simulink y el DSP Blockset para modelar y simular
sus sistemas DSP, y luego usar Real-Time Workshop para generar cdigo C para su
hardware designado.
Caractersticas
Caractersticas de MATLAB:
Clculos intensivos desde un punto de vista numrico.
Grficos y visualizacin avanzada.
Lenguaje de alto nivel basado en vectores, arrays y matrices.
Coleccin muy til de funciones de aplicacin.

Las poderosas capacidades de clculo tcnico de MATLAB se ponen a la


disposicin de los estudiantes, aunque limita el tamao de las matrices a 8192
elementos, la edicin de estudiante mantiene toda la potencia de la versin profesional
de MATLAB 4.0, en una forma diseada para que los estudiantes puedan ejecutarlo en
sus propios ordenadores personales bajo Windows.
Toolbox especiales:
Se incluyen el Toolbox de seales y Sistemas (un conjunto de herramientas para
el procesamiento de seal y para el anlisis de sistemas de cuadro ) y el Toolbox
Symbolyc Math ( herramienta de clculo simblico basada en Maple V ).
A continuacin presentamos la interfase de usuario de MATLAB 4.0 con el
despliegue de una aplicacin con grafica en 3D correspondiente al modelo Z=x^y-y^x
su tabla de calculo y el anlisis de la funcin.
Salidas o presentaciones.
MATLAB provee acceso inmediato a las caractersticas grficas especializadas
requeridas en ingeniera y ciencias. Potente graficacin orientada a objetos grficos le
permite graficar los resultados de su anlisis, incorporar grficos en sus modelos de
sistemas, rpidamente presentar complejos 3-D objetos, y crear resultados de
presentacin, entre lo cual se destaca:

Representaciones 2-D y 3-D, incluyendo datos triangulados y reticulados


Representaciones 3-D quiver, ribbon, y stem
Control de fuentes, letras Griegas, smbolos, subndices y superndices
Seleccin expandida de smbolos marcadores de curvas
Grficos de torta, de barras 3-D y grficos de barras horizontales
Grficos 3-D y slido modelado
Representacin de imgenes y archivos I/O
Grficos comentados
Leer/Escribir archivos de datos Hierarchical Data Format (HDF)
Presentacin de OpenGL software y hardware
Animacin
Display de buffer x rpido y exacto
Soporte de colores verdaderos (24-bit RGB)
Fuentes mltiples de luz para superficies coloreadas
Vista basada en cmara y control de perspectiva
Iluminacin Plana, Gouraud y Phong
Soporte eficiente de imagen de datos de 8-bit
Control de eje y cmara
Propiedades de superficie y patch
Modelos de iluminacin
Control grfico de objetos
Impresin y representacin de copias
Formatos grficos exportables
Soporte de publicacin de escritorio

Funciones
Manipulacin
y
Reduccin
de
Datos
MATLAB tiene un rango completo de funciones para preprocesar datos para anlisis,
incluyendo:
y decimando
secciones de datos
y promediando
y procesando umbrales
y filtrando
Numerosas operaciones para manipular arreglos multidimensionales, incluyendo
reticulacin e interpolacin de datos, estn tambin disponibles.
Descriptivos
Grficos
Para
Explorar
y
Presentar
Sus
Datos
Grficos de propsitos generales y de aplicacin especfica le permiten visualizar al
instante seales, superficies paramtricas, imgenes y ms. Todos los atributos de los
grficos de MATLAB son personalizables, desde los rtulos de ejes al ngulo de la
fuente de luz en las superficies 3-D. Los grficos estn integrados con las capacidades
de anlisis, de modo que usted puede mostrar grficamente cualquier conjunto de datos
sin editar, ecuacin o resultado funcional.
I/O
Directo
de
Datos
Usted puede ingresar y sacar datos de f MATLAB rpidamente. Las funciones estn
disponibles para leer y escribir archivos de datos formateados en MATLAB, llamados
archivos MAT. Funciones adicionales ejecutan programas ASCII e I/O binario de bajo
nivel desde los archivos de programas M, C, y Fortran, permitindole trabajar con todos
los formatos de datos. MATLAB tambin incluye soporte incorporado para formatos
populares de archivos estndar.
Computacin
Simblica
Integrada
Integrando el motor simblico Maple V con MATLAB, los Symbolic Math Toolboxes
le permiten mezclar libremente computacin simblica y numrica una sintaxis simple e
intuitiva.
Anlisis
de
Datos
Confiable,
Rpido
y
Exacto
Los mtodos usados comnmente para anlisis de datos multidimensional generalizados
1-D, 2-D estn incorporados en MATLAB. Interfaces grficas fciles de usar,
especficas para aplicaciones, la lnea de comando interactiva y herramientas de
programacin estructuradas le permiten elegir el mejor camino para sus tareas de
anlisis.
Anlisis
de
Datos
para
DSP
MATLAB ofrece muchas herramientas para realizar la funcionalidad indispensable en
procesamiento de seales, tales como Transformadas Rpidas Fourier y Transformadas
Rpidas Inversas de Fourier. La visualizacin de datos de procesamiento de seales est
soportada por funciones tales como grficos stem y periodogramas. El lenguaje de

MATLAB, inherentemente orientado a matrices hace que la expresin de


coeficientes de filtros y demoras de buffers sean muy simples de expresar y comprender.
Anlisis
de
Datos
en
Aplicaciones
de
Imgenes
MATLAB y la Image Processing Toolbox ofrece un amplio conjunto de herramientas
que le permite fcilmente manipular, procesar y analizar datos de imgenes,
interactivamente mostrar pantallas de imgenes 2-D o 3-D, visualizar datos temporarios
cuando es necesario, y comentar sus resultados para publicaciones tcnicas. La
orientacin basada en matrices del lenguaje de MATLAB le permite expresar en forma
compacta operaciones matemticas de forma similar a cmo las expresara sobre papel.
Como resultado, es fcil e intuitivo efectuar procesamiento de imgenes y operaciones
de anlisis tales como FFTs, filtrado 2-D, morfologa binaria, manipulacin geomtrica,
conversin de espacios de colores, compresin, anlisis de componentes conectados y
ms.
Algorithm Development (Desarrollo de Algoritmos) Sea que usted est usando
los algoritmos del sistema o est inventando los suyos propios, MATLAB le provee un
ambiente en el que usted puede experimentar. A diferencia de C y C++, MATLAB le
permite desarrollar algoritmos desde cero o trabajar con interfaces complicadas a
bibliotecas externas. Las poderosa fundacin de computacin, el lenguaje tcnico, y
cientos de funciones en cajas de herramientas (toolboxes) convierten a MATLAB en lo
ms adecuado para aplicaciones matemticamente intensivas que requieran anlisis de
datos, procesamiento de seales e imgenes, modelado de sistemas o tcnicas numricas
avanzadas
Libreras
Librera de Aplicaciones de MATLAB
Signal Processing Toolbox
MATLAB tiene una gran coleccin de funciones para el procesamiento de seal
en el Signal Processing Toolbox. Este incluye funciones para:
Anlisis de filtros digitales incluyendo respuesta en frecuencia, retardo de grupo,
retardo de fase.
Implementacin de filtros, tanto directo como usando tcnicas en el dominio de
la frecuencia basadas en la FFT.
Diseo de filtros IIR, incluyendo Butterworth, Chebyschev tipo I, Chebyshebv
tipo II y elptico.
Diseo de filtros FIR mediante el algortmo ptimo de Parks-McClellan.
Procesamiento de la transformada rpida de Fourier FFT, incluyendo la
transformacin para potencias de dos y su inversa, y transformada para no potencias de dos.
The MATLAB C Math Library

La MATLAB C Math Library proporciona al usuario la capacidad


computacional de MATLAB en una librera en formato objeto enlazable. El objetivo
principal de la C Math Library es soportar el desarrollo de aplicaciones 'stand alone'
utilizando MATLAB y su compilador. Puede ser utilizada independientemente de
MATLAB por programadores avezados en lenguaje C que necesiten prestaciones
computacionales robustas y de alto rendimiento.
Junto con el compilador de MATLAB, la C Math Library permitir a los
programadores de aplicaciones utilizar MATLAB para la creacin de aplicaciones 'stand
alone'. Para los usuarios clsicos de MATLAB, se elimina as cualquier necesidad de
volver a reescribir algoritmos en lenguaje C para ser utilizada por programas externos.
Para aquellos usuarios que sean nuevos en la tecnologa MATLAB, esta tecnologa
ofrece una nueva va para la reduccin del tiempo de desarrollo y puesta a punto de
aplicaciones.
La MATLAB C Math Library proporciona una amplia gama de funciones
clsicas del programa MATLAB, proporcionadas como libreras objeto, incluyendo
bsicamente las siguientes categoras de funciones presentes en MATLAB y archivos M
compilados:

Algebra lineal.
Funciones matemticas elementales y especializadas.
Operadores lgicos y aritmticos.
Matrices elementales y manipulacin de vectores.
Matrices especiales.
Estadstica bsica y anlisis de datos.
Polinomios e interpolacin.
Gestin de cadenas de caracteres.
Entradas y Salidas.
Gestin de memoria y errores.
La construccin y desarrollo de aplicaciones utilizando esta librera es un
proceso de amplias perspectivas una vez se tiene un dominio adecuado de su operativa.
El producto est dividido en dos categoras (como libreras objeto): la librera (built-in
library) contiene versiones de las funciones de MATLAB en lenguaje C del tipo
numrico, lgico y utilidades.
Por otra parte la librera de toolboxes (toolbox library) contiene versiones
compiladas de la mayora de archivos M de MATLAB para clculo numrico, anlisis
de
datos
y
funciones
de
acceso
a
archivos
y
matrices.
En equipos UNIX estas libreras pueden ser igualmente obtenidas como libreras de tipo
esttico (static libraries) o bien como libreras compartidas (shared libraries). Respecto
al mundo PC, estas libreras pueden obtenerse como DLL's en el entorno Microsoft
Windows o como libreras compartidas en equipos Apple MacIntosh.
Utilizacin de MATLAB y de su compilador

Para construir una aplicacin del tipo 'stand alone' que incorpore cdigo
originalmente desarrollado como archivos M de MATLAB , deberan de seguirse los
pasos siguientes:
Utilizar el compilador de MATLAB para convertir archivos M en C
mediante la utilizacin de la instruccin mcc -e (la cual es externa a MATLAB).
Compilar el cdigo C fuente en cdigo objeto utilizando un compilador
ANSI C.
Enlazar el cdigo resultante con la MATLAB C Math Library y con
cualquier tipo de archivos y programas especficos que hayan sido previamente
definidos por el usuario.
Velocidad y Precisin
Los algoritmos utilizados en la MATLAB C Math Library han sido desarrollados
por un grupo de renombrados expertos en programacin algortmica de funciones de
tipo matemtico (algebra lineal y clculo numrico). Las funciones de lgebra lineal han
sido obtenidas de las libreras mundialmente reconocidas LINPACK y EISPACK. La
MATLAB C Math Library contiene ms de 300 funciones numricas, lgicas y de
utilidad. Todas estas funciones le permitirn operar en datos de tipo escalar, vectorial o
matricial con la misma facilidad sintctica.
Algunas de las reas bsicas que cubre este toolbox para MATLAB son las
siguientes:
* Clculo de un extremo local (mximo o mnimo) de una funcin real f(x), en
general multivariable y no lineal, sin imponer ninguna restriccin o condicin a la solucin.
Como caso particular, se incluye una rutina especial para problemas de mnimos cuadrados
no lineales.
* Clculo de un extremo local (mximo o mnimo) de una funcin real f(x), en
general multivariable y no lineal, condicionado a que la solucin satisfaga ciertas
condiciones de desigualdad (g(x)<=0) y/o igualdad (g(x)=0).
* Problemas de aproximacin a un conjunto de objetivos.
* Clculo de soluciones de un sistema de ecuaciones continuas y, en general, no
lineales.
* Solucin de problemas mnimas.
* Programacin lineal.
* Programacin cuadrtica.
* Problemas de mnimos cuadrados no negativos.

El presente manual introductorio, presenta una serie de ejemplos de las


funciones ms bsicas de MATLAB, las cuales son las bases para la construccin de
funciones u operaciones ms complejas.
Matlab es un programa command-driven, es decir, que se introducen las rdenes
escribindolas una a una a continuacin del smbolo (prompt) que aparece en una
interfaz de usuario (una ventana). Esta introduccin contiene ejemplos que se pueden
escribir directamente en la lnea de comandos de Matlab. Para distinguir esos comandos,
junto con la respuesta del programa, se emplean un tipo de letra diferente
1.1 PRESENTACIN DE MATLAB
MATLAB=MATrix LABoratory (LABORATORIO MATRICIAL o
MATRICES)
MATLAB es un programa interactivo para clculo cientfico.

de

El elemento bsico de datos es la matriz.

La versin original de MATLAB fue escrita en lenguaje Fortran por Cleve


Moler. Utilizaba programas basados en rutinas de los cdigos LINPACK y
EINSPACK, mxima expresin del software de computacin matricial,
utilizado para resolver numerosos problemas relacionados con los sistemas
lineales y el clculo de autovalores y autovectores.

El presente programa MATLAB fue escrito en lenguaje C, por Steve


Bangert, Steve Kleiman, John Little y Cleve Moler para la empresa The
MathWorks Group. Otros muchos autores han ido incorporando una amplia
gama de aplicaciones especficas, creadas para MatLab denominadas
"toolbox".

Las "toolbox" son libreras de funciones MatLab que permiten resolver


determinado tipo de problemas. Las hay para "casi todo".

Est concebido para resolver problemas con formulacin matricial. No


necesita la definicin de dimensin. La memoria se gestiona
automticamente.

Realiza, directamente, operaciones con vectores y matrices.

Son de destacar sus posibilidades grficas bi y tridimensionales.

Es uno de los cdigos ms tiles en la actualidad para realizar prcticas, por


su fcil aprendizaje, uso, manejo e implementacin en ordenadores
personales.

Otro detalle importante es que, por su estructura, cada usuario puede incorporar nuevas
subrutinas y ampliar las posibilidades del programa dependiendo del campo de

aplicacin.
INTRODUCCIN AL USO DEL MATLAB.
El Lenguaje de Computacin Tcnica MATLAB es un ambiente de computacin
tcnica integrada que combina computacin numrica.
Al Matlab lo podemos dividir en cuatro partes funcionales:
El espacio de trabajo. Tambin conocido como ventana de comandos; es el lugar
donde se teclean los comandos o instrucciones que se desean realizar, cada lnea y Enter
que se presione se interpreta como un comando y se ejecuta de inmediato.
Ejemplos de comandos:
close all
clear
a = [1 2 3 4 5 6 4 3 4 5];
b = a +2;
plot(b)
de grficas
gris
grficos
bar(b)

% termina lo que este empezado


%borra todas las variables del espacio de trabajo
%le asignamos un vector a la variable a
%una funcin que manda resultado a la ventana
%una funcin que interacta con la ventana de
%produce un grfico.

La ventana de despliegue grfico. Todas las acciones que den como resultado
una salida grfica, se despliegan en su propia ventana, con capacidad de almacenar,
copiar e imprimir. Es en este tipo de ventanas donde se crean ambientes amigables de
interfaces para comunicacin y ejecucin, es decir creacin de mens botones, barras
deslizadoras, etc.
La lista de funciones. Tambin llamadas bibliotecas o Toolbox de seales y
Sistemas (un conjunto de herramientas para el procesamiento de seal y para el anlisis
de sistemas de cuadro ) y el Toolbox Symbolyc Math ( herramienta de clculo simblico
basada en Maple V ). Despus de la capacidad de clculo numrico, las funciones de
biblioteca son un soporte muy fuerte del software, ya que encontramos, tanto como
convoluciones, como transformadas rpidas de Fourier, solucin de ecuaciones
diferenciales, clculo de mnimos, etc. Y bibliotecas especializadas, que se distribuyen
por separado, por ejemplo, splines, redes neuronales, optimizacin, clculo simblico,
etc.
Las funciones y secuencia de programacin. La posibilidad de editar una
secuencia de instrucciones por separado y llamarlas desde el espacio de trabajo, y la
posibilidad de pasar parmetros a estas secuencias de instrucciones (funciones) nos
permiten ampliar las listas de funciones y aplicarlas a un propsito especfico
personalizado.
Maltlab cuenta tambin con una ventana de Help con la parte de la lista de
funciones contenidas en el paquete, y sobrepuesta una ventana de un editor de
comandos o instrucciones que se ejecutan al correrlo.

Matlab ejecuta cada lnea que se teclee en el espacio de trabajo.


-

almacena todas las variables generadas durante la sesin de trabajo


tiene un soporte de funciones de biblioteca de propsito general
el despliegue de resultados grficos se realiza en ventana separada
puede ejecutar conjunto de comandos agrupados en un archivo con extensin
.m
programar funciones propias pasando y regresando datos en archivo con
extensin .m

El presente manual introductorio, presenta una serie de ejemplos de las


funciones ms bsicas de MATLAB, las cuales son las bases para la construccin de
funciones u operaciones ms complejas.
Matlab es un programa command-driven, es decir, que se introducen las rdenes
escribindolas una a una a continuacin del smbolo (prompt) que aparece en una
interfaz de usuario (una ventana). Esta introduccin contiene ejemplos que se pueden
escribir directamente en la lnea de comandos de Matlab. Para distinguir esos comandos,
junto con la respuesta del programa, se emplean un tipo de letra diferente
Primitivos.
Para Matlab todo es una matriz. Se conocen como primitivos del lenguaje, las
formas bsicas de manejo de informacin, o las estructuras u objetos elementales con
los que trabaja el lenguaje, y a partir de los cuales se construyen las aplicaciones.
>> numero = pi;
>> pi
ans = 3.14159265358979
>> saludos = hola
saludo = hola
>> saludo(1)
ans = h
>> numero = pi;
>> complejo = numero + i
complejo = 3.14159265358979+1.0000000000i
>>A = [1 2 5
5 4 3
2 5 6]
A
1 2 5
5 4 3
2 5 6

b= [1:14]
b=
Columns 1 through 12
1 2 3 4 5 6 7 8 9 10 11 12

Columns 13 through
13 14
>>
Todas las ventanas son matriz.
La variable numero es una matriz de uno por uno de reales;
La variable saludo es una matriz de uno por cuatro de caracteres;
La variable complejo es una matriz de uno pro uno con entradas complejas;
La variable A es una matriz de tres por tres de reales;
La variable b es una matriz de uno por catorce de reales.
Las instrucciones en MATLAB tienen habitualmente la siguiente forma:
variable=expresin o simplemente:
expresin
La evaluacin de una expresin origina una matriz, que se ve en pantalla junto al
nombre de la variable a la que, a su vez, se le asigna. Si se omite el nombre de la
variable y el signo "=", el programa lo asigna por defecto, de forma automtica, a una
variable (ans).
Para evitar la visualizacin por pantalla basta con finalizar la instruccin por
punto y coma (;).
Si la expresin no cabe en una lnea, porque se desee ver todo su contenido en la
pantalla, se puede continuar en la siguiente acabando la lnea previa por dos o mas
puntos
(precedidos
de
al
menos
un espacio en blanco) y retorno de carro.
El espacio alrededor de los signos aritmticos "+","-",.... es opcional.
Los nombres de funciones y variables comienzan por una letra seguida de
cualquier combinacin de nmeros y letras, aunque MATLAB solo recuerda los 19
primeros caracteres de un nombre.
MATLAB distingue entre letras maysculas y minsculas. A y a son variables
distintas. Todos los nombres de funciones deben formarse con letras minsculas: inv(A)
invierte la matriz A, INV(A) referencia a una funcin desconocida. Si se desea quitar
esta sensibilidad se puede utilizar al comando "casesen" que permite la ambivalencia de
maysculas y minsculas (ejecutando una vez casesen permite la ambivalencia, y si se
ejecuta de nuevo vuelve al estado anterior, de modo que no permite ambivalencia)

Edicin de la lnea de comandos. Con las flechas del teclado se pueden


recuperar las rdenes anteriores, sin tener que volver a teclearlas. As, en el caso
de una equivocacin en un comando complicado

10

d2_f=(y2-2*y1+y3)/deltax^2)
??? -2*y1+y3)/deltax^2)
|
Missing operator, comma, or semi-colon.
en vez de volver a teclear todo, puede recuperarse la instruccin pulsando la
tecla "flecha hacia arriba", desplazarse hasta el error (falta un parntesis) con la
flecha hacia a la izquierda, y arreglarlo:
d2_f=(y2-2*y1+y3)/(deltax^2)

En ocasiones, es interesante no presentar el resultado en la pantalla (por


ejemplo, cuando se trata de una lista de datos muy larga). Eso se consigue
poniendo un punto y coma al final de la instruccin.
y=sqrt(4);
El resultado no aparece, pero sin embargo el clculo se ha realizado:

y
y= 2
El comando who indica las variables con las que se est trabajando:
who
Your variables are:
Fy f indice n_punt t_m
delta_f f_max manchas t y

Comandos relacionados con el sistema operativo:


Present working directory
(directorio de trabajo actual)
cd Cambiar de directorio
dir Listado de los archivos del directorio actual
delete Borra el archivo
getenv Obtiene los valors del entorno
unix Ejecuta operacions del sistema, retorno el resultado
! Ejecuta operaciones del sistema
pwd

Estos comandos son muy similares a los anlogos de MS-DOS o UNIX.

Guardar y cargar archivos de datos. Se emplean los comandos save y load,


respectivamente.
para guardar datos: save [nombre del fichero] [variable] -ascii
para recuperar datos: load [nombre del fichero] [variable] -ascii
Por ejemplo: con estas dos rdenes
cd a:
11

save toto.dat y -ascii


se cambia el directorio de trabajo a a:\ y se guarda all el contenido de la variable
y en el fichero toto.dat con formato texto (por eso se pone -ascii).
who: informa sobre las variables creadas en la sesin de trabajo, incluida ans.
whos: aade informacin sobre las variables empleadas: dimensin, nmero de
elementos, si es compleja o no, memoria utilizada y libre, etc.
clear: borra las variables del espacio de trabajo.
save nombre: salva la sesin de trabajo en un fichero con el nombre
"nombre.mat".
load nombre: recupera en el espacio de trabajo las variables que se haban
guardado en el fichero "nombre.mat".
ADMINISTRACIN DE LA VARIABLES Y DEL ESPACIO DE TRABAJO
CLEAR
BORRA LAS VARIABLES Y LAS FUNCIONES DE LA MEMORIA
DISP
VISUALIZA LA MATRIZ O TEXTO
LOAD
RECARGA LAS VARIABLES DESDE EL DISCO
PACK
CONSOLIDA LA MEMOERIA DEL ESPACIO DE TRABAJO
SAVE
SALVA LAS VARIABLES DEL ESPACIO DE TRABAJO AL DISCO
SIZE
TAMAO DE LA MATRIZ
WHO
LISTA LAS VARIABLES ACTUALES
WHOS
LISTAS LAS VARIABLES ACTUALES, FORMA LARGA
MATLABRC INICIO DE ARCHIVO MAESTRO M-FILE
QUIT
TERMINA MATLAB
STARTUP
EJECUTA M-FILE CUANDO ES INVOCADO POR MATLAB
WHAT
ENLISTA LOS ARCHIVOS *.M EN EL DISCO
AYUDA EN LNEA
Cmo obtener informacin sobre los comandos de Matlab.
Este documento es tan slo una introduccin muy resumida- del lenguaje y del
manejo de Matlab., y para un manejo ms amplio se recomienda consultar los manuales
respectivos.
Adems, desde dentro de Matlab pueden obtenerse explicaciones sobre un tema
particular. Hay varios mtodos.

El comando help. Para obtener informacin sobre una determinada funcin,


basta teclear desde la lnea de comandos help seguido del nombre de la funcin.
Por ejemplo:

12

help round
ROUND Round towards nearest integer.
ROUND(X) rounds the elements of X to the nearest integers.
See also FLOOR, CEIL, FIX.
Si se escribe slo help, se obtiene un ndice de temas. Tambin puede obtenerse
informacin sobre uno de los temas de esa lista: as, help elfun proporciona
informacin sobre las funciones matemticas elementales.
La ventana de ayuda. Puede llamarse tecleando helpwin o bien escogiendo del
men Help el tem Help Window. Se obtiene una ventana nueva, y haciendo
doble click con el ratn sobre un captulo se pasa a un elenco de los tems
contenidos, que a su vez pueden escogerse para una explicacin ms detallada.
Con los botones Back y Forward se navega hacia atrs o hacia adelante.
Tambin puede escribirse directamente en la zona superior izquierda el nombre
del comando deseado: por ejemplo, para buscar informacin sobre sqrt

sqrt Square root SyntaxB = sqrt(X)


DescriptionB = sqrt(X) returns the square root of each element of the array X. For
the elements of X that are negative or complex, sqrt(X) produces complex results.
RemarksSee sqrtm for the matrix square root. Examplessqrt((-2:2))
ans =
0 + 1.4142i
0 + 1.0000i
0
1.0000
1.4142
En la barra See also aparecen comandos relacionados. La informacin es la misma
que la obtenida con el comando help, pero con la comodidad de presentarse en una
ventana aparte en vez de en la lnea de comandos.

La ayuda interactiva. Se obtiene escogiendo del men Help el tem Help Desk,
o tecleando helpdesk en la barra de comandos. Se lanza el navegador y se
obtiene un documento de inicio con un ndice de temas en hipertexto donde
estn los manuales y otras utilidades, como un buscador. Para leer el manual, se
necesita el programa Acrobat Reader.
La informacin que se obtiene es mucho ms completa que en los otros dos
casos, lo cual puede resultar inconveniente si uno desea simplemente, por poner
un caso, conocer la sintaxis de una funcin.
Una introduccin a Matlab ms rigurosa, extensa y comprensiva que este
documento puede encontrarse en el epgrafe Getting Started del Help Desk

Sobre facilidades de ayuda y comandos generales


help: proporciona informacin en lnea sobre todos los directorios de MATLAB.
Help comando: proporciona informacin sobre el comando nombrado
casesen: sensibilidad maysculas/minsculas.
13

what: lista archivos .m y .mat del directorio de trabajo.


size matriz: dimensiones de una matriz
length vector: longitud de un vector
quit: sale de sesin.
exit: sale de sesin.

COMANDOS BSICOS
Empecemos con algo sencillo: las operaciones matemticas elementales.
x=2+3
x=
5
Si no se asigna el resultado a ninguna variable, Matlab lo asigna por defecto a la
variable ans (answer):
2+3
ans =
5
Para saber cul es el valor asignado a una determinada variable, basta introducir el
nombre de la variable:
x
x=
5
La notacin y caracteres especiales bb para las operaciones matemticas elementales
es la siguiente:
^
*
/
+
.*
.^
kron
\
./

exponenciacin
multiplicacin
divisin
suma
resta
Multiplicacin de
arreglos
Potencia de
arreglos
Producto
tensorial
deKronecker
Divisin
izquierda
Divisin de
14

.
..

.
=
==
~=

arreglos
Punto decimal
Directorio
pariente
Continuaicn
Comentario
Transpuesta y
nota
Transpuesta no
conjugada
asignacin
Igual que
Diferente a

Si se aade un punto y coma (;) al final de la instruccin, la mquina no muestra la


respuesta
>>y=5*4;
pero no por ello deja de realizarse el clculo.
>>y
y=
20
El orden en que se realizan las operaciones de una lnea es el siguiente: primero, la
exponenciacin; luego, las multiplicaciones y divisiones; y finalmente, las sumas y las
restas. Si se quiere forzar un determinado orden, se deben utilizar parntesis, que se
evalan siempre al principio. Por ejemplo, para hallar dos entre tres,
2/2+1
ans =
2
(en efecto: primero se calcula 2/2 y luego se suma 1).
2/(2+1)
ans =
0.6667
Primero se calcula el parntesis (2+1) y luego se realiza la divisin.
Dos observaciones. El punto decimal es. (no una coma). Y en Matlab, las
maysculas y las minsculas son distintas. Es decir, X es una variable diferente de x.
En Matlab estn tambin definidas algunas funciones elementales. Las
funciones, en Matlab, se escriben introduciendo el argumento entre parntesis a
continuacin del nombre de la funcin, sin dejar espacios. Por ejemplo:

15

y=exp(0)
y=
1
(la funcin exp es la exponencial). He aqu una tabla con las funciones elementales:
sin
cos
tan
sec
csc
cot
exp
log
log10
sqrt
abs
real
conj
round
fix
floor
ceil
sign
asin
acos
atan
atan2
sinh
cosh
tanh
gamma
rat
rats
imag

airy
bessel
besselj
bessely
besselh
besseli
besselk
beta

seno
coseno
tangente
secante
cosecante
cotangente
exponencial
logaritmo natural
lopgaritmo base 10
raz cuadrada
valor absoluto
Parte real
Conjugado complejo
Redondea al entero ms cercano
Redondea hacia cero
Redondea hacia el -
Redondea hacia el
Funcin signun
arcoseno
arcocoseno
arcotangente
Arcotangente en cuarto cuadrantes
Seno hiperblico
Coseno hiperblico
Tangente hiperblica
Funcin gamma
Aproximacin racional
Salida racional
Parte imaginaria

Funciones especiales
Funcin de Airy
Funcin de Bessel
Funcin de Bessel de primera clase
Funcin de Bessel de segunda clase
Funcin de Hankel o de tercera clase
Funcin de Bessel modificada de
primera clase
Funcin de Bessel modificada de
segunda clase
Funcin beta
16

betainc
betaln
ellipj
ellipke
erf
erfc
erfcx
erfinv
expint
gamma
gammainc
gammaln
legendre
log2
pow2
cross
dot

Funcin beta incompleta


Logaritmo de la funcin beta
Funcin elptica de Jacobi
Integral elptica completa
Funcin error
Funcin error complementaria
Funcin error complementaria escalada
Funcin inversa de error
Funcin error exponencial
Funcin gamma
Funcin gamma incompleta
Logaritmo de la funcin gamma
Funcin asociada de Legendre
Dissect nmero de punto flotante
Scale nmero de punto flotante
Producto vectorial
Producto punto

Para obtener las funciones trigonomtricas inversas, basta aadir una a delante del
nombre. Y para las funciones hiperblicas, una h al final. Por ejemplo, atanh(x) es el
arcotangente hiperblico de x:
z=atanh(2)
z=
0.5493 + 1.5708i
(z es un nmero complejo)
Adems de la variable pi , MATLAB tiene otras variables con valor predeterminado;
ste se pierde si se les asigna otro valor distinto. Por ejemplo:
>>eps
% psilon de la mquina. Obsrvese que MATLAB trabaja en doble
precisin
ans =
2.2204e-016
pero
>>eps=7
eps =
7

17

Otro ejemplo de funcin matemtica: la raz cuadrada; como puede verse, trabajar con
complejos no da ningn tipo de problema. La unidad imaginaria se representa en
MATLAB como i o j, variables con dicho valor como predeterminado:
>>sqrt(-4)
ans =
0+ 2.0000i
El usuario puede controlar el nmero de decimales con que aparece en pantalla
el valor de las variables, sin olvidar que ello no est relacionado con la precisin con la
que se hacen los clculos, sino con el aspecto con que stos se muestran:
>>1/3
ans =
0.3333
>>format long
>>1/3
ans =
0.33333333333333
>>format (o format short)
decimales

% Vuelve al formato estndar que es el de 4 cifras

Para conocer las variables que se han usado hasta el momento:


>>who
Your variables are:
ans eps x y
o, si se quiere ms informacin (obsrvese que todas las variables son arrays):
>>whos
Name Size Bytes
Class
ans 1x1 8 double array
eps 1x1 8 double array
x 1x1 8 double array
y 1x1 8 double array
Grand total is 4 elements using 32 bytes
Para deshacerse de una variable

18

>>clear y
>>who
Your variables are:
ans eps x
Variables especiales y constantes
ans
Respuesta ms reciente
computer Tipo de computador
eps
Precisin relativa de punto flotante
2.2204e-16
flops
Contador de operaciones de punto flotante
i, j
Unidades imaginarias 1
inf
Infinito
NaN
No es un nmero
nargin
Nmero de entrada de argumentos en las
funciones
nargout
Nmero de funciones de salida de
argumentos en las funciones
pi
3.1415926535389
realmax
Nmero de punto flotante ms grande
realmin
Nmero de punto flotante mnimo
Lectura de entrada de un teclado: Matlab puede aceptar datos de entrada a travs del
teclado mediante el comando input. Si se desea leer un nmero, un enunciado bsico
sera.
z = input (Teclee el radio:)
La parte Teclee el radio. Es un mensaje de solicitud que se exhibe en pantalla. Cuando
se teclee el valor del radio y se pulse la techa return, el dato se guardar en z. Tambin
es posible introducir una cadena desde el teclado. Un enunciado bsico sera:
z = input (Indique su nombre. : s)
El segundo argumento, s, indica que la entrada del teclado es una cadena. La variable
z se convertir en una variable de arreglo (vector fila) a menos que la cadena slo
contenga un carcter. Se puede introducir una cadena con input sin s si la cadena se
teclea encerrada entre apstrofos. En este caso, el mensaje de solicitud podra ser.
z = input (Indique su nombre (encerrado en apstrofos):)
Formato de salida: Es posible imprimir mensajes y nmeros con formato si se
utiliza fprintf, por ejemplo,
fprintf(El volumen de la esfera es %12.5f.\n,vol)
Aqu se incluy entre los apstrofos la cadena que se va a exhibir, el formato de un
nmero y el operador de nueva lnea. El estilo del formato debe ser familiar para
19

quienes conocen el lenguaje C: El volumen de la esfera es la cadena que se exhibir,


%12.5f es el formato es similar F12.5 en Fortran, y \n es el operador de nueva lnea que
avanza en una lnea la posicin en la pantalla. El operador de nueva lnea se puede
colocar en cualquier lugar de la cadena. Por ltimo, vol es la variable que se imprimir
en el formata %12.5f. Si se omite \n, lo que se imprima en seguida aparecer en la
misma lnea.
Escritura en un archivo especfico: Es posible utilizar el enunciado fprintf para
escribir salidas con formato en un archivo. Para ello, se incluye el nombre del archivo
en el argumento; por ejemplo,
fprintf(archivo_x, volumen =%12.5f\n, vol)
escribir la salida en el archivo de nombre archivo_x. Si no existe el archivo, se crear
uno nuevo; si existe, la salida se anexar al final de su contenido. Si ya existe archivo_x,
es posible eliminarlo con !rm archivo_x en Unix o !erase archivo_x en Windows.
Como guardar y cargar datos.
Si se utiliza save slo, as:
save
todas las variables se guardarn en el archivo por omisin matlab.mat. La orden load es
el inverso de save y recupera todas las variables guardadas por save.
Se puede especificar el nombre de archivo colocndolo despus de save; por
ejemplo,
save nombre_archivo
Guarda todas las variables en el archivo llamado nombre_archivo.mat. Cuando quiera
recuperar las variables, escriba
load nombre_archivo
Si slo desea guardar ciertas variables, escribba sus nombres despus de
nombre_archivo; por ejemplo,
save nombre_archivo a b c
En este ejemplo, a, b y c se guardan en el archivo llamado nombre_archivo. No separe
nombre_archivo y las variables con una coma. Todas las variables se guardan en
formato binario de doble precisin. Cuando quiera cargar los datos contenidos en
nombre_archivo.mat, teclee
load nombre_archivo
Sin nombres de variables; a continuacin se recuperarn a, b y c.

20

INTRODUCCIN A VECTORES Y MATRICES


VECTORES
Empecemos creando algo tan simple como un vector. Introduzca cada elemento del
vector (separado por un espacio) entre corchetes y asgnelo a una variable. Por ejemplo,
para crear el vector a, introduzca en la ventana de instrucciones de Matlab (para hacerlo
ms fcil puede copiar y pegar desde el navegador a Matlab):
a = [1 2 3 4 5 6 9 8 7]
Matlab debera devolver:
a=123456987
Digamos que desea crear un vector con elementos entre 0 y 20 separados a incrementos
de 2 (este mtodo se usa frecuentemente para crear un vector de tiempo):
t = 0:2:20
t=
0 2 4 6 8 10 12 14 16 18 20
Manipular vectores es casi tan fcil como crearlos. Primero, supongamos que desea
aadir 2 a cada elemento del vector a. La instruccin que realiza este clculo es:
b=a+2
b=
3 4 5 6 7 8 11 10 9
Supongamos ahora que desea sumar dos vectores. Si los dos vectores tienen la misma
dimensin es fcil. Sencillamente sume los dos vectores como se indica a continuacin:
c=a+b
c=
4 6 8 10 12 14 20 18 16
Restar vectores de la misma longitud funciona exactamente igual.
MATRICES
Existen varias formas de introducir los elementos de una matriz:
a) Listado elemento a elemento
b) Generarlas a partir de sentencias y funciones.
c) Crearlas en archivos .m
d) Cargarlas desde archivos de datos externos.
Si se introducen por listado explcito de los elementos, los elementos de una misma fila
se separan por blancos, , o por comas, ,, y las distintas filas se separan mediante el

21

retorno de carro o por punto y coma ;. La matriz queda delimitada por corchetes
[.].
EJEMPLO
A=[1 2 3; 4 5 6; 7 8 9] Matriz de 3x3, no se utiliza el punto y como al final.
A=
1
4
7

2
5
8

3
6
9

A=[ 1 2 3; 4 5 6; 7 8 9]; matriz (3,3): (El ; son para evitar la respuesta de


Matlab)
A
para ver el contenido de la matriz.
A=
1
4
7

2
5
8

3
6
9

Si quisiramos extraer submatrices de A se hara de la forma siguiente: para extraer la


submatriz formada por las filas desde la i hasta la j y columnas desde la k hasta la m,
pondramos: A(i:j,k:m)
EJEMPLO
A(1:2,1:2)
Ans =
1
4

Vemos el contenido de la fila.

2
5

A(:,3)
Ans =

Vemos el contenido de todas las filas de la tercera columna.

3
6
9
A(:,2:3)
columna.
Ans =
2 3
5 6
8 9

Vemos el contenido de todas las filas de la segunda y tercera

La traspuesta de A se escribe A
A, A

Se pide muestre la matriz A y su traspuesta A.


22

Matriz A

A=
1

9
Matriz A(A traspuesta)

ans =
1

Podemos igualar una matriz B a la traspuesta de A mediante:


B=A
B=
1
2
3

4
5
6

7
8
9

Los elementos de una matriz pueden ser cualquier expresin de MATLAB:


EJEMPLO
A1=[sqrt(3) (1+2)/5 abs(-7/2)]
A1 =
1.7321

0.6000

3.5000

Las matrices grandes pueden construirse a partir de otras ms pequeas. Si quisiera


aadir la fila A1 a la ltima fila de A escribira
[A;A1]
ans =
1.0000

2.0000

3.0000

4.0000

5.0000

6.0000

7.0000

8.0000

9.0000

1.7321

0.6000

3.5000

Si quisiera aadir A1 a la ltima columna debera escribir


[A A1]
ans =
1.0000

2.0000

3.0000

1.7321

4.0000

5.0000

6.0000

0.6000

23

7.0000

8.0000

9.0000

3.5000

Para crear un vector de componentes equiespaciados se emplean los dos puntos:


x=4:2:10
x=
4 6 8 10

Los componentes de x van desde 4 de 2 en 2 hasta 10.

20Equivalentemente, si lo que conocemos del vector es que la primera coordenada vale


0, la ltima 20 y que tiene 11 en total, escribiremos:
>>vect2=linspace(0,20,11)
vect2 =
0 2 4 6 8 10 12 14 16 18 20 las coordenadas de un vector se accede sin ms que escribir
el nombre del vector y, entre parntesis, su ndice:
>>vect2(3)
ans =
4
y se pueden extraer subvectores, por ejemplo:
>>vect2(2 :5)
ans=
2468
o,
>>vect1(
ans=
0
2
4
6
8
10
12
14
16
18
20
>>v=[1 2 3]

% Vector de 3 coordenadas

24

v=
123
>>w=[4 5 6];
>>mat=[v;w;0 0 1]

% Tambin es una matriz 3x3

mat =
123
456
001
A los elementos de una matriz se accede sin ms que escribir el nombre de la matriz y,
entre parntesis, los respectivos ndices:
>>mat(1,3)

% Elemento en la primera fila y tercera columna de la matriz mat

ans =
3

Tambin se puede acceder a un fila o columna completas,


>>mat(:,2)

% Segunda columna de mat

ans =
2
5
0
>>mat(2,

% Su segunda fila

ans =
456
acceder a la matriz como si fuera una columna,
>>M(2:7)

% Los elementos segundo a sptimo de la matriz como columna

ans =
4
7
2
5
8
3
o acceder a cualquiera de sus submatrices

25

>>mat(2:3,[1 3]) % Submatriz formada por los elementos que estn en


% todas las filas que hay entre la segunda y la tercera y
% en las columnas primera y tercera
ans =
46
01
Existen algunas matrices definidas previamente; por ejemplo, la matriz identidad,
>>eye(5)
ans =
10000
01000
00100
00010
00001
la matriz nula,
>>zeros(3)
ans =
000
000
000
Y = ones(n) regresa una matriz nxn de 1unos. Aparece un mensaje de error si n no es un
escalar o Y = ones(m,n) or Y = ones([m n]) regresa una matriz mxn de unos. Y =
ones(d1,d2,d3) or Y = ones([d1 d2 d3]) regresa un arreglo de unos con
dimensiones d1-by-d2-by-d3-by-.
Se puede conocer el tamao de una matriz y la longitud de un vector:
>>size(mat) % Dimensiones de la matriz mat (nmero de filas y de columnas)
ans =
33
>>size(v)
ans =
13
>>length(v) % Longitud del vector (nmero de coordenadas)
ans =
3

26

OPERACIONES CON MATRICES


Las operaciones entre matrices (+), (-) y (*) son las habituales, y solamente
habr que cuidar las dimensiones.
Con las matrices tambin funcionan las operaciones matemticas elementales. As
M = [1 2 3 ;4 5 6 ;7 8 9]
M=
123
456
789
M.^2
M^2
ans =
30 36 42
66 81 96
102 126 150
Si se quiere operar en los elementos de la matriz, uno por uno, se pone un punto antes
del operador. Si se quiere elevar al cuadrado cada uno de los elementos de M, entonces
M.^2
ans =
149
16 25 36
49 64 81
>> A=[1 2 3; 4 5 6; 7 8 9]:
>> B= A ;
B

%entrada de la matriz
%la transpuesta

ans
B= 1 4 7
2 5 8
3 6 9
>>A.*B
ans

% operaciones elemento por elemento

1 8 21
8 25 48
21 48 81
Ejem.
>> x= (0.0:0.2:3.0);
>> y=exp(-x).*sin(x);
las funciones

% genera un vector columna


%calcula y que ser un vector, al evaluar

27

exp(-x) y sin(x) se toma a x como vector,


ntese que el
producto es elemento a elemento (.*);
>>[x, y]
ans =
0
0.2000
0.4000
0.6000
0.8000
1.0000
1.2000
1.4000
1.6000
1.8000
2.0000
2.2000
2.4000
2.6000
2.8000
3.0000

%despliega como tabla x, y;


0
0.1627
0.2610
0.3099
0.3223
0.3096
0.2807
0.2430
0.2018
0.1610
0.1231
0.0896
0.0613
0.0383
0.0204
0.0070

Algunas funciones definidas sobre matrices:


det determinante
inv matriz inversa
poly polinomio caracterstico
transpuesta
Para ms informacin: help elmat
En MATLAB tambin funciona la divisin (A\B) y (A/B)
Multiplicacin
A1= [2 3; 3 7]
A2=[2 5 3; 7 2 8]
A1 =
2
3

3
7

A2 =
2
7

5
2

3
8

Guardamos en A3 el producto de A1 por A2


A3=A1*A2
28

A3 =
25 16
55 29

30
65

Multiplicamos A1 por su inversa


A1
inv(A1)
A1*inv(A1)
A1 =
2
3

3
7

ans =
1.4000 -0.6000
-0.6000 0.4000
ans =
6

-0.0000
0 1.0000
1

Divisin A\B
Es equivalente a inv(A)*B, en cuanto a resultado pero no en cuanto al nmero
de operaciones por ser distintos procesos. Si B es un vector columna A\B resuelve el
sistema Ax=B
A4=[-4 5;2 9], B=[3;-6]
A4 =
-4

B=
3
-6
A4\B
ans =
-1.2391
-0.3913
inv(A4)*B
ans =

29

-1.2391
-0.3913
Divisin A/B
Equivale a A*inv(B)
A4=[-4 5;2 9],B=[3;-6]
B/A4,B*inv(A4)
Potenciacin
Si la matriz es cuadrada se puede definir la potencia p de A por A^ p
A1^5
Existen comandos que permiten crear de forma sencilla matrices. Por ejemplo:
>>diag(v) % Matriz diagonal cuya diagonal es el vector v
ans =
100
020
003
>>diag(diag(M)) % Matriz diagonal con la diagonal de M. La sentencia diag(M) da
% el vector formado por la diagonal de la matriz M
ans =
100
050
009
>>diag(ones(1,4),1)+diag(ones(1,4),-1) % Matriz tridiagonal 5x5 con 0 en la diagonal
% principal y 1 en la sub y superdiagonal
ans =
01000
10100
01010
00101
00010
>>tril(M) % Matriz formada por la parte triangular inferior de M.
ans =
100
4 5 07 8 9
>>triu(M) % Matriz formada por la parte triangular superior de M.

30

ans =
123
056
A=[1 2 3
4 5 6
7 8 0];
>> [L, U]=lu(A)

% descomposicin de matrices

L=
0.1429
0.5714
1.0000

1.0000
0.5000
0

0
1.0000
0

U=
7.0000 8.0000
0
0 0.8571 3.0000
0
0 4.5000
Operaciones con vectores y matrices Las funciones matemticas elementales estn
definidas de forma que se pueden aplicar sobre arrays. El resultado es el array formado
por la aplicacin de la funcin a cada elemento del array. As:
>>log(v)
ans =
0 0.6931 1.0986
>>p=(0:0.1:1)*pi % Vector definido como el producto de un vector por un escalar
p=
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
>>x=sin(p)
x=
Columns 1 through 7
0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 8 through 11
0.8090 0.5878 0.3090 0.0000
Las operaciones habituales entre arrays (suma, resta y producto escalar de vectores;
suma, resta, producto y potencia de matrices) se representan con los operadores
habituales:

31

>>v,w

% Recordamos los valores de v y w

v=
123
w=
456
>>z=v*w % Producto escalar (producto de matrices 1x3 por 3x1)
z=
32
>>Z=w*v % Producto de matrices 3x1 por 1x3 = Matriz 3x3
Z=
4 8 12
5 10 15
6 12 18
>>v*w

% Los vectores v y w no se pueden multiplicar

??? Error using *


Inner matrix dimensions must agree.
>>mat

% Recordamos el valor de la matriz mat

Tambin pueden efectuarse multiplicaciones, divisiones y potencias de arrays,


entendindolas como elemento a elemento (como, de hecho, se realizan la suma y la
resta). El operador utilizado para ellas es el habitual precedido por un punto; es decir:
>>v.*w % Vector formado por los productos de las respectivas coordenadas:
% ans(i)=v(i)*w(i)
ans =
4 10 18
>>w./v % Vector formado por el cociente de cada coordenada de w entre la
% coordenada correspondiente de v: ans(i)=w(i)/v(i)
ans =
4.0000 2.5000 2.0000
>>mat.^2 % Matriz cuyos elementos son los de mat elevados
% al cuadrado: ans(i,j)=mat(i,j)^2
ans =
1 4 9
16 25 36
0 0 1

32

Finalmente, pueden calcularse determinantes:


>>det(mat)
ans =
-3
y resolverse sistemas de ecuaciones lineales con el verstil comando \:
>>mat\v
ans =
2.6667
-5.3333
3.000
eye
linspace
logspace
meshgrid
ones
rand
randn
zeros
:

diag
fliplr
flipud
reshape
rot90
tril
triu
:

compan
hadamard
hankel
hilb
invhilb
magic
pascal

Matrices elementales
Matriz identidad
Vector espaciados linealmente
Vector espaciado logaritmicamente
Arreglos X e Y para grficas 3D
Matriz de unos
Nmeros aleatorios distribuidos uniformemente
Nmeros aleatorios distribuidos normalmente
Matriz de ceros
Vector espaciado regularmente

Manipulacin de matrices
Crea o extrae la diagonal
Flip la matriz en el lado izquierdo/derecho
Flip la matriz en la parte arriba/abajo
Cambia el tamao
Rotal la matriz 90 grados
Extrae la parte triangular inferior
Extrae la parte triangular superior
Indexa a la matriz, rearregla la matriz

Matrices especiales
Matriz Companion
Matriz de Hadamard
Matriz de Hankel
Matriz de Hilbert
Matriz inversa de Hilbert
Cuadrado mgico
Matriz de pascal
33

rosser
rsf2csf
toeplitz
vander
wilkinson

cond
det
norm
null
orth
rcond
rank
rref
trace

chol
inv
lscov
lu
nnls
pinv
qr
/o\

balance
cdf2rdf
eig
hess
poly
qz
rsf2csf
schur
svd

Problema clsico de prueba de eigenvectores


Convierte un Schur-real a complejo
Matriz de Toeplitz
Matriz de Vandemonde
Matriz de prueba de eigenvalores de Wilkinson

Anlisis de matrices
Nmero condicional de la matriz
Determinante
Vector o norma de la matriz
Espacio nulo
Ortogonalizacin
Estimador recproco condicional
Nmero de filas o columans linealmente independientes
Forma escalonada reducida
Suma de los elementos de la diagonal

Ecuaciones lineales
Factorizacin de Choleski
Matriz inversa
Mnimos cuadrados en la presencia de covariancia conocida
Factor desde la eliminacin gaussiana
Mnimos cuadrados no-negativos
Pseudoinversa
Descomposicin ortogonal triangular
Solucin de ecuacin lineal

Eigenvalores y valores singulares


Escalamiento diagonal para mejorar la precisin de los eigenvalores
Forma compleja diagonal para formar bloque diagonal real
Eigenvalores y eigenvectores
Forma de Hessenberg
Polinomio caracterstico
Eigenvalores generalizados. Algoritmo QZ
Bloque diagonal real para la forma diagonal compleja
Descomposicin de Schur
Descomposicin de valor singular

Funciones matriciales

34

expm

Matriz exponencial

expm1

M-file de la implementacin exponencial

expm2

Matriz exponencial via series de Taylor

expm3

Matriz exponencial via eigenvalores y eigenvectores

logm

Matriz logaritmica

sqrtm

Matriz de races cuadradas

Variables lgicas.
Tambin existen variables lgicas que toman los valores 0 (falso) o 1
(verdadero). Por ejemplo:
>>abs(v)>=2
% Vector lgico cuyas coordenadas valen 1 si la coordenada
% correspondiente de v es >= 2 y 0 si no lo es
ans =
011
>>vector=v(abs(v)>=2) % Vector formado por la coordenadas de v que
% verifican la desigualdad
vector =
23
>>v2=[3 2 1]
v2 =
321
>>logica=v==v2 % Asignacin de un valor lgico (el doble signo igual es el
% igual lgico)
logica =
010
>>logic2=v~=v2 % Distinto (~ es el operador de negacin)
logic2 =
101
<>
&

Operador relacional
Variable lgica y
35

|
~
xor

all
any
exist
find
finite
isempty
isieee
isinf
isnan
issparse
isstr

Variable lgica o
Variable lgica no
Variabale lgica OR

Funciones lgicas
Verdadero si todos los elementos del vector son verdaderos
Verdadero si cualquier elemento del vector es verdadero
Checa si existe las funciones o variables
Encuentra el ndice de elementos no ceros
Verdadero para elementos finitos
Verdadero para matrices vacias
Verdadero para aritmtica de punto flotante
Verdadero para elementos infinitos
Verdadero para elementos no un nmero
Verdadero para matrices desparramadas
Verdadero para una cadena de texto

clock
cptime
date
etime
tic, toc

Fecha y tiempo
Reloj
Tiempo de computo
Calendario
Tiempo de computo de la funcin
Tiempo de paro de la funcin

Grficas de funciones.
Los datos son examinados grficamente en Matlab usando el comando graph
paper para crear grficas sobre la pantalla. Hay seis tipos diferentes de graph paper:
plot
loglog
semilogx
semilogy
polar
mesh
bar

Grafica linealmente x e y
Grfica con los eje logaritmicos x e y
Grafca smilog x-y (con el eje x logaritmico)
Grpafuica senukig x-y (con el eje y logaritmico)
Grfica polar
Supeficies de malla en tres dimensiones
Carta de barras

Potencial de herramientas grficas. Se pueden dibujar los valores de un vector frente


a otro (de la misma longitud):
Grficas x-y.
Grfica de datos tabulados y funciones.

36

Cada funcin acepta los datos de entrada en forma de vectores y matrices y


automticamente escala los ejes para acomodarlos
Plot. Crea un dibujo de vectores o columnas de matrices (de la misma longitud).
plot
Sintaxis:
a) plot(y)
b) plot(x,y)
c) plot(x,y,'tipo_lnea')
d) plot(x1,y1,'tipo_lnea_1',x2,y2,'tipo_lnea_2', ... , xn,yn,'tipo_lnea_n')
y=(-5:0.1:4).^3;
plot(y);
Dibuja las columnas de y contra su ndice
100

50

-50

-100

-150

10

20

30

40

50

60

70

80

90

100

x=-5:0.1:4;
y=(x).^3;
plot(x,y);

37

100

50

-50

-100

-150
-5

-4

-3

-2

-1

A veces es necesario determinar las coordenadas aproximadas que tiene un cierto


punto de una grfica. Para ello es especialmente til la instruccin grid, que construye
una malla rectangular discontinua sobre el dibujo. En dibujos realizados con la
instruccin polar, la malla sera la habitual en coordenadas polares. El resultado de
escribir las siguientes instrucciones es la grfica mostrada en la figura.
x=-5:0.1:4;
y=(x).^3;
plot(x,y);
>> xlabel('x');
>> ylabel('y');
>> title('grafica de y=x^3');
>> grid;

38

grafica de y=x 3

100

50

-50

-100

-150
-5

-4

-3

-2

-1

x=(0:0.2:9)';
alfa=0:5;
y=besselj(alfa,x); %Funcin de Bessel
>> plot(x,y)
>> xlabel('x');
>> ylabel('y');
>> title('y=besselj(alfa,x), para alfa=0,1,2,3,4, y 5');
y=besselj(alfa,x), para alfa=0,1,2,3,4, y 5

0.5

-0.5

39

x1=0:.1:10;
>> y1=cos(x1);
>> x2=1.5*x1;
>> y2=2*cos(x2);
>> x3=2*x1;
>> y3=3*sin(x3);
>> plot(x1,y1,x2,y2,x3,y3)
3

-1

-2

-3

10

12

14

16

18

20

x1=0:.1:10;
y1=cos(x1);
x2=1.5*x1;
y2=2*cos(x2);
x3=2*x1;
y3=3*sin(x3);
x=[x1' x2' x3'];
y=[y1' y2' y3'];
plot(x,y)
ylabel('y');
>> xlabel('x');

40

-1

-2

-3

10
x

12

14

16

18

20

Color de lnea:
b blue
g green
r red
c cyan
m magenta
y yellow
k black
Estilo de lnea:
- slida
: punteada
-. Punteada y mocha
- - mocha
Marcadores de estilo:
. punto
o crculo
x marca x
+ ms
* estrella
s cuadrado
d diamante
v tringulo bajo
tringulo arriba
< tringulo izquierdo
> tringulo derecho
41

p pentagrama
h hexagrama
x1=0:.1:10;
y1=cos(x1);
x2=1.5*x1;
y2=2*cos(x2);
x3=2*x1;
y3=3*sin(x3);
x=[x1' x2' x3'];
y=[y1' y2' y3'];
plot(x,y,'--r')
xlabel('x');
ylabel('y');
3

-1

-2

-3

10

12

14

16

18

20

x1=[-3:.2:3];
y1=x1.^2+randn(size(x1));
p=polyfit(x1,y1,2);
>> x2=(-3:.5:3);
y2=polyval(p,x2);
plot(x1,y1,'og',x2,y2,'--c');
xlabel('entrada');
ylabel('salida');
title('Ruido dato="o" y curva fijada="--"');

42

Ruido dato="o" y curva fijada="--"

9
8
7
6

salida

5
4
3
2
1
0
-1
-3

-2

-1

0
entrada

t=0:pi/200:2*pi;x=sin(t);y1=sin(t+0.5);y2=sin(t+1.0);...
plot(x,y1,'r-',x,y2,'g--'); title('Angulo difuso'); xlabel('x=sin(t)'); ...
ylabel('y=sin(t+)')

x=-10:.1:10;
>> y=exp(x.^3);
>> plot(x,y)

43

305

15

x 10

10

0
-10

-8

-6

-4

-2

10

x=-10:.1:10;
y=exp(x.^3);
semilogy(x,y)
300

10

200

10

100

10

10

-100

10

-200

10

-300

10

-10

-8

-6

-4

-2

10

Comando:
hold on las subsecuentes lneas o grficas se aaden a la grfica actual
hold off regresa a las condiciones default
hold
mantiene el estado entre hold on y hold off

44

x=-2:.1:2;
>> plot(x,sin(x),'r');
>> hold on
>> plot(x,sin(x.^2),'--b');
>> plot(x,cos(x.^2),':g');
>> hold off
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-2

-1.5

-1

-0.5

0.5

1.5

Algunas veces se tendrn datos que deseara visualizar sobre la misma grfica;
sin embargo, los valores en el eje y no estarn en el mismo rango. El comando plotyy,
nos ayuda a graficar este conjunto de datos sobre la misma grfica.
x2=10:.2:25;
>> y2=50*x2;
>> plot(x1,y1,'-b',x2,y2,'--g');
>> title('y1 es la lnea azul, y2 es la lnea verde punteada');
>> ylabel('y');
>> xlabel('x');

45

y1 es la lna azul, y2 es la lna verde punteada

1400
1200
1000

800
600
400
200
0
-200

10

15

20

25

x2=10:.2:25;
y2=50*x2;
plotyy(x1,y1,x2,y2);
ylabel('y');
xlabel('x');
20

1300

15

1200

10

1100

1000

900

-5

800

-10

700

-15

600

-20

10

15

20

500
25

46

Sistema de ecuaciones paramtricas.


t=[0:.01:1];
x=1-t;
>> y=1+t;
>> plot(x,y);

2
1.9
1.8
1.7
1.6
1.5
1.4
1.3
1.2
1.1
1

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Sistema de coordenadas polares.


El comando compass crea flechas que emanan desde el origen en un sistema de
coordenadas polares. La funcin compass puede ser llamada desde compass(z) o
compass(u,v) donde esta es equivalente a compass(u+iv).
z=[1:10].*exp(i*[1:10]*36*(pi/180));
>> compass(z);

47

90

10

120

60

150

30

4
2

180

210

330

240

300
270

La funcin polar crea una grfica polar desde datos de magnitud y ngulo, toma
la forma polar(theta, rho) o polar (theta, rho, linetype_string) donde theta corresponde al
ngulo (en radianes) y rho corresponde a la magnitud.
Sintaxis:
a) polar(ngulo,radio)
b) polar(ngulo, radio, `tipo_lnea')
theta=2*pi*[0:.1:1];
>> rho=0.5+cos(theta);
>> polar(theta,rho)
90
120

1.5

60

1
150

30
0.5

180

210

330

240

300
270

48

theta=2*pi*[0:.01:1];
rho=0.5+cos(theta);
polar(theta,rho)
90
120

1.5

60

1
150

30
0.5

180

210

330

240

300
270

fplot Dibuja la grfica de una funcin.


Sintaxis:
a)fplot(`funcin', [inicio, final])
b)fplot(`funcin', [inicio, final], n)
c)fplot(`funcin', [inicio, final], n, ngulo)
d)[x, y]=fplot(`funcin',[inicio, final]) => plot(x,y)
n-nmero de puntos
ngulo - ngulo entre segmentos sucesivos de la funcin
fplot('sin(x).*cos(2*x)',[0:5]*pi)

49

0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

0.5

1.5

2.5

La funcin fplot se usa para adaptar el control, concentrando su evaluacin en la


regin donde los cambios de la funcin son ms grandes.
fplot('sin(x)*cos(2*x)',[0 5*pi])
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

10

15

y=sin(x).*cos(2*x);
>> plot(y);

50

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

10

12

14

16

x=[0:0.5:5*pi];
>> y=sin(x).*cos(2*x);
plot(y);
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

10

15

20

25

30

35

fplot('sin', [0, pi])


hold on
fplot('tanh', [-2 2])

51

y=200*sin(x(:))./x(:);
y=fun.(x);
fplot(`func', [0 30], 60, 2)

El comando ezplot considera un rango de -2 a 2 y coloca un ttulo arriba de la


grfica.
ezplot('sin(x)*cos(2*x)')

52

sin(x) cos(2 x)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-6

-4

-2

0
x

MATLAB por default escala los ejes cartesianos, si quisiera ver alguna otra
regin, entonces se usa el comando axis que manipula los atributos de los ejes de la
grfica
Resumen de la funcin axis para 2-D grficas.
axis([xmin xmax ymin ymax])
ejes x e y
axis auto

Determina los lmites mximo y mnimo de los


regresa los ejes escalados al modo default

axis manual
congela la escala a los lmites actuales, tal si el
hold es puesto en on, las subsecuentes grficas usaran los mismos lmites
axis normal
Coloca los ejes en estado default y restaura los
ejes de caja a tamao lleno, removiendo cualquier restriccin sobre las unidades de
escala. Surte efecto sobre axis square y axis equal
axis square
cuadradas.
axis equal
a que sean iguales.

Fuerza los ejes a tener unas dimensiones


Fuerza las unidades de espaciamiento,

axis ij
Coloca el origen de la grfica en la
esquina izquierda superior. El eje x se escala desde la izquierda a la derecha. El eje y
desde arriba hacia abajo.

53

axis xy
Fuerza a los ejes usen un sistema
cartesiano estndar con el origen en la esquina inferior izquierda. El eje x ira desde la
izquierda a la derecha, el eje y desde abajo hacia arriba.
axis tight
valores mnimo y mximo de los datos.

Fuerza a los ejes x e y tomen los

axis off

hace invisible todas las marcas

axis on
marcas.

Hace visible las etiquetas y

x=-10:.1:10;
>> y=exp(x).*sin(x).*(x.^3);
plot(x,y);
>> xlabel('x');
>> ylabel('y');
6

x 10

2
0
-2
-4
-6
-8
-10
-12
-10

-8

-6

-4

-2

10

x=-10:.1:10;
y=exp(x).*sin(x).*(x.^3);plot(x,y);
>> plot(x,y);
>> xlabel('x');
ylabel('y');
>> axis([-10 3 -6 7])

54

-2

-4

-6
-10

-8

-6

-4

-2

axis auto regresa a la grafica anterior.


Los lmites se pueden colocar como una variable:
variable_name=axis
x=0:0.1:( 5*pi);
plot(x,7.5*sin(x));
axis_lmits=axis
desired_max_x=10;
desired_max_y=15;
axis([axis_limits(1) desired_max_x axis_limits(3) desired_max_y]);
new_limits=axis
Los axis lmites antes de redefinirse son:
axis_limits=[0 16 -8 8]
y despus de redefinirse son:
new_limits=[0 10 -8 15]
x=2*cos([0:10:360]*(pi/180));
y=2*sin([0:10:360]*(pi/180));
plot(x,y);
axis([-5 5 -5 5])

55

5
4
3
2
1
0
-1
-2
-3
-4
-5
-5

-4

-3

-2

-1

0.5

1.5

x=2*cos([0:10:360]*(pi/180));
y=2*sin([0:10:360]*(pi/180));
plot(x,y);
>> axis('square')
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2

-1.5

-1

-0.5

x=2*cos([0:10:360]*(pi/180));
y=4*sin([0:10:360]*(pi/180));
plot(x,y);
axis('square')

56

4
3
2
1
0
-1
-2
-3
-4
-2

-1.5

-1

-0.5

0.5

1.5

-1

x=2*cos([0:10:360]*(pi/180));
y=4*sin([0:10:360]*(pi/180));
plot(x,y);
axis('equal')
4
3
2
1
0
-1
-2
-3
-4
-5

-4

-3

-2

x=2*cos([0:10:360]*(pi/180));
y=4*sin([0:10:360]*(pi/180));
plot(x,y);
57

axis('tight')
4
3
2
1
0
-1
-2
-3
-4
-2

-1.5

-1

-0.5

0.5

1.5

La funcin sidetext coloca texto al lado derecho de los ejes.


t=0:0.02:2; phi_0=45*pi/180;
>> y=sin(2*pi*t+phi_0);
>> plot(t,y);
>> grid on
>> xlabel('t');
>> ylabel('y');
title('Plot of sin(2*pi*t+phi_0)');
>> sidetext('phi_0=45 degree');

58

Plot of sin(2*pi*t+phi 0)

1
0.8
0.6
0.4
0.2

0
-0.2
-0.4
-0.6
-0.8
-1

0.2

0.4

0.6

0.8

1
t

1.2

1.4

1.6

1.8

Cambie ahora los ejes


axis ([0 3 -2 2])
Plot of sin(2*pi*t+phi0)

2
1.5
1

0.5
0
-0.5
-1
-1.5
-2

0.5

1.5
t

2.5

Puede colocar texto iterativamente con el ratn con la funcin gtext. Despus de
este comando, cambia el apuntador del ratn desde la flecha estndar a una cruzada.
Posicin la cruz sobre el lugar en la figura donde se desee colocar el texto y presionando
el botn del ratn o cuna tecla sobre su teclado, La cadena de texto aparecer
justificada a al izquierda y verticalmente arriba de los datos que fueron seleccionados.
gtext('Este texto fue colocado con gtext')

59

Plot of sin(2*pi*t+phi 0)

2
1.5
1

Este texto fue colocado con gtext

0.5
0
-0.5
-1
-1.5
-2

0.5

1.5
t

2.5

La funcin text(x,y,text) es una funcin de alto nivel grfico que puede usarse
para aadir una cadena de caracteres en el punto correspondiente al lugar (x, y) a la
grfica.
x=-2:0.1:2;
y=3-(x+1).^2;
plot(x,y);
xlabel('x'): ylabel('y'); title('y=3-(x+1).2');
grid on
axis([-2 2 -5 5]);
%Determine el mximo valor de y
[max_y_valor, max_y_index]=max(y);
corresponding_x_valor=x(max_y_index);
%Colocar un crculo rojo en el dato mximo
hold on
plot(corresponding_x_valor, max_y_valor, 'or');
hold off
%Crear un vector cadena
our_string=sprintf('%g es el punto de dato mximo', max_y_valor);
%Colocar la cadena en la grfica en el valor de y maxima
text(corresponding_x_valor, max_y_valor+0.5,our_string);
El 0.5 es para que el texto no sobrelape la linea.

60

y=3-(x+1).2

5
4

3 es el punto de dato mximo

3
2

1
0
-1
-2
-3
-4
-5
-2

-1.5

-1

-0.5

0
x

0.5

1.5

%Fuente de datos: Economic Report of the President, 1986.


cpi_data=[1.7 2.9 2.9 4.2 5.4 5.9 4.3 3.3 6.2 11.0 9.1 5.8 6.5 7.7 11.3 13.5];
perc_unemploy_data=[4.5 3.8 3.8 3.6 3.5 4.9 5.9 5.6 4.9 5.6 8.5 7.7 7.0 6.0 5.8 7.0];
year_strings=['1965';'1966';'1967';'1968';'1969';'1970';'1971';'1972';'1973';'1974';'1975';'
1976';'1977';'1978';'1979';'1980'];
>> plot(perc_unemploy_data, cpi_data, 'or');
>> %En el siguiente comando de texto dos propiedades se realizaron
>> %el uso de ello muestra una mejor grfica
>> text(perc_unemploy_data, cpi_data, year_strings, 'fontsize',10,
'verticalalignment','bottom');
>> axis([0 10 0 14]);
>> xlabel('Percent Unemployment');
>> ylabel('Percent change in CPI');

61

14

1980

Percent change in CPI

12

1979
1974

10

1975
1978

8
6

1969

1972

1967
1966
1965

2
0

1976

1971

1968

1977

1973
1970

4
5
6
Percent Unemployment

10

Se puede construir una funcin de texto que acepte un arreglo de celdas de cadenas
donde cada cadena contiene el texto para cada lnea.
string_array(1)={Este ser la primara lnea.};
string_array(2)={Este se la segunda lnea.};
string_array(3)={ y as sucesivamente };
el lugar donde las tres lneas se posicionaran con el apuntador del ratn. Si conoce
exactamente el lugar donde el bloque de texto se colocaran, usara
text(0.5. 0.5, string_array);
El comando legend crea una leyenda del tipo de lnea que se usa en la grfica y
asocia a este tipo de lnea con el la cadena de texto que se pone.
x=0:.1:(2*pi);
>> sx=sin(x);
>> cx=cos(x);
>> plot(x,sx,'-r',x,cx,'--c');
>> axis([0 2*pi -1.5 1.5]);
>> legend('Sen(x)','Cos(x)');

62

1.5
Sen(x)
Cos(x)
1

0.5

-0.5

-1

-1.5

Si no esta seguro en que orden se crearon las lneas o si se tiene solamente pocas lneas
en que colocar la leyenda puede usar esta forma de la funcin legend:
legend(linetype1, string1, linetype2, string2,...)
Esto es probablemente ms seguro. Para nuestro ejemplo previo
x=0:.1:(2*pi);
sx=sin(x);
cx=cos(x);
plot(x,sx,'-r',x,cx,'--c');
axis([0 2*pi -1.5 1.5]);
legend('-r','Sen(x)','--c','Cos(x)');
Warning: Ignoring extra legend entries.
Con el ratn se arrastra el cuadro de leyenda a la posicin seleccionada.
Colocar texto.
Hay varias formas de colocar texto en una posicin relativa a la figura en lugar
de los ejes
Se antepone el prefijo \
Usando caracteres especiales.

63

64

plot(0:.1:2*pi,sin(0:.1:2*pi))
xlabel('\tau=0 to 2\pi', 'FontSize',16)
ylabel('sin(\tau)','FontSize',16)
title('it{Value of the Sine from 0 to 2\pi}','FontSize',16)
plot(0:.1:2*pi,sin(0:.1:2*pi))
xlabel('\tau=0 to 2\pi', 'FontSize',16)
ylabel('sin(\tau)','FontSize',16)
title('\it{Value of the Sine from 0 to 2\pi}','FontSize',16)

Value of the Sine from 0 to 2

1
0.8
0.6

sin()

0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1

=0 to 2

Usando subplot para crear mltiples grficas.


Una forma es usando el comando hold y usando otro comando plot. Sin embargo
se tiene la limitacin de que nada ms se esta usando un eje.

65

La forma ms fcil de graficar mltiples grficas es usar el comando subplot,


llamando al comando con tres argumentos crea estas subregiones, los primeros dos
especifican cuantas regiones habr en trminos de filas y columnas, y el tercer
argumento especifica cual regin desear graficar en ella. Por ejemplo, subplot(m,,n,p)
subdivide la ventana en mxn regiones y crea los ejes en la p-esima regin siendo estas
numeradas de izquierda a derecha y de arriba abajo. Despus de que se crearon los ejes
se usa el comando de graficar.
%Crear la forma de datos x e y
x_square=[-3 3 3 -3 -3];
y_square=[-3 -3 3 3 -3];
x_circle=3*cos([0:10:360]*pi/180);
y_circle=3*sin([0:10:360]*pi/180);x_triangle=3*cos([90 210 330 90]*pi/180);
x_triangle=3*cos([90 210 330 90]*pi/180);y_triangle=3*sin([90 210 330 90]*pi/180);
y_triangle=3*sin([90 210 330 90]*pi/180);
%Grafica el circulo en subregion de la esquina superior izquierda
subplot(2,2,1)
plot(x_circle,y_circle,'--g');axis([-4 4 -4 4]);
axis('equal');
title('Circulo');
%Grafica el cuadrado en la subregin superior derecha
subplot(2,2,2);
plot(x_square,y_square,'-r');axis([-4 4 -4 4]);
axis('equal');
title('Cuadrado');
%Grafica el triangulo en la subregin inferior izquierda
subplot(2,2,3)
plot(x_triangle,y_triangle,':b');axis([-4 4 -4 4]);
axis('equal');
title('Triangulo');
%Grafica la combinacion de graficas en la subregion inferior derecha
subplot(2,2,4)
plot(x_square,y_square,'-r');
hold on;
>> plot(x_circle,y_circle,'--g');
plot(x_triangle,y_triangle,':b');
>> axis([-4 4 -4 4]); axis('equal');
>> title('Combinacion de graficas');

66

Circulo

4
2

-2

-2

-4

-5

-4

Triangulo

Cuadrado

-5

-2

-2
0

-4

Combinacion de graficas

-4
-5

-5

subplot(2,2,1),ezplot('sin(x)')
>> subplot(2,2,2),ezplot('cos(x)')
>> subplot(2,1,2),ezplot('sin(x)^2/x^2')
sin(x)

cos(x)

0.5

0.5

-0.5

-0.5

-1

-1
-5

0
x

-5

0
x

sin(x)2/x 2

0.5

0
-6

-4

-2

0
x

subplot(2,2,3),ezplot('sin(x)')
subplot(2,2,4),ezplot('cos(x)')
subplot(2,1,1),ezplot('sin(x)^2/x^2')

67

-subplot(2,2,2),ezplot('sin(x)')
subplot(2,2,4),ezplot('cos(x)')
subplot(1,2,1),ezplot('sin(x)^2/x^2')
sin(x)2/x 2

sin(x)
1

0.5

0.9

0.8

-0.5

0.7

-1

0.6
0.5
0.4

-5

0
x
cos(x)

-5

0
x

0.3

0.5

0.2

0.1

-0.5

-1
-5

0
x

El comando scatter genera una grafica de dispersin, esto es, una grfica de crculos en
los puntos.
x=rand(40,1);
y=rand(40,1);
area=20+(1:40);
scatter(x,y,area)
box on
>> title('Figura: Una grafica scatter')

68

Figura: Una grafica scatter

0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Grficas fciles.
Cuando no se desea especificar los datos explcitamente para una grfica, Matlab
proporciona los comandos fplot, ezplot, y ezpolar. El comando fplot definido en el
archivo-M. Estas funciones se definen los datos para la variable independiente.
fplot(@humps,[-.5,3]);
>> title('Figura: Fplot de la funcion Humps');
>> xlabel('x')
>> ylabel('humps(x)')
pause(5)
fstr='sin(x)/(x)';
ezplot(fstr,[-15,15])
>> title(['Figura:' fstr])
pause(5)
>> istr='(x-2)^2/(2^2)+(y+1)^2/(3^2)-1';
ezplot(istr,[-2 6 -5 3])
axis square
>> grid
title(['Figura: ' istr])

69

Figura: Fplot de la funcion Humps

100

80

humps(x)

60

40

20

-20
-0.5

0.5

1.5

2.5

Figura:sin(x)/(x)
1
0.8
0.6
0.4
0.2
0
-0.2
-15

-10

-5

0
x

10

15

70

Figura: (x-2)2/(22)+(y+1)2/(32)-1

3
2
1

0
-1
-2
-3
-4
-5
-2

-1

2
x

Grficas de reas.
La funcin area genera un rea llena, el rea entre la lnea y el eje y en 0 por
default se llenara. Para cambiar el valor de y para el cual la grfica se llenara, puede
usar la forma area(y, ymin) o area (x, y, ymin), donde la ymin especifica el lugar del
cual la grafica se llena
x=[0:9];
y=5*sin(x);
area(x,y,2,'facecolor','blue');
5
4
3
2
1
0
-1
-2
-3
-4
-5

71

Fill. Dibuja el rea interior de una curva en determinado color


Sintaxis:
a) fill(x,y,'c')
b) fill(x1,y1,'c1',...,xn,yn,cn)
t=0:0.5:2*pi; x=sin(t); fill(t,x,'b')
t=0:0.5:2*pi; x=sin(t); y=cos(t); fill(y,x,'r')

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1

-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

Colormap. Colorea con sombreado el interior de una curva o polgono


colormap(colorbase)
donde colorbase es:
gray
hot
cool
copper
pink
t=0:0.05:2*pi; x=sin(t); y=cos(t); colormap(hot(130)); ...
Nota: 130 es opcional el rango 0-255
fill(y,x,x)
%=> sombreado horizontal
fill(y,x,y) %=> sombreado vertical

72

Elementos de las grficas X-Y


fill
Dibuja una lnea poligonal
loglog
Escala grfica log-log
plot
Grfica lineal
semilogx Escala semi-log
semilogy Escala semi-log
Grfica especiales
bar
Grfica de barras
compass Grfica compass
errorbar
Grfica de error de barras
feather
Grficas feather
fplot
Funciones grficas
hist
Histograma
polar
Grficas polares
rose
Grfica de histogramas de ngulos
stairs
Grfica Stairstep
Anotacin grfica
grid
Rejilla
gtext
Ratn para posicionar texto
text
Anotacin texto
title
Ttulo de la grfica
xlabel Etiqueta del eje x
ylabel Etiqueta del eje y
73

Transformacin de coordenadas
cart2sph Cartesiandas a esfricas
cartpol
Cartesianas a cilndricas o polares
pol2cart
Cilndricas o polares a cartesianas
sph2cart Esfricas a cartesianas

El comando linspace.
linspace(first_value, last_value, number_of_value)
la notacin x=(0:0.1:1)*pi crea un arreglo que inicia en 0, incrementa por 0.1, y finaliza
en 1. Cada elemento en este arreglo se multiplica por para crear los valores deseados
de x. Otra forma es usar el comando linspace.
x=(0:0.1:1)*pi
Columns 1 through 4
0

0.3142

0.6283

0.9425

Columns 5 through 8
1.2566

1.5708

1.8850

2.1991

Columns 9 through 11
2.5133

2.8274

3.1416

x=linspace(0,pi,11)
x=
Columns 1 through 4
0

0.3142

0.6283

0.9425

Columns 5 through 8
1.2566

1.5708

1.8850

2.1991

Columns 9 through 11
Cuando se desee un arreglo logartmico, se tiene el comando logspace.
logspace(0,2,11)

74

ans =
Columns 1 through 4
1.0000

1.5849

2.5119

3.9811

Columns 5 through 8
6.3096 10.0000 15.8489 25.1189
Columns 9 through 11
39.8107 63.0957 100.0000
Se ha creado un arreglo iniciando en 100, finalizando en 102, conteniendo 11 valores.
Eje.
x=linspace(0.1,0.9,30);
y=1 ./x;
plot(x,y)
grid

Podemos combinar algunas de estas opciones. Por ejemplo, las siguientes instrucciones
dibujan las funciones 2 cos( x) y cos 2 ( x) , mostrando la grfica de la primera en color
blanco y punteada y la de la segunda como una sucesin de puntos representados por
estrellas.

75

x=linspace(0,2*pi,15);

y1=2*cos(x);
y2=(cos(x)). 2;
plot(x,y1,'w:',x,y2,'*')
Es importante destacar que, en la versin de estudiante, las opciones de lnea y de punto
no son compatibles y, por ello, no se pueden usar simultneamente. Si queremos
representar una curva discontinua y punteada que una distintos puntos representados por
cruces, hemos de dibujar la curva dos veces, con las opciones por separado. Por
ejemplo,
x=linspace(0,4,15);
y=exp(x);
plot(x,y,'-.',x,y,'+')
construye una curva como la descrita. Podemos darnos cuenta de que MATLAB colorea
los puntos y la curva de modo distinto, ya que las considera como curvas diferentes.
Ejercicio: Representa las siguientes funciones en los intervalos y con las opciones
que se indican, primero por separado y despus en un mismo dibujo.
1.

f ( x) e sen ( x ) en [0, 8], como una lnea continua verde que une los puntos

2.

representados por aspas.


f ( x) ln( x) en [2,6], como una lnea punteada blanca que une los puntos
representados por estrellas.

3.

f ( x)

en [-1,5], como una lnea discontinua azul que une los puntos

representados por crculos.


Ejercicio: Dibuja con un solo color la grfica de la funcin a trozos de la seccin
anterior.

Ejemplo:
>>x=pi*(-1:0.1:1);
>>y=x.*sin(x);
>>plot(x,y)
% Por defecto une los puntos (x(i),y(i)) mediante una poligonal

76

Como se ve, con pocos puntos la grfica tiene un aspecto demasiado lineal a trozos.
Para "engaar" al ojo, basta tomar ms puntos.
>>x=pi*(-1:0.01:1);
>>y=x.*sin(x);
>>plot(x,y)

77

>>fplot('sin(x)',[0 2*pi])

% Dibuja la funcin seno en el intervalo [0,2*pi]

>>ho
ld on

% Mantiene en la ventana grfica los dibujos anteriores dibujarse

>>fplot('cos(x)',[0 2*pi]) % Dibuja sobre la grfica anterior la funcin cos(x)

78

>>hold off

% Con esto olvida los dibujos anteriores


% y dibuja en una ventana nueva

>>fplot('x^2*sin(1/x)',[-0.05 0.05]) % Dibuja la funcin x^2*sin(1/x)

el verstil comando ezplot (se lee como easy plot) que permite dibujar funciones,
>>ezplot('exp(x)')
funcin

% Dibuja la funcin exponencial en un intervalo adecuado a la

Ejercicio numero 1.
Inciso (a).
>> x=0:0.1:4.*pi;
>> y=(sin(x))./(1+cos(x));
>> plot(x,y);
>> xlabel('Eje de las X')
>> ylabel('Eje de las Y')
>> title('problema 2.1 (a)')
>> gtext('sin(x)/1+cos(x)');

79

Inciso (b)
>> x=0:0.1:4;
>> y=1./1+(x-2).^2;
>> plot(x,y);
>> title('problema 2.1 (b)');
>> xlabel('Eje de las X');
>> ylabel('Eje de las Y');
>> gtext('1/1+(x-2)^2');

80

Inciso (c)
>> x=0:0.1:10;
>> y=exp(-x).*x.^2;
>> plot(x,y);
>> title('problema 2.1 (c)');
>> xlabel('Eje de las X');
>> ylabel('Eje de las Y');
>> gtext('exp(-x)*x^2');

81

Ejercicio numero 2.
>> x=0:0.1:6;
>> y1=((x-1).*(x-2).*(x-4).*(x-5))/((3-1).*(3-2).*(3-4).*(3-5));
>> y2=((x-2).*(x-3).*(x-4).*(x-5))/((1-2).*(1-3).*(1-4).*(1-5));
>> plot(x,y1,x,y2);
>> title('Problema 2.3');
>> xlabel('Abscisas');
>> ylabel('Ordenadas');
>> gtext('(x-1)(x-2)(x-4)(x-5)/4');
>> gtext('(x-2)(x-3)(x-4)(x-5)/24');

82

Ejercicio numero 3.
>> x=-1:0.1:1;
>> subplot(2,2,1);
>> y=cos(acos(x));
>> plot(x,y);
>> title('Problema 2.4 (m=1)');
>> xlabel('Eje X');
>> ylabel('Eje Y');
>> subplot(2,2,2);
>> y=cos(2.*acos(x));
>> plot(x,y);
>> title('Problema 2.4 (m=2)');
>> xlabel('Eje X');
>> ylabel('Eje Y');
>> subplot(2,2,3);
>> y=cos(3.*acos(x));
>> plot(x,y);
>> title('Problema 2.4 (m=3)');
>> xlabel('Eje X');
>> ylabel('Eje Y');
>> subplot(2,2,4);
>> y=cos(4.*acos(x));
>> plot(x,y);
>> title('Problema 2.4 (m=4)');
>> xlabel('Eje X');
>> ylabel('Eje Y');

83

Ejercicio nmero 4.
>> t=0:0.1:4.*pi;
>> x=sin(-t)+t;
>> y=1-cos(-t);
>> plot(x,y);
>> title('Problema 2.6');
>> xlabel('Abscisas');
>> ylabel('Ordenadas');
>> gtext('x=sin(-t)+t, y=1-cos(-t)');

84

Ejercicio 5.
x=0:0.01:5;
C1 = 100*x;
C2 = 9*x.*x;
C3 = 9*x.*x + 100*x;
C4 = 80 + x./x
plot(C1,'r'); hold on;
plot(C2,'b'); hold on;
plot(C3,'k'); hold on;
plot(C4,'c'); hold on;
grid on;
hold off;
plot(diff(C1,x)); grid on;

t = 0:0.1:20;
x = 5 * cos ( t + pi/2 );
y = 10 * cos ( t );
plot (x, y);

85

x1 = -5:0.1:2.9;
x2 = 3.1:0.1:5;
cte = 3;
f1 = (x1.^2 - 9)./(x1 - 3);
f2 = (x2.^2 - 9)./(x2 - 3);
f3 = cte+3;
plot (x1,f1,x2,f2,cte,f3,'o');
title ('Practica 1 - grafica b');
xlabel ('Valores de x');
ylabel ('Valores de y');
x = sym ('x');
y = 1;
f = (x - 2)./(x^2 - 4);
limit (f,x,-2)
ezplot (f, [-7, -2.1]);
hold on;
ezplot (f, [-1.9, 1.9]);
hold on;
plot ( 2, double (limit (f,x,2)),'ro');
ezplot (f, [2.1, 4]);
axis ([-7 4 -5 5]);

syms x
C1 = 100*x;
C2 = 9*x*x;
ezplot(C1);
axis([0 5 0 600]);
pause;
ezplot(C2);
axis([0 5 0 600]);
pause;
ezplot(C1+C2);
axis([0 5 0 600]);
pause;
ezplot(C1);
axis([0 5 0 600]);
hold on;
ezplot(C1+C2);
axis([0 5 0 600]);
grid on;
pause;

86

ezplot(diff(C1,x));
axis([0 5 0 600]);
hold on;
%grid on;%
syms x y z
z = x^2+(y+1)^2-4
ezplot(z)
axis square
grid on
x 2+(y+1)2-4 = 0
6

-2

-4

-6
-6

-4

-2

0
x

syms x y z
z = x^2+(y+3)^2-16
ezplot(z,[-8 8 -8 8])
axis square
grid on
syms x y z
z = x^2-y^2-1
ezplot(z)
axis square
grid on
87

x 2-y 2-1 = 0
6

-2

-4

-6
-6

-4

-2

0
x

syms x;
s = (4*x + 6)/(x^2 + 3*x + 7);
int (s)
ezplot (s)
pause;
ezplot (int(s))
syms x y z
z = sqrt((x+2)^2 + (y-3)^2) + sqrt((x-2)^2 + (y+3)^2) - 10
scale=0;

ezplot(z,[-8 8 -8 8])
axis square
%grid on
hold on
line([-8 8],[0 0],'Color','r','LineStyle',':')
hold on
line([0 0],[-8 8],'Color','r','LineStyle',':')
hold on
line([-2 0],[3 0])
88

hold on
line([2 0],[-3 0])
hold on
line([1.5 0],[3.33 0])
hold on
line([-2 1.5],[3 3.33],'Color','m')
hold on
line([2 1.5],[-3 3.33],'Color','m')
hold on
plot(-2,3,'k.')
hold on
plot(0,0,'b.')
hold on
plot(2,-3,'k.')
hold on
plot(1.5,3.33,'r.')
hold on
%quiver(0,0,-2,3,scale,'r')
%hold on
%quiver(0,0,2,-3,scale,'r')
%hold on
(x 2+4 x+13+y 2-6 y)1/2+...-10 = 0

8
6
4

2
0
-2
-4
-6
-8
-8

-6

-4

-2

0
x

syms x;
f = x^(3/2)
g = 3*x - 4

89

ezplot(f)
hold on
ezplot(g)
grid on
pause
axis ([-4 6 -20 15])
pause
axis ([-2 5 -15 12])
pause
axis ([0 5 -5 10])
pause
axis ([2 5 0 10])
pause
axis ([3 5 4 10])
pause
axis ([3 5 6 10])
pause
axis ([3.5 4.5 7 9])
Polinomios.
Un polinomio es una ecuacin de la forma
P( x) a n x n a n 1 x n 1 ... a 2 x 2 a1 x a 0

Por ejemplo el polinomio x 4 12 x 3 0 x 2 25 x 116 es introducido como


p [1 12 0 25 116 ]
p
1 12 0 25 116

Races.
Para encontrar las races de un polinomio, esto es, los valores para los cuales el
polinomio es cero, para ello se utiliza la funcin roots
r = roots(p)
r=
11.7473
90

2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
Polinomios son vectores fila
Races son vectores columna
Dadas las races de un polinomio es posible construir el polinomio asociado,
para ello utilizamos el comando poly
pp = poly (r)
pp =
1

-12

-2.3093e-014 25 116

pp (abs(pp)<1e-12) = 0 % cambia el pequeo elemento que sea cero


pp =
1

-12

25

116

Con el comando conv se realiza la multiplicacin de dos polinomios, por


ejemplo sea a( x) x 3 2 x 2 3x 4 y b( x) x 3 4 x 2 9 x 16 :
a = [1 2 3 4]; b = [1 4 9 16];
c = conv(a, b)
c=
1

20

50

75

84

64

Este resultado es c( x ) x 6 6 x 5 20 x 4 50 x 3 75 x 2 84 x 64 .
Suma de polinomios.
Si ambos polinomios son del mismo orden
d=a+b
d=
2

12

20

Lo cual es d ( x) 2 x 3 6 x 2 12 x 20
Cuando son de diferente orden, el polinomio de orden inferior debe ser puesto
del mismo orden con los coeficientes respectivo cero de tal forma que sea del mismo
orden que el polinomio de orden superior.
e = c + [0

0 d]
91

e=
1

20

52

81

96

84

Que es el polinomio e( x) x 6 6 x 5 20 x 4 52 x 3 81x 2 96 x 84 .


Con la funcin M-file la adicin es automtica sin importar el orden de los
polinomios:
function p=mmpadd(a,b)
%MMPADD Adicin de polinomios
% MMPADD (A, B) suma los polinomios A y B.
if nargin <2
error (No hay bastantes argumentos de entrada.)
end
a=a(:). ;
%asegura que las entrada del polinomio se un vector fila
b=b(:).;
na=length(a); %encuentra la longitud de a y b
nb=length(b);
p=[zeros(1,nb-na)]+[zeros(1,na-nb) b]; %aade ceros como sea necesario
f= mmpadd(c,d)
f=
1 6 20 52

81

96

84

g = mmpadd(c,-d)
g=
1
6 20 48

69

72

44

Que es el polinomio g ( x) x 6 6 x 5 20 x 4 48 x 3 69 x 2 72 x 44 g.
Divisin de polinomios.
Esta operacin se realiza con el comando deconv,
[q, r] = deconv(c, b)
q=
1

r=
0

Este resultado nos dice que b es dividido entre c dando el polinomio cociente q y
el resto r
f = [1 6 20 52 81
[q, r] = deconv(f, b)

96 84]

92

q=
1

r=
-2

-6

-12

En este caso q ( x) x 3 2 x 2 3x 6 y el resto es r ( x) 2 x 2 6 x 12 .


Derivadas e integrales.
Con el comando polyder diferenciamos el polinomio dado.
g %llamando al polinomio
g=
1 6 20 48 69 72
h=polyder(g)
h=
6 30 80

144

138

44

72

Similarmente la integral de un polinomio se obtiene con el comando polyint.


polyint(h,44) %regresa la funcin g desde h=polyder(g)
ans=
1 6 20 48 69 72 4
Con el comando poyval desarrollamos la evaluacin del polinomio para algn
valor de x.
p=[1 4 -7 -10]; %el polinomio
x=linspace(-1,3);
%puntos de evaluacin
v=polyval(p,x);
%evala el polinomio p en los puntos x
plot (x,v)
title(Figura 1: x(^3)+4x(^2)-7x-10)
Polinomios racionales.
Las razones de polinomios se pueden manipular como:
n = [1 -10
n=
1 -10

100] % como numerador

d= [1

100

10

100
0] %como denominador

z= roots(n) %ceros de n(x)/d(x)


z=
5 + 8.66031i

93

-8.66031i

p = roots(d)

%los polos de n(x)/d(x)

p=
0
-5 + 8.66301i
-5 - 8.66301i
La derivada de esta funcin racional con respecto a x se encuentra usando el
comando polyder:
[ndd, dd] = polyder(n,d)
nd =
-1

20

-100

-2000

dd =
column 1 through 6
1 20 300 2000

-100000

10000

column 7
0
Aqu nd y dd son las derivadas de los respectivos numeradores y denominadores.
Otra comn operacin es encontrar la fraccin parcial de la expansin de los
polinomios racional,
[r, p, k] = residue(n ,d)
r=
9.7945e-17 + 1.1547i
9.7954e-17 - 1.1547i
1
p=
-5 + 8.6603i
-5 - 8.6603i
0
k=
[]
En este caso la funcin residuo regresa el residuo o fraccin parcial r, sus polos
asociados p, y el termino polinmico directo k. Debido a que el numerador es de
segundo orden es menor que el denominador, no hay trmino directo. Para este ejemplo
la expansin de la fraccin parcial del polinomio racional es

94

n( x )
1.1547i
1.1547i
1

d ( x) x 5 8.6603i x 5 8.6603i x

Dada esta informacin el polinomio racional original se encuentra usando


residue otra vez:
[nn, dd] = residue (r, p, k)
nn =
1

-10

10

100

dd =
100

En este caso, la funcin residue desarrolla dos operaciones que son inversas una
de otra.
conv
deconv
poly
polyder
polyfit
polyval
polyvalm
residue
roots

Polinomios
Multiplicacin polinomial
Divisin polinomial
Construir un polinomio con races especficas
Diferenciacin polinomial
Fijar un polinomio a datos
Evaluar un polinomio
Evaluar un polinomio con argumento matricial
Fraccin residual
Races de un polinomio

Encontrando la mejor curva.


Para muchas aplicaciones en ingeniera se necesita modelar las relaciones entre
conjunto de variables. Un mtodo de modelar la relacin entre variables se llama
anlisis de regresin.
Un anlisis de regresin es un conjunto de tcnicas, grficas o analticas, para
tratar de encontrar la relacin entre una variable respuesta (observada o medida) sujeta a
errores que deben ser eliminados, y, y una serie de variables independientes, X 1, X2, ....,
Xn, llamadas variables regresoras (asignadas.)
En Matlab la funcin polyfit encuentra la curva por mnimos cuadrados que
mejor se aproxima a un conjunto de puntos.
Para ilustrar esto resolvamos el polinomio, usando el siguiente conjunto de
puntos:
x [0 .1 .2

.3 .4 .5 .6 .7 .8 .9 1] ;

95

y [.447 1.978

3.28

6.16

7.08

7.34

7.66

9.56

9.48

9.30 11.2]

;
Para usar le comando polyfit, debemos fijar el orden del polinomio que
deseemos. Se seleccionamos n = 1, estaramos eligiendo una lnea recta, esto es llamado
una regresin lineal. De otra forma si elegimos n = 2, se encontrar un polinomio
cuadrtico.
n=2
p = polyfit(x,y,n)
p=
-9.8108 20.1293

-0.0317

La salida de polyfit es un vector fila de los coeficientes del polinomio. Aqu la


solucin es y ( x ) 9.8108 x 2 20.129 x 0.0317 . Para comparar la curva solucin a
los datos dados, hagamos la grfica:
xi=linspace(0,1,100);
yi=polyval(p,xi);
plot(x,y,-0,xi,yi,)
xlabel(xx), ylabel(y=f(x))
title(Figura 2: Curva de segundo orden)
Esta grfica contiene los datos originales x e y, marcando los puntos con o y
conectndolos con una lnea recta. En adicin su grfica evala el polinomio de los
datos xi e yi usando lnea --.
La eleccin del orden del polinomio es arbitrario.
pp=polyfit(x,y,10);
pp. %visualiza los coeficientes del polinomio como una columna
ans=
-4.6436e+005
2.29652+006
-4.877e+006
5.8233e+006
-4.2948e+006
2.0211e+006
-6.0322e+005
1-0896e+005
-10626
435.99
-0.447
La grfica respectiva es: ?
y10=polyval(pp,xi); %evala un polinomio de orden 10
plot (x,y,o,si,yi,,xi,y10) %grafica de los datos

96

xlabel(x), ylabel(y=f(x))
title (Figura 1: curvas polinmicas de segundo y dcimo orden)

griddata
interp1
interp2
interpft

Datos interpolados
Datos gridding
Interpolacin 1-D
Interpolacin 2-D
Interpolacin 1-D usando el mtodo FFT

Integracin.
En muchas situaciones es necesario conocer el rea bajo una curva y = s(x),
S ( x)

x1

s ( x )dx c

La funcin humps(x) evala la funcin


humps ( x)

1
1

6
2
( x 0.3) 0.01 ( x 0.9) 2 0.04

100

80

humps(x)

60

40

20

-20

0.2

0.4

0.6

0.8

1
x

1.2

1.4

1.6

1.8

Esta funcin tiene ceros en x=-0.2 y x = 1.3. La funcin fzero proporciona una forma de
encontrar la mejor aproximacin a estos ceros.
format long % visualiza mayor precisin
x = fzero (humps,1.3)

97

x=
1.29954968258482
humps(x)

% que tan cercano es a cero?

ans =
0
[x, value] = fzero(humps,-0.2)
x=
-0.13161801809961
value=
8.881784197001252e-016
Matlab proporciona tres comandos para calcular la integral de una funcin
descrita por los archivos M o funciones en lnea: quad, quad1, y dblquad.
Para ilustrar esto, considere la funcin humps(x) como se muestra en la figura.
La suma de las reas trapezoidales que mejor se aproximan a la integral. Claramente
como el nmero de trapecios se incrementa, mejor ser el rea.
Usando valores tabulados desde la funcin humps(x), el comando de Matlab
trapz aproxima el rea usando la aproximacin trapezoidal;
x=-1: .17:2;
y=humps(x);
area=trapz(x,y)
area =
25.917
Esto probablemente no es muy exacto. Sin embargo, cuando se usa una mejor
discretizacin, se obtiene una mejor aproximacin, por ejemplo
x=linspace(-1,2,100);
y=humps(x);
format long
area = trapz(x,y)

%se requiere un espaciamiento lineal

area=
26.34473119524596
Algunas veces es de inters obtener la integral como una funcin de x, tal como,

x1

f ( x ) dx

98

donde x1 es un lmite inferior conocido. La integral definida desde x1 a x se encuentra


evaluando la funcin en x. Basndose en la regla trapezoidal, tabulando valores de la
integral acumulativa usando la funcin cumtrapz, por ejemplo,
x= linspace(-1,2,100);
y=humps(x);
z=cumtrapz(x,y);
size(z)
ans=
1 100
plotyy(x,y,x,z)
grid on
xlabel(x)
ylabel(humps(x) e integral de humps(x))
title(Figura 1: Integral acumulativa de humps(x))
Diferenciacin.
La diferencial describe la pendiente de una funcin en un punto dado.
Si tenemos un conjunto datos, es primero necesario encontrar la mejor curva que
pase por esos puntos y enseguida encontrar la diferencial
x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];
y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56
n=2;
%orden del polinomio
p= polyfit(x,y,n) %encuentra los coeficientes del polinomio
p=
-9.8108 20.1293 -0.0317
xi=linspace(0,1,100);
yi=polyval(p,xi); %evalua el polinomio
plot(x,y,-o,xi,yi,- -)
xlabel(x), ylabel(y=f(x))
title(Figura2: curva polinomica de segundo orden)

9.48

9.30

11.2];

La derivada en este caso se encuentra usando la funcin derivada del polinomio


polyder:
pd=polyder(p)
pd=
-19.6217 20.1293
La

derivada

de

y ( x ) 9.8108 x 2 20.1293 x 0.0317

es

dy
19.6217 x 20.1293 . Debido a que la derivada de un polinomio es otro
dx

polinomio de un orden menor, la derivada tambin puede ser evaluada en cualquier


punto.

99

Matlab tambin proporciona un comando para calcular la derivada, diff,


definiendo la derivada como
dy
f x x f ( x)
lim
dx x 0
x

dyp=polyval(dp,x);
%derivada del polinomio para comparacin
dy=diff(y)./diff(x);
%calcula la diferencia y usa la divisin entre arreglos
xd=x(1:end-1);
plot(xd,dy,x,dyp,:)
ylabel(dy/dx), xlabel(xx)
title(Figura3: Aproximacin de la derivada por diferencias hacia adelante)
Dentro del mdulo (toolbox) de matemtica simblica, se utiliza el programa de clculo
simblico MAPLE. Con estas herramientas, se puede trabajar con funciones,
Comandos para derivadas e integrales:
i.
ii.
iii.
iv.
v.
vi.
vii.
viii.
ix.
x.
xi.
xii.

diff(f):(Diferencia y aproximacin de derivada). Devuelve la derivada de la


expresin f respecto a la variable independiente por omisin.
diff(t,t): Devuelve la derivada de la expresin f respecto a la variable t.
diff(f,n): Devuelve la n-sima derivada de la expresin f respecto a la variable
independiente por omisin.
int(f):(integral). Devuelve la integral de la expresin f respecto a la variable
independiente por omisin.
int(f,t): Devuelve la integral de la expresin f respecto a la variable t.
int(f,a,b): Devuelve la integral de la expresin f respecto a la variable
independiente por omisin evaluada en el intervalo [a, b], donde a y b son
constantes.
int(f,t,a,b): Devuelve la integral de la expresin f respecto a la variable t
evaluada en el intervalo [a, b].
int(f,m,n): Devuelve la integral de la expresin f respecto a la variable
independiente por omisin evaluada en e l intervalo [m, n], donde m y n son
expresiones simblicas.
simplify(f):(simplificacin simblica). Simplifica f.
pretty(f): (impresin ordenada de la expresin simblica). Imprime la funcin f
en una forma ordenada que sea fcil de entender.
limit. Saca el lmite de una funcin
factor: Factoriza una expresin

Ejemplos:
>>f='sin(x)' % Funcin sin(x) definida mediante una cadena de caracteres
f=
sin(x)
calcular derivadas,
>>diff(f)
100

ans =
cos(x)
>>diff(f,2)

% Derivada segunda de f

ans =
-sin(x)
>> f=x^5-6*x^3+x^2-2;
>> diff (f)
ans =
5*x^4-18*x^2+2*x

Resultado

o encontrar primitivas.
>>int('log(x)') % Primitiva de la funcin logaritmo
ans =
x*log(x)-x
>>diff('x*log(x)-x') % Comprobacin
ans =
log(x)

Calcular la derivada de la siguiente funcin y graficar la funcin obtenida por


medio de matlab.
x2 1

y log10

Desarrollo en matlab:
%derivada de una funcin f(x)
syms x;
%declaracin de la variable independiente
f=log((x^2-1)/x); %declaracin de la funcin
deriva=diff(f)
%derivada de f y la variable es asignada a la variable deriva
d=simplify(deriva) %se simplifica deriva a la mnima expresin
pretty (d)
%imprime la funcin de una manera fcil de observar
ezplot(f);
%grafica la funcin f en dos dimensiones
axis([-1 5 -1 2]) %la grafica la muestra con los limites de -1 a 5 en x y de
%-1 a 2 en y
Al compilar los datos en el programa se obtiene como resultado:
>>
deriva =

101

(2-(x^2-1)/x^2)/(x^2-1)*x
d=
(x^2+1)/x/(x^2-1)
x2 1
x x 2 1

Este cdigo generara una figura en la cual se muestra la grafica de la funcin


f(x) que se integro, la solucin a la integral de esta funcin se despliega en la ventana de
comandos de matlab.
A continuacin se muestra la grafica obtenida al compilar los datos en el
programa:

Se puede apreciar en la parte superior de la grafica la funcin f(x) denotada en


el programa. Tambin ntese los rangos de los ejes los cuales se insertaron con rangos
especficos ya mencionados.
Calcule por medio de matlab la integral de la siguiente funcin:

102

ex
1 e x dx

Procedimiento:
Se introducen los datos en matlab:
%integral de una funcin f(x)
syms x;
%declaracin de las variables independientes
f=exp(-x)/(1+exp(-x)); %funcin f(x)
i=simplify(int(f));
%simplificacion de la funcin
pretty (i)
figure
%generacion de la ventana de la funcin
ezplot(f);
%trazado de la grafica de la funcin
grid on;
%habilitacion de la cuadricula
axis([-4.5 4.5 0 1]) %ejes de visualizacin de -4.5 a 4.5 en x, y
%de 0 a 1 en y
Compilando:
>>
-log(1 + exp(-x))
Grafica:

Integracin trapezoidal.
La regla trapezoidal es un mtodo de integracin numrica que se basa en la
integracin de la frmula de interpolacin lineal. Supngamos que se evala
I

f ( x) dx

Aproximamos f(x) mediante una interpolacin lineal

103

g ( x)

bx
xa
f1
f2
ba
ba

donde
f1 f (a)
f 2 f (b)

Entonces,
I

f ( x)dx

f ( x)dx

h
f1 f 2
2

con
h ba

La ecuacin de la integral trapezoidla, puede reescribirse como


I

f ( x)dx

h
f1 f 2 E
2

donde E representa el error por truncado. La regla trapezoidal se ilustra grficamente en


la figura de abajo.

El rea bajo la interpolacin lineal g(x), es igual a la integral calculada por la regla
trapezoidal, mientras que el rea bajo y= f(x) es el valor exacto. Por tanto, el error E es
igual al rea entre g(x) y f(x), y es aproximadamente
E

1 3
h f
12

o en forma equivalente
E

(b a)3
f
12n 2

104

donde f es a ,edoa de f(x) em a<x<b. La ecuacin anterior indica que el error es


inversamente propocioan a n2.
La ecuacin trapezoidal se puede extender a mltiples intervalo. Si la funcin
integrada se representa mediante n+1 puntos de datos con puntos de abscisas igualmente
espaciados, aplicando repetidamente a cada intervalo la ecuacin, tenemos

h f1
I xf )( dx E
a 2 2f . 2f f
2 n n1
b

con
ba
n
xi a (i 1) h

f i f ( xi )
i 1,2,..., n 1

Supongamos que f es un arreglo de fi para puntos de abscisas equiespaciadas con


un tamao de intervalo de h. La regla trapezoidal extendida puede escribirse como
I h * ( sum( f ) 0.5 * ( f (1) f (length( f )))

Una forma ms cmosa de aplicar la regla trapezoidal es utilizar trapz(Y),


trapz(X,Y):
Z = trapz(Y)
Z = trapz(X,Y)
105

Descripcin Z = trapz(Y) calcula una aproximacin a la integral de Y va el mtodo


trapezoidal (con espaciamiento unitario). Para calcular la integral
para otro
espaciamiento, multiplique Z por el incremento en el espaciamiento. Si Y es un vector,
trapz(Y) es la integral de Y. Si Y es una matriz, trapz(Y) es un vector fila con la integral
sobre cada columna. Z = trapz(X,Y) calcula la integral de Y con respecto a X usando la
integral trapezoidal.
Se puede utilizar un archivo_M de funcin definido por el usuario como Y.
Eje. Un automvil de masa M = 200 kg viaja a una velocidad de 30 m/s. La
transmisin se pone en neutral en t = 0 s. Suponga que la ecuacin de la desaceleracin
despus de t = 0 es
du
8.1u 2 1200
dx

2000u

Donde u es la velocidad y x es la distancia lineal recorrida por el automvil desde el


lugar en el que se encontraba en t = 0. El primer trmino de la izquierda es la fuerza de
aceleracin. El primer trmino de la derecha es la resistencia aerodinmica, y el
segundo la resistencia al rodado. Calcule la distancia que recorre el automvil antes de
que la velocidad se reduzca a 15 m/s.

Integre

30

15

2000udu
.
8.1u 2 1200

Si tomamos 15 intervalos (o 16 puntos de datos) u i recibe inicialmente los


valores
ui 15 (i 1)ui ,

donde ui

i 1,2,...,16

30 15
1 . Si definimos
15

fi

200ui
8.1ui2 1200

Y aplicando la integracin trapezoidal,

16

x u

i 1

0.5 f1 f16

clear
n_puntos=16; i=1:n_puntos;
h=(30-15)/(n_puntos-1);
u=15+(i-1)*h;
f=2000*u./(8.1*u.^2+1200);

106

x=trapz(u,f)
x=
127.5040
Comprobando:
syms u;
f=2000*u./(8.1*u.^2+1200);
int(f,u,15,30)
i=simplify(int(f));
%simplificacion de la funcin
pretty (i)
ans =
20000/81*log(2)+10000/81*log(283)-10000/81*log(13)-10000/81*log(31)
>> 20000/81*log(2)+10000/81*log(283)-10000/81*log(13)-10000/81*log(31)
10000
2
----- log(27 u + 4000)
81
ans =
127.5068
Eje. Sabiendo que la respuesta exacta es I =4.006994. Analice el efecto del
nmero de intervalos, n, sobre el error de la regla trapezoidal aplicada a la siguiente
integral
I

1 e x dx

clear;
Iexacta=4.006994;
a=0; b=2;
fprintf('\n Regla Trapezoidal Extendida\n');
fprintf('\n n
I
Error\n');
n=1;
for k=1:6
n=2*n;
h=(b-a)/n; i=1:n+1;
x=a+(i-1)*h; f=sqrt(1+exp(x));
I=trapz(x,f);
Error=Iexacta-I;
fprintf('\n %3.0f %10.5f %10.5f\n',...
n,
I,
Error);
107

end
Regla Trapezoidal Extendida
n

Error

4.08358

-0.07659

4.02619

-0.01919

4.01180

-0.00480

16

4.00819

-0.00120

32

4.00729

-0.00030

64
>>

4.00707

-0.00008

El ejemplo anterior indica que los errores de la regla trapezoidal extendida se


reducen aproximadamente la cuarta parte cada vez que se duplica el nmero de
(b a)3
intervalos. La integracin puede verificarse con la E
f . Conociendo este
12n 2
comportamiento de los errores podemos eliminar al menos una buena parte de los
mismos. Si denotamos del resultado de la regla trapezoidal extendida con n intervalos
con In y aqul con 2n intervalo con I2n, entonces I n I 2 n I debe ser aproximadamente
igual a tres veces el error de I2n. Si restamos el error as estimado, el resultado deber
hacerse mucho ms exacto. La frmula basada en este principio se llama integracin de
Romberg y se escribe como
I I 2n

1
I n I 2n
3

Por otro lado, este resultado es idntico a la regla 1/3 de Simpson empleando 2n
intervalos.
Regla de Simpson.
Al evaluar la integral de f(x), podemos considerar un polinomio de interpolacin
cuadrtico (de segundo orden) con tres puntos de datros en x 1 = a, x2

ab
y x3 b .
2

Denotamos los valores funcionales en los puntos de datos con f 1, f2 y f3. La regla 1/3 de
Simpson se deduce sustituyendo este polinomio cuadrtico por f(x) en la integral:
I

h
f1 4 f 2 f 3
3

donde
h

ba
2

108

Si incluimos el trmino del error, la ecuacin puede escribirse:


I

h
f1 4 f 2 f 3 E
3

donde E es el trmino del error dado por


E

h5
f
90

Lo que indica que el error es proporcional a h5. El error desaparece si f(x) es un


polinomio de orden 3 o menor.
La regla de Simpson extendida es una aplicacin repetida a un dominio dividido
en un nmero par de intervalos. Si denotamos el nmero total de intervalos con n (par),
la regla 1/3 de Simpson extendida se es:
I

f ( x )dx

h
f1 4 f 2 2 f3 4 f 4 ... 2 f n 1 4 f n f n 1 E
3

donde

f i f a (i 1)h

con
h

ba
n

El trmino del error est dado por


E (b a )

donde

f es

la media de

f en

Eje. Evalue la integral I


= 2, 4, 8 y 16.

h4
f
180

a<x<b.
1 e x dx utilizando la regla 1/3 de Simpson con n

clear;
Iexacta=4.006994;
a=0; b=2;
fprintf('\n Regla 1/3 de Simpson\n');
fprintf('\n n
I
Error\n');
n=1;
for k=1:4
n=2*n;
h=(b-a)/n; i=1:n+1;
x=a+(i-1)*h; f=sqrt(1+exp(x));

109

I=(h/3)*(f(1)+4*sum(f(2:2:n))+f(n+1));
if n>2, I=I+(h/3)*2*sum(f(3:2:n)); end
Error=Iexacta-I;
fprintf('\n %3.0f %10.5f %10.5f\n',...
n,
I,
Error);
end
Regla 1/3 de Simpson
n

Error

4.00791

-0.00092

4.00705

-0.00006

4.00700

-0.00000

16
>>

4.00699

-0.00000

La regla 3/8 de Simpson se basa en el polinomio de Interpolacin de tercer orden


y est dada por:
I

donde h

3h
f1 3 f 2 3 f3 f 4 E
8

ba
, f i f (a (i 1)h) y E representa el error.
3
E

3h 5
f
80

q=quad(fun,a,b)
q=quad(fun,a,b,tol)
q=quad(fun,a,b,tol,trace)
[q,fcnt] = quadl(fun,a,b,...)

La funcin quad describe un mtodo numrico usado para encontrar el rea de


una funcin, aproximando la integral de la funcin desde a a b con un error de 1x10 -6
usando la cuadratura de Simpson. fun es una funcin que puede ser manejada por una
funcin de archivo M-file o una funcin anonma. La funcin y = fun(x) deber aceptar
como argumento un vector x y regresar un vector resultado y, la integral se evala en
cada elemento de x.
Para construir una funcin que maneje una funcin annima. El ejemplo de
abajo crea una funcin annima que encuentra el cuadrado de un nmero. Cuando se
llama a esta funcin, MATLAB asigna el valor que pasara a la variable x, y entonces usa
x en la ecuacin:

110

sqr = @(x) x.^2;


El operador @ construye una funcin manejable para esta funcin, y asigna el manejo a
la variable de salida sqr. Como con cualquier funcin manejable, debe ejecutar la
funcin asociada especificando la variable que contiene el manejo, seguida por una
coma-separa el argumento listad en parntesis. La sintaxis es fhandle(arg1, arg2, ...,
argN)
Para ejecutar la funcin sqr definida arriba, escriba a = sqr(5)
a=
25
Debido a que sqr es una funcin manejable, puede pasar a este como un argumento a
otras funciones.
quadl Numerically evaluate integral, adaptive Lobatto quadrature Syntaxq =
quadl(fun,a,b)
q = quadl(fun,a,b,tol)
q = quadl(fun,a,b,tol,trace)
[q,fcnt] = quadl(fun,a,b,...)
Descriptionq = quadl(fun,a,b) approximates the integral of function fun from a to b, to
within an error of 10-6 using recursive adaptive Lobatto quadrature. fun is a function
handle for either an M-file function or an anonymous function. fun accepts a vector x
and returns a vector y, the function fun evaluated at each element of x. Parameterizing
Functions Called by Function Functions, in the online MATLAB documentation,
explains how to provide addition parameters to the function fun, if necessary. q =
quadl(fun,a,b,tol) uses an absolute error tolerance of tol instead of the default, which is
1.0e-6. Larger values of tol result in fewer function evaluations and faster computation,
but less accurate results. quadl(fun,a,b,tol,trace) with non-zero trace shows the values of
[fcnt a b-a q] during the recursion. [q,fcnt] = quadl(...) returns the number of function
evaluations. Use array operators .*, ./ and .^ in the definition of fun so that it can be
evaluated with a vector argument. The function quad may be more efficient with low
accuracies or nonsmooth integrands. ExamplesPass M-file function handle @myfun to
quadl: Q = quadl(@myfun,0,2);
where the M-file myfun.m is function y = myfun(x)
y = 1./(x.^3-2*x-5);
Pass anonymous function handle F to quadl: F = @(x) 1./(x.^3-2*x-5);
Q = quadl(F,0,2);
Algorithmquadl implements a high order method using an adaptive Gauss/Lobatto
qudrature rule. Diagnosticsquadl may issue one of the following warnings: 'Minimum
step size reached' indicates that the recursive interval subdivision has produced a
subinterval whose length is on the order of roundoff error in the length of the original

111

interval. A nonintegrable singularity is possible. 'Maximum function count exceeded'


indicates that the integrand has been evaluated more than 10,000 times. A nonintegrable
singularity is likely. 'Infinite or Not-a-Number function value encountered' indicates a
floating point overflow or division by zero during the evaluation of the integrand in the
interior of the interval
fun = @(u) 2000*u./(8.1*u.^2+1200);
area=quadl(fun, 15,30,.0001)
area =
127.5068
syms x;
s = (cos(x))^(1/2);
int (s)
ezplot (s)
hold on
int(s)
syms r x;
s = sqrt (r^2 - x^2);
int (s, '-r', 'r')
ezplot (int (s, '-r', 'r'))
syms y;
s = (y^2 + 2*y)/(y^3 + 3*y^2 + 4)^(1/3);
int (s, 0, 1)
ezplot (s)
pause;
ezplot (int (s, 0, 1))
syms t;
s = t*sin(t^2);
int (s)
ezplot (s)
pause;
ezplot (int (s))
syms r;
s = ((r^(1/3) + 2)^4)/r^(2/3);
int (s)
ezplot (s)
pause;
ezplot (int (s))

112

syms x;
s = 1 - abs(x);
int (s, -1, 1)
ezplot (s)
pause;
ezplot (int (s, -1, 1))
syms x;
s = sin (2*x);
int (s, 0, pi/2)
ezplot (s)
pause;
ezplot (int (s, 0, pi/2))
syms x;
s1 = 6*x^3 - 4*x^2 + 'b'*x - 5;
s2 = sin(x);
s3 = sqrt(x);
int (s1)
int (s2)
int (s3)
int (s3, 'a', 'b')
int (s3, 0, 25)
numeric ( int(s3, 0, 25) )
int (s3, 0.5, 0.6)
numeric ( int(s3, 0.5, 0.6) )
ezplot (s2)
pause
ezplot (int(s2))
fmin
fmins
fplot
fzero
ode23
ode45
quad
quad8
trapz

Funcin de funciones
Mnimo de una funcin de una variable
Mnimo de una funcin de varias variables
Grfica de funciones
Encuentra los ceros de una funcin de una variable
Resuelve la ecuacin diferencial, mtodo inferior
Resuelve la ecuacin diferencial mtodo superior
Evala numricamente la integral, mtodo inferior
Evala numricamente la integral, mtodo superior
Integracin numrica usando el mtodo trapezoidal

Introduccin de funciones externas

113

Para introducir la funcin camp(x)=1/((x-0.3)^2+0.01) + 1/((x-0.9)^2+0.04)-6 abrimos


un archivo nuevo que llamamos camp.m y escribimos las siguientes instrucciones:
function y=camp(x)
y=1./((x-0.3).^2+0.01) + 1./((x-0.9).^2+0.04)-6;
Optimizacin
Matlab incluye las siguientes funciones:
fminbnd
calcula el mnimo de una funcin de una variable
fmins calcula el mnimo de una funcin de varias variables
fzero calcula los ceros de una funcin de una variable
fminbnd Minimize a function of one variable on a fixed interval Syntaxx =
fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
[x,fval] = fminbnd(...)
[x,fval,exitflag] = fminbnd(...)
[x,fval,exitflag,output] = fminbnd(...)
Descriptionfminbnd finds the minimum of a function of one variable within a fixed
interval. x = fminbnd(fun,x1,x2) returns a value x that is a local minimizer of the
function that is described in fun in the interval x1 <= x <= x2. fun is a function handle
for either an M-file function or an anonymous function.
Por ejemplo el mnimo de la funcin camp(x) entre 0.5 y 1 se calcula por:
xm=fminbnd('camp',.5,1)
xm =
0.6370
El valor de la funcin en dicho punto es
y=camp(xm)
y=
11.2528
La funcin camp tiene dos ceros, para calcular el cero prximo al punto x=0 escribimos:
xz1=fzero('camp',0)
114

xz1 =
-0.1316
para aproximar el rea de la funcin camp(x) entre 0 y 1
q = quad ('camp',0,1)
q=
29.8583
CONTROL DE FLUJO
Existen como en todos los lenguajes comandos para llevar el flujo del programa
por diferentes caminos, matlab tiene dos comandos para formar lazos for y while, el
condicional if-else, y el ruptura de ciclo break;
El ciclo for
La forma general de un bucle for es
for v = expresion
.....sentencias
end
>> for i = 1:m
for j = 1:n
A(i,j) = 1/(i+j-1);
uno por uno, a
end
end

%desde i = uno hasta m


% desde j = 1 hasta n
%formar los elementos de la matriz A(i, j)
%partir de los ndices
% termina el lazo interior
% termina el lazo exterior

Para el ciclo for se dan dos recomendaciones, si se conoce el tamao de las


matrices que estn involucradas dentro del ciclo, el tenerlas definidas antes de entra al
lazo, hace ms rpida la ejecucin, Y si es posible realizar las operaciones con los
ejemplo de manipulacin de matrices o por renglones y columnas, siempre es preferible
a ejecutar el manejo de elemento por elemento en lazos for, por la velocidad con que se
realizan las operaciones.
Ejemplo. Matriz de Vandermonde.
Consideremos el vector t=[-1 0 1 3 5]', y queremos generar la matriz de Vandermonde,
cuyas columnas son las potencias de t:

115

A= 1 -1
1 -1 1
0 0
0 0 1
1 1
1 1 1
81 27 9 3 1
625 125 25 5 1
Vamos a construirla de dos formas distintas
t=[-1 0 1 3 5]';
n=length(t);
for j=1:n
for i=1:n
A(i,j)=t(i)^(n-j);
end
end
A
Otra forma distinta
A(:,n)=ones(n,1);
for j=n-1:-1:1
A(:,j)=t.*A(:,j+1);
end
A
El ciclo while
El bucle while permite que una sentencia o grupo de sentencias sean ejecutadas un
nmero indefinido de veces bajo el control de una condicin lgica. La forma general
de un bucle while es
while expresion
..... sentencias
end
EJEMPLO: Averiguar cual es el menor entero cuyo factorial consta de 100 digitos.
n=1;
while
prod(1:n)<1.e100
n=n+1;
end
n
>> E = zeros(size(A));

%E es una matriz con puros

unos y del
%mismo tamao que A
>> F=eje(size(A));

116

>>k = 1;
>> while norm(E+F-E,1)>0

%mientras lo que la regresa

la funcin
% norm sea mayor que cero,
se ejecuta lo
>>
E=E+F;
>>
F=A*F/k;
>>
k = k+1;
>> end
>> while 1

%siguiente.
%suma de matrices
%producto de matrices
%termina el cuerpo de while
% es un lazo de duracin

infinita, y la
%manera de romperlo es a
travs del
%comando break.
El condicional if-else
La sentencia if admite anidamientos elseif y acaba con end. La forma general es:
if condicion 1
....(sentencias)
elseif condicion 2
....(sentencias)
else
....(sentencias)
end
Para salir de un bucle cualquiera, fundamentalmente while, se puede usar el comando
break, que sale del lazo en que estaba.
n = input(ntrada de n, negativo quits.);
dato de teclado
if n<=0,
breadk
rompe el ciclo
end
while n > 1
if rem(n,2) == 0
n = n/2
else
n=3*n+1
end
end

%Se solicita una entrada de


% si el dato fue negativo se
%termina el ciclo if
%iniciamos otro ciclo while
%el caso de que rem(n,2)= = 0
%los dems casos
%termina el ciclo if
%termina el ciclo while

117

El siguiente programa ilustra la funcion input para introducir datos por teclada,
y la sentencia break para salir del bucle
Problema clsico de Teora de Nmeros: Se selecciona un entero positivo; si
es par, se divide por 2, y si es impar, se multiplica por 3 y se le suma 1. Repetir el
proceso hasta que se convierta en 1. Es posible que exista algn entero n para el cual
este proceso no tenga fin?
Escribir en un archivo las instrucciones siguientes:
while 1
disp('El proceso se finaliza con un nmero negativo') ;
n=input('Introducir un entero positivo > ');
if n<=0,
break,
end
while n>1
if rem(n,2)==0
n=n/2
else
n=3*n+1
end
end
end

Sentencia switch
Realiza una funcin anloga a un conjunto if ... elseif concatenados. Su forma general
es:
switch switch_expresion
case case_expre1,
bloque1
case{case_expr2,case_expr3,case_expr4,.....)
bloque2
otherwise, % opcin por defecto.
bloque3
end
El resultado de switch_expresion debe ser un nmero o una cadena de caracteres, se
compara con case_expre1 y si coincide se ejecuta el bloque1 de instrucciones. Si
coincide con algunos de los valores case_expr2, ...se ejecutan las instrucciones del
bloque2. La opcin por defecto, bloque3, se ejecuta en el caso de no darse ninguno de
los anteriores
Poner en un archivo switch1.m las instruciones siguientes:
switch1.m
********
switch input_name
case -1
118

disp('menos uno');
case 0
disp('cero');
case 1
disp('mas 1')
otherwise
disp('otro valor')
end
Ejecute alguna instruccin como la que sigue
input_name=0, switch1

M-files.
Son usados cuando es necesario una secuencia larga de comandos, que resuelven
o analizan un problema especfico.
Hay dos tipos de archivos .m

archivos de ordenes
archivos de funcin

Cuando un archivo script (rdenes) es invocado, Matlab simplemente ejecuta


los comandos encontrados en el archivo, en lugar de esperar por una entrada del teclado.
Las declaraciones en un archivo script operan globalmente sobre los datos y espacio de
trabajo. Los archivos script son tiles para realizar anlisis, resolver problemas, o hacer
diseos que requieren tal cantidad de secuencias de comandos que son incmodos para
hacerlos interactivamente.
Ejemplo:
% Un archivo m para calcular la serie de Fibonnacci
f = [1 1]
while f(i)+f(i+1)<100
f(i+2)=f(i)+f(i+1)
end
plot(f)
son contenidos en un archivo fibno.m. Tecleando la proposicin fibno causar que
Matlab ejecute los comandos, calculando los primeros 1000 nmeros de Fibonnacci, y
grficandolos. Despus de la ejecucin del archivo completo, las variables f e i
permanecen en el espacio de trabajo.

Archivos de funcin
119

Debe contener la palabra function al principio de la primera lnea.


Difiere de un archivo de rdenes en que se le pueden pasar argumentos, y las variables
definidas y manipuladas dentro del fichero son variables locales, de forma que al
finalizar la ejecucin del archivo, las variables desaparecen del espacio de trabajo,
excepto si se definen las variables como globales, cosa que se desaconseja.
Consideremos la funcin mean de la librera MATLAB, incluida en el archivo
mean.m
function y=mean(x)
%Mean valor medio. Para vectores
%mean(x) regresa el valor medio. Para matrices
%mean(x) es un vector renglon
%conteniendo los valores promedio de cada columna
[m,n]=size(x);
if m==1
m=n;

%maneja un vector renglon aislado

end
y=sum(x)/m
Si z es un vector que contiene los 50 primeros enteros,
z=1:50;
El valor medio de z se obtiene escribiendo
mean(z) :
y=
25.5000
ans =
25.5000

Repasemos en algunos detalles del archivo mean.m

120

1.- La primera lnea declara el nombre de la funcin y los argumentos de entrada y


salida. Sin esta lnea el archivo sera un archivo de rdenes en lugar de un archivo
funcin.
2.- El smbolo % indica que el resto de la lnea es un comentario.
3.- El primer bloque de lneas de comentario aparecern en pantalla si se solicita la
ayuda: help mean. De este modo se crea la ayuda on-line para los ficheros .m,
colocando texto en una o ms lneas de comentario, empezando por la segunda lnea del
archivo. El comando help ignora lneas de comentario que aparezcan posteriormente,
despus de una sentencia ejecutable o despus de una lnea en blanco.
4.- La primera lnea del help, conocida como lnea H1, es incluida a veces en el archivo
contents.m, y su mensaje es el que aparece cuando se solicita ayuda mediante el
comando lookfor.
5.- Las variables m,n e y son locales a mean, no existen en el espacio de trabajo
despus de finalizada la ejecucin de mean o, s previamente existan, no cambian.
6.- No es necesario colocar los 50 primeros enteros en una variable con el nombre x. De
hecho, los hemos colocado en una variable z. El vector z que contena los enteros fue
pasado a mean y colocado en una varible local x.
Funcin stat, que calcula tambin la desviacin estndar:
function [mean, stdev]=stat(x)
[m,n]=size(x);
if m==1
m=n;

%maneja un vector renglon aislado

end
mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2);
stat ilustra que es possible regresar salidas con mltiples argumentos.
Una funcin final que calcula el rango de una matriz utiliza argumentos de
entrada:
function r=rank(x,tol)
%rango de una matriz
s=svd(x);
121

if (nargin==1)
tol=max(size(x)*s(1)*eps;

%maneja un vector renglon aislado

end
r=sum(s>tol);

Algunas ideas tiles


En general, si introducimos el nombre de cualquier cosa a MATLAB, por
ejemplo cosa, MATLAB sigue los siguientes pasos:
1.- Mira si cosa es una variable.
2.- Mira si es una funcin de MATLAB.
3.- Busca en el directorio si es un fichero .m
4.- Busca en los directorios especificados en el PATH de de MATLAB el fichero
cosa.m

Funciones que llaman a otras funciones


Est permitido que en una funcin llame a otras funciones Se puede pasar nombres de
funciones como argumento de una funcin, aunque requiere cierto tratamiento con la
funcin eval.
Ejemplo:
function F=afun(A,f)
% Si A es una (m,n)-matriz y f es el nombre de una funcin
% "interna", o definida por el usuario, que opera sobre escalares,
% entonces esta funcin devuelve una (m,n)-matriz F con
% F(i,j)=f(A(i,j)). El nombre de la f debe estar entre comillas,
% ejemplo, F=afun(A,'cos') carga F(i,j) con cos(A(i,j)).
[m,n]=size(A);
for j=1:m
for i=1:n
F(i,j)=eval([f,'(A(i,j))']);
end
end
Si f='cos' , F(i,j)=eval([f,'(A(i,j))']); % equivale a F(i,j)=cos(A(i,j))
Recursividad
Una funcin MATLAB puede llamarse a si misma.
Ejemplo:
122

function normaL1= fun ( x )


n=length(x);
if n==1
normaL1=abs(x);
else
normaL1= fun ( x(1:n-1) )+abs(x(n));
end

Echo, input, keyboard, pause


Mientras se ejecuta un fichero .m, normalmente, los comandos que contiene no se
representan en la pantalla. El comando echo en los farchivos .m (echo on) induce a que
las
sentencias
sean
vistas
mientras se ejecutan. Esto es til para depurar programas o en demostraciones.
Ejercicio.- Hacer dos archivos con las mismas sentencias: uno con echo on y el otro con
echo off y apreciar las diferencias.
La funcin input permite que el usuario introduzca datos.
n = input('Introducir un numero entero ')
Anlogo al input, pero mas potente es el comando keyboard. Esta funcin invoca el
teclado del computador como una orden. Cuando el comando keyboard figura en un
fichero .m, detiene la ejecucin del archivo de ordenes y da el control al teclado del
usuario. Esta situacin especial se manifiesta con un doble prompt. Las variables
pueden ser examinadas o cambiadas, y todos los comandos de MATLAB son vlidos. El
modo keyboard se termina ejecutando el comando return, es decir escribiendo return y
pulsando
la
tecla
return.
Es
til
para
depurar
programas.
Estas dos funciones no se pueden utilizar desde WORD
input(1)
Warning: Input command not available when using MATLAB as Engine
keyboard
Warning: Keyboard command not available when using MATLAB as Engine
El comando pause detiene la ejecucin de un archivo y espera que el usuario pulse una
tecla cualquiera antes de continuar la ejecucin; pause(n) detiene la ejecucin n
segundos.

Variables globales
Ordinariamente, las funciones de MATLAB, definidas por un archivo .m, tienen sus
variables locales, las cuales estn separadas de las de otros archivos, y de las del espacio
de trabajo. Sin embargo, si varias funciones, y posiblemente el espacio de trabajo,
declaran un nombre particular como variable global, entonces comparten una copia de
123

esa variable. Una asignacin a esa variable en una funcin, queda disponible en todas
las otras funciones que la declararon como global.
Por una cuestin de estilo, las variables globales suelen tener nombre largos y con letras
maysculas, aunque no es necesario. Por ejemplo: global ALPHA,BETA.

Cadenas de texto
Las cadenas de texto se introducen en MATLAB limitadas por comillas simples ('). Por
ejemplo
s='Hola'

% despus de escribir una cadena, queda el eco en echo off

El texto es almacenado en un vector que tiene tantos elementos como caracteres. Su


tamao nos lo indica el comando size
size(s)
Los caracteres son almacenados en sus valores ASCII y abs muestra esos valores
abs(s)
La funcin setstr convierte el vector cuyos elementos estn en cdigo ASCII en una
cadena.
setstr(ans)
La funcin disp, que muestra simplemente el texto en la variable, es til, as como la
funcin isstr, que detecta cadenas y la strcmp, que compara cadenas.
Se pueden usar corchetes para concatenar cadenas y obtener otras mas largas s=[s, '
Mundo]
s=[s,
'
Mundo']
echo on % S se desea as, puesto que despus de escribir una cadena, queda el eco en
off
Los valores numricos son convertidos a cadenas mediante sprintf, num2str e int2str.

Funcin eval
La funcin eval es una potente macro que trabaja con variables de texto. eval(t) evalua
el texto contenido en la variable de texto t. Si string es el texto fuente de una sentencia
o expresin de MATLAB, entonces

124

t='string'
almacena el texto en la variable t, de modo que si escribimos t produce la impresin del
texto, mientras que eval(t) interpreta el texto.
EJEMPLO: generacin de la matriz de Hilbert de orden n (dado n)
t='1/(i+j-1)';
n=3
for i=1:n
for j=1:n
a(i,j)=eval(t);
end
end
a
Se pueden usar las funciones eval e input para escoger una de varias opciones.
Construyamos 4 archivos .m: punt.m, kick.m, run.m y kick.m., con algn contenido.
Por ejemplo,
punt.m
******
disp('Este es el contenido del archivo punt.m')
opciones=['punt';'pass';'run ';'kick'];
k=input('Escoger opcion numero: ');
eval(opciones(k,:))
Puesto que las cadenas colocadas en las filas de una matriz han de tener todos la misma
longitud, 'run ' debe tener un espacio en blanco.
En el siguiente ejemplo se muestra como se puede usar el eval para cargar 10 archivos
numerados archivo1.mat, archivo2.mat, etc., mediante el comando load:
for i=1:10
eval(['load ',' fichero', int2str(i)])
end

Como aumentar velocidad


Las operaciones vectoriales y matriciales en MATLAB son ms rpidas que las que se
hacen elemento a elemento. Esto quiere decir que para obtener la mxima velocidad es
conveniente vectorizar los algoritmos en los archivos .m. Por tanto es deseable, siempre
que sea posible, expresar los bucles for y while mediante operaciones vectoriales o
matriciales. A continuacin escribimos dos secuencias distintas que permiten calcular el
seno
de
1001
nmeros
desde
1
comprendidos entre 1 y 10

125

i=0;
for t=0:.01;10
i=i+1;
y(i)=sin(t);
end
y una versin vectorizada
t=0:.01:10;
y=sin(t);
Vamos a calcular los tiempos de clculo de cpu de una y otra para lo cual conviene
hacer dos archivos de rdenes con el siguiente contenido:
format long
t0=cputime;
i=0;
for t=0:.01;10
i=i+1;
y(i)=sin(t);
end
t1=cputime-t0;
disp(['Tiempo de cpu (versin secuencial): ' num2str(t1)])
Y para la versin vectorizada:
format long
t0=cputime;
t=0:.01:10;
y=sin(t);
t1=cputime-t0;
disp(['Tiempo de cpu (version vectorizada): ' num2str(t1)])
Como puede apreciarse la diferencia en tiempo de ejecucin es grande.

break
else
elseif
end
error
for
if
return
while

input

Control de flujo
Termina la ejecucin de un lazo
Usado con if
Usado con if
Termina el alcanze de for, while e if
Visualiza mensjae y aborta la funcin
Repite la consideracin un nmero especfico de veces
Consideracin condicional
Regresa a invocar la funcin
Repite la consideracin un nmero indefinido de veces
Entrada interactivas
Prompt usado para entrada
126

keyboard
menu
pause

Invoca al teclado como si fuera un archivo script


Genera un men de eleccin para entrada
Espera para respuesta del usuario

dbclear
dbcont
dbdown
dbquit
dbstack
dbstatus
dbstep
dbstop
dbtype
dbup

Debugging
Remueve el breakpoint
Resume la ejecucin
Cambia el contexto del espacio de trabajo
Sale del mode debug
Lista quien llama a quien
Lista todos los breakpoint
Ejecuta uno o ms lneas
Determina el breakpoint
Listas los m-files
Cambia el contexto local del espacio de trabajo

Matlab como lenguaje de programacin


eval
Ejecuta una cadena
feval
Ejecuta una funcin especfica por cadena
function Aade una nueva funcin
global
Define variables globales
nargchk
Valida nmero de entrada del argumento
echo
Habilita el modo de ejecucin de
comandos con eco
e
Verifica si existen variables
function Defina una funcin
startup
Comienza un archivo M
keyboard Llama al teclado como un archivo M

Las funciones.
Son archivos que en la primera lnea la primer palabra que tienen es function,
seguido por una definicin de valores que regresara, el nombre de la funcin y de los
argumentos que se le pasan, las diferencias con respecto al script es que todas las
variables definidas dentro de la funcin son locales, es decir, se destruyen al terminar de
ser evaluada la funcin, otra diferencia importante, es que se le pueden pasar
argumentos, es decir, se le dice con que datos trabajara, y podemos asignar el resultado,
en variables.
Ejemplo: La funcin mean.m
function y =mean(x)
%MEAN valor medio o promedio para vectores
%MEAN(x) regresa el valor regresa el valor medio para matrices

127

% MEAN(x) es un vector rengln conteniendo los valores promedios de cada


columna
[m, n]=size(x)
if m = = 1
m= n;
%maneja un vector rengln aislado
end
y=sum(x)/m
La existencia de este archivo define una nueva funcin llamada mean. La nueva
funcin mean puede ser usada como cualquier otra funcin de Matlab. Por ejemplo, si z
es un vector de enteros desde 1 a 99,
z = 1:99;
El valor medio es determinado tecleando
mean(z)
Lo cual resulta en
ans=
50
Ejemplo. Funcin stat, que calcula la desviacin estndar.
function [mean, stedv] =stat(x)
[m, n] = size(x);
if m = = 1
m = n;
end
mean = sum(x)/m;
stdev = sqrt(sum(x:^2)/m-mean.^2);
Stat ilustra que es possible regresar salidas con mltiples argumentos.

Archivos .mat (MAT-file)


Los comandos load y save cargan y almacenan el contenido del espacio de trabajo en
archivos.mat. Tales ficheros son binarios y tienen un formato dependiente de la
mquina que los genera, no obstante, pueden ser transportados entre distintas mquinas
porque contienen un descriptor en la cabezera que describe la plataforma que lo grab.
MATLAB lee este descriptor y carga el archivo haciendo la conversin necesaria. Para
el usuario son directamente transportables.

Programas externos
Es posible, y con frecuencia interesante, utilizar programas en C o FORTRAN como
funciones MATLAB. Tales programas externos directamente utilizables por MATLAB
128

son llamados MEX-files. Hay que seguir una serie de instrucciones para lograr esta
adecuacin de los archivos externos para convertirlos en MEX-files, despus utilizar un
compilador especial para cada lenguaje y finalmente se pueden utilizar exactamente
como un m-file.

Importacin y exportacin de datos


Se pueden introducir datos de otros programas en MATLAB. Anlogamente, se pueden
exportar datos de MATLAB a otros programas.
Importacin de datos de MATLAB
El mejor mtodo para importar datos depende de la cantidad y el formato de los
mismos.
1) Introducir los datos como una lista explcita de elementos. Si se trata de una
cantidad pequea de datos, es fcil escribirlos en forma explcita usando corchetes [..].
Este mtodo no es aconsejable para cantidades grandes de datos ya que el riesgo de
equivocaciones es grande.
2) Crear datos en un archivo de rdenes .m. Se usa un editor de texto para crear un
archivo de rdenes que introduzca los datos como una lista explcita de elementos. Este
mtodo es til cuando los datos no estan en forma legible por el computador pero se
dispone de ellos en algn formato. Al igual que en el mtodo anterior tiene la ventaja de
poder usar un editor de texto para cambiar los datos o corregir los errores, y a
continuacin ejecutar el archivo .m para volver a introducir los datos.
3) Cargar los datos de un fichero flat file ASCII. Un flat file almacena los datos en
formato ASCII con filas de longitud fija, que terminan con retorno de carro, y espacios
en blanco separando los nmeros, es decir cada fichero de este tipo contiene una matriz
de datos. Estos archivos pueden ser editados con un editor de texto normal, y pueden ser
ledos directamente en MATLAB usando el comando load. El resultado consiste en
almacenar los datos en una varible cuyo nombre es el del archivo.
4) Leer los datos usando fopen, fread y otras funciones de entrada/salida de bajo
nivel. Este mtodo es til para cargar archivos de datos generados con otras
aplicaciones y que tienen su propio formato.
5) Desarrollar un archivo MEX-file para leer los datos. Este es el mtodo que usan
subrutinas ya disponibles para leer datos de archivos de otras aplicaciones C o
FORTRAN.
6) Desarrollar programas en Fortran o C para trasladar los datos a un archivo en
formato .mat que pueda ser leido por MATLAB con el comando load.
Exportacin de datos de MATLAB
Existen varias formas de exportar datos de MATLAB para poder utilizarlos por otros
programas:
129

1) Para matrices pequeas, usar el comando diary para crear un archivo con el
contenido de la sesin de trabajo, y listar las variables de ese archivo. A continuacin se
puede utilizar cualquier
editor de texto para manipularlo y utilizarlo posteriormente. La salida de diary incluye
todos los comandos de MATLAB usados en la sesin de trabajo, lo cual es til para su
inclusin en documentos y memorias. El comando diary se utiliza de la manera
siguiente: si en un momento dado de la sesin se escribe diary pepe todo lo que se haga
posteriormente se guarda en el archivo pepe hasta que se ejecute el comando diary off.
En otra sesin distinta se puede incorporar el contenido del archivo pepe al espacio de
trabajo mediante diary pepe.
2) Salvar los datos en formato ASCII usando el comando save con la opcin -ascii.
Por ejemplo,
A=rand(3,4);
save pepe.dat A -ascii
crea un archivo ASCII llamado pepe.dat que contiene la matriz A.
3) Escribir los datos en formato especial utilizando fopen, fwrite y otras funciones
entrada/salida de bajo nivel. Este mtodo es til para escribir datos en archivos con el
formato
requerido por otras aplicaciones.
4) Desarrollar un fichero MEX-file para escribir los datos. Este es el mtodo de
eleccin de subroutinas ya disponibles para escribir archivos de datos en la forma que
necesitan otras aplicaciones.
5) Escribir los datos de salida en un archivo .mat usando el comando save, y escribir
un archivo en Fortran o C para trasladar los datos de ese archivo al formato requerido.
Aplicaciones de la programacin.
Programa para ilustrar los efectos grficos de una aplicacin lineal
H=[- 6 -6 -7 0 7 6 6 -3 -3 0 0 -6; -7 2 1 8 1 2 -7 -7 -2 -2 -7 -7]
x=H(1,:)';y=H(2,:)';plot(x,y,'o',x,y,'-');
axis([-10 10 -10 10]); axis('square');
disp('La giramos 45 grados')
A=[cos(pi/4) -sin(pi/4);sin(pi/4) cos(pi/4)]
B=A*H;
x=B(1,:)';y=B(2,:)';plot(x,y,'o',x,y,'-');
disp('Simetra respecto Ox')
A=[1 0;0 -1]
B=A*H;
x=B(1,:)';y=B(2,:)';plot(x,y,'o',x,y,'-');
disp('Simetra respecto Oy')
A=[-1 0;0 1]

130

B=A*H;
x=B(1,:)';y=B(2,:)';plot(x,y,'o',x,y,'-');
disp('Simetra respecto O')
A=[-1 0;0 -1]
B=A*H;
x=B(1,:)';y=B(2,:)';plot(x,y,'o',x,y,'-');
disp('La deformamos')
A=[0.7 0.3;0.3 0.7]
B=A*H;
x=B(1,:)';y=B(2,:)';plot(x,y,'o',x,y,'-');
disp('La deformamos ms')
A=[0 1.1;0.1 0.3]; B=A*H;
x=B(1,:)';y=B(2,:)';plot(x,y,'o',x,y,'-');

EXPON.M
% Este programa sirve para evaluar la funcion exponencial en la siguiente serie:
1+x+x^2/2!+.....x^n/n!.....
%%%%%%%%%%%%%%%%%
clc
clear
x=input('ingrese x: ');
n=input ('ingrese n: ');tofi=exp(x);
y=1;
sum=1;
erro=tofi-sum;
disp (' n
aproximacion
erro')
for i=1:n;
fprintf(' %2.0f %1.15f %1.15f\n ',i,sum,erro)
y=y*x/i;
sum=sum+y;
erro=((tofi-sum)/tofi)*100;
end
PROMEDIO.M
% Este programa es diseado para determinar la nota de un curso que consiste en
parciales, trabajos y examen
% final, que al final seran mostrados al acabar el proceso.
%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear
s=input ('ingrese el nombre del curso: ','s');
t=input ('ingrese el codigo del curso: ');
fp=input ('ingrese el factor de peso del parcial: ');
ft=input ('ingrese el factor de peso del trabajo: ');
fF=input ('ingrese el factor de peso del examen final: ');
n=input ('ingrese el numero de examenes parciales: ');
for i=1:n

131

g(i)=input ('ingrese las notas de los parciales: ');


end
x=input ('ingrese el numero de trabajos: ');
for j=1:x
h(j)=input ('ingrese las notas de los trabajos: ');
end
prop=(sum(g))/n;
prot=(sum(h))/x;
nF=input ('existe la nota nota final (s/n): ','s');
if nF =='s'
pfin=input('calificacion final: ');
pp=(fp*prop+ft*prot+fF*nF)/(fp+ft+fF);
else
pp=(fp*prop+ft*prot)/(fp+ft);
end
t
s
pp
COSENO.M
function aproximada=coseno(x0,n,tol)
% Este programa sirve para aproximar la funccin f(x)=cos(x)
% por 1-(X^2)/2!+(X^4)/4!-(X^6)/6!+(X^8)/8!-....
% probar con: x0=pi/3 n=25 tol=0.00001
%%%%%%%%%%%%%%%%%%
clc
serie(1)=1;
i=1;
disp('iter
|Eap|%
Ev%
Evr%
Eap% ')
while i<=n
p=((-1)^i)*(x0^(2*i))/facto(2*i);
serie(i+1)=serie(i)+p;
Ev = cos(x0)-serie(i);
Evr= (cos(x0)-serie(i))*100/cos(x0);
Eap= (serie(i+1)-serie(i))*100/serie(i+1);
fprintf('i= %d %3.9f \t %3.9f \t %3.9f \t
%3.9f\n',i,abs(Eap),abs(Ev),abs(Evr),abs(Eap))
i=i+1;
if abs(Eap) < tol
break
end
end
DERIN.M
% Este es un programa que sirve para calcular la derivada de y=x^3
% usar n:10
%%%%%%%%%%%%%%
clc

132

clear
b=10;
der=3*b^2;
b1=b^3;
n=input('ingrese n: ');
y=300; % y(10)=300 es la derivada exacta
disp(' n
h
f(x0)
Et')
for i=1:1:n;
h=10^(1-i);
f=b+h;
ff=f^3;
denum=(ff-b1)/h;
et=((y-denum)/y)*100;
fprintf(' %2.0f \t %4.10f \t %4.4f \t %4.4f\n',i,h,denum,abs(et))
end
end
PARAC.M
% Este es un programa que sirve para graficar la ecuacion de la caida
% un paracaidista en condiciones ideales.
% recomendacion: usar con t:10, m:68.1, v:40
%%%%%%%%%%%%%%%
clc
clear
t=input('ingrese el tiempo: ');
m=input('ingrese la masa: ');
g=9.8;
v=input('ingrese la velocidad: ');
c=2:2:20;
fc= ((m.*g)./c).*[1-exp(-(c./m).*t)]-v;
plot (c,fc,'b-',c,fc,'g*');
grid
end
title('grafico de la caida del paracaidista');
xlabel(' c '); ylabel('f(c) ');
end
SUMA.M
% Este programa sirve para calcular la serie infinita f(n)=sum 1/n^2, desde 1
hasta 10000
% recomendacion: dar n:10000
%%%%%%%%%%%%%%%%%
clc
clear
n=input ('ingrese n: ');
sum=0;
for i=1:n;
sum=sum+1/i^2;

133

end
sum
SUMAI.M
% Este programa sirve para calcular la serie infinita f(n)=sum 1/n^2, desde 10000
hasta 1
% Recomendacion: dar n:10000
%%%%%%%%%%%%%%%%%
clc
clear
n=input ('ingrese n: ');
sum=0;
for i=n:-1:1;
sum=sum+1/i^2;
end
sum
SENCOS.M
% Este es un programa que sirve para calcular la funcion: (sen 10x) + (cos 3x), en
diferentes Intervalos.
%%%%%%%%%%%%%%%%%
clc
clear
subplot 311
x=-5:0.001:5;
f=sin(10*x)+cos(3*x);
plot(x,f,'b-')
grid
title('grafico 1')
end
subplot 312
x1=3:0.01:5;
f1=sin(10*x1)+cos(3*x1);
plot(x1,f1,'m-')
grid
title('grafico 2')
ylabel(' f(x) = seno de 10x + coseno de 3x ');
end
subplot 313
x2=4.2:0.01:4.3;
f2=sin(10*x2)+cos(3*x2);
plot(x2,f2,'c-');
grid
title('grafico 3')
xlabel('Intervalos de Crecimiento');
end

134

Grficas tridimensionales.
%Define el rango de datos x
>> x=linspace(-3*pi,3*pi,50);
>> %Evalua la funcion
r=cos(x).*sin(0.5*x).*exp((x.^2)/200);
>> %Fuerza que el radio minimo sea cero
>> r=r-min(r);
>> plot(r,linspace(0,1,length(r)));
>> title('Perfil radial');

Perfil radial

1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

0.5

1.5

2.5

3.5

ylabel('z');
>> cylinder(r);

135

1
0.8
0.6
0.4
0.2
0
4
2
0
-2
-4

Plot.3
longitud).

-4

-2

Crea un dibujo de vectores o columnas de matrices (de la misma

Sintaxis:
a) plot3(x1,y1,z1, S1, x2,y2,z2, S2, )
donde xn, yn, zn son vectores o matrices y Sn son caracteres opcionales para especificar
color, smbolo, y/o tipo de lnea, plot3 se usa comnmente para graficar una funcin 3D de una variable simple, por ejemplo,
t=linspace(0,10*pi);
plot3(sin(t),cos(t),t)
xlabel('sen(t)'), ylabel('cos(t)'), zlabel('t');
text(0,0,0,'origen');
grid on,
title(' Hlice');
v=axis;

136

Hlice

40

30
20
10
0
1

origen
0.5
0
-0.5
cos(t)

-1

-1

-0.5

0.5

sen(t)

v
v=
-1

-1

40

El comando axis se extiende a 3-D retornando los lmites del eje-z (0 y 40) como dos
elementos adicionales en el eje vector. Hay una funcin etiquetada zlabel etiquetando al
eje z. El comando grid enreja la grfica, y el comando box crea una caja 3-D alrededor
de la grfica. Los valores por default para plot3 son gris off y box off. La funcin text(x,
y, z, string) colocara un carcter en la posicin identificada por la tripleta x, y, z. En
adicin, subplots y multiple figure Windows aplica directamente a funciones grficas 3D.
Considere el siguiente ejemplo:
x=linspace(0,3*pi);
%datas del eje-x
z1=sin(x);
z2=sin(2*x);
z3=sin(3*x);
y1=zeros(size(x));
%despliege a lo largo del eje y dando a
y3=ones(size(x));
%cada curva valores diferentes del eje-y
y2=y3/2;
plot3(x,y1,z1,x,y2,z2,x,y3,z3)
grid on

137

xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')


title('sen(x), sen(2x), sen(3x)')
pause(5)
plot3(x,z1,y1, x,z2,y2,x,z3,y3)
grid on
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('sen(x), sen(2x), sen(3x)')
sen(x), sen(2x), sen(3x)

eje-z

0.5
0
-0.5
-1
1
0.5
eje-y

10

eje-x

138

sen(x), sen(2x), sen(3x)

eje-z

0.8
0.6
0.4
0.2
0
1
0.5
0
-0.5
eje-y

-1

10

eje-x

Funcin escalar de dos variables.


Una funcin escalar de dos variables, es
z f ( x, y )

Cada par de valores de x e y producen una valor z. Una grfica de z como una funcin
de x e y es una superficie en tres dimensiones. Para graficar esta superficie en Matlab,
los valores para z son almacenados en una matriz., z es una matriz de la variable
dependiente asociada a x e y con
z (i,:) f ( x, y (i ))

z (:, j ) f ( x ( j ), y )

Esto es, la i-sima fila de z esta asociada con el i-simo elemento de y, y la j-sima
columna de z esta asociado con el j-simo elemento de x.
Cuando z=f(x,y) puede expresarse simplemente, es conveniente usar una
operacin de arreglo para calcular los valores de z en una consideracin simple. Para
hacer esto se requiere que creamos matrices de todos los valores de x e y en la
orientacin adecuada. Esta orientacin es algunas veces llamada plaid. Matlab
proporciona la funcin meshgrid para desarrollar esta etapa, por ejemplo

139

x=-3:3;
%selecciona los valores del eje-x
y=1:5;
%valores del eje-y
[X,Y]=meshgrid(x,y)
X=
-3
-3
-3
-3
-3

-2
-2
-2
-2
-2

-1
-1
-1
-1
-1

0
0
0
0
0

1
1
1
1
1

2
2
2
2
2

3
3
3
3
3

1
2
3
4
5

1
2
3
4
5

1
2
3
4
5

1
2
3
4
5

1
2
3
4
5

1
2
3
4
5

Y=
1
2
3
4
5

Como se puede observar, meshgrid duplica x para cada uno de las 5 filas en y.
Similarmente este duplica y como una columna para cada una de las 7 columnas en x.
Una forma fcil de recordar que variable es duplicada por meshgrid es pensar
como una grfica 2-D. El eje-x vara desde la izquierda a la derecha, justamente como la
salidas de X de meshgrid. Similarmente, el eje-y vara desde el fondo hacia arriba,
justamente como la salida de Y en meshgrid.
Dada X e Y, si z f ( x, y ) ( x y ) 2 , la matriz de los valores definen una
superficie 3-D esta dada simplemente como
>> Z=(X+Y).^2
Z=
4
1
0
1
4

1
0
1
4
9

0 1
1 4
4 9
9 16
16 25

4 9 16
9 16 25
16 25 36
25 36 49
36 49 64

Cuando una funcin no puede expresarse como una funcin simple, se debe usar
For Loops o While Loops para calcular los elementos de Z. En muchos casos puede ser
posible calcular los elementos de las filas o columnas de Z. Por ejemplo, si esto es
posible para calcular las filas de Z, el siguiente fragmento de archivo puede ser til

140

x=??? %consideracion que define el vector de los valores del eje-x


x=??? %consideracin que define el vector de los valores del eje-y
nx=length(x); %longitud de x es no. de filas en Z
ny=length(y); %longitud de y es no. de columnas en Z
Z=zeros(nx,ny); %inicializacion de la matriz Z
for r=1:nx
(comandos preliminares)
Z(r,:)={una funcion de y yx(r) define la fila r-sima de Z}
end
De otro modo, si Z puede calcularse las columnas, el siguiente fragmento de
archivo puede ser til:
x=??? %consideracion que define el vector de los valores del eje-x
x=??? %consideracin que define el vector de los valores del eje-y
nx=length(x); %longitud de x es no. de filas en Z
ny=length(y); %longitud de y es no. de columnas en Z
Z=zeros(nx,ny); %inicializacion de la matriz Z
for c=1:ny
(comandos preliminares)
Z(:,c)={una funcion de y(c) y x define la columna c-sima de Z}
end
nicamente cuando los elementos de Z deben calcularse elemento por elemento se
hacen los clculos requiriendo de un ciclo For Loops tal como el siguiente fragmento de
archivo.
x=??? %consideracion que define el vector de los valores del eje-x
x=??? %consideracin que define el vector de los valores del eje-y
nx=length(x); %longitud de x es no. de filas en Z
ny=length(y); %longitud de y es no. de columnas en Z
Z=zeros(nx,ny); %inicializacion de la matriz Z
for r=1:nx
for c=1:ny
(comandos preliminares)
Z(r,c)={una funcion de y(c) y x(r) definiendo el elemento (r,c)}
end
end
La instruccin Mesh.
Mesh puede ser usado para visualizar grandes matrices que son demasiado
grandes para imprimirse en formato numrico. Tambin puede usarse para graficar
funciones de dos variables.
La instruccin mesh(z) crea una grfica en perspectiva tridimensional de los
elementos en la matriz z. Una superficie de malla est definida por las coordenadas z de

141

puntos arriba de un enrejado rectangular en el plano x-y. La grfica se forma uniendo


los puntos adyacentes con lneas rectas con un color proporcional a la altura. Considere
el siguiente ejemplo:
[X, Y, Z]=peaks(30);
mesh(X,Y,Z)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Mesh Plot de Peaks')
Mesh Plot de Peaks

10

eje-z

5
0
-5
-10
4
2
0
-2
eje-y

-4

-4

-2

eje-x

El primer paso hacia la exhibicin de una funcin z = f(x,y) de dos variables es


genera las matrices especiales x e y que consisten de renglones y columnas repetidas,
respectivamente, sobre el dominio de la funcin. La funcin puede entonces ser
evaluada y graficada directamente.
En general mesh acepta argumentos opcionales para controlar el color en la
grfica.
mesh(...,C)
donde C es el color.
mesh(...,'PropertyName',PropertyValue,...)
Ejemplo.

142

[X, Y, Z]=sphere(12);
subplot(1,2,1)
mesh(X, Y,Z), title('Opaco')
hidden on
axis square off
subplot(1,2,2)
mesh(X,Y,Z), title('Transparente')
hidden off
axis square off
Opaco

Transparente

La esfera de la izquierda es opaca (las lneas se ocultan), y la esfera de la derecha es


transparente (las lneas no se ocultan)
La funcin mesh tiene dos subfunciones: meshc, que es una grfica con
contorno, y meshz, que es una grfica que incluye el plano cero. Considere el siguiente
ejemplo
[X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
meshc(X,Y,Z);
%grfica con contorno
axis([-3 3 -3 3 -10 5])
pause(5)
Z = peaks(X,Y);
meshz(X,Y,Z)
%grfica con plano cero

143

-5

-10
2
0
-2

-3

-2

-1

10
5
0
-5
-10
4
2
0
-2
-4

-4

-2

La funcin waterfill es idntico a mesh excepto que las lneas mesh aparecen
nicamente en la direccin-x,
[X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
Waterfall(X,Y,Z)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('grfica waterfall')

144

grfica waterfall

10

eje-z

5
0
-5
-10
4
2
0
-2
eje-y

-4

-4

-2

eje-x

>> x=-3:0.1:3;
>> y=-3:0.1:3;
>> [x,y]=meshgrid(x,y);
>> z=0.2.*cos(x)+y.*exp((-x.^2)-(y.^2));
>> mesh(x,y,z);
>> title('grfica peaks');
>> xlabel('Eje X');
>> ylabel('Eje Y');
>> zlabel('Eje Z');

145

grfica peaks

Eje Z

0.5

-0.5
4
2
0
-2
-4

Eje Y

-2

-4

Eje X

x=0:0.1:5;
>> y=0:0.1:5;
>> [x,y]=meshgrid(x,y);
z=0.2.*cos(x)+y.*exp((-x.^2)-(y.^2));;
>> contour(x,y,z);
>> title('Grafica de niveles');
>> xlabel('Eje X');
>> ylabel('Eje Y');
>> gtext('Ecuacion de la grafica, z=0.2cos(x)+yexp((-x^2)-(y^2))');

Grafica de niveles

5
4.5
4
3.5

Eje Y

3
2.5
Ecuacion de la grafica, z=0.2cos(x)+yexp((-x 2)-(y 2))

2
1.5
1
0.5
0

0.5

1.5

2.5
Eje X

3.5

4.5

146

Grficas de Superficie.
Una supeficie es una grfica mesh, excepto que todo el espacio entre las lneas,
llamadas patches, estn ocupadas. Grficas de este tipo se generan usando la funcin
surf, por ejemplo,
[X, Y, Z] =peaks(30);
surf(X,Y,Z)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Superficie de la grfica peaksl')
Superficie de la grfica peaksl

10

eje-z

5
0
-5
-10
4
2
0
-2
eje-y

-4

-4

-2

eje-x

Observe como esta grfica es una forma dual de una grfica mesh. Las lneas son
negras y las trayectorias tienen color, cuando en un mesh son del color de los ejes y las
lneas tiene color. Como en las mesh el color vara a lo largo del eje-z con cada
trayectoria o lnea que tiene un color constante. Las grficas de superficie tiene por
defecto gris on.
Sombreado.

147

Grfica de la Superficie peaks con sombra plana

10

eje-z

5
0
-5
-10
4
2
0
-2
-4

eje-y

-4

-2

eje-x

Grfica de la Superficie peaks con sombra interpolada

10
5
0
-5
-10
4
2
0
-2
-4

-4

-2

En algunas situaciones puede ser conveniente remover partes de una superficie.


En Matlab esto se realiza considerando los valores donde no se quiere parte de la grfica
como NaN. Como Nans no tiene valores, toda la funcin grfica simplemente ignora los
puntos de datos NaN, dejando una abertura en la grfica.

148

[X, Y, Z] =peaks(30);
x=X(1,:);
%vector del eje x
y=Y(:,1);
%vector del eje y
i=find(y>.8&y<1.2);
%encuentra el ndice del eje y en la abertura
j=find(x>-.6&x<.5);
%encuentra el indice del eje x en la abertura
Z(i,j)=nan;
%determina los valores en la abertura como NaNs
surf(X,Y,Z)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de superficie con abertura')
Grfica de superficie con abertura

10

eje-z

5
0
-5
-10
4
2
0
-2
eje-y

-4

-4

-2

eje-x

La funcin surf tiene dos opciones: surfc que es una grfica de la superficie y
del contorno, y surfl que es una grfica de superficie con luminosidad, por ejemplo,
[X, Y, Z] =peaks(30);
surfc(X,Y,Z)
%Grfica de superficie con contorno
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de superficie con contorno')
pause(5)
surfl(X,Y,Z)
%Grafica de superficie con luz
shading interp
%mejor sombra interpolada
colormap pink
%mejor sombra de un color
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de superficie con luz')

149

Grfica de superficie con contorno

10

eje-z

5
0
-5
-10
4
2
0
-2
-4

eje-y

-4

-2

eje-x

Grfica de superficie con luz

10

eje-z

5
0
-5
-10
4
2
0
-2
eje-y

-4

-4

-2

eje-x

Colormap es una funcin de Matlab para aplicar a diferentes conjunto de


colores a una figura.
La funcin surfnorm(X,Y,Z) calcula la superficie normal para cada superficie
definida por X, Y, y Z, y grfica el vector normal a la superficie en un punto. La
superficie normal y no normalizada son vlidas en cada vrtice. La forma

150

[Nx,Ny,Nz]=surfnorm(X,Y,Z) calcula la normal 3-D y regresas sus componente pero no


grfica la superficie, por ejemplo,
[X, Y, Z] =peaks(15);
surfnorm(X,Y,Z)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de superficie con normales')
Grfica de superficie con normales

10

eje-z

5
0
-5
-10
4
2
0
-2
eje-y

-4

-4

-2

eje-x

Datos espaciados irregulares o no-uniformes pueden visualizarse usando las


funciones trimesh, trisurf, y voronoi, por ejemplo,
x=rand(1,50);
y=rand(1,50);
z=peaks(x,y*pi);
t=delaunay(x,y);
trimesh(t,x,y,z)
hidden off
title('Grafica triangular mesh')
pause(5)
trisurf(t,x,y,z)
title('grafica triangular de la superficie')
pause(5)
voronoi(x,y,t)
title('Grafica voronoi')

151

Grafica triangular mesh

10
8
6
4
2
0
-2
1
0.5
0

0.2

0.4

0.6

0.8

grafica triangular de la superficie

8
6
4
2
0
1
0.5
0

0.2

0.4

0.6

0.8

152

Grafica voronoi
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Por default las grficas 3-D las observamos en el plano z = 0 y a un ngulo de


30 , arriba del plano x = 0 con un ngulo de 37.50. El ngulo de orientacin con
respecto al plano z=0 lo llamamos la elevacin y el ngulo con respecto al eje x es
llamado azimutal. En grficas 2-D se tiene una elevacin de 90o y un azimutal de 0.
o

En Matlab, la funcin view cambia el punto de grfica para todos los tipos 2-D o
3-D view(az,el) y view([az,el]) cambia el punto de vista al especificado azimutal az y
elevacin el. Considere el siguiente ejemplo.
x=-7.5:.5:7.5; y=x;
%crea un conjunto de datos
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
153

Z=sin(R)./R;
subplot(2,2,1)
surf(X,Y,Z)
view(-37.5,30)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Az=-37.5, El=30')
subplot(2,2,2)
surf(X,Y,Z)
view(-37.5+90,30)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Az=rotado a 52.5')
subplot(2,2,3)
surf(X,Y,Z)
view(-37.5+90,60)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('El incrementado a 60')
subplot(2,2,4)
surf(X,Y,Z)
view(0,90)
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Az=0, El=90')
Az=-37.5, El=30

Az=rotado a 52.5
1
eje-z

eje-z

1
0
-1
10

0
eje-y

-10 -10

0
eje-x

-1
-10

10

0
eje-x

El incrementado a 60

10 -10

0
eje-y

10

Az=0, El=90

10
5

1
0

eje-y

eje-z

-1
-10
0
eje-x 10 -10

10
0
eje-y

0
-5
-10
-10

-5

0
eje-x

10

La funcin view puede actuar interactivamente con el ratn usando la funcin


rotated3d on, y rotated off sale de la interaccin.
Grficas de contorno.

154

Las grficas de contorno muestran lneas de elevaacin constante, atravs de la


funcin contour o contour3, respectivamente, por ejemplo,
[X,Y,Z]=peaks;
contour(X,Y,Z,20)
%genera 20 lneas de contorno 2-D
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de contorno 2-D')
pause(5)
contour3(X,Y,Z,20)
%los mismos contornos en 3-D
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de contorno 3-D')
Grfica de contorno 2-D

eje-y

-1

-2

-3
-3

-2

-1

0
eje-x

Grfica de contorno 3-D

10

eje-z

5
0
-5
-10
2
0
-2
eje-y

-3

-2

-1

eje-x

155

La funcin pcolor mapea la altura de un conjunto de colores y presenta la misma


informacin que la grfica de contorno a la misma escala, por ejemplo,
pcolor(X,Y,Z)
shading interp
%remueve la rejilla de lneas
title('Grafica de pseudocolor')
Grafica de pseudocolor

-1

-2

-3
-3

-2

-1

Combiando la idea de pseudocolor con el contorno 2-D se produce un contorno


lleno. En Matlab esta grfica se genera por la funcin contourf, por ejemplo,
[X,Y,Z]=peaks;
contourf(X,Y,Z,12)
%grfica de contorno llena con 12
xlabel('eje-x'), ylabel('eje-y'), zlabel('eje-z')
title('Grfica de contorno llena')

156

Grfica de contorno llena

eje-y

-1

-2

-3
-3

-2

-1

0
eje-x

Las lneas de contorno puede etiquetarse usando la funcin clabel requieren de


una matriz de lneas y un texto opcional que son retornado por contoru, contourf, y
contour3, por ejemplo,
[X,Y,Z]=peaks;
C=contour(X,Y,Z,12);
clabel(C)
title('Grfica de contorno con etiqueta')
Grfica de contorno con etiqueta
0.0996

5.42
2.76
1.43

8.08 6.75

4.09

1
-1.23-2.56

0.0996

1.43
2.76

-1

2.76

-3.89
-1.23
-6.55-5.22 -2.56

-2

-3
-3

-2

-1

157

Alternativamente, cons etiquetas en las lneas se pueden generar usando dos


argumentos. Estas etiquetas aparecen nicamente donde hay suficientes espacio, por
ejemplo,
[X,Y,Z]=peaks;
[C,h]=contour(X,Y,Z,8);
clabel(C,h)
title('Grfica de contorno con etiquetas en las lneas')
Grfica de contorno con etiquetas en las lneas

-1

-2

-3
-3

-2

-1

Finalmente, se puede seleccionar que contornos se etiquetan usando el ratn, aadiendo


manual como ltimo argumento a clabel
Grficas especializadas 3-D.
Matlab proporciona un nmero de funciones especializadas para graficar. La
funcin ribbon(Y) grfica las columnas de Y como ribbon separadas, ribbon(x,Y)
grfica x contra las columnas de Y. El ancho del ribbon puede especificarse usando la
sintaxis ribbon(x,Y,width), donde el valor default es 0.75. Considere el siguiente
ejemplo,
Z=peaks;
ribbon(Z)
title('Grfica Ribbon de peaks')

158

Grfica Ribbon de peaks

10
5
0
-5
-10
60
40
20
0

20

10

30

50

40

La funcin quiver(x,y,dx,dy) dibuja vectores direccionales o vectores de


velocidad (dx, dy) en los puntos (x,y), por ejemplo,
[X,Y,Z]=peaks(16);
[DX,DY]=gradient(Z,.5,.5);
contour(X,Y,Z,10)
hold on
quiver(X,Y,DX,DY)
hold off
title('Grfica Quiver 2-D')
Grfica Quiver 2-D

-1

-2

-3
-3

-2

-1

159

Las grficas quiver tridimensionales de la forma quiver3(x,y,x,Nx,Ny,Nz)


visualizan el vector (Nx,Ny,Nz) en los puntos (x,y,z), por ejemplo,
[X,Y,Z]=peaks(20);
[Nx,Ny,Nz]=surfnorm(X,Y,Z);
surf(X,Y,Z)
hold on
quiver3(X,Y,Z,Nx,Ny,Nz)
hold off
title('Grfica Quiver 3-D')
Grfica Quiver 3-D

10
5
0
-5
-10
4
2
0
-2
-4

-4

-2

La funcin fill3, es el equivalente 3-D de fill, dibuja lneas poligoanles en el


espacio 3-D. fill3(X,Y,Z,C) usa arreglos X, Y, y Z como los vrtices de los polgonos, y
C especifica el color, por ejemplo,
fill3(rand(3,5),rand(3,5),rand(3,5),rand(3,5))
grid on
title('Cinco tringulos aleatorios')

160

Cinco tringulos aleatorios

1
0.8
0.6
0.4
0.2
0
1
0.5
0

0.2

0.4

0.8

0.6

El equivalente3-D de la grfica discreta de secuencia de datos stem en el


espacio 3-D, stem3(X,Y,Z,C,filled) grfica los puntos de datos (X,Y,Z) con lneas
extendidas al plano x-y. El argumento opcional C especfica el color y/o estilo, y el
argumento opcional filled causa que los marcadorese se llenen. Stem3(Z) grfica los
puntos en Z y a utomticamente genera valores X y Y. Por ejemplo,
Z=rand(5);
stem3(Z,'ro','filled');
grid on
title('Datos aleatorios en una grafica stem')
Datos aleatorios en una grafica stem

1
0.8
0.6
0.4
0.2
0
5
4
3
2
1

161

Visualizacin de volumen.
Matlab tambin ofrece funciones de visualizacin vectoriales y de volumen.
Estas funciones construyen grficas de cantidades escalares y vectoriales en el espacio
3-D. Como ellas construyen volmenes ms que superficies, sus argumentos de entrada
son arreglos 3-D, uno para cada eje, x, y, z. Los puntos en cada arreglo 3-D definen una
rejilla de coordenadas o datos. Para funciones escalares, cuatro arreglos 3-D se
requieren, uno por cada uno de los tres ejes coordenados ms uno para el dato escalar en
el punto en cuestin. Estos arreglos comnmente se identifican como X, Y, Z y V,
respectivamente. Para cada funcin vectorial, se requieren seis arreglos 3-D, uno para
cada uno de los tres ejes coordenados ms uno para cada componente del vector en el
punto en cuestin. Estos arreglos se identifican como X, Y, Z , U, V, y W,
respectivamente.
Considere la construccin de una funcin escalar definida sobre el volumen.
Primero, los ejes coordenados del volumen deben ser construidos, por ejemplo,
x=linspace(-3,3,13);
y=1:20;
z=-5:5;
[X,Y,Z]=meshgrid(x,y,z);
size(X)

%puntos de coordenadas en el eje x


%puntos de coordenadas en el eje y
%puntos de coordenadas en el eje z
%rejilla de trabajo

ans =
20

13

11

Donde X, Y y Z son arreglos 3-D que definen la rejilla, X contiene x duplicado como
lengt(y) y muchas pginas como length(z). Similarmente, Y contiene y transpuesta
como columnas y duplicadas para muchas columnas como length(x) y muchas pginas
como length(z). Y Z contiene z permutado a 1-por-1 por length(z) vector y duplicado
para muchas filas como length(y) y muchas columnas como length(x). Esto es
directamente la extensin de meshgrid para un sistema 3-D.
En lo siguiente se necesita definir una funcin para estos datos, por ejemplo,
V=sqrt(X.^2+cos(Y).^2+Z.^2);
Ahora, el arreglo 3-D X, Y, Z, y V definene una funcin escalar v f ( x, y, z ) sobre un
volumen. Para visualizarlo, observemos un pedazo a lo largo de un plano, por ejemplo,
slice(X,Y,Z,V,[0 3],[5 15],[-3 5])
xlabel('eje-x')
ylabel('eje-y')
zlabel('eje-z')
title('Pedazo de grfica a travs de un volumen')

162

Pedazo de grfica a travs de un volumen

eje-z

-5
20
15
10
5
eje-y

-4

-2

eje-x

Esta grfica muestras pedazos sobre planos definidos por x = 0, x = 3, y = 5, y = 15, z =


-3, y z = 5, como se muestra por los ltimos tres argumentos de la funcin slice. El color
de la grfica es mapeado a los valores en V sobre el pedazo.
El pedazo visualizado no necesita ser planos. Ellos pueden ser en cualquier
superficie, por ejemplo,
x=linspace(-3,3,13);
%puntos de coordenadas en el eje x
y=1:20;
%puntos de coordenadas en el eje y
z=-5:5;
%puntos de coordenadas en el eje z
[X,Y,Z]=meshgrid(x,y,z);
V=sqrt(X.^2+cos(Y).^2+Z.^2);
[xs,ys]=meshgrid(x,y);
zs=sin(-xs+ys/2);
%superficie a usar
slice(X,Y,Z,V,xs,ys,zs)
xlabel('eje-x')
ylabel('eje-y')
zlabel('eje-z')
title('Pedazo de grfica usando una superficie')
Aqu xs, ys, y zs definen una superficie en el cual se observa un pedazo del volumen.

163

Pedazo de grfica usando una superficie

eje-z

0.5
0
-0.5
-1
20
15
10
5
eje-y

-4

-2

eje-x

Regresando al pedazo de grfica, es posible aadir lneas de contorno para


seleccionar planos usando la funcin contourslice, por ejemplo,
x=linspace(-3,3,13);
y=1:20;
z=-5:5;
[X,Y,Z]=meshgrid(x,y,z);
V=sqrt(X.^2+cos(Y).^2+Z.^2);

%puntos de coordenadas en el eje x


%puntos de coordenadas en el eje y
%puntos de coordenadas en el eje z

h=contourslice(X,Y,Z,V,3,[5 15],[]);
set(h,'EdgeColor','k','Linewidth',1.5)
xlabel('eje-x')
ylabel('eje-y')
zlabel('eje-z')
title('Pedazo de grfica con contornos seleccionados')
Aqu las lneas de contorno se aaden en los planos x = 3, y = 5, e y=15, las lneas de
contorno son negras y su ancho es de 1.5 puntos.
[x y z v] = flow;
h = contourslice(x,y,z,v,[1:9],[],[0],linspace(-8,2,10));
axis([0,10,-3,3,-3,3]); daspect([1,1,1])
camva(24); camproj perspective;
campos([-3,-15,5])

164

set(gcf,'Color',[.5,.5,.5],'Renderer','zbuffer')
set(gca,'Color','black','XColor','white', ...
'YColor','white','ZColor','white')
box on

3
2
1
0
-1
-2
-3
2
0
-2

10

El siguiente ejemplo 1dibuja lneas de contorno a traves de una superficie esfrica


dentro del volumen,0
[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);
v = x.*exp(-x.^2-y.^2-z.^2);
[xi,yi,zi] = sphere;
contourslice(x,y,z,v,xi,yi,zi)
view(3)

% Crea los datos del volumen


% Plano del contorno

165

1
0.5
0
-0.5
-1
1
0.5
0
-0.5
-1

-1

-0.5

0.5

En adicin al pedazo a travs del volumen, la superficie donde los datos


escalares del volumen V se han especificado pueden graficarse usando la funcin
isosurface. Esta funcin regresa vrtices de tringulos en una forma similar a la
triangulacin Delaunay, el resultado esta en la forma requerida por la funcin patch,
que grfica los tringulos. Considere el siguiente ejemplo,
fv = isosurface(X,Y,Z,V,isovalue) computes isosurface data from the volume data V at
the isosurface value specified in isovalue. That is, the isosurface connects points that
have the specified value much the way contour lines connect points of equal elevation.
The arrays X, Y, and Z define the coordinates for the volume V. The structure fv
contains the faces and vertices of the isosurface, which you can pass directly to the
patch command.
[X,Y,Z,V]=flow(13);
%obtiene un flujo de datos
fv=isosurface(X,Y,Z,V,-2);
%encuentra la superficie de valor -2
subplot(1,2,1)
p=patch(fv);
%grfica la superficie V=-2
set(p,'FaceColor',[.5 .5 .5],'EdgeColor','Black'); %modifica la trayectoria
view(3),axis equal tight, grid on
title('Grfica Isosurface V=2')
subplot(1,2,2)
p=patch(shrinkfaces(fv,.3));
%shrink faces al 30% de la original
set(p,'FaceColor',[.5 .5 .5],'EdgeColor','Black'); %modifica la trayectoria
view(3),axis equal tight, grid on
title('Grfica Isosurface V=2 Shrunken Face')

166

Grfica Isosurface V=2

Grfica Isosurface V=2 Shrunken Face

1
0

-1
-2

-2
2

2
0
-2

0
-2

Las grficas precedentes demuestran el uso de la funcin shrinkfaces.


Algunas veces el conjunto de datos contienen muchos puntos. La funcin
reducevolume y reducepatch representan dos forma para mejora la visualizacin de
una isosuperficie. La funcin reducevolume elimna los datos antes que se forma la
isosuperficie, cuando reducepatch elimina trayectorias para minimizar la distorsin.
Considere el siguiente ejemplo,
[X, Y, Z, V]=flow;
fv=isosurface(X,Y,Z,V,-2);
subplot(2,2,1)
%Original
p=patch(fv);
Np=size(get(p,'Faces'),1);
set(p,'FaceColor',[.5 .5 .5],'EdgeColor','Black');
view(3),axis equal tight, grid on
zlabel(sprintf('%d Patch',Np))
title('Original')
subplot(2,2,2)
%Volumen reducido
[Xr,Yr,Zr,Vr]=reducevolume(X,Y,Z,V,[3 2 2]);
fvr=isosurface(Xr,Yr,Zr,Vr,-2);
p=patch(fvr);
Np=size(get(p,'Faces'),1);
set(p,'FaceColor',[.5 .5 .5],'EdgeColor','Black');
view(3),axis equal tight, grid on
zlabel(sprintf('%d Patch',Np))
title('Volumen reducido')
subplot(2,2,3)
%Trayectoria reducida
p=patch(fv);
set(p,'FaceColor',[.5 .5 .5],'EdgeColor','Black');
view(3),axis equal tight, grid on
reducepatch(p,.15)
%mantiene el 15% de las caras

167

Np=size(get(p,'Faces'),1);
zlabel(sprintf('%d Patch',Np))
title('Trayectoria reducida')
subplot(2,2,4)
%Volumen y trayectoria reducida
p=patch(fvr);
set(p,'FaceColor',[.5 .5 .5],'EdgeColor','Black');
view(3),axis equal tight, grid on
reducepatch(p,.15)
%mantiene el 15% de las caras
Np=size(get(p,'Faces'),1);
zlabel(sprintf('%d Patch',Np))
title('Volumen y trayectoria reducida')

2
0
-2
2

-2

0
-2
0

-2

0
-2
2

5
3 4
2
1

-2

Volumen y trayectoria reducida

98 Patch

5
3 4
12

Trayectoria reducida

534 Patch

Volumen reducido

656 Patch

3568 Patch

Original

2
0
-2
2

-2

Los datos tridimensionales pueden ser suavizados por filtrandolos usando la


funcin smootth3, por ejemplo,
data=rand(10,10,10);
%datos aleatorios
datas=smooth3(data,'box',3);
%datos suavizados
subplot(1,2,1)
%datos aleatorios
p=patch(isosurface(data,.5),'FaceColor','Blue','EdgeColor','none');
patch(isocaps(data,.5),'FaceColor','interp','EdgeColor','none');
isonormals(data,p)
view(3); axis vis3d tight off
camlight; lighting phong
title('Datos aleatorios')
subplot(1,2,2)
%datos aleatorios suavizados

168

p=patch(isosurface(data,.5),'FaceColor','Blue','EdgeColor','none');
patch(isocaps(datas,.5),'FaceColor','interp','EdgeColor', 'none');
isonormals(data,p)
view(3); axis vis3d tight off
camlight; lighting phong
title({'Datos suavizados'})

Datos aleatorios

Datos suavizados

El ejemplo de arriba demuestra el uso de la funcin isocaps y isonormals. La


funcin isocaps crea las caras sobre la superficie exterior del bloque. La f uncin
isonormals modifica las propiedades de las trayectorias del dibujo tal que el trabajo se
ilumina correctamente.
Grficas fciles.
Cuando no se tiene tiempo para especificar los datos puntuales explicitamente
para una grfica 3-D. Matlab proporciona las funciones ezcontour, ezcontour3,
ezmesh, ezplot3, ezsurf, y surfc. Estas funciones construyen graficas como sus
equivalentes sin el prefijo ez. Sin embargo, la entrada de argumentos son funciones
definidas por cadenas o smbolos matemticos y opcionalmente los limites sobre la cual
la grfica se generara. Internamente, las funciones calculan los datos y generan la
grfica, por ejemplo,
fstr=['3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)' ...
'-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)'...
'-1/3*exp(-(x+1).^2-y.^2)'];
subplot(2,2,1)
ezmesh(fstr)
title('Mesh de Peaks(x,y)')
subplot(2,2,2)
ezsurf(fstr)
title('Surf de peaks(x,y)')
subplot(2,2,3)
ezcontour(fstr)

169

title('Contorno de peaks(x,y)')
subplot(2,2,4)
ezcontourf(fstr)
title('Contornof de peaks(x,y)')
Mesh de Peaks(x,y)

Surf de peaks(x,y)

10

10

-10

-10
2

0
y

-2

-2

-2

-2

Contornof de peaks(x,y)

Contorno de peaks(x,y)

-2

-2
-2

0
x

-2

0
x

Usando el color para describir la cuarta dimensin.


Considere la funcin sen(r)/r o sen c que resulta en la superficie sombrero como se
muestra en la figura. Una forma para crear este es:
x=-7.5:.5:7.5;
[X Y]=meshgrid(x);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(Z)

%datos
%datos en el plano
%crea sombrero

El primer comando define el dominio x sobre el cual ser evaluada la funcin. La


tercera declaracin crea una matriz de renglones repetidos x. Despus se genera el
correspondiente y, una matriz r es creada que contiene la distancia desde el centro de la
matriz, lo cual es el origen. Formando la funcin sinc y aplicando mesh se muestra la
grfica a continuacin:

170

0.5

-0.5
40
30
20
10
0

10

20

30

40

La grfica de superficies tales como mesh y surf varan de color a lo largo del
eje z a menos que un argumento de color se de, por ejemplo, surf(X,Y,Z) es equivalente
a surf(X,Y,Z,Z). Aplicando color al eje z produce una lnea de color pero no
proporciona informacin adicional debido a que el eje z ya existe. Para hacer un mejor
uso del color, se sugiere que el color se use para describir alguna propiedad de los datos
no reflejados por los tres ejes. As se requiere especificar diferentes datos para el
argumento del color para funcin grfica 3 D.
x=-7.5:.5:7.5;
[X Y]=meshgrid(x);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
subplot(2,2,1)
surf(X,Y,Z,Z)
colormap(gray)
shading interp
axis tight off
title('Default, Z')
subplot(2,2,2)
surf(X,Y,Z,Y)
shading interp
axis tight off
title('Eje Y')
subplot(2,2,3)
surf(X,Y,Z,X-Y)
shading interp
axis tight off
title('Eje X- Y')
subplot(2,2,4)
surf(X,Y,Z,R)

%datos
%datos en el plano
%crea sombrero
%color por default

%color por el eje Y

%color por el diagonal

%color por el radio


171

shading interp
axis tight off
title('Radio')
Default, Z

Eje Y

Eje X- Y

Radio

subplot(2,2,1)
surf(X,Y,Z,abs(del2(7)))
colormap(gray)
shading interp
axis tight off
title('Curvatura')
subplot(2,2,2)
[dZdx,dZdy]=gradient(Z);
surf(X,Y,Z,abs(dZdx))
shading interp
axis tight off
title('|dZ/dx|')
subplot(2,2,3)
surf(X,Y,Z,abs(dZdy))
shading interp
axis tight off
title('|dZ/dy|')
subplot(2,2,4)
dR=sqrt(dZdx.^2+dZdy.^2);
surf(X,Y,Z,abs(dR))
shading interp
axis tight off
title('|dR|')

%Laplaciano absoluto

%calcula el gradiente de la superficie


%pendiente absoluta en la direccion x

%pendiente absoluta en la direccion y

%pendiente absoluta en radio

172

Resumen de comandos grficos en 3 dimensiones


plot3 Dibuja lneas y puntos en 3 dimensiones
Sintaxis:
a) plot3(x,y,z)
b) plot3(x,y,z)
c) plot3(x,y,z,'tipo_lnea)
d) plot3(x1,y1,z1,'tipo_lnea',...,xn,yn,zn,'tipo_lnea')
Ejes de referencia
Ej.
t=0:0.05:10*pi; plot3(sin(t),cos(t),t)
contour, contour3 Genera dibujos compuestos de lneas de valores de datos constantes
obtenidos de una matriz de entrada
Sintaxis:
a) contour(z)
b) contour(z,n)
c) contour(x,y,z)
d) contour(x,y,z,n)
Ej.
contour(peeks)
contour(peeks,30)
contour3 Misma funcin de contour en 3 dimensiones
Sintaxis:
a) contour3(z)
b) contour3(z,n)
c) contour3(x,y,z)
d) contour3(x,y,z,n)
Ej.
contour3(peaks,30)
meshgrid Genera arreglos X y Y para dibujos en 3 dimensiones
Sintaxis:
a) [X,Y] = meshgrid(x,y)
b) [X,Y] = meshgrid(x) => meshgrid(x,y)
Ej. Evalue y dibuje la funcion z=x*exp(-x^2-y^2) sobre el rango -2<=x<=2, -2<=y<=2
[X,Y]=meshgrid(-2:2:2); z=x.*exp(-x^2-y^2); ...
mesh(Z)
x=-8:0.5,8; y=x; [x,y]=meshgrid(x,y);...
R=sqrt(x.^2+y.^2)+0.001; z=sin(R)./R;...
mesh(z)
mesh, meshc y meshz Dibujan una superficie de malla tridimensional, crando una
perspectiva del dibujo, sobre y bajo el plano de referencia.
Sintaxis:
a) mesh(x,y,z,c)

173

b) mesh(x,y,z)
c) mesh(x,y,z,c)
d) mesh(x,y,z)
e) mesh(z,c)
f) mesh(z)
g) meshc(...) => mismo que mesh
h) meshc(...) => mismo que mesh
meshc Aade un plano de contorno debajo del dibujo
meshz Aade un plano de referencia o cortina al dibujo
Ejemplo:
[x,y] = meshgrid(-3:2:3); z=peaks(x,y); meshc(x,y,z)
[x,y] = meshgrid(-3:2:3); z=peaks(x,y); meshz(x,y,z)
surf, surfc Crean superficies sombreadas en 3 dimensiones
Sintaxis:
a) surf(x,y,z,c)
b) surf(x,y,z)
c) surf(x,y,z,c)
d) surf(x,y,z)
e) surf(z,c)
f) surf(z)
g) surfc(...) => misma sintaxis que surf
Ej.
[x,y]=meshgrid(-3:.2:3); z=peaks(x,y); surf(x,y,z)
k=5; n=2^k-1; [x,y,z]=sphere(n); c=hadamard(2^k);...
surf(x,y,z,c); colormap(hot)
donde:
hadamard: matriz hadamard
compuesta de 1's y -1's, empleada en procesamiento de seales y anlisis numrico
Ej. (matriz de 4*4)
1111
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
sphere Genera una esfera
[x,y,z] = sphere(n)
n - nmero de meridianos
Ej.
[x,y,z]=sphere(20);
mesh(x,y,z)
o con :
colormap(hot)
surfl superficie sombreada tridimensioanl con efecto de reflexin de luz
Sintaxis:
a) surfl(z)
b) surfl(z,s)

174

c) surfl(x,y,z)
d) surfl(x,y,z,s)
s - direccin de la luz
Ej.
[x,y]=meshgrid(-3:0.01:3);
z=peaks(x,y);
surfl(x,y,z)
shading Establece las propiedades de sombreado con color
Sintaxis
shading faceted
shading interp
shading flat
shading flat - cada segmento de la superficie tiene un valor constante determinado por
el color de los puntos extremos del segmento o sus esquinas
shading interp - el color en cada segmento varia linealmente e interpolo los valores
extremos o esquinas
shading faceted - utiliza sombreado "flat" con lneas de malla negras superpuestas
Para el ejemplo anterior, aadiendo:
shading interp
y posteriormente:
colormap(gray);
axis Escala y apariencia de los ejes
Sintaxis:
a) axis([xmin, xmax, ymin, ymax])
b) axis([xmin, xmax, ymin, ymax, zmin, zmax])
c) axis(`auto')
d) axis(`ij')
e) axis(`xy')
f) axis(`square')
g) axis(`equal')
h) axis(`off')
i) axis(`on')
donde:
axis(`auto') realiza el escalamiento de ejes a
su modo de autoescalamiento
por default
axis(`ij') dibuja nuevamente la grfica.
El eje y es vertical y es
numerado de arriba hacia abajo.
El eje j es horizontal y es
numerado de izquierda a
derecha.
axis(`xy') regresa la forma de ejes

175

cartesianos que existe por


default. El eje x es horizontal y
se numera de izquierda a
derecha. El eje y es vertical y se
numera de abajo hacia arriba
axis(`square') determina que la regin de los
ejes es cuadrada
axis(`equal') indica que los factores de
escalamiento y marcas
incrementales a lo largo de los
ejes x y y son iguales.
axis(`off') desactiva las etiquetas de los
ejes y las marcas
axis(`on') activa las etiquetas de los ejes y
las marcas
Para el ejemplo ltimo:
...
axis([-3 3 -3 3 -8 8])
fill3 colorea polgonos de 3 dimensiones
a) fill3(x,y,z,'c')
b) fill3(x1,y1,z1,...,xn,yn,zn)
Ej.
colormap(hot)
fill3(rand(3,4), rand(3,4), rand(3,4), rand(3,4))
donde:
rand matrices y nmeros aleatorios distribuidos uniformemente
Sintaxis:
a) rand(n) - matriz de nxn
b) rnad(m,n) - matriz de mxn
Ej.
fill3(rand(20), rand(20), rand(20), rand(20))
load carga en el area de trabajo un archivo (imagen, sonido, datos, etc)
Sintaxis
a) load archivo
b) load archivo.ext
donde:
ext - extensin
Ej.
load clown
image crea un objeto imagen y lo despliega
Sintaxis:
a) image(x)
b) image(x,y,x)
c) despliega la matriz c como una imagen

176

d) especifica los lmites de los datos de la imagen en los ejes x e y. En b), x e y son
vectores
Ej.
load clown
colormap(map)
image(x)
brighten hace ms brillante o ms obscura la imagen
Sintaxis:
a) brighten(alfa)
b) brighten(map,alfa)
donde:
0<alfa<1 ms brillante
-1<alfa<0 ms obscuro
Del ejemplo anterior:
...
brighten(0.6)
brighten(-0.6)
clf borra la figura
sound convierte un vector en sonido (en computadoras sparc y macintosh)
Sintaxis
a) sound(y)
b) sound(y,Fs)
donde:
Fs frecuencia especificada en Hz
Ej.
load train
sound(y,Fs)
t=(0:length(y)-1)/Fs;
plot(t,y)

Funcin
plot3
mesh
meshc
meshz
slice
surf
surfc
surfl
waterfall
fill3
shading
hidden
surfnorm

Descripcin
Grficas lneas y puntos en el espacio 3D
Superficie mesh
Mesh con lneas de contorno
Mesh con plano cero
Visualizacin volumtrica
Grfica de superficie shaded
Grfica de superficie con contornos
Grfica de superficie con lneas bsicas
Grfica con caida
Dibuja lneas poligonales llenas en 3D
Modo de color en sombra
Remueve las lneas hidden
Superficie normal
177

axis
caxis
colormap
grid
box
hold
subplot
daspect
pbaspect
xlim
ylim
zlim
view
viewmtx
rotated3d
clablel
contour
contour3
contourc
campos
camtarget
camva
cam
camproj
camorbit
campan
camdolly
camroll
camzoom
image
pcolor
quiver
cylinder
sphere

Apariencia y escalamiento de los ejes


Ejes escalados con pseudocolor
Colores
Lneas de rejilla visibles
Ejes de la caja visibles
Mantiene la grfica actual
Crea mltiples figuras
Datos en proporcin de aspecto
Cajas grficas proporcionadas
Limites del eje x
Lmites del eje y
Lmites del eje z
Especificacin del punto de vista 3 D
Matriz de tranformacin
Rotacin interactiva de ejes
Pone etiquetas a los contornos
Grfica contornos
Grfica contornos 3D
Calcula grfica de contornos (usado por contour)
Posicin de la cmara
Objetivo de la cmara
ngulo de vista de la cmara
Vector de la cmara
Proyeccin de la cmara
Orbita de la cmara
Pan cmara
Dolly cmara
Roll cmara
Acercamiento de la cmara
Despiega la imagen
Grfica el pseudocolor
Grficas quiver
Genera un cilindro
Genera una esfera

Cmo se ver una matriz identidad como una superficie de malla? Trate
mesh((eye(14)). Un mtodo ms fcil de genera las matrices x e y usadas para la
evaluacin de la funcin de dos variables, ver el archivo-m meshdom.m. Tambin
pruebe rot90, la cual gira las matrices en incrementos de 90 grados, y flipx y flipy.

cumprod
cumsum
max
mean
median
min

Anlisis de datos
Producto acumulativo de elementos
Suma acumulativa de elemetnos
Valore ms grande
Valor medio
Valor mediano
Valor ms pequeo
178

prod
sort
std
sum
hist
table1
corr
cov
spline

Producto de elementos
Ordenacin en orden ascendente
Desviaicn estndar
Suma de elementos
Histograma
Estilo de tabla
Matriz de correlacin
Matriz de covarianza
Interpolacin cbica spline

del2
diff
gradient

Diferencias finitas
Laplaciano discreto de cinco puntos
Funcin de aproximacin de derivada
Gradiente aproximado

corrcoef
cov

conv
conv2
deconv
filter
filter2
freqz
freqs
xcorr
xcorr2

abs
angle
cplxpair
dft
fft
fft2
fftshift
idft
ifftt
ifft2
nextpow2
unwrap

Correlacin
Coeficiente de correlacin
Matriz de covarianza

Filtro y convolucin
Convolucin y mltiplicacin polinomial
Convulucin bidimensional
Deconvolucin y divisin polinomial
Filtro digital unidimensional
Filtro digital bidimensional
Respuesta a lafrecuencia digital
Respuesta a la frecuencia analgica
Funcin de correlacin cruzada
Correlacin cruzada bidimensional

Transformada de Fourier
Magnitud compleja
ngulo de fase
Orden de nmeros in pares complejos conjugados
Transformada discreta de fourier
Transformada rapida de Fourier
Transformada discreta de Fourier bidimensional
Movimiento del cero hacia el centro del espectrto
Transformada inversa
Transformada inversa rapida de fourier
Transformada inversa de fourier bidimensional
Proxima potencia ms alta de 2
Remueve el ngulo de fase a travs de fronteras de 360o

179

colmmd
colperm
dmperm
randperm
symmmd
symrcm

Algoritmos de reorden
Grado mnimo de columna
Orden de columna basado en conteo no cero
Desocmposicin de Dumage-Mendelsohn
Permutacin vectorial aleatoria
Grado de simetra mnimo
Orden inverso de Cuthill-McKee

Norma, nmero de condicin y rango


condest
Condicin de norma estimada-1
normest Norma estimada-2
sprank
Rango estructural

spaugment
spparms
sumbfact

Miscelneos
Sistema de forma de mnimos cuadrados aumentado
Conjunto de parmetros de rutinas de matrices sparse
Anlisis de factorizacin simblica

spdiags
speye
sprandn
sparndsym

find
full
sparse
spconvert

issparse
nnz
nonzeros
nzmax
spalloc
spfun
spones

Funciones de matrices sparse


Matriz sparse formada desde las diagonales
Matriz identidad sparse
Matriz sparse aleatoria
Matriz simtrica sparse aleatoria
Conversin de sparse a full
Encuentra ndices de entradas no ceros
Convierte matriz sparse a matriz full
Crea una matriz sparse desde ndices y no ceros
Convierte desde matriz sparse a formato externo

Trabajando con entradas no ceros de matrices sparse


Verdadero si la matriz es sparse
Nmero de entradas no cero
Entradas no cero
Cantidad de almacenamiento localizado para entradas no cero
Localizacin de memoria para entradas no cero
Aplicacin de funciones a entradas no cero
Remplaza entradas no cero con unos
Visualizando matrices sparse
gplot Grafia como en la teoria grfica
spy
Visualiza estructura de sparsity

180

Creacin y control de figuras Window


clf
Borra la figura actual
close
Cierra la figura
figure Crea una figura
gcf
Obtiene manejo para la figura actual

axes
axis
caxis
cla
gca
hold
subplot

Creacin y control de ejes


Crea ejes en posicin arbitraria
Controla la apariencia y escalameinto de los ejes
Controla escalameinto y pseudocolor
Borra los ejes actuales
Obtiene manejo de los ejes actuales
Mantiene la grfica actual
Crea ejes en posicin tiled
Copia y almacenamiento
Determina la orientacin del papel
Imprime o salva la grafia a un archivo
Configura la primera local

orient
print
printopt

getframe
movie
moviein

Movimiento y animacin
Obtiene movimento del marco
Registra movimiento del marco
Inicializa memoria del movimiento del marco

ginput
ishold

abs
eval
num2str
int2str
setstr
sprintf

Comando

Miscelneos
Entrada grfica desde el ratn
Retorna el estado de posicin

Texto y cadenas
Convierte una cadena a sus valores ASCII
Evala una macro de texto
Convierte un nmero a cadena
Convierte un entero a cadena
Establece una bandera indicando que una matriz es una cadena
Convierte un nmero a cadena

Descripcin

181

abs

Valor absoluto

acker

Calcula la matriz K para ubicar los polos de A-BK, vea tambin place

axis

Corrige la escala del grfico actual, vea tambin plot, figure

bode

Dibuja el diagrama de Bode, vea tambin logspace, margin, nyquist1

c2dm

Pasa del sistema continuo al discreto

clf

Borra la figura (use clg en Matlab 3.5)

conv

Convolucin (til para multiplicar polinomios), vea tambin deconv

ctrb

Matriz de controlabilidad, vea tambin obsv

deconv

Deconvolucin y divisin de polinomios, vea tambin conv

det

Halla el determinante de una matriz

dimpulse

Respuesta al impulso de sistemas lineales de tiempo discreto, vea tambin


dstep

dlqr

Diseo de reguladores LQR lineales cuadrticos para sistemas de tiempo


discreto, vea tambin lqr

dlsim

Simulacin de sistemas lineales de tiempo discreto, vea tambin lsim

dstep

Respuesta al escaln de sistemas lineales de tiempo discreto, vea tambin


stairs

eig

Calcula los autovalores de una matriz

eps

Tolerancia numrica del Matlab

feedback

Conexin de dos sistemas por realimentacin.

figura

Crea una nueva figura o redefine la figura actual , vea tambin subplot,
axis

for

Lazo For-Next

format

Formato Numrico (dgitos significativos, exponentes)

function

Para archivos-m del tipo funcin

grid

Dibuja la grilla en el grfico actual

gtext

Agrega texto al grfico actual, vea tambin text

help

Ayuda

hold

Mantiene el grfico actual, vea tambin figure

if

Ejecuta cdigo condicionalmente

imag

Devuelve la parte imaginaria de un nmero complejo, vea tambin real

impulse

Respuesta al impulso de sistemas lineales de tiempo continuo, vea tambin


step, lsim, dlsim

input

Prompt para entrada de usuario

inv

Inversa de una matriz

jgrid

Genera grilla de coeficiente de amortiguamiento (zeta) y tiempo de


establecimiento (sigma) constantes , vea tambin sgrid, sigrid, zgrid

legend

Leyenda en un grfico

length

Largo de un vector, vea tambin size

182

linspace

Devuelve un vector linealmente espaciado

lnyquist1

Produce un diagrama de Nyquist en escala logartmica , vea tambin


nyquist1

log

logaritmo natural, tambin log10: logaritmo comn

loglog

Grafica usando doble escala logartmica, tambin semilogx/semilogy

logspace

Devuelve un vector logartmicamente espaciado

lqr

Diseo de reguladores lineales cuadrticos LQR para sistemas continuos,


vea tambin dlqr

lsim

Simula un sistema lineal, vea tambin step, impulse, dlsim.

margin

Devuelve margen de ganancia, margen de fase, y frecuencias de cruce, vea


tambin bode

norm

Norma de un vector

nyquist1

Grafica el diagrama de Nyquist, vea tambin lnyquist1. Note que este


comando reemplaza al comando nyquist para obtener diagramas de
Nyquist ms precisos.

obsv

Matriz de observabilidad, vea tambin ctrb

ones

Devuelve un vector o matriz de unos, vea tambin ceros

place

Calcula la matriz K para ubicar los polos de A-BK, vea tambin acker

plot

Dibuja un grfico, vea tambin figure, axis, subplot.

poly

Devuelve el polinomio caracterstico

polyadd

Suma dos polinomios

polyval

Valor numrico de un Polinomio

print

Imprime el grfico actual (a impresora o a archivo postscript)

pzmap

Mapa de polos y ceros de sistemas lineales

rank

Halla la cantidad de renglones o columnas linealmente independientes de


una matriz

real

Devuelve la parte real de un nmero complejo, vea tambin imag

rlocfind

Halla el valor de k y los polos en el punto seleccionado

rlocus

Grafica el lugar de races

roots

halla las races de un polinomio

rscale

Encuentra el factor de escala para un sistema con realimentacin completa


de estados

set

Set(gca,'Xtick',xticks,'Ytick',yticks) para controlar el nmero y el


espaciado de marcas en los ejes

series

Interconexin en serie de sistemas lineales que no dependan del tiempo

sgrid

Genera grilla de razn de amortiguacin (zeta) y frecuencia natural (Wn)


constantes , vea tambin jgrid, sigrid, zgrid

sigrid

Genera grilla de tiempo de establecimiento (sigma) constante, vea tambin


jgrid, sgrid, zgrid

size

Devuelve la dimensin de un vector o matriz, vea tambin length

183

sqrt

Raz cuadrada

ss

Crea modelos en espacio de estado o convierte modelos LTI a espacio de


estado, vea tambin tf

ss2tf

representacin Espacio de estado a funcin de transferencia , vea tambin


tf2ss

ss2zp

representacin Espacio de estado a polo-cero ,vea tambin zp2ss

stairs

Grfico tipo escalera para respuesta discreta, vea tambin dstep

step

Dibuja la respuesta al escaln , vea tambin impulse, lsim, dlsim.

subplot

Divide la ventana Grfico en secciones, vea tambin plot, figure

text

Agrega texto al grfico actual, vea tambin title, xlabel, ylabel, gtext

tf

Crea una funcin de transferencia o convierte a funcin de transferencia,


vea tambin ss

tf2ss

Funcin de Transferencia a representacin en espacio de estado, vea


tambin ss2tf

tf2zp

representacin Funcin de Transferencia a Polo-cero , vea tambin zp2tf

title

Agrega un ttulo al grfico actual

wbw

Devuelve el ancho de banda dado el coeficiente de amortiguamiento y el


tiempo de asentamiento o el tiempo de elevacin.

xlabel/ylabel

Agrega una identificacin al eje horizontal/vertical del grfico actual, vea


tambin title, text, gtext

ceros

Devuelve un vector o matriz de ceros

zgrid

Genera grilla de coeficiente de amortiguamiento (zeta) y frecuencia natural


(Wn) constante , vea tambin sgrid, jgrid,sigrid

zp2ss

Polo-cero a representacin en espacio de estado, vea tambin ss2zp

zp2tf

Polo-cero a representacin funcin de transferencia , vea tambin tf2zp

184

Você também pode gostar