You are on page 1of 92

CRVC

MATLAB
INTRODUCCIÓN
Es un entorno de trabajo para el cálculo científico. Programado originalmente por Clever Moler a fines de los años 70 La finalidad era acceder de una forma sencilla a las librerías LINPACK y EISPACK donde están implementadas de una forma eficiente los algoritmos, clave del análisis MATRICIAL

MATLAB es una abreviatura de Matrix Laboratory Su primera implementación se hizo en FORTRAN que era y aun sigue siéndolo, el lenguaje estándar en la implementación de métodos numéricos. Posteriormente se implemento en C, que es como se encuentra en la actualidad.

.APLICACIONES EN MATLAB Las aplicaciones de matlab se extienden a otras ramas del cálculo científico y de las ciencias aplicadas en general. librerías escritas en el lenguaje propio del Matlab hacen que se amplíen el rango de problemas que pueden resolverse. Tiene gran aceptación en la Ingeniería. Sus herramientas como los toolboxes.

Simulación de sistemas dinámicos. Estadística.. Salidas graficas.ÁREAS DONDE MATLAB SE DESARROLLA EFICIENTEMENTE Algebra Lineal Numérica Procesamiento de señales (análisis..) Diseño de sistemas de control. compresion de datos. .

INGRESANDO AL ENTORNO DEL MATLAB .

.

.

.

.

.. 3. 2. mat y mex 4.clear: Borra las variables usadas en memoria (del espacio de trabajo) 6. m.Ordenes de importancia 1.. .who: Genera una lista de variables almacenadas en el espacio de trabajo sin detalles.whos: Genera una lista de variables almacenadas en el espacio de trabajo con mas detalles respectos a las variables almacenadas en el espacio de trabajo..-demo: Guía al usuario a ejecutar diversas demostraciones que se eligen en un menú..clc: Limpia la información de la ventana de comandos 5.what: Presenta una lista de archivos almacenados en el directorio actual.

.

sustracción. potenciación y radicación se pueden realizar Operadores Aritméticos Significado + * / ^ Adición Sustracción Multiplicación División Potenciación . multiplicación. las operaciones de adición.Al igual que en la aritmética . división.

UTILIZANDO LA VENTANA DE COMANDOS CON OPERACIONES ARITMÉTICAS .

.

.

.

.

.

.

.

.

.

.

.

.

.

luego con el puntero del mouse ejecutamos las ordenes que estan en la ventana de nombre COMMAND HISTORY .Primero borramos todas las variables creada.

.

.

.

.

.

cuando deseamos comparar variables. Operador -A A&B A|B xor( A . B) Función que desempeña Negación Lógica (NOT) o complementario de A Conjunción lógica (AND) o intersección de A y B Disyunción lógica (OR) o unión de A y B OR exclusivo (XOR) o diferencia simétrica de A y B .Operadores lógicos Sirven para operaciones lógicas. se necesitan operadores cuyo resultado sea booleano (cierto o falso). es decir.

