You are on page 1of 43

INTRODUCCIN

Qu es MATLAB?
Es un lenguaje de alto desempeo para tcnicas computacionales.
Tanto los clculos, la visualizacin as como la programacin estn integrados en un
entorno fcil de usar donde problemas y soluciones se expresan en una notacin
matemtica familiar.
Puede ser utilizado en Matemtica Computacional y en una diversidad de cursos como
Procesamiento de Seales Digitales, Teora de Control, Algebra lineal,
Probabilidad, Estadstica, Matemticas de Ingeniera Avanzada, etc. El uso de
MATLAB mejora la comprensin tanto de temas bsicos as como de temas
avanzados y permite al estudiante poner en prctica la teora estudiada.
MATLAB significa MATrix LABoratory. Originalmente fu desarrollada como un
software para operar matrices, utilizando las subrrutinas LINPACK y EISPACK del
Fortran sin necesidad de escribir los programas en Fortran, y fu escrita a finales de los
70 en la Universidad de Nuevo Mjico y en la Universidad de Stanford.
La manera ms fcil de visualizar Matlab es pensar en l, como una calculadora
totalmente equipada, por tanto:
1. Al igual que una calculadora bsica, realiza matemticas simples tales como suma,
resta, multiplicacin y divisin.
2. Como una calculadora cientfica maneja nmeros complejos, races cuadradas,
potencia, logaritmos y funciones trigonomtricas tales como senos, cosenos y
tangentes.
3. Anlogamente a una calculadora programable puede almacenar y recuperar datos,
puede crear, ejecutar y guardar secuencias de rdenes para automatizar el clculo de
ecuaciones importantes; puede hacer comparaciones lgicas y controlar el orden en
el que se ejecutan los comandos.
Matlab es mucho ms verstil que cualquier calculadora, permite presentar los datos en
gran variedad de formas, ejecuta lgebra matricial, manipula polinomios, integra
funciones, manipula simblicamente ecuaciones, etc.
Adems de ser una herramienta para hacer clculos matemticos, es un lenguaje de
programacin amigable al usuario y mucho ms fcil de usar que los lenguajes de
programacin BASIC, PASCAL o C.

Mg. Jorge I. Condado J.


1
ARITMTICA ESCALAR

Matlab tiene las operaciones aritmticas conocidas: suma (+), resta (-), multiplicacin
(*), divisin (/) y potencia (^) y se operan de la manera que usted acostumbra.
Ejemplo.
13+7 ans = 20
1/3 ans = 0.3333
2^3 ans = 8

Observe el orden en que se efecta las operaciones:


5^2-9-8/2*4 ans = 0
5^2-9-8/(2*4) ans = 15
3*2^3+4 ans = 28
(3*2)^3+4 ans = 220
Matlab conoce varias constantes especiales como:
pi 3.14159265
i unidad imaginaria, sqrt(-1)
j igual que i
eps nmero mas pequeo tal que sumado a 1 se tiene un nmero mayor que 1 en
punto flotante, 2-52
realmin el nmero mas pequeo en punto flotante, 2-1022
realmax el mayor nmero en punto flotante, (2-)21023
Inf Infinito
NaN no es un nmero

Ejemplo.
pi ans = 3.1416
1/0 Warning: Divide by zero.
ans = Inf
0/0 Warning: Divide by zero.
ans = NaN
i ans = 0 + 1.0000i
Observe en primer lugar que matlab nos dice que =3.1416, lo que no es verdadero
Matlab almacena todo nmero real en punto flotante de 8 bytes, una mejor
aproximacin es mostrada en pantalla usando el comando:
format long
pi ans = 3.14159265358979
j ans = 0 + 1.00000000000000i
Para volver al formato corto que muestra cuatro decimales, digitar:
format short
En segundo lugar observe que Matlab muestra la constante i de la forma como los
complejos son manejados i = 0+1.0000i, esto es de la forma a + bi; los complejos se
operan al igual que los nmeros reales, no necesitan de ninguna declaracin:
Ejemplo
1+i ans = 1.0000 + 1.0000i
1+i+3+4i ans = 4.0000 + 5.0000i
(1-i)*(2+i) ans = 3.0000 - 1.0000i
Variables
El matlab permite asociar un nombre a una cantidad numrica dada y referirnos a esta
cantidad en clculos posteriores mediante el nombre que usted le asign a su variable.
Se declara las variables usando el signo =:
a=13 a = 13
Mg. Jorge I. Condado J.
2
b=a+a/pi b = 17.1380
En los ejemplos anteriores pudimos observar que matlab nos muestra las respuestas en
ans (answers) cuando no asignamos el nombre de ninguna variable.
pi ans = 3.1416
ans/2 ans = 1.5708
Notemos que ans es una variable temporal, sta es reemplazada por el ltimo clculo. Si
escribimos a o b, Matlab nos muestra en pantalla lo que se ha guardado en memoria
para esa variable
a a = 13
b b = 17.1380
Liberamos a la memoria del valor de la variable usando clear.
clear b
Si llamamos a la variable b matlab no la reconoce pues fue borrada de la memoria.
b ??? Undefined function or variable 'b'.
Cuidado: escribiendo nicamente el comando clear, ste borra de la memoria todas
las variables.
Para nombrar las variables debemos tener en cuenta las siguientes consideraciones: Los
nombres de las variables deben comenzar con una letra, despus es vlido cualquier
ordenacin de letras, nmeros o subrayado. Puede contener hasta 19 caracteres. Matlab
es sensible a las maysculas: a y A son variables diferentes. Se pierden al cerrar la
sesin, los comandos save y load permiten utilizarlos en posteriores sesiones

Funciones Matemticas
Podemos usar matlab como una calculadora cientfica, ella posee un nmero grande de
funciones, entre stas se incluyen: abs, sqrt, exp, sin etc.
Ejemplo
abs(1+i) ans = 1.4142
exp(0) ans = 1
exp(1) ans = 2.7183
Los siguientes comandos, calculan el ngulo medido en grados sexagesimal donde el
seno es:
x=sqrt(3)/2 x = 0.8660
y=asin(x) y = 1.0472, % calcula el ngulo en radianes en donde seno es
0.8660
y_g=180/pi*y y_g = 60.0000, % transforma ste ngulo a grados
y_gr =round(y_g) y_gr= 60, % es la funcin entero mayor [[x]]
El resultado de evaluar una funcin puede dar un nmero complejo, como:
z1=asin(3), z1 =1.5708 + 1.7627i
z2=log(-1), z2 = 0 + 3.1416i
z3=sqrt(-4), z3 = 0 + 2.0000i
Tambin podemos evaluar en nmeros complejos:
w1=log(1+i) w1 = 0.3466 + 0.7854i
w2=sqrt(1+2*i) w2 = 1.2720 + 0.7862i
w3=sin(1+i) w3 = 1.2985 + 0.6350i
w4=exp(2-j) w4 = 3.9923 - 6.2177i

VECTORES Y MATRICES
Los escalares, los vectores y las matrices, se ejecuta en matlab sin ninguna declaracin
especial. Los vectores pueden ser considerados como matrices de una sola columna o de
una sola fila, as tambin los escalares pueden ser considerados como matrices de orden
uno. Existen varias formas de escribir matrices en matlab, consideremos algunas de las
ms sencillas:
Para una matriz A, escribimos cada columna dejando un espacio, la siguiente fila enter.
Mg. Jorge I. Condado J.
3
A=[1 2 3
456
7 8 9]
Enseguida matlab muestra:
A=
1 2 3
4 5 6
7 8 9
Ahora escribo el vector fila b:
b=[1 2 3 4]
b=
1 2 3 4
Cada nueva columna est separada por un espacio, puede usarse tambin la coma (,)
para separar columnas:
b=[1,2,3,4]
b=
1 2 3 4
Escribimos un vector columna c, separando cada nueva fila con un punto y coma.
c = [1;2;3;-9]
c=
1
2
3
-9
de esta manera podemos volver a escribir la matriz A:
A = [1 2 3;4 5 6 ;7 8 9].
A=
1 2 3
4 5 6
7 8 9
Para escribir vectores podemos usar tambin dos puntos, (:) como sigue:
vector = primer elemento : incremento : ltimo elemento

