Professional Documents
Culture Documents
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.
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
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
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
B4 =
2 3 0
0 0 1
B4 est formada por la primera y quinta filas, adems por la segunda, tercera y cuarta
columnas.
B=
1 4 7
2 5 8
3 6 9
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
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:
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
-----------------------------------
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.
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
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)
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)
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])
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)
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)
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
%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
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)
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)
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
function y1=eqd1(x,y)
y1=x+5;
function I1=eqd2(t,I);
R=4;C=2;
I1=-I/(R*C);
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)];
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
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
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;
%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);
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)
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)