Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
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.
de
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)
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.
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)
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)
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
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
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
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
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
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
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
20
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
2
5
8
3
6
9
2
5
A(:,3)
Ans =
3
6
9
A(:,2:3)
columna.
Ans =
2 3
5 6
8 9
La traspuesta de A se escribe A
A, A
Matriz A
A=
1
9
Matriz A(A traspuesta)
ans =
1
4
5
6
7
8
9
0.6000
3.5000
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
9.0000
1.7321
0.6000
3.5000
2.0000
3.0000
1.7321
4.0000
5.0000
6.0000
0.6000
23
7.0000
8.0000
9.0000
3.5000
% Vector de 3 coordenadas
24
v=
123
>>w=[4 5 6];
>>mat=[v;w;0 0 1]
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)
ans =
3
ans =
2
5
0
>>mat(2,
% Su segunda fila
ans =
456
acceder a la matriz como si fuera una columna,
>>M(2:7)
ans =
4
7
2
5
8
3
o acceder a cualquiera de sus submatrices
25
26
%entrada de la matriz
%la transpuesta
ans
B= 1 4 7
2 5 8
3 6 9
>>A.*B
ans
1 8 21
8 25 48
21 48 81
Ejem.
>> x= (0.0:0.2:3.0);
>> y=exp(-x).*sin(x);
las funciones
27
3
7
A2 =
2
7
5
2
3
8
A3 =
25 16
55 29
30
65
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
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
32
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
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
Funciones matriciales
34
expm
Matriz exponencial
expm1
expm2
expm3
logm
Matriz logaritmica
sqrtm
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
36
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
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
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
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
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
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
49
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0.5
1.5
2.5
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
51
y=200*sin(x(:))./x(:);
y=fun.(x);
fplot(`func', [0 30], 60, 2)
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
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.
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.
axis off
axis on
marcas.
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
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
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
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
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
2
1
0
-1
-2
-3
-4
-5
-2
-1.5
-1
-0.5
0
x
0.5
1.5
61
14
1980
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)
1
0.8
0.6
sin()
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
=0 to 2
65
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
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
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
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
72
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.
3.
f ( x)
en [-1,5], como una lnea discontinua azul que une los puntos
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])
>>ho
ld on
78
>>hold off
el verstil comando ezplot (se lee como easy plot) que permite dibujar funciones,
>>ezplot('exp(x)')
funcin
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
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
-12
25
116
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
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
144
138
44
72
d= [1
100
10
100
0] %como denominador
93
-8.66031i
p = roots(d)
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
-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
.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
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
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)
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)
area=
26.34473119524596
Algunas veces es de inters obtener la integral como una funcin de x, tal como,
x1
f ( x ) dx
98
9.48
9.30
11.2];
derivada
de
es
dy
19.6217 x 20.1293 . Debido a que la derivada de un polinomio es otro
dx
99
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.
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)
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
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
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
f ( x)dx
h
f1 f 2 E
2
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
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
2000u
Integre
30
15
2000udu
.
8.1u 2 1200
donde ui
i 1,2,...,16
30 15
1 . Si definimos
15
fi
200ui
8.1ui2 1200
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
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
h
f1 4 f 2 f 3 E
3
h5
f
90
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
donde
f es
la media de
f en
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
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,...)
110
111
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
113
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
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));
unos y del
%mismo tamao que A
>> F=eje(size(A));
116
>>k = 1;
>> while norm(E+F-E,1)>0
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
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
Archivos de funcin
119
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
120
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;
end
r=sum(s>tol);
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'
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
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
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
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
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.
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
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
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
eje-z
0.5
0
-0.5
-1
1
0.5
eje-y
10
eje-x
138
eje-z
0.8
0.6
0.4
0.2
0
1
0.5
0
-0.5
eje-y
-1
10
eje-x
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
141
10
eje-z
5
0
-5
-10
4
2
0
-2
eje-y
-4
-4
-2
eje-x
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
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
10
eje-z
5
0
-5
-10
4
2
0
-2
-4
eje-y
-4
-2
eje-x
10
5
0
-5
-10
4
2
0
-2
-4
-4
-2
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
10
eje-z
5
0
-5
-10
4
2
0
-2
-4
eje-y
-4
-2
eje-x
10
eje-z
5
0
-5
-10
4
2
0
-2
eje-y
-4
-4
-2
eje-x
150
10
eje-z
5
0
-5
-10
4
2
0
-2
eje-y
-4
-4
-2
eje-x
151
10
8
6
4
2
0
-2
1
0.5
0
0.2
0.4
0.6
0.8
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
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
154
eje-y
-1
-2
-3
-3
-2
-1
0
eje-x
10
eje-z
5
0
-5
-10
2
0
-2
eje-y
-3
-2
-1
eje-x
155
-1
-2
-3
-3
-2
-1
156
eje-y
-1
-2
-3
-3
-2
-1
0
eje-x
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
-1
-2
-3
-3
-2
-1
158
10
5
0
-5
-10
60
40
20
0
20
10
30
50
40
-1
-2
-3
-3
-2
-1
159
10
5
0
-5
-10
4
2
0
-2
-4
-4
-2
160
1
0.8
0.6
0.4
0.2
0
1
0.5
0
0.2
0.4
0.8
0.6
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)
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
eje-z
-5
20
15
10
5
eje-y
-4
-2
eje-x
163
eje-z
0.5
0
-0.5
-1
20
15
10
5
eje-y
-4
-2
eje-x
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
165
1
0.5
0
-0.5
-1
1
0.5
0
-0.5
-1
-1
-0.5
0.5
166
1
0
-1
-2
-2
2
2
0
-2
0
-2
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
98 Patch
5
3 4
12
Trayectoria reducida
534 Patch
Volumen reducido
656 Patch
3568 Patch
Original
2
0
-2
2
-2
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
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
%datos
%datos en el plano
%crea sombrero
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
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
172
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
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
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
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
180
axes
axis
caxis
cla
gca
hold
subplot
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
bode
c2dm
clf
conv
ctrb
deconv
det
dimpulse
dlqr
dlsim
dstep
eig
eps
feedback
figura
Crea una nueva figura o redefine la figura actual , vea tambin subplot,
axis
for
Lazo For-Next
format
function
grid
gtext
help
Ayuda
hold
if
imag
impulse
input
inv
jgrid
legend
Leyenda en un grfico
length
182
linspace
lnyquist1
log
loglog
logspace
lqr
lsim
margin
norm
Norma de un vector
nyquist1
obsv
ones
place
Calcula la matriz K para ubicar los polos de A-BK, vea tambin acker
plot
poly
polyadd
polyval
pzmap
rank
real
rlocfind
rlocus
roots
rscale
set
series
sgrid
sigrid
size
183
sqrt
Raz cuadrada
ss
ss2tf
ss2zp
stairs
step
subplot
text
Agrega texto al grfico actual, vea tambin title, xlabel, ylabel, gtext
tf
tf2ss
tf2zp
title
wbw
xlabel/ylabel
ceros
zgrid
zp2ss
zp2tf
184