Ejemplo:
v1 = 2 : 4 : 40 v1 = 2 6 10 14 18 22 26 30 34 38.
Los incrementos pueden ser fraccionarios:
v2 = 2 : 0.4 : 4 v2 = 2.0000 2.4000 2.8000 3.2000 3.6000
4.0000.
Los incrementos pueden ser negativos
v3 = 10 : -0.5 : 8.0 v3 = 10.0000 9.5000 9.0000 8.5000 8.0000.
Si no se escribiera el incremento, matlab entiende por omisin que ste es uno.
v4=13:19 v4 = 13 14 15 16 17 18 19
Ejemplo
Hacer una particin del intervalo [0,pi], tomando como incremento pi/6
v5 = ( 0 : 1/6 :1 )*pi v5 = 0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416
Mediante el comando linspace decidimos el nmero de puntos en que dividimos el
intervalo por ejemplo dividir el intervalo [0,pi ], en 6 sub-intervalos
v6 = linspace(0,pi,7) v6 = 0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416
Si no se escribiera el nmero de puntos, por omisin matlab toma 100 puntos, es decir
divide el intervalo en 99 sub-intervalos
v7=linspace(0,pi)
v7 =
Columns 1 through 7
Mg. Jorge I. Condado J.
4
0 0.0317 0.0635 0.0952 0.1269 0.1587 0.1904
Columns 8 through 14
0.2221 0.2539 0.2856 0.3173 0.3491 0.3808 0.4125
... ... ...
Columns 92 through 98
2.8877 2.9195 2.9512 2.9829 3.0147 3.0464 3.0781
Columns 99 through 100
3.1099 3.1416
Para saber el tamao (dimensin) del vector v7 o su orden cuando lo pensamos como
una matriz escribimos los comandos:
length(v7) ans = 100
[ fila, colum ] = size(v7) fila = 1 colum = 100
nos dice que v7 tiene 100 componentes o que es una matriz de una fila y cien columnas.
Matlab conoce otras matrices como la identidad, la matriz constante 0, etc, basta escribir
los comandos:
iden = eye(4), cero = zeros(3,5), uno = ones(3).
iden = cero = uno =
1 0 0 0 0 0 0 0 0 1 1 1
0 1 0 0 0 0 0 0 0 1 1 1
0 0 1 0 0 0 0 0 0 1 1 1
0 0 0 1
Escriba las ordenes: eye(3,5), zeros(5), ones(5,3) y mire que obtiene. Una matriz que
servir para algunos ejemplos rutinarios es la matriz mgica, escriba magic(5), intente
ver que propiedades tiene.
Dado un vector podemos obtener una matriz diagonal donde su diagonal principal esta
dada por las componentes de ste vector:
v=1:5 v= 1 2 3 4 5
dia=diag(v)
dia =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
Ensaye ahora el comando diag(dia). En A tiene guardado una matriz, muestre en
pantalla, escriba diag(diag(A)), qu obtiene?
Escribiendo hilb(n), tenemos la matriz de Hilbert, es un ejemplo de una matriz mal
condicionada.
hilb(4)
ans =
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
Para observar que el elemento (i, j) de sta matriz es 1/(i+j-1) escribimos:
format rat
hilb(4)
ans =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7

Mg. Jorge I. Condado J.


5
Tambin podemos obtener una matriz a partir de matrices de menor orden, por bloques,
como sigue:
B=[A, zeros(3); zeros(3), ones(3)]
B=
1 2 3 0 0 0
4 5 6 0 0 0
7 8 9 0 0 0
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
Ejemplo.
a = 4 : 9 a= 4 5 6 7 8 9
b = 9 : -1 : 4 b= 9 8 7 6 5 4
c = ones(2) c= 1 1
1 1
d1=[a b] d1 = 4 5 6 7 8 9 9 8 7 6 5 4
d2=[a; b] d2 = 4 5 6 7 8 9
9 8 7 6 5 4
d3=[d2, c] d3 = 4 5 6 7 8 9 1 1
9 8 7 6 5 4 1 1
d4=[c; d1] d4 = 1 1 4 5 6 7 8 9
1 1 9 8 7 6 5 4

Filas, columnas y elementos de una matriz. Submatrices.


El elemento de una matriz A que se encuentra en la fila i columna j se denota como en
lgebra lineal A(i, j). En las matrices dadas en los ejemplos anteriores:
B(4,5) ans = 1
A(3,2) ans = 8
d1(10) ans = 6
En el caso de vectores basta con dar la componente del vector, la primera componente
es d1(1), y as para todos los vectores, no existe para matlab una componente de ndice
cero, igual con las matrices, el elemento de la primera fila y primera columna es A(1, 1),
no existe A(0, 0).
Podemos re-definir una matriz modificando algn elemento, por ejemplo:
A(3,2)=17
Observe el elemento (3, 2), en la matriz A que se tenia y como se reemplaz en la nueva
A:
A= A=
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 17 9

Ejemplo.
d1 d1 = 4 5 6 7 8 9 9 8 7 6 5 4
d1(10) ans = 6
Modificamos la componente 10 del vector d1: sta es reemplazada por la suma de la
primera y la dcima componente.
d1(10)=d1(1)+d1(10) d1 = 4 5 6 7 8 9 9 8 7 10 5 4
Para obtener la primera columna de la matriz A escriba:
A ( : , 1)
ans =
1
4
Mg. Jorge I. Condado J.
6
7
para la tercera fila:
A(3,:) ans = 7 17 9
La fila i la columna j se obtienen escribiendo A(i,:) A(:, j) respectivamente.
Si quisiramos borrar la tercera fila, hacemos:
A(3, : )=[ ]
A=
1 2 3
4 5 6

Usando dos puntos podemos construir otras submatrices, recordamos que tenemos en la
matriz B y escribimos la submatriz B1 formado por la segunda, tercera y cuarta fila
B
B=
1 2 3 0 0 0
4 5 6 0 0 0
7 8 9 0 0 0
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1

B1=B(2:4,:)
Escribimos el dos para la fila inicial, el cuatro para la final, si no se escribe el
incremento, matlab asume que es uno.

B1 =
4 5 6 0 0 0
7 8 9 0 0 0
0 0 0 1 1 1

B2=B(:,1:2:6)
Para la submatriz B2, escribimos uno para que comience en la primera columna,
incrementndose de dos en dos, a lo ms hasta la sexta columna:

B2 =
1 3 0
4 6 0
7 9 0
0 0 1
0 0 1
0 0 1
Esto es, la submatriz B2 est formada por la primera, tercera y quinta columna.

B3=B(: , [2 5])

B3 =
2 0
5 0
8 0
0 1
0 1
0 1

Mg. Jorge I. Condado J.


7
B3 est formada por la segunda y la cuarta columna.
B4 = B([1 5] , [2 3 4])

B4 =
2 3 0
0 0 1

B4 est formada por la primera y quinta filas, adems por la segunda, tercera y cuarta
columnas.

Mg. Jorge I. Condado J.


8
OPERACIONES CON VECTORES Y MATRICES

Para tomar la transpuesta de la matriz A: se coloca un apstrofe


B=A'

B=
1 4 7
2 5 8
3 6 9

En una matriz de entradas complejas, observe que sucede con el apstrofe:


[1 1+i -1 1-i]'

ans =
1.0000
1.0000 - 1.0000i
-1.0000
1.0000 + 1.0000i
se lo conoce como la transpuesta hermitiana. Para obtener la transpuesta se utiliza el
punto apstrofe, por ejemplo:
[1 1+i -1 1-i].'

ans =
1.0000
1.0000 + 1.0000i
-1.0000
1.0 - 1.0000i
La suma de matrices y de vectores es igual a la suma de escalares.
Ejemplo.
A=[1 2 3;4 5 6;7 8 9], B=A'.
A= B=
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9

C = A+B
C=
2 6 10
6 10 14
10 14 18
a = 4 : 9 a= 4 5 6 7 8 9
b = 9 : -1 : 4 b= 9 8 7 6 5 4
c=a+b c= 13 13 13 13 13 13
d1= 3*a-2*b d1 = -6 -1 4 9 14 19
[1 1 1]/3 ans = 0,3333 0,3333 0,3333

El producto de matrices es el usual del lgebra, el nmero de filas del primer factor debe
coincidir con el nmero de columnas del segundo factor.
D=A*B