Operadores Relacionales Operador < reales) <= > >= == ∼= Función que desempeña Menor (complejos sólo afecta a partes Menor o igual (sólo afecta a partes reales) Mayor (sólo afecta a partes reales) Mayor o igual (sólo afecta a partes reales) Igual lógico Desigualdad .

0000 2. W ILLIAM CHAUCA NOLASCO .0000 3.VECTORES >> Vector=[2 2.5000 Formas de asignar un vector ING.25 4/2 3.2500 2.5] Vector = 2.

logspace (a.n) genera un vector linealmente espaciado entre los valores a y b con c elementos.b) genera un vector linealmente espaciado entre los valores a y b con 100 elementos. linspace (a.linspace (a.n) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b con n elementos.b.b) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b con 50 elementos. ING. logspace (a. W ILLIAM CHAUCA NOLASCO .b.

0000 1.5000 4.6416 21.7778 21.0000 8 9 10 >> Vector4=linspace(1.10) Vector3 = Columns 1 through 10 1 2 3 4 5 6 7 2.2.4) Vector5 = 1.5:4] Vector2 = Columns 1 through 7 1.0000 >> Vector5=logspace(0.3333 16.0000 3.0000 3.10. ING W ILLIAM CHAUCA NOLASCO .5000 3.21.6667 9.0000.0000 >> Vector3=linspace(1.4444 7.10) Vector4 = Columns 1 through 10 1.5556 18.5443 100.0000 4.8889 12.1111 14.>> Vector1=[1:5] Vector1 = 1 2 3 4 5 >> Vector2=[1:0.5000 2.2222 5.

2000 >> format short e >> 120.203000000000000e+002 >> format bank >> 2.3 ans = 1.2030e+002 >> format long e >> 120.COMANDO FORMAT >> format short %Por default >> 20.3 ans = 1.1 ans = 2.2 ans = 20.10 ING. W ILLIAM CHAUCA NOLASCO .

25) ans = 2 >> ceil(-1.97) ans = -10 >> floor(4.5) ans = 4 >> round(3. vector o matriz.25) ans = 3 .269) ans = -5 ING.97) ans = 10 >> fix(-10. W ILLIAM CHAUCA NOLASCO >> round(3. pero redondearía en cada caso los elemento individualmente) >> ceil(1.25) ans = -1 >> fix(10.FUNCIONES DE APROXIMACIONES (con x escalar.269) ans = 4 >> floor(-4.

W ILLIAM CHAUCA NOLASCO .FUNCIONES TRIGONOMÉTRICAS ING.

3013 >> cosh(pi/2) ans = 2.5000 >> asin(0.>> sin(pi/2) ans = 1 >> cos(pi/2) ans = 6. W ILLIAM CHAUCA NOLASCO .5000)*180/pi ans = 30.5092 >> sin(pi/6) ans = 0.0000 ING.1232e-017 >> sind(90) ans = 1 >> sind(-90) ans = -1 >> cosd(-90) ans = 0 >> sinh(pi/2) ans = 2.

FUNCIONES DE OPERACIONES BÁSICAS (x e y cualquier escalar. m y n enteros) ING. W ILLIAM CHAUCA NOLASCO .

W ILLIAM CHAUCA NOLASCO .>> abs(-5) ans = 5 >> abs(3-4i) ans = 5 >> x=-1 x= -1 >> y=0 y= 0 >> z=2 z= 2 >> sign(x) ans = -1 >> sign(y) ans = 0 >> sign(z) ans = 1 ING.

25) ans = 50 >> mod(-12.3) ans = 2 3 4 ING.5) ans = 3 Su equivalencia >> -12-floor(-12/5)*5 ans = 3 >> mod(12.27.5) ans = 2 >> nthroot(8.>> gcd(9.3) ans = 2 >> nthroot([8. W ILLIAM CHAUCA NOLASCO .5) ans = 2 >> rem(-12.5) ans = -2 >> rem(12.12) ans = 3 >> lcm(10.64].

FUNCIONES PARA CONSTRUIR MATRICES ESPECIALES Al igual que pasa con los vectores, existen unas sentencias que nos ayudan a crear más rápidamente algunas matrices que Matlab ya tiene predefinidas (m y n deben tomar valores naturales): •zeros (n) crea una matriz cuadrada n x n de ceros. •zeros (m,n) crea una matriz m x n de ceros. •ones (n) crea una matriz cuadrada n x n de unos. •ones (m,n) crea una matriz m x n de unos. •rand (n) crea una matriz cuadrada n x n de números aleatorios con distribución uniforme (0,1). •rand (m,n) crea una matriz m x n de números aleatorios con distribución uniforme (0,1). •randn (n) crea una matriz n x n de números aleatorios con distribución normal (0,1). •randn (m,n) crea una matriz m x n de números aleatorios con distribución normal (0,1). eye (n) crea una matriz cuadrada n x n de unos en la diagonal y ceros el resto. eye (m,n) crea una matriz m x n de unos en la diagonal y ceros el ING. W ILLIAM CHAUCA NOLASCO resto.

magic (n) crea una matriz cuadrada n x n de enteros de modo que sumen lo mismo las filas y las columnas. hilb (n) crea una matriz cuadrada n x n de Hilbert, es decir, los elementos (i,j) responden a la expresión (1/(i+j-1)). invhilb (n) crea una matriz cuadrada n x n que es la inversa de la matriz de Hilbert

ING. W ILLIAM CHAUCA NOLASCO

>> eye(2) ans = 1 0 0 1 >> magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

ING. W ILLIAM CHAUCA NOLASCO

W ILLIAM CHAUCA NOLASCO .OPERACIONES BÁSICAS CON MATRICES ING.

W ILLIAM CHAUCA NOLASCO .FUNCIONES PARA OPERAR CON VECTORES Y MATRICES ING.

W ILLIAM CHAUCA NOLASCO .ING.

W ILLIAM CHAUCA NOLASCO .ING.

W ILLIAM CHAUCA NOLASCO .ING.

W ILLIAM CHAUCA NOLASCO .ING.

W ILLIAM CHAUCA NOLASCO .ING.

W ILLIAM CHAUCA NOLASCO .ING.

ING. W ILLIAM CHAUCA NOLASCO .

v vector y n número natural) ING. W ILLIAM CHAUCA NOLASCO .FUNCIONES PARA EL ANÁLISIS DE MATRICES (Con A matriz.

2 4 6 8] A= 1 2 3 4 7 8 9 2 2 4 6 8 ING.>> v=[1 2 3] v= 1 2 3 >> diag(v) ans = 1 0 0 0 2 0 0 0 3 >> A = [1 2 3 4. W ILLIAM CHAUCA NOLASCO . 7 8 9 2.

la matriz M tendrá serios problemas de inversibilidad. la inversibilidad de la matriz M es menos realizable.7 8 9] A= 1 2 3 4 5 6 7 8 9 >> cond(A) ans = 3. W ILLIAM CHAUCA NOLASCO .>> diag(A) ans = 1 8 6 COND: determina el índice de inversibilidad de una matriz en función de la norma 2. >> A=[1 2 3.8131e+016 >> B=[2 5 8. 1 3 8] B= 2 5 8 -8 6 3 1 3 8 >> cond(B) ans = 10. Si COND es del orden de 1013 ó superior.-8 6 3.0194 ING.4 5 6. cuanto más grande es el valor de COND.

9007 -0. W ILLIAM CHAUCA NOLASCO 16 0 8 .0000 0. ans = 1. RCOND = 1.0000 Warning: Matrix is close to singular or badly scaled.4046 6.4504 0.0000 >> inv(A) >> inv(B) >> eig(B) ans = ans = 0.2254 -0.0000 0 0. RCOND = 1.4.1908 2.8014 0.1168 -0.6108 + 4. Results may be inaccurate.541976e-018.9007 -1.>> eig(A) ans = 16.3006 6.4504 0.1168 -1.6108 .3084i -0.1734 -0.0e+016 * -0.0000 0.0058 0.541976e018.3873 0. Results may be inaccurate.0000 -0.0925 -0.7785 0.0462 -0. ans = 2 0 2 8 0 0 ING.9007 -0.3084i >> B*inv(B) ans = 1.4504 0.4504 >> A*inv(A) Warning: Matrix is close to singular or badly Scaled.0000 1.0000 0 1.9007 -0.

W ILLIAM CHAUCA NOLASCO . max(svd(A)). máximo valor singular de A.01:100.8481 >> norm(B) ans = 13. es decir.>> length(A) %Numero de lineas de una matriz ans = 3 >> v=1:0.9719 norm(A) norma-2. ING. >> length(v) %Cantidad de elementos de un vector ans = 9901 >> norm(A) ans = 16.

0000 >> rank(B) ans = 3 RANK : calcula el rango r de una matriz rectangular A.0000 99.0000 -16. W ILLIAM CHAUCA NOLASCO .Devuelve un vector con los coeficientes del polinomio característico de la matriz cuadrada B >> poly(B) ans = 1.6 7 8 9] C= 2 3 4 5 6 7 8 9 >> rank(C) ans = 2 ING.0000 -173. >> C=[2 3 4 5.

7 8 9 2. W ILLIAM CHAUCA NOLASCO >> LOW=tril(XX) LOW = 1 0 0 0 7 8 0 0 2 4 6 0 .>> size(A) ans = 3 3 >> size(C) ans = 2 4 >> trace(B) ans = 16 >> XX = [1 2 3 4. 2 4 6 8] XX = 1 2 3 4 7 8 9 2 2 4 6 8 >> UPPER=triu(XX) UPPER = 1 2 3 4 0 8 9 2 0 0 6 8 ING.

y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado y.i]=sort(x) ordenación de menor a mayor de los elementos de un vector x. ni sobre escalares): [xm.FUNCIONES QUE ACTÚAN SOBRE VECTORES Las siguientes funciones sólo actúan sobre vectores (no sobre matrices. Devuelve el valor mínimo y la posición que ocupa sum(x) suma de los elementos de un vector cumsum(x) devuelve el vector suma acumulativa de los elementos de un vector (cada elemento del resultado es una suma de elementos del original) mean(x) valor medio de los elementos de un vector std(x) desviación típica prod(x) producto de los elementos de un vector cumprod(x) devuelve el vector producto acumulativo de los elementos de un vector [y. W ILLIAM CHAUCA NOLASCO . ING.im]=max(x) máximo elemento de un vector. Devuelve el valor máximo xm y la posición que ocupa im min(x) mínimo elemento de un vector. Devuelve el vector ordenado y.

dando como valor de retorno un vector resultado de aplicar la función a cada columna de la matriz considerada como vector. pero en ese caso se aplican por separado a cada columna de la matriz.im]=max(vector) xm = 10 im = >> [ym.imenor]=min(vector) 3 ym = 1 imenor = 5 ING. Si estas funciones se quieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta.En realidad estas funciones se pueden aplicar también a matrices. W ILLIAM CHAUCA NOLASCO . >> vector=[2 7 10 4 1] vector = 2 7 10 4 1 >> [xm.

>> vector vector = 2 7 10 4 1 >> sum(vector) ans = 24 >> cumsum(vector) ans = 2 9 19 23 24 >> mean(vector) ans = 4.i]=sort(vector) y= 1 2 4 7 10 i= 5 1 4 2 3 ING. W ILLIAM CHAUCA NOLASCO .7014 >> prod(vector) ans = 560 >> cumprod(vector) ans= 2 14 140 560 560 >> vector vector = 2 7 10 4 1 >> [y.8000 >> std(vector) ans = 3.

Algunas de estas funciones son: any(x) función vectorial. MATLAB dispone de varias funciones para ello.FUNCIONES LÓGICAS PARA MATRICES/VECTORES De ordinario. Devuelve un uno ó un cero >> vector=[2 5 7 9 8] vector = 2 5 7 >> any(vector>10) ans = 0 >> any(vector<10) ans = 1 9 8 ING. Recuérdese que cualquier valor distinto de cero equivale a true. mientras que un valor cero equivale a false. W ILLIAM CHAUCA NOLASCO . las matrices "binarias" que se obtienen de la aplicación de los operadores relacionales no se almacenan en memoria ni se asignan a variables. sino que se procesan sobre la marcha. chequea si alguno de los elementos del vector x cumple una determinada condición (en este caso ser distinto de cero).

any(A) se aplica por separado a cada columna de la matriz A.01 0. chequea si todos los elementos del vector x cumplen una condición.0100 0.1 2 9.67 0.69] A = Columns 1 through 7 0.3800 0. 8 9 0] A= 3 3 5 1 2 9 8 9 0 >> any(A>10) ans = 0 0 0 >> any(A>=5) ans = 1 1 1 all(x) función vectorial.5) B= 1 1 0 0 0 0 1 >> all(B) ING.0700 0.6900 >> B = (A > 0. W ILLIAM CHAUCA NOLASCO ans = 0 .38 0. El resultado es un vector de unos y ceros >> A=[3 3 5.07 0.5300 0. Devuelve un uno ó un cero >> A = [0.42 0.4200 0.6700 0.53 0.

5 9 1. El resultado es un vector de unos y ceros >> XXX=[2 3 7. W ILLIAM CHAUCA NOLASCO .>> C=(A>=0) C= 1 1 >> all(C) ans = 1 1 1 1 1 1 all(A) se aplica por separado a cada columna de la matriz A. 2 7 6] XXX = 2 3 7 5 9 1 2 7 6 >> all(XXX>10) ans = 0 0 0 >> all(XXX<10) ans = 1 1 1 ING.

find(x) busca índices correspondientes a elementos de vectores que cumplen una determinada condición. El resultado es un vector con los índices de los elementos que cumplen la condición find(A) cuando esta función se aplica a una matriz la considera como un vector con una columna detrás de otra, de la 1ª a la última.

ING. W ILLIAM CHAUCA NOLASCO

Ahora se van a sustituir los elementos que cumplen la condición anterior por valores de 10. Obsérvese cómo se hace y qué resultado se obtiene:

donde ha sido necesario convertir el 10 en un vector del mismo tamaño que m. Para chequear si hay algún elemento de un determinado valor –por ejemplo 3– puede hacerse lo siguiente:

ING. W ILLIAM CHAUCA NOLASCO

mientras que para comprobar que todos los elementos de A son mayores que cero:

>> all(all(A)) ans = 1
En este caso no ha hecho falta utilizar el operador relacional porque cualquier elemento distinto de cero equivale a true.

ING. W ILLIAM CHAUCA NOLASCO

GENERACIÓN DE GRÁFICOS PREDEFINIDOS EN MATLAB ING. W ILLIAM CHAUCA NOLASCO .

>> y=[1 2 3 8 2 1 4 6]. W ILLIAM CHAUCA NOLASCO . >> bar(y) ING.

>> bar(x.Gráfico de barras para la función de -3 a 3 y = e-x*x cuando x varía >> x = -3:0. >> y = exp(-x. W ILLIAM CHAUCA NOLASCO .2:3.y) ING.*x).

>> barh(x.y) ING. W ILLIAM CHAUCA NOLASCO .

>> bar(x.'g') ING.y. W ILLIAM CHAUCA NOLASCO .

W ILLIAM CHAUCA NOLASCO .>> y=[10 8 6.6 0 9.2 5 8.5 8 7.'grouped') ING.9 4 2] y= 10 8 6 2 5 8 6 0 9 5 8 7 9 4 2 >>bar(y.

W ILLIAM CHAUCA NOLASCO .>> bar(y.'stacked') ING.

'stacked') ING.bar3(y. W ILLIAM CHAUCA NOLASCO .

y) ING. >>y = sin(x).2:20.>> x = 0:0.*exp(-0. W ILLIAM CHAUCA NOLASCO .2*x). >> plot(x.

y.>> plot(x.'r*') ING. W ILLIAM CHAUCA NOLASCO .

>> legend('sen(x)'. sin(2*x).2*pi]).'sen(2x)'. W ILLIAM CHAUCA NOLASCO . sin(3*x)]'.>> fplot('[sin(x).'sen(3x)') ING.[0.

>> plot(x.'y=log(sqrt(x))') >> xlabel('Eje x') >> ylabel('Eje y') >> title('Gráfico senoidal y logarítmico') ING.-0.1.0.y) >> text(1.'y=sin(x^2)').2. W ILLIAM CHAUCA NOLASCO . >> plot(x.^2).8.z) >> text(1.30). >> hold on >> z=log(sqrt(x)).>> x=linspace(0. >> y=sin(x.

W ILLIAM CHAUCA NOLASCO .ING.

>> subplot(121). >> plot(x. >> z = cos(x).1:2*pi].Graficar en dos subgráficas una fila y dos columnas: >> x = [0:0. W ILLIAM CHAUCA NOLASCO .z) >> title('cos(x)') ING. >> y = sin(x). >> plot(x.y) >> title('sin(x)') >> subplot(122).

W ILLIAM CHAUCA NOLASCO .y) >> title('sen(x)') >> hold on >> subplot(212) >> plot(x. >> z = cos(x).z) >> title('cos(x)') ING. >> plot(x. >> subplot(211).1:2*pi].Graficar en dos subgráficas dos fila y una columna: >> x = [0:0. >> y = sin(x).

>>subplot (224).[-2*pi 2*pi]). >>fplot(‘sec(x)’.Graficar en cuatro subgráficas dos filas y dos columnas: >>subplot (221). W ILLIAM CHAUCA NOLASCO . ING. >>fplot(‘csc(x)’. >>fplot(‘cos(x)’.[-2*pi 2*pi -10 10]). >>subplot (223).[-2*pi 2*pi -10 10]). >>subplot (222). >>fplot(‘sin(x)’.[-2*pi 2*pi]).

ING. W ILLIAM CHAUCA NOLASCO .

W ILLIAM CHAUCA NOLASCO .y) >>title('logaritmica') >>subplot(223) >>semilogx(x.y) >>title('normal') >>hold on >>subplot(222) >>loglog(x.y) >>title('semilogaritmico en eje y') ING. >>subplot(221). >>y = abs(exp(-0. >>plot(x.5*x).*sin(5*x)).Graficar en diferentes escalas >>x = 0:0.01:3.y) >>title('semilogaritmico en eje x') >>subplot(224) >>semilogy(x.

W ILLIAM CHAUCA NOLASCO .ING.