D=
14 32 50
32 77 122
Mg. Jorge I. Condado J.
9
50 122 194
El producto interior de dos vectores puede obtenerse de la siguiente manera:
d2=a*b' d2 = 236
Existe otro producto, se le llama producto exterior:
d3=[1; 2; 3]*[1 2 3]
d3 =
1 2 3
2 4 6
3 6 9
Usamos el "punto operacin" para efectuarlo componente a componente como sigue:
d4=[1 2 3 4].*[1 1/2 1/3 1/4] d4 = 1 1 1 1
d5=[2 2 2 2].^[0 1 2 3] d5 = 1 2 4 8
A.*B
ans =
1 8 21
8 25 48
21 48 81

Las Funciones Matriciales.


Las funciones escalares, tambin pueden usarse para evaluar vectores y matrices. Estos
se evalan en cada componente.
Ejemplo
a = 4 : 9 a= 4 5 6 7 8 9
d6 = sin(a) d6 = -0.7568 -0.9589 -0.2794 0.6570 0.9894 0.4121
A=[1 2 3;4 5 6;7 8 9];
D2 = exp(A)
D2 =
1.0e+003 *
0.0027 0.0074 0.0201
0.0546 0.1484 0.4034
1.0966 2.9810 8.1031
Algunas funciones matriciales dan como resultado matrices, o otras que podran darnos
vectores:
triu(A)
ans =
1 2 3
0 5 6
0 0 9
diag(diag(A))
ans =
1 0 0
0 5 0
0 0 9
sum(A) ans = 12 15 18
Encuentra la suma de las columnas.
mean(A) ans = 4 5 6
Encuentra las medias aritmticas de cada columna.
diag(A) ans = 1
5
9
Muestra en una columna la diagonal de la matriz A.
ALGUNOS COMANDOS QUE SON USALES.

Mg. Jorge I. Condado J.


10
Recordar que todos los comandos matlab se digitan en letras minsculas.

Los comandos de ayuda.


Si conocemos el nombre del comando del que necesitamos ayuda, escribimos help
nombre del comando, por ejemplo escriba help diag, y lea lo que matlab muestra en
pantalla acerca de diag. Si escribimos help +, matlab nos muestra todo acerca de las
operaciones aritmticas y otras relaciones ms; en cambio help help nos explica que es
lo que hace help.
Vea que es lo que hace un solo help.
Si no conocemos exactamente el nombre del comando pero sabemos por ejemplo que
esta relacionado con los nmeros complejos escribimos lookfor complex, matlab nos
muestra una lista de comandos que est relacionado con los complejos. Escriba lookfor
fourier y lea lo matlab muestra en pantalla.
Los comandos who y whos.
Nos muestra en pantalla las variables que estamos utilizando en sta sesin de Matlab.
Cada vez que cerramos una sesin de trasbajo todas las variables que se definieron se
pierden, existe una manera de guardarlas para recuperarlas despus y poder usarlas en
una nueva
Los comandos save y load.
Si queremos conservar la matriz A para usarla en la siguiente sesin escribir save A y A
es guardada en un archivo de extensin mat, para recuperarla en la siguiente sesin
escribir load A.mat
El comando intro
Hace un paseo de demostracin, muestra lo que matlab puede ofrecer. Digite intro y
disfrute de este paseo. Puede recorrer tambin por demo, para ello digite demo.
Para averiguar que es lo hacen algunos de los comandos que nos muestra intro, por
ejemplo plot, grid, etc digite:
help plot
help grid
El comando %
Sirve para escribir comentarios, lo que sigue despues del % en toda esa linea, matlab no
lo ejecuta.

Mg. Jorge I. Condado J.


11
PROGRAMAS EN MATLAB
Para poder escribir programas necesitamos generar ciclos, para ello existen dos
comandos en matlab: (1) for / end; (2) while / end, y para controlar el flujo de
ejecucin de las instrucciones de un programa necesitaremos tambin del comando
if / end,

El comando for / end


La manera de usar este comando es:
for ndice =inicio : incremento : fin
Afirmacin 1 (comando matlab)
Afirmacin 2 (comando matlab)
end
Donde ndice es alguna variable de nuestra eleccin, no queda guardado en memoria, el
incremento puede ser negativo, e incluso fraccionario, si se omite el incremento matlab
lo toma como 1. Tanto el inicio como el fin pueden ser nmeros reales.
Ejemplo
Calcular los volmenes de las esferas de radios desde r=1/2 hasta r=9/10, los radios se
incrementan en 1/10.
for r=1/2:0.1:9/10
vol=(4/3)*pi*r^3;
disp([r,vol])
end
Matlab nos muestra los resultados en dos columnas, la primera son los radios y la
segunda los volmenes para cada radio, esto se consigue con el comando disp, existe
otro comando que nos permite presentar resultados: fprintf.
0.5000 0.5236
0.6000 0.9048
0.7000 1.4368
0.8000 2.1447
0.9000 3.0536
En el siguiente ejemplo tenemos dos for / end de manera anidada, observe que para cada
ndice del for exterior se completa todos los del interior. A diferencia del ejemplo
anterior no escribimos el ; al finalizar la instruccin de la afirmacin1, pues no
queremos que matlab nos muestre en pantalla la ejecucin de ste comando.
Ejemplo
x=[ ]
for m=sqrt(2):-.5:0.5
for i=0:2
x=[x,m+3*i]
end
end
Observese que terminada la ejecucin del programa, donde se us el ndice i, ste no
conserva el ltimo valor i=2 que tom, sin pasa a ser la constante compleja i. Las
variables en los ciclos for o while, son variables locales que solo valen en el programa
donde se esta ejecutando este ciclo.
Matlab nos muestra cada paso de cmo se va formando el vector x:

Mg. Jorge I. Condado J.


12
x= 1.4142
x= 1.4142 4.4142
x= 1.4142 4.4142 7.4142
x= 1.4142 4.4142 7.4142 0.9142
x= 1.4142 4.4142 7.4142 0.9142 3.9142
x= 1.4142 4.4142 7.4142 0.9142 3.9142 6.9142

El comando while / end


Es usado para crear ciclos que continua ejecutndose mientras alguna expresin lgica
sea verdadera. Las relaciones lgicas son anlogas a las conocidas en los lenguajes de
programacin:
== igual
~= no es igual
< menor
> mayor
<= menor o igual
>= mayor o igual
Estas pueden combinarse mediante los operadores lgicos:
& y
~ no
| o
La manera de utlizar este comando es:
while (expresin lgica)
afirmacin 1 (comando matlab)
afirmacin 2 (comando matlab)
end
Ejemplo
Dados los nmeros a=12 y b=30 diferentes de cero calcule su mximo comun divisor
a=12;b=30;
while b~=0
r=rem(a,b)
a=b,b=r,
end
disp('el mximo comun divisor es'),disp(a),
El comando rem calcula el resto de dividir a entre b. La respuesta esta dada por el
ltimo a La ejecucin del programa es como sigue.
r = 12
a = 30
b = 12
r= 6
a = 12
b= 6
r= 0
a= 6
b= 0
el mximo comun divisor es
6
Ejemplo
Calcule el eps de la maquina

epss=1;
while 1+epss > 1,
epss=epss/2;
Mg. Jorge I. Condado J.
13
end
epss=2*epss
El resultado es
epss = 2.2204e-016

El comando if / end
Nos permite la ejecucin condicional de afirmaciones. La forma general del comando if
es:
if relacin lgica
afirmacines (comandos matlab)
else if relacin lgica
afirmaciones (comandos matlab)
else
afirmaciones (comandos matlab)
end
Las partes else o else if son opcionales.
Ejemplo
for I=1:4
for J=1:4
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
end
end
A
A=
2 -1 0 0
-1 2 -1 0
0 -1 2 -1
0 0 -1 2

El comando break
Termina la ejecucin de un ciclo while o de un ciclo for.
Ejemplo
clear
x=1;
while 1 % Este comando garantiza hacer una infinidad de veces este ciclo, para salir
debe %de usarse break
x=x/2;
epss=1+x;
if epss==1
break,
end
end
epss=2*epss,
Archivos.m
Cuando un programa tiene comandos que ocupan varias lineas es conveniente usar los
archivos.m, funcionan como macrocomandos matlab, lo pensamos como programas
escritos en lenguaje matlab, pueden guardarse en disco y corregirse tantas veces como
Mg. Jorge I. Condado J.
14
sea necesario. Incluye cualquier cosa que el usuario pueda escribir directamente en la
ventana de comandos.
Estos archivos.m son: los archivos.m de guin y los archivos.m de funcin.
Los archivos.m de guin es una lista de comandos matlab, que pueden operar con datos
que existen en el espacio de trabajo y pueden crear nuevos datos para seguir operando,
pueden llamar a otros archivos.m, el archivo.m que llama es el archivo.m padre, el
llamado archivo.m hijo. Cualquier variable que ellos han creado permanecen en el
espacio de trabajo y pueden ser usadas en los clculos que siguen.
Para empezar de un clic con el ratn en file, se despliega un men, elija new y haga un
clic y por ltimo clic en m.file, matlab nos mostrar una ventana como la siguiente:

Al que llamar ventana del archivo.m, en sta ventana podemos empezar digitando, en
la primera linea un comentario acerca de lo que hace este archivo.m, de modo tal que si
se digita en la ventana de comandos:
help nombre_archivo,
nos mostrar este comentario.
Luego de digitado el programa en la ventana del archivo.m, tiene que guardarlo con un
nombre adecuado de modo que nos sugiera lo que ese archivo resuelve. Para ello en la
ventana del archivo.m de un clic en file, en el men desplegado de un clic en save as
nos mostrar una tercera ventana: guardar como; escribir el nombre del archivo con la
extencin .m y buscar matlab para guardarlo. Ya est listo para ser usado.
Los archivos.m de funcin aceptan argumentos en la entrada y retornan argumentos en
la salida. El nombre del archivo y el nombre de la funcin deben coincidir.
El procedimiento para crear un archivo.m de funcin es el mismo que el de un
archivo.m de guin, as tambin de como es guardado. La primera linea de un archivo
de funcin es: function y = nombre_archivo( x )
Donde y es el argumento de salida y x el argumento de entrada, tanto x como y
pueden ser una matriz, un vector o un nmero indistintamente.
En la segunda linea puede digitarse un comentario acerca de lo que hace ste archivo.
Para ejecutar estos archivos escribir en la ventana de comandos el nombre del archivo
sin la extencin, en caso de ser un archivo.m de funcin, es como si se evaluara una
funcin en matlab.
Ejemplo
Hacer un archivo.m que tomando como radios los primeros 5 enteros positivos calcule
los volmenes de las esferas y muestre el resultado como un vector columna.
Comenzando el procedimiento, con el ratn:
Mg. Jorge I. Condado J.
15
file clic
new clic
mfile clic
En la ventana que se muestra escribir las instrucciones como comandos matlab:

Para guardarlas hacemos lo siguiente con el raton:


file clic
save as clic.
Nos mostrar una ventana como la siguiente:

En el espacio nombre del archivo escribir vol1.m (no olvidar la extencin.m) y en el


espacio guardado en buscar matlab, por ltimo dar dar un clic con el ratn en guardar.
Se ejecuta escribiendo en la ventana de comandos vol1 y dando un enter.
vol1

Mg. Jorge I. Condado J.


16
En este caso nos manda un mensaje de error, abrimos el archivo vol1.m y corregimos

Cada vez que modificamos un archivo.m tenemos que avisar a matlab, guardando este
archivo del modo siguiente, con el ratn:
file clic
save clic
Ya est listo para su ejecucin, nuevamente en la ventana de comandos escriba vol1 y
d un enter
vol1 =
y obtenemos:
vol =
4.1888
33.5103
113.0973
268.0826
523.5988

El procedimiento para construir un archivo.m de funcin es el mismo que el de


archivo.m de guin solo se diferencian en la primera linea.
Ejemplo
Definir una funcin que calcule el volumen de la esfera para cada radio dado.

Abrimos una ventana y escribimos:

Mg. Jorge I. Condado J.


17
Luego guardamos como repitiendo los mismos pasos que el de archivo.m de guin, en
nombre del archivo escribimos vol2.m y es guardado en la carpeta matlab. Para
ejecutarlo simplemente en la ventana de comandos ponemos voll2 evaluado en el radio
que queremos:
vol2(1)
ans = 4.1888
r=1:5
r= 1 2 3 4 5
vol=vol1(r)
vol = 4.1888 33.5103 113.0973 268.0826 523.5988

Tambin puede evaluarse en matrices ensaye una matriz y evalue vol2.


Si digitamos help vol2 en la ventana de comandos aparece el texto:
help vol2

-----------------------------------
calcula los volmes de las esferas
para cada radio dado.
-----------------------------------
que describe para que sirve vol2, este comentario fu escrito en la segunda linea de
nuestro archivo. En la ventana de comandos digite help vol1 y vea que el mensaje.

Comandos tiles en los archivos.m.


El comando cd
cd enter nos d el camino donde se debe guardar los archivos.m para que puedan
ejecutarse.
El comando dir
dir enter, nos d la lista de todos los archivos.m matlab que han sido creados por el
usuario
El comando !
! enter, accedemos al sistema operativo sin salirnos de matlab.
El comando delete
delete nombre_archivo.m enter, elimina nombre_archivo
El comando type
type nombre_archivo enter, muestra en la ventana de comandos nombre_archivo, en ese
estado no puede modificarse.
El comando diary
diary nombre_archivo enter, abre en matlab un archivo.m de nombre, nombre_archivo y
todo lo que se ejecuta en la ventana de comandos queda guardado en ese archivo, se
desactiva con diary off enter.
El comando fprintf
%nos sirve para conocer el manejo de fprintf
x=pi;
fprintf('la respuesta es %f unidades \n',x)
fprintf('la respuesta es \n %f kilometros \n',x)
fprintf('la respuesta es %12.2f m/s \n',x)
fprintf('la respuesta es %4.1f un decimal \n',x)
fprintf('la respuesta es %4.4f cuatro decimales \n',x)
Mg. Jorge I. Condado J.
18
fprintf('la respuesta es %0.5f as \n',x)
fprintf('la respuesta es %0.5f cero enteros\n',4*x)
fprintf('la respuesta es %2.5f dos enteros\n',4*x)
fprintf('la respuesta es %2.9f \n',3*x)
%----------------------------------------------------------
for k=1:5
y=10^(-k);z=10^k;
fprintf('valor de k= %1.0f valor de y= %2.5f valor de z
%6.0f \n', k, y, z)
end
% (%n.mf m decimal con n lugares)
%----------------------------------------------------------
fprintf('valor de k valor de y valor de z \n')
for k=1:5
y=10^(-k);z=10^(k);
fprintf(' %5.0f %15.5f %13.0f \n', k, y, z)
end
%----------------------------------------------------------
x = 0:.1:1;
y = [x; exp(x); x+2];
fid = fopen('jor.m','w');
fprintf(fid,'%6.2f %12.8f %2.2f \n',y);
fclose(fid);
%----------------------------------------------------------
fprintf('nomb_arch.m','%6.2f %12.8f %2.2f \n',y)
%----------------------------------------------------------
fprintf(2,'%6.2f %12.8f %2.2f \n',y)

Mg. Jorge I. Condado J.


19
GRAFICAS EN MATLAB
Las grficas de los resultados de los clculos pueden realizarse muy facilmente con
matlab, ayudan a interpretar estos resultados, se puede producir grficos de funciones en
el plano y de curvas y superficies en el espacio.
Ejemplo
Abimos un archivo.m y escribimos lo siguiente,
%inicio de como graficar
t=-pi:.05:pi; %define un vector t desde pi hasta pi.
x=cos(pi*t/2); %evalua el vector t
figure(1) %abre la primera ventana de figura.
plot(x) %grafica la funcin x, observe la figura
pause %detiene la ejecucin de matlab hasta un
enter

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 20 40 60 80 100 120 140

figure(2) %abre una segunda ventana de figura.


plot(t,x) % grafica x versus t, vea la figura
pause
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

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

figure(3)
plot(t,x)

Mg. Jorge I. Condado J.


20
axis([-pi,pi,-1,1]) %grafica entre los lmites pi y
pause %pi para t y 1 y1 para x.

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

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

figure(4)
plot(t,x)
axis([-pi,pi,-1,1])
xlabel('tiempo'), %etiquetalos ejes
ylabel('amplitud'),
title('ejemplo de grafica'), %titula las grficas

ejemplo de grafica
1

0.8

0.6

0.4

0.2
a m p litu d

-0.2

-0.4

-0.6

-0.8

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

Ejemplo
0.6
x=0:0.2:10;
y=sin(x).*exp(-0.4*x); 0.5
figure(1)
plot(x,y) 0.4

xlabel('x'),ylabel('y');
0.3
pause
0.2
y

0.1

0
Mg. Jorge I. Condado J.
-0.1
21

-0.2
0 1 2 3 4 5 6 7 8 9 10
x
figure(2)
plot(x,y,':r');
xlabel('X'),ylabel('Y')
pause
0.6

0.5

0.4

0.3

0.2
Y

0.1

-0.1

-0.2
0 1 2 3 4 5 6 7 8 9 10
X

0.6

figure(3) 0.5

plot(x,y,'+b'); 0.4
pause
0.3

0.2

0.1

-0.1

-0.2
0 1 2 3 4 5 6 7 8 9 10

figure(4)
plot(x,y);
xlabel('X'),ylabel('Y')
hold on
x1=0:10;
y1=sin(x1).*exp(-0.4*x1);
plot(x1,y1,'o')
Mg. Jorge I. Condado J.
22
hold off
0.6

0.5

0.4

0.3

Y 0.2

0.1

-0.1

-0.2
0 1 2 3 4 5 6 7 8 9 10
X

Ejemplo
t=0:pi/50:2*pi;
y1=sin(t);
y2=sin(t-.25);
y3=sin(t-.5);
y4=cos(t);
figure(1)
plot(t,y1,t,y2,t,y3)
pause
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8
1
-1
0 1 2 3 4 5 6 7
0.8

figure(2) 0.6
plot(t,y1,'-',t,y2,'--',t,y3,':')
0.4

0.2

-0.2

-0.4

-0.6
Mg. Jorge I. Condado J.
-0.8 23

-1
0 1 2 3 4 5 6 7
[x,y]=meshgrid(-4*pi:0.5:4*pi,-4*pi:0.5:4*pi);
R=sqrt(x.*x+y.*y);
z=sin(R)./R;
figure(1)
mesh(z)

figure(2)
surf(z)

Mg. Jorge I. Condado J.


24
figure(3)
contour(z)

50

45

40

35

30

25

20

15

10

5 10 15 20 25 30 35 40 45 50

Ejemplo
[x,y]=meshgrid(-4*pi:0.5:4*pi,-4*pi:0.5:4*pi);
R=sqrt(x.*x+y.*y);
z=sin(R)./R;
figure(1)
mesh(z,[30 60])

Mg. Jorge I. Condado J.


25
figure(3)
mesh(z,[0 30])

figure(3)
mesh(z,[90 0])

Grafo_07
[x,y]=meshgrid(-4*pi:0.5:4*pi,-4*pi:0.5:4*pi);
R=sqrt(x.*x+y.*y)+eps;
z=sin(R)./R;
subplot(221);
mesh(z);
subplot(222);
contour(z)
t=0:0.1:2*pi;
subplot(223)
polar(t,sin(2*t));
subplot(224)
u=-2*pi:.1:2*pi;
plot(u,sin(2*u+eps)./(2*u+eps))

Grafo_08
clear, clf
Mg. Jorge I. Condado J.
26
t=0:.1:20;
r=exp(-0.2*t);
th=pi*t*0.5;
z=t;
x=r.*cos(th);
y=r.*sin(th);
plot3(x,y,z)
hold on
plot3([1 1],[-0.5 0],[0 0])
text(1,-0.7,0,'A')
n=length(x);
text(x(n),y(n),z(n)+2,'B');
xlabel('X');ylabel('Y');zlabel('Z');

grafo_09
%grafica la helice con drawnow
figure('name','helice','numbertitle','off'),
set(gca,'view',[-37.5 30],...
'xlim',[-1 1],'ylim',[-1 1],'zlim',[0 20])
grid on,
xlabel('Eje x'),ylabel('Eje y'),zlabel('Eje z'),y=[1 0 0];
Inicio=line('linestyle','--','erase','none','color','r',...
'xdata',y(1),'ydata',y(2),'zdata',y(3));
for t=0:0.01:20,
y=[cos(t),sin(t),t];
set(Inicio,'xdata',y(1),'ydata',y(2),'zdata',y(3)),
drawnow,
end

grafo_10
figure('name','elipse','numbertitle','off'),
[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=9*(x.^2)+16*(y.^2)-144;
contour(x,y,z,[0,0],':r'),
title('ELIPSE')
xlabel('X'),ylabel('Y'),
figure(4)
surf(x,y,z)
view([35 80])
axis([-4, 4, -4, 4, -150, -100])
clear x y z
figure(2)
ahh=linspace(-pi,pi);
x=2*cos(ahh);
y=4*sin(ahh);
plot(x,y)
clear x y
x=-2:0.01:2;
y=(1/4)*sqrt(4-x.^2);
figure(3)
plot(x,y,'r',x,-y,'r')

grafo_11
A=input('poner[a b c]=')
Mg. Jorge I. Condado J.
27
a=A(1),b=A(2),c=A(3)
figure('name','elipsoide','numbertitle','off'),
[AH,AV]=meshgrid(-pi:.1:pi,-pi:.1:pi);
x=(a*cos(AV)).*cos(AH);
y=(b*cos(AV)).*sin(AH);
z=c*sin(AV);
axis([-a,a,-b,b,-c,c])
mesh(x,y,z)
xlabel('X'),ylabel('Y'),zlabel('Z'),
figure('name','elips0ide','numbertitle','off'),
[AH,AV]=meshgrid(linspace(-pi,pi,40),linspace(-pi,pi,40));
x=(a*cos(AV)).*cos(AH);
y=(b*cos(AV)).*sin(AH);
z=c*sin(AV);
surf(x,y,z)
xlabel('X'),ylabel('Y'),zlabel('Z'),

grafo_12
lear,clf,hold off,
dth=pi/20;
for j=1:21;
for i=1:10;
r=0.5+0.2*i+j*0.01*i;
th=dth*(j-1);
x(i,j)=r*cos(th);
y(i,j)=r*sin(th);
z=cos(0.1*(x.^2+y.^2))+1;
end
end
surf(x,y,z),%grafica la superficie
xlabel('X'),ylabel('Y'),zlabel('Z'),
%axis([-5,4,-1,5]);
view(-135,40);
hold on,
mesh(x,y,zeros(size(x))),%grafica la retcula
colormap hot
caxis([-0.5,3]),
%shading flat

grafo_13
figure('name','torocom','numbertitle','off'),
[AH,AV]=meshgrid(linspace(-pi,pi,40),linspace(-pi,pi,40));
x=(R+r*cos(AV)).*cos(AH);
y=(R+r*cos(AV)).*sin(AH);
z=r*sin(AV);
surf(x,y,z)
xlabel('X'),ylabel('Y'),zlabel('Z'),

clear x y z
figure('name','paraboloide','numbertitle','off'),
m=-5:.1:5;n=-3:.1:3;
[x,y]=meshgrid(m,n);
z=9*(x.^2)+16*(y.^2)-144;
%axis([-5 5 -3 3 0 150])
Mg. Jorge I. Condado J.
28
surf(x,y,z)
p=linspace(-pi,pi); q=0:.1:5;
[Ah,Av]=meshgrid(p,q);
x1=Av.*cos(Ah);
y1=Av.*sin(Ah);
z1=Av.^2;
figure(2)
surf(x1,y1,z1)
z2=Av;
figure(3)
surf(x1,y1,z2)

Mg. Jorge I. Condado J.


29
Graficas en coordenadas polares
90 4
120 60
Cardiode 3

teta1=0:.05:2*pi; 150 2 30

r1=2*(1-cos(teta1)); 1

polar(teta1,r1) 180 0

%r = 1+cos(teta1)
210 330

%r = 1+sin(teta1) 240 300


270

%r = 1+sin(teta1)

Lemniscata de Bernoulli
clf 90 1.5
120 60
clear 1
teta1=0:.09:2*pi; 150 30
0.5
r1=2*cos(2*teta1);
N= length(r1); 180 0
l=1
for k=1:N
210 330
if r1(k)<0,
l=l+1; 240 300
270
else
teta2(l)=teta1(k);
r2(l)=sqrt(r1(k));
l=l+1;
end
end
polar(teta2,r2)
90 2
%r^2=(a^2)*sin(2*teta) 120 60
1.5

150 1 30
rosa de cuatro petalos 0.5

180 0

teta1=0:.09:2*pi;
r=2*cos(2*teta1); 210 330

polar(teta1,r) 240 300


270

%r=a*sin(2*teta)
90 10
Espiral de Arqumides 120
8
60

clear 150
6
30
4
teta1=0:.09:3*pi; 2
r=teta1; 180 0
polar(teta1,r)

210 330

240 300
270

Mg. Jorge I. Condado J.


30
Superficies Regladas 20

15
cilindro parabolico
10
clear
x=-2:0.09:4; 5

N=length(x) 0
1
x=[x;x]; 4
y=x.^2; 0.5
0
2

z=[zeros(1,N);ones(1,N)]; 0 -2

surf(x,z,y)

cilindro circular recto


t=linspace(0,2*pi,30); 1

x=cos(t); 0.8

y=sin(t); 0.6

z=[zeros(1,30);ones(1,30)]; 0.4

x=[x;x]; 0.2

y=[y;y]; 0
1
surf(x,y,z) 0.5
0 0.5
1

0
-0.5 -0.5
-1 -1
Con el comando:
Cylinder
Obtenemos el mismo resultado.

cylinder(-2:4)
1

0.8

0.6

0.4

0.2

0
4
2 4
0 2
0
-2 -2
-4 -4

clear
t=-1:.09:1;
x=cosh(t);
y=sinh(t);
r=[x;y];
cylinder(r)

Mg. Jorge I. Condado J.


31
4

f=inline('x.^2','x') 3.5
f=
3
Inline function:
f(x) = x.^2 2.5

2
fplot(f,[-1,2])
1.5

0.5

0
-1 -0.5 0 0.5 1 1.5 2

g=inline('exp(x).*cos(x)','x') 400

g= 350
Inline function: 300
g(x) = exp(x).*cos(x) 250

200
fplot(g,[-4,6])
150

100

50

-50
-4 -2 0 2 4 6

Ecuaciones diferenciales ordinarias


%resuelve la edo y'=x+5, y(0)=1 con
%runge-kutta
[x,y]=ode23('eqd1',[0,10],1);
plot(x,y,'r'),
pause
hold on
yy=.5*x.^2+5*x+1;
plot(x,yy,'b'),

function y1=eqd1(x,y)
y1=x+5;

%edo dado por un circuito R-C con


%V=constante
[t,I]=ode23('eqd2',[0,10],5);
plot(t,I)

function I1=eqd2(t,I);
R=4;C=2;
I1=-I/(R*C);

%edo para circuito R-C con


%V sinusoidal
for k=1:10;
figure(k);
[t,I]=ode23('eqd3',[0,1/k],1);
plot(t,I)
Mg. Jorge I. Condado J.
32
end

function I3=eqd3(t,I)
i3=220*377*cos(377*t);
R=4;C=2;
I3=(i3*R-I)/(R*C);

[x,y] = ode23('eqd4',[0,1],[5,0.1]);
figure(1),
plot(x,y),
figure(2),
plot(x,y(:,1),'y',x,y(:,2),'m')
%y=y(:,1),y'=y(:,2)

function ym=eqd4(t,y);
ym=[y(2),cos(t)-y(2)-t*y(1)];

[x,y]=ode45('eqd5',0,15,[0;1;0.5]);
plot(x,y(:,1),'y',x,y(:,2),'r',x,y(:,3),'g')

function yp=eqd5(x,y)
% y vector 3-dimensional
yp=[y(2),y(3),cos(x*y(1))-y(2)];

[t,y]=ode23('eqd6',0,1,[1;0.1]);
plot(t,y(:,1),'y',t,y(:,2),'r')

function yp=eqd6(t,y)
yp=[cos(t)-y(1)*y(2);sin(t)*y(2)-y(1)];

[t,y]=ode23('eqd7',0,1,[1;0.1]);
plot(t,y(:,1),'y',t,y(:,2),'r')

function yp=eqd7(t,y)
yp=[cos(t)-y(1)*y(2);sin(t)*y(2)-y(1)];

[T,Y] = ode15s('eqd8',[0 3000],[2 0]);


plot(T,Y)
function dy = eqd8(t,y)
dy = zeros(2,1); % a column vector
dy(1) = y(2);
dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);

%aproxima la solucion de -y''+p(x)y'+q(x)y+r(x)=0, a<=x<=b,


y(a)=alfa, y(b)=beta, mediante el metodo del disparo lineal
a=input('ext. izq. del interv. a=');
b=input('ext. der. del interv. b=');
N=input('numero de subinterv. N=');
alfa=input('cond. de front. alfa=');
beta=input('cond. de front. beta=');
h=(b-a)/N;
u(1,1)=alfa;
u(2,1)=0;
Mg. Jorge I. Condado J.
33
v(1,1)=0;
v(2,1)=1;
for I=1:N,
x=a+(I-1)*h;
k11=h*u(2,I);
k12=h*((p(x)*u(2,I)+q(x)*u(1,I))+r(x));
k21=h*(u(2,I)+(.5)*k12);
k22=h*(p(x+h/2)*(u(2,I)+(.5)*k12))+...
h*(q(x+h/2)*(u(1,I)+(.5)*k11)+r(x+(h/2)));
k31=h*(u(2,I)+(.5)*k22);
k32=h*(p(x+h/2)*(u(2,I)+(.5)*k22)...
+q(x+h/2)*(u(1,I)+(.5)*k21)+r(x+h/2));
k41=h*(u(2,I)+k32);
k42=h*(p(x+h)*(u(2,I)+k32)+q(x+h)*(u(1,I)+k31)+r(x+h));
u(1,1+I)=u(1,I)+(1/6)*(k11+(2*k21)+(2*k31)+k41);
u(2,1+I)=u(2,I)+(1/6)*(k12+(2*k22)+(2*k32)+k42);
l11=h*v(2,I);
l12=h*(p(x)*v(2,I)+q(x)*v(1,I));
l21=h*(v(2,I)+(.5)*l12);
l22=h*(p(x+h/2)*(v(2,I)+(.5)*l12)+q(x+h/2)*(v(1,I)+...
(.5)*l11));
l31=h*(v(2,I)+(.5)*l22);
l32=h*(p(x+h/2)*(v(2,I)+(.5)*l22)+q(x+h/2)*(v(1,I)+
(.5)*l21));
l41=h*(v(2,I)+l32);
l42=h*(p(x+h)*((v(2,I)+l32))+(q(x+h)*(v(1,I)+l31)));
v(1,1+I)=v(1,I)+(1/6)*(l11+(2*l21)+(2*l31)+l41);
v(2,1+I)=v(2,I)+(1/6)*(l12+(2*l22)+(2*l32)+l42);
xx(I)=x;
end
w(1,1)=alfa;
w(2,1)=(beta-u(1,N+1))/v(1,N+1);
for I=1:N+1
w(1,I)=u(1,I)+w(2,1)*v(1,I);
w(2,I)=u(2,I)+w(2,1)*v(2,I);
end
xx, u, v, w,

%aproxima la solucion de y''=f(x,y,y')=4+(1/4)x^3-(1/8)y*y'


a<=x<=b, y(a)=alfa, y(b)=beta, mediante el metodo del
disparo no-lineal.
clear,
a=1, %a=input('ext. izq. del interv. a=');
b=3, %b=input('ext. der. del interv. b=');
N=20, %N=input('numero de subinterv. N=');
alfa=17, %alfa=input('cond. de front. alfa=');
beta=43/3, %beta=input('cond. de front. beta=');
tol=10^(-7), %tol=input('tolerancia tol=')
M=input ('maximas iteraciones M=')
h=(b-a)/N;
w(1,1)=alfa,
k=1,
T(k)=(beta-alfa)/(b-a),
u(1)=0,
Mg. Jorge I. Condado J.
34
v(1)=1,
while k<M
w(2,1)=T(k);
for I=1:N,
x(I)=a+(I-1)*h;
k11=h*w(2,I);
k12=h*fnli(x(I),w(1,I),w(2,I));
k21=h*(w(2,I)+(.5)*k12);
k22=h*fnli(x(I)+h/2,w(1,I)+(.5)*k11,w(2,I)+(.5)*k12);
k31=h*(w(2,I)+(.5)*k22);
k32=h*fnli(x(I)+h/2,w(1,I)+(.5)*k21,w(2,I)+(.5)*k22);
k41=h*(w(2,I)+k32);
k42=h*fnli(x(I)+h,w(1,I)+k31,w(2,I)+k32);
w(1,1+I)=w(1,I)+(1/6)*(k11+(2*k21)+(2*k31)+k41);
w(2,1+I)=w(2,I)+(1/6)*(k12+(2*k22)+(2*k32)+k42);
l11=h*v(I);
l12=h*(fnli1(x(I),w(1,I),w(2,I))*u(I)+...
fnli2(x,w(1,I),w(2,I))*v(I));
l21=h*(v(I)+(.5)*l12);
l22=h*(fnli1(x(I)+h/2,w(1,I),w(2,I))*(u(I)+(.5)*l11)+...
fnli2(x(I)+h/2,w(1,I),w(2,I))*(v(I)+(.5)*l12));
l31=h*(v(I)+(.5)*l22);
l32=h*(fnli1(x(I)+h/2,w(1,I),w(2,I))*(u(I)+(.5)*l21)+...
fnli2(x(I)+h/2,w(1,I),w(2,I))*(v(I)+(.5)*l22));
l41=h*(v(I)+l32);
l42=h*(fnli1(x(I)+h,w(1,I),w(2,I))*(u(I)+l31)+...
fnli2(x(I)+h,w(1,I),w(2,I))*(v(I)+(.5)*l32));
u(I+1)=u(I)+(1/6)*(l11+(2*l21)+(2*l31)+l41);
v(I+1)=v(I)+(1/6)*(l12+(2*l22)+(2*l32)+l42);
end,
if abs(w(1,N+1)-beta)<=tol,
ban=1;
break,
end
T(k+1)=T(k)-(w(1,N+1)-beta)/u(N+1);
k=k+1,
ban=0;
end
if ban==0
fprintf('rebaso n de iteraciones, la ultima es:'),w(1,:),
else if ban==1
fprintf('la respuesta es'),w(1,:),end,end
Texto
Una cadena de caracteres es texto entre apstrofes, digite en la ventana de comandos:
A='esto es una cadena de caracteres', %matlab responde:
A =
esto es una cadena de caracteres
Se manejan como vectores filas y se manipulan igual que estos:
size(A)
ans =
1 32
Nos indica que A tiene 32 elementos, los espacios en blanco tambin se cuentan. Si
elegimos desde el elemento 22 hasta el 30, escribimos:

Mg. Jorge I. Condado J.


35
B=A(22:30) %lo que matlab responde:
B =
carcter
Tambien podemos concatenar:
c=['buen ', B]
c =
buen caracter
Para ver la representacion en ACSII de carcter, escribimos:
s=abs(B)
s =
32 99 97 114 97 99 116 101 114
para restaurarla y verla de nuevo como una cadena de caracteres escribimos:
setstr(s)
ans =
carcter
Ejemplo
c='ABCD'
c =
ABCD
x=c+5
x =
70 71 72 73
setstr(x)
ans =
FGHI
Podemos comparar dos cadenas, para ello se necesita que tengan la misma longitud,
esto se consigue introduciendo los espacios en blanco para el de menor tamao,
mediante el comando str2mat.
Ejemplo
t1='cadenas'
t1 =
cadenas
t2='caracteres'
t2 =
caracteres
t=str2mat(t1,t2)
t=
cadenas
caracteres
A=t(1,:)= =t(2,:)
A=
1 1 0 0 0 0 0 0 0 0
matlab responde que los dos primeros caracteres son iguales.
Valores numericos son convertidos a cadenas mediante sprintf, num2str,
int2str. Sirven para poner titulos que incluyen valores numricos en las grficas
Ejemplo
A=2.25; B=A^3;
title(['el volumen es',num2str(B),' unidades cubicas'])
Si la cadena s es una expresin matlab, la funcin eval(s), evalua la cadena como
sigue:
Ejemplo
format rat
t='1/(k+kk-1)';
Mg. Jorge I. Condado J.
36
for k=1:5
for kk=1:5
a(k,kk)=eval(t);
end
end
a
format
Ejemplo
s=['x=3 '
'y=4 '
'z=sqrt(x*x+y*y)']
for k=1:3
eval(s(k,:)),
end

Polinomios
Un polinomio se representa por un vector fila con sus coeficientes en orden descendente
se deben incluir los terminos con coeficientes nulos.
Las raices de un polinomio se encuentran utilizando la funcion roots (p) y esta es un
vector columna. Dadas las raices es posible construir el polinomio asociado mediante la
funcion poly (r).
Otros comandos para manejar polinomios:
Funcion Descripcin
conv (p,q) multiplica los dos plinomios p y q
deconv (p,q) divide el polinomio p entre q
polyder (p) calcula la derivada del polinomio p
polyval(p,x) evalua el polinomio p en todos los valores de x
residue(p,q) calcula el desarrollo en fracciones simples del
cociente de p y q
polyder(p,q) calcula la derivada del producto de p y q
Ejemplo
Un polinomio cuyas raices son los diez primero naturales: r=1:10
r =
1 2 3 4 5 6 7 8 9 10
p=poly(r)
Obtenemos los coeficientes del polinomio en orden descendente:
p=
Columns 1 through 6
1 -55 1320 -18150 157773 -902055
Columns 7 through 11
3416930 -8409500 12753576 -10628640 3628800

Hallar la primera y segunda derivada del polinomio p


p_prim=polyder(p)
p_prim =
Columns 1 through 6
10 -495 10560 -127050 946638 -4510275
Columns 7 through 10
13667720 -25228500 25507152 -10628640
p_segun=polyder(p_prim)
p_segun =
Columns 1 through 6
Mg. Jorge I. Condado J.
37
90 -3960 73920 -762300 4733190 -18041100
Columns 7 through 9
41003160 -50457000 25507152
Al polinomio p dividirlo entre el polinomio q de raices 2, 4, 6, 8 y mostrar las raices del
cociente:
r1=2:2:8
r1 = 2 4 6 8
q=poly(r1)
q = 1 -20 140 -400 384
coc=deconv(p,q)
coc = 1 -35 480 -3250 11189 -17835 9450
roots(coc)
ans =
10.0000
9.0000
7.0000
5.0000
3.0000
1.0000

El siguiente archivo.m suma dos polinomios a y b cuyos coeficientes se escriben en


orden descendente:
function p=sum_pol(a,b)
%sum_pol(a,b) suma los ploinomios a y b
if nargin<2
error('escriba dos polinomios')
end
a=a(:)';%asegura que las las entradas son
b=b(:)';%vectores filas
na=length(a); nb=length(b);
p=[zeros(1,nb-na) a]+[zeros(1, na-nb) b];
Ejecute este archivo para restar los polinomios a y b:
a=[1 6 20 50 75 84 64], b=[2 6 12 20];

Anlisis de datos
Las matrices son usadas de manera natural por matlab para analizar datos. Por
convencin el conjunto de datos se almacenan en matrices orientada por
columnas, cada columna representa una variable diferente y cada fila
muestras individuales de las variables.
Al digitar help datafun, matlab le muestra una lista de las funcionres estadsticas que
podra Ud. necesitar, alguna de estas es mostrada en la siguiente tabla:
Funcin estadstica Descripcin
bar(x) Diagrama de barras
corrcoef(x) Coeficientes de correlacin
cov(x) Matriz de covarianza
cumprod(x) Producto acumulado de columnas
cumsum(x) Suma acumulado de columnas
diff(x) Calcula las diferencias entre elementos
hist() Histograma
mean(x) Valor medio de columnas
median(x) Valor de la mediana de las columnas

Mg. Jorge I. Condado J.


38
prod(x) Producto de elemtos en columnas
rand(x) Nmeros aleatorios distribuidos uniformemente
randn(x) Nmeros aleatorios distribuidos normalmente
sort(x) Ordena columnas en orden ascendente
std(x) Desviacin estandar de columnas
sum(x) Suma de elementos de cada columna
Ejemplo
Dada la matriz A=[1 2 3;4 5 6 ;7 8 9], hallar la suma de sus columnas, de sus filas y de
su diagonal.
sum(A); sum(A); sum(diag(A));
Ejemplo
Para la matriz A, calcular la media, la mediana, el mximo, el mnimo, que hace
sort(A)?

Nmeros aleatorios
Nos sirven para crear una simulacin de un problema complejo.
Los nmeros aleatorios que tienen la misma probabilidad de ser elegidos entre un lmite
superior y uno inferior se denominan nmeros aleatorios uniformes.
Matlab mediante la funcin rand genera nmeros aleatorios distribuidos uniformemente
en el intervalo [0,1], la sintaxis es:
rand (n) %matriz de orden n de entradas entre 0 y 1.
rand(m,n) %matiz de orden m por n
Para obtener una sucesin de nmeros aleatorios se utiliza el valor de una semilla el
valor de este semilla inicialmente es cero, pero se puede cambiar con la funcin seed
rand(seed, n) %asigna n como valor de la semilla
rand(seed),%devuelve el valor actual de la semilla del generador de nmeros
aleatorios.
Las sucesiones aleatorias que tienen algunos valores con mayor probabilidad de ocurrir
que otros pueden modelarse con nmeros aleatorios normales. Matlab genera valores
gaussianos con una media de cero y una varianza de 1.0 en [0,1], mediante:
randn(m) %genera una matriz de orden m
randn(m,n) %genera una matriz de orden m por n
Ejemplo
y=randn(1500,1); %genera nmeros aleatorios de media cero y varianza 1.
hist(y) %dibuja un histograma de 10 barras para los datos del vector y.
[n,x]=hist(y,30)
plot(x, n, 'x')
Ejemplo
x=-2.9:0.1:2.9
y=randn(1000,1),
hist(y, x),
Metodo de montecarlo
Use el metodo de montecarlo para hallar el volumen de una esfera de radio1
N=input('muestras aleator N=')
x=rand(1,N);
y=rand(1,N);
f=1-(x.^2+y.^2);
A=f>0;
F=A.*f;FF=F.^(1/2);
n=sum(A);
Int1=(8/N)*(sum(FF))
sigm=pi/4;
Mg. Jorge I. Condado J.
39
Int2=(8*sigm/n)*sum(FF),
int=(4/3)*pi
1
Hallar la integral ( ( x 2 y 2 ) dxdy
: x 1, 0 y 2 x 1 , usando el metodo de
) 2
monte carlo
Un problema de colas:
Se quiere saber en una cola el tiempo promedio de espera dell cliente, el promedio del
tiempo de ocio , el procentaje promedio de tiempo de utilizacin y promedio del tiempo
que pasa un cliente en el sistema. El tiempo de espera y los arrivos son aleatorios.
Sol:
function n=Expon(ex)
%Crea un numero aleatorio dado
% ex =media de la distribucion
% n =numero generado
n=-ex*log(rand);
Cola Simple
% se asume llegadas y servicio exponencial
% n =numero de muestras
% ea =media del tiempo entre arribo
% es =media del tiempo de servicio
% Salida reloj=tiempo de la simulacion
% Ewt =promedio del tiempo de espera
% Eidt=promedio del tiempo de ocio
% Eut =porcentaje del tiempo promedio de utilizacin
% Ewst=promedio del tiempo que pasa un cliente el sistema
clc;
ea=input('Ingrese el tiempo prom. entre arribos -> ');
es=input('Ingrese el tiempo prom. de servicio -> ');
n=input('Ingrese numero de muestras -> ');
%condiciones iniciales
reloj=0;
wt=0;
swt=0;%sumatoria de wt
swst=0;%sumatoria de wt+st
sidt=0;%sumatoria de idle time
%al iniciar la simulacion existe un cliente
%repetir hasta que
for i=1:n
st=Expon(es);%generar el servicio de la unidad
at=Expon(ea);%generar el arribo de la siguiente unidad
swst=swst+(wt+st);%acumulacin del tiempo que cada
cliente pasa en el sistema
y(i)=(wt+st);% para la grafica
reloj=reloj+at;
dif=wt+st-at;%diferencia entre el tiempo que un
cliente pasa en el sistema y la llegada del siguiente
cliente
if dif>=0
wt=dif;
idt=0;
else
wt=0;
idt=-dif;

Mg. Jorge I. Condado J.


40
end
swt=swt+wt;%acumulacin del tiempo de espera de
cada persona
sidt=sidt+idt;%acumulacin del tiempo ocioso
end

%obtener estadisticas
Ewt=swt/n;
Eidt=sidt/n;
Ewst=swst/n;
Eut=(1-sidt/reloj)*100;%en porcentaje

%reporte
fprintf('\nReporte de la simulacion \n\n');
fprintf('Total de tiempo simulado :
%10.2f\n',reloj);
fprintf('Tiempo promedio de espera :%10.2f\n',Ewt);
fprintf('Tiempo promedio en el sistema :%10.2f\n',Ewst);
fprintf('Tiempo promedio de ocio :%10.2f\n',Eidt);
fprintf('Porcentaje de utilizacion :%10.2f\n',Eut);

%histograma del tiempo en el sistema


hist(y)
colormap hsv
grid on;
title('Histograma del tiempo en el sistema');
xlabel('tiempo de la muestra');
ylabel('Frecuencia');

Algebra Lineal
eig(A),
[ V, D ] = eig( A ),
[ L, U ] = lu( A ),
[ Q, R ] = qr( A ),
[ U, S, V] = svd( A ),
rank(A),
cond(A),
norm(A),
poly(A),
poplyvalm(A)
Expresiones simbolicas
%practica expresiones simbolicas, suma, etc.
syms x y a b
s1=x^3-1
res1=factor(s1)
s2=(x-3)^2+(y-4)^2
res2=expand(s2)
res3=collect(s2)
res4=collect(s2,'y')
s3=sqrt(a^4*b^7)
res5=simple(s3)
s4=14*x^2/(22*x*y)
res6=simple(s4)

Mg. Jorge I. Condado J.


41
res7=simplify(s4)
s5=sin(x)^2+cos(x)^2
[res8, how]=simple(s5)
s6=x^2*y + y*x - x^2 - 2*x
res9=collect(s6)
s7=-1/4*x*exp(-2*x)+3/16*exp(-2*x)
res10=collect(s7,exp(-2*x))
s8=x^3+x^2+x+1
res11=horner(s8)
c=[1 2 3 4]
s14=poly2sym(c)
p1=1/(y-3)
p2=3*y/(y+2)
p3=(y+4)*(y-3)*y
rep1=p1*p3
rep2=sympow(p2,3)
rep3=symadd(p1,p2)
[rep4,rep5]=numden(rep3)
rep6=horner(symadd(p3,1))
cc=sym2poly(rep6)
rep4=collect(rep4)
pretty(rep4)
ezplot(rep4,[-1,3])
%practica soluciones simblicas de ecuaciones.
syms x y z
eq1='x-3=4'
res1=solve(eq1)
eq2='x^2-x-6=0'
res2=solve(eq2)
eq3='x^2+2*x+4=0'
res3=solve(eq3)
eq4='3*x+2*y-z=10'
eq5='-x+3*y+2*z=5'
eq6='x-y-z=-1'
[x y z]=solve(eq4,eq5,eq6);
res=[x y z]
prctica 04
edo1='Dy=3*x^2'
sol1=dsolve(edo1,'x')
sol2=dsolve(edo1,'y(2)=0.5','x')
ezplot(sol2,[2 4])
edo2='Dy=2*x*cos(y)^2'
sol3=dsolve(edo2,'y(0)=pi/4','x')
edo3='(Dy)^2 + y^2 = 1'
sol4= dsolve(edo3,'y(0) = 0')
edo4='Df = f + g'
edo5='Dg = -f + g'
S = dsolve(edo4,edo5,'f(0) = 1','g(0) = 2')
[f g] = dsolve(edo4,edo5,'f(0) = 1','g(0) = 2')
edo6='Df = f + sin(t)'
sol6=dsolve(edo6, 'f(pi/2) = 0')
edo7='D2y = -a^2*y'
sol7=dsolve(edo7, 'y(0) = 1, Dy(pi/a) = 0','x')

Mg. Jorge I. Condado J.


42
edo8='D3w = -w'
w = dsolve(edo8,'w(0)=1, Dw(0)=0, D2w(0)=0')

prctica 05
syms x a b t
s1=6*x^3-4*x^2+b*x-5
res1=diff(s1)
res2=diff(s1,2)
res3=diff(s1,'b')
s2=sin(a)
res4=diff(s2)
s3=(1-t^3)/(1+t^4)
res5=diff(s3)
res6=simple(res5)
res7=int(s1)
res8=int(s2)
s4=sqrt(x)
res9=int(s4)
res10=int(s4,'a','b')
res11=int(s4,0.5,0.6)
m=numeric(res11)

Mg. Jorge I. Condado J.


43

You might also like