Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso Completo Mathlab
Curso Completo Mathlab
Alejandro Hayes
Bases de Matlab
Alejandro Hayes
ndice
1. Introduccin.....................................................................................................................................3 1.1 El programa MATLAB...........................................................................................................................3 1.2 Constitucin de MATLAB.......................................................................................................................3 1.3 Simulink..............................................................................................................................................4 2. Primeros pasos con MATLAB...........................................................................................................4 2.1 Conociendo la versin..........................................................................................................................4 2.2 Tipos de archivos con los que trabaja MATLAB......................................................................................5 2.3 Variables en el espacio de trabajo.........................................................................................................6 2.4 El reloj................................................................................................................................................6 2.5 Ruta de bsqueda...............................................................................................................................7 2.6 Diario.................................................................................................................................................8 2.7 Formato de exhibicin de nmeros.......................................................................................................8 2.8 Caracteres especiales y operadores......................................................................................................9 2.9 Operaciones bsicas...........................................................................................................................9 3. Escalares, vectores y matrices.......................................................................................................12 3.1 Comandos para el manejo de matrices.................................................................................................12 3.2 Algunas matrices especiales.................................................................................................................19 3.3 Aplicaciones a la resolucin de sistemas de ecuaciones lineales..............................................................19 3.4 Una aplicacin a la ingeniera...............................................................................................................20 3.5 Comentarios adicionales sobre escalares y vectores...............................................................................24 3.6 Polinomios y vectores..........................................................................................................................26 4. Funciones escalares........................................................................................................................29 4.1 Graficas de funciones en 2 D...............................................................................................................30 4.1.1Graficas de funciones escalares dadas en forma explicita.....................................................................31 4.1.2.Graficas de curvas dadas en coordenadas polares y parametricas........................................................40 4.2 Aplicaciones a la ingeniera.................................................................................................................42 5. Introduccin a la programacin....................................................................................................47 5.1.Estructuras elementales...47 5.2.Archivos-M Script.............49 5.3.Archivos-M de funcin........................................................................................................................49 6. Nmeros Complejos.......................................................................................................................54 7. Funciones Matemticas Reales de varias variables reales o campos escalares .........................57 8. Graficas Tridimensionales(2-D)....................................................................................................58 9. Funciones Matemticas Complejas de Variable Compleja ..........................................................62 9.1. Una Aplicacin a la ingeniera............................................................................................................65 10. Diferenciacin e integracin con Matlab......................................................................................67 10.1. Derivacin e integracin de funciones escalares y campos escalares...................................................67 10.2. Campos vectoriales, generalizacin de los conceptos vistos................................................................70 10.3.Una aplicacin a la ingeniera............................................................................................................71 10.4. Otras funciones para manejo de graficas..........................................................................................73 11.Ecuaciones Diferenciales...............................................................................................................75 11.1. Ecuaciones diferenciales ordinarias..................................................................................................75 11.2. Ecuaciones diferenciales en derivadas parciales................................................................................76 12.Manejo de listas y arreglos de datos............................................................................................77 12.1. Algunos comandos para manejar datos............................................................................................77 12.2.Interpolacin y ajuste de datos........................................................................................................83 12.2.1.Interpolacin Polinmica...............................................................................................................83 12.2.2.Ajuste de curvas...........................................................................................................................86
Pgina 1 de 90
Bases de Matlab
Alejandro Hayes
12.2.2.2.1. Ajuste de curvas por polinomios...............................................................................................86 12.2.2.2.2. Ajuste de curvas por funciones no Polinomicas..........................................................................88 13. Referencias...................................................................................................................................90
Pgina 2 de 90
Bases de Matlab
Alejandro Hayes
Introduccin a Matlab
1.Introduccin
En los ltimos aos ha proliferado mucho el calculo computacional ya sea debido a la necesidad del hombre de procesar una cantidad de datos cada vez mayor como al avance del calculo numrico. Aparecen entonces una cantidad importante de programas de calculo simblico y numrico entre los que se destacan Mathemtica, Maple y Matlab entre muchos otros. Matlab que es quien nos ocupa es un sistema general de software para clculos matemticos y diversas aplicaciones a la ingeniera. Actualmente se utiliza mucho en Investigacin y Anlisis en Ingeniera y en la Industria ya que sus aplicaciones comprenden la mayora de las reas de ciencia y tecnologa. Las ultimas versiones constan de un potente entorno integrado de calculo numrico y simblico con extensiones para la programacin y otros campos especficos de la ingeniera.
1.2.Constitucin de Matlab
Son cinco las partes que constituyes esencialmente a Matlab las cuales pasamos a describir:
El lenguaje Matlab: Es un lenguaje de alto nivel para matrices y vectores con sentencias de control de flujo, funciones y estructuras de datos, entradas y salidas, caractersticas para la programacin orientada a objetos. Permite crear desde programas pequeos de rpida ejecucin hasta programas mas largos y complejos.
usuario o programador de Matlab. Cuenta con facilidades tales como poder manejar las variables en el espacio de trabajo y de importar y exportar datos. Tambin posee herramientas de programacin, desarrollo , y manipulacin de archivos M (M-files).
El entorno de trabajo Matlab: Es el conjunto de herramientas con las que se puede trabajar como un
Manejador de Grficos: Es el sistema de graficacin de Matlab. Incluye una serie de comandos de muy
alto nivel para de visualizacin de imgenes 2D y 3D , animaciones y presentaciones. Tambin posee comandos de no tan alto nivel que permiten personalizar la presentacin de la figura correspondiente. Tambin permite que el usuario pueda construirse una Interfaz Grafica de Usuario (GUI ) en la aplicacin de Matlab que Corresponda.
Pgina 3 de 90
Bases de Matlab
Alejandro Hayes
las funciones mas elementales como senos , cosenos etc. a otras mas sofisticadas como las tranformadas de Laplace, FFT y otras.
La librera de Funciones Matemtica de Matlab: Es una vasta coleccin de algoritmos que va desde
La Interface de Aplicacin de Programas de Matlab (API): Es una Librera que permite escribir
programas en C y Fortran que interacten con Matlab. Incluye la posibilidad de llamar rutinas desde Matlab, llamando a Matlab como un motor y para leer y escribir MAT-files.
1.3.Simulink
Simulink es un programa de Matlab que consiste en un sistema interactivo para simular Sistemas Dinmicos lineales y no Lineales. Permite modelizar un sistema dibujando los correspondientes diagrames en bloques y manipularlos dinmicamente. Puede trabajar con sistemas lineales, no lineales , de tiempo continuo , de tiempo discreto , multivariable entre otros. Pueden agregarse al Simulink los denominados Blocksets que proporcionan libreras adicionales de bloques para aplicaciones especificas como Comunicaciones , Procesamiento de Seales , Sistemas de Potencia etc. Tambin cuenta con un programa llamado Real-time Workshop que permite generar un cdigo en C desde tu diagrama en bloques y correrlo en una variedad de sistemas en tiempo real.
2.1.Conociendo la Versin :
Para conocer la versin que estamos usando escribamos la palabra ver y obtendremos la siguiente salida.
ver -------------------------------------------------MATLAB Version 5.3.0.10183 (R11) on PCWIN MATLAB License Number: 134521 -------------------------------------------------MATLAB Toolbox Version 5.3 (R11) 15-Jan-1999 Symbolic Math Toolbox Version 2.1 (R11) 11-Sep-1998 NAG Foundation Toolbox - Numerical ... Version 1.0.3 (R11) 06-Jun-1998 Partial Differential Equation Toolbox Version 1.0.3 (R11) 21-Nov-1997 Statistics Toolbox Version 2.2 (R11) 24-Jul-1998 Signal Processing Toolbox Version 4.2 (R11) 10-Jul-1998 Control System Toolbox Version 4.2 (R11) 15-Jul-1998 SystemBuild to Simulink Translator Version 2.0 (R11) 10-Aug-1998 Stateflow Version 2.0 (R11) 16-Jan-1999 Simulink Version 3.0 (R11) 01-Sep-1998 MATLAB Tour Version 1.2 (R11) 04-Sep-1998
Pgina 4 de 90
Bases de Matlab
Alejandro Hayes
Archivos M: Son archivos de texto que contienen cdigo de Matlab. El usuario puede crearlos usando los
mismos comandos que ingresa por lneas de comandos y otras sentencias que veremos oportunamente. El archivo se guarda con la extensin .m (Por ejemplo nombre_archivo.m) y podemos llamarlo desde la lnea de comando y lo ejecutamos.
Archivos MAT: Son archivos que contienen datos binarios que se guardan con extensin .mat y que posteriormente detallaremos.
extensin .mex.
Archivos MEX: Son archivos Matlab ejecutables compilado a partir de Fortran o C. Se guardan con la
Archivos MDL: Corresponden a modelos hechos con el Simulink que en su oportunidad desarrollaremos en detalle. Si bien la explicacin sobre los tipos de archivos que maneja Matlab fue por dems escueta el objetivo de la misma es explicar el comando what que produce una lista de los archivos M- , MAT- , MEX y MDL presentes en el directorio de trabajo actual.
Veamos un ejemplo : what M-files in the current directory C:\MATLABR11\work P2 P3 aceleracion amortiguador circuito circuito1 circuito2 circuito3 circuito31 circuito4 circuito5 circuito5B dv fn p5 MDL-files in the current directory C:\MATLABR11\work circ circ1 untitled
Pgina 5 de 90
Bases de Matlab
Alejandro Hayes
whos Name a b
Grand total is 2 elements using 16 bytes Vemos que who solo indica el nombre de las variables mientras que whos indica ademas de las variables , su tamao y el numero de bytes que ocupa y el formato.
2.4.El Reloj :
Para saber la hora actual Matlab cuenta con el comando clock clock ans = 1.0e+003 * 2.0030 0.0090 0.0010 0.0130 0.0240 0.0569
El primer numero es un multiplicador y los numeros de la segunda linea tienen el formato: [ao , mes , dia , hora , minuto , segundo] Podemos mostrar la hora en formato entero fix(clock) ans = 2003 9 1 13 40 33
Pgina 6 de 90
Bases de Matlab
Alejandro Hayes
2.5.Ruta de Bsqueda :
El comando path nos muestra la ruta de bsqueda vigente de Matlab. El comando ruta = path devuelve una cadena llamada ruta que contiene la ruta. path MATLABPATH C:\MATLABR11\toolbox\matlab\general C:\MATLABR11\toolbox\matlab\ops C:\MATLABR11\toolbox\matlab\lang C:\MATLABR11\toolbox\matlab\elmat C:\MATLABR11\toolbox\matlab\elfun C:\MATLABR11\toolbox\matlab\specfun C:\MATLABR11\toolbox\matlab\matfun C:\MATLABR11\toolbox\matlab\datafun C:\MATLABR11\toolbox\matlab\polyfun C:\MATLABR11\toolbox\matlab\funfun C:\MATLABR11\toolbox\matlab\sparfun C:\MATLABR11\toolbox\matlab\graph2d C:\MATLABR11\toolbox\matlab\graph3d C:\MATLABR11\toolbox\matlab\specgraph C:\MATLABR11\toolbox\matlab\graphics C:\MATLABR11\toolbox\matlab\uitools C:\MATLABR11\toolbox\matlab\strfun C:\MATLABR11\toolbox\matlab\iofun C:\MATLABR11\toolbox\matlab\timefun C:\MATLABR11\toolbox\matlab\datatypes C:\MATLABR11\toolbox\matlab\winfun C:\MATLABR11\toolbox\matlab\demos C:\MATLABR11\toolbox\symbolic C:\MATLABR11\toolbox\nag\nag C:\MATLABR11\toolbox\nag\examples C:\MATLABR11\toolbox\pde C:\MATLABR11\toolbox\stats C:\MATLABR11\toolbox\signal\signal C:\MATLABR11\toolbox\signal\siggui C:\MATLABR11\toolbox\signal\sigdemos C:\MATLABR11\toolbox\control C:\MATLABR11\toolbox\control\ctrlguis C:\MATLABR11\toolbox\control\obsolete C:\MATLABR11\toolbox\stateflow\sfdemos C:\MATLABR11\toolbox\sb2sl C:\MATLABR11\toolbox\stateflow\stateflow C:\MATLABR11\toolbox\simulink\simulink C:\MATLABR11\toolbox\simulink\blocks C:\MATLABR11\toolbox\simulink\simdemos C:\MATLABR11\toolbox\simulink\dee C:\MATLABR11\toolbox\tour
Pgina 7 de 90
Bases de Matlab
C:\MATLABR11\work C:\MATLABR11\toolbox\local
Alejandro Hayes
2.6.Diario:
Si deseamos guardar en algn archivo las entradas por lneas de comando el comando diary on guarda todo lo que se introduce por el teclado as como la mayor parte de lo que se enva a la pantalla, en un archivo llamado diary diary off termina la escritura .
Tabla 1
Veamos algunos ejemplos: pi ans = 3.1416 format long pi ans = 3.14159265358979 format bank pi ans = 3.14 format long e pi
Pgina 8 de 90
Bases de Matlab
ans = 3.141592653589793e+000
Alejandro Hayes
2.9.Operaciones Bsicas
Las operaciones tales como suma resta multiplicacin y divisin se realizan en forma inmediata con Matlab. Veamos algunos ejemplos: Ejemplo 2.1: Efectuaremos algunas operaciones bsicas con dos nmeros cualquiera:
Pgina 9 de 90
Bases de Matlab
Alejandro Hayes
Una de las bondades de Matlab reside en la capacidad para trabajar en distintas plataformas y segn la capacidad del hardware y del software de las mismas trabajara con mayor o menor precisin. En general Matlab realiza todas las operaciones con nmeros enteros en forma exacta, independientemente del tamao que tenga el resultado. Por ejemplo Matlab cuenta con una funcin que nos permite visualizar el resultado de una operacin con un determinado numero de cifras exactas el comando es el siguiente: vpa operacin numero de cifras exactas Ejemplo 2.2: Supongamos que queremos calcular 55 elevado a la 100 con 5000 cifras exactas.
Otras funciones que trae Matlab para trabajar con nmeros enteros se muestran en la tabla 2 seguida de algunos ejemplos. rem(n,m) sign(n) nchoosek(n,m) factorial(n) max(n1,n2) min(n1,n2) lcm(n1,n2) Nos da el resto de la divisin entre n y m Nos da el signo de n: 1 si n>0 y 1 si n<0 Numero combinatorio n sobre m Calcula el factorial de un numero natural Halla el mximo valor entre n1 y n2 Halla el mnimo valor entre n1 y n2 Mnimo comn mltiplo
Pgina 10 de 90
Bases de Matlab
gcd(n1,n2)
Alejandro Hayes
Mximo comn divisor de n1 y n2
Ejemplo 2.3:
Tabla 4
Pgina 11 de 90
Bases de Matlab
10
Alejandro Hayes
Matlab cuenta con muchos otros comandos para operaciones bsicas ac hemos presentado algunos y queda como deber para el lector indagar sobre otros comandos no explicados en esta seccin.
Pgina 12 de 90
Bases de Matlab
norm(A) norm(A) norm(A,inf) norm(A,fro) Z=null(A)
Alejandro Hayes
Norma de A(mayor valor singular de la matriz A) 1-norma de A(mayor suma de las columnas de A) Norma infinita de A(mayor suma de las filas de A) F-norma de A, definida por sqrt(sum(diag(AA))) Da una base ortonormal del ncleo de A(ZZ=I). El numero de columnas de Z es la nulidad de A Da una base ortonormal para el rango de A(QQ=I). Las columnas de Q generan el mismo espacio que las columnas de Q, y el numero de columnas es el rango de A Da el ngulo entre los subespacios especificados por las columnas de A y de B. Si A y B son vectores, da el ngulo formado por ambos Da la matriz reducida escalonada por filas de A. El numero de filas no nulas de ref(A) es el rango de la matriz A. Calcula los autovalores de la matriz cuadrada A Calcula la matriz diagonal D de autovalores de A y una matriz V cuyas columnas son los autovectores correspondientes, cumplindose que A*V = V*D Da un vector que contiene los autovalores generalizados de las matrices cuadradas A y B son las races del polinomio en det( C-A) Calcula la matriz diagonal D de autovalores generalizados de A y B, y una matriz V cuyas columnas son los autovectores correspondientes, cumplindose que A*V = B*V*D Calcula las matrices triangulares superiores AA y BB y las matrices Q y Z tales que Q*A*Z=AA Y Q*B*Z = BB, y da la matriz de autovectores generalizados de A y B. Los autovectores generalizados son los elementos de la diagonal de AA y BB, de tal modo que se tiene la igualdad : A*V*diag(BB) = B*V*diag(AA) Encuentra una matriz de transformacin T tal que B=T\A*T tiene autovalores aproximados a los de A. La matriz B se llama matriz balanceada de la matriz A Calcula la matriz B balanceada de la matriz A. Su uso esencial es aproximar los autovalores de A cuando son difciles de calcular. Se tiene que eig(A)=eig(balance(A))
Q=orth(A)
subspace(A,B)
eig(A,B) [V,D]=eig(A,B)
[AA,BB,Q,Z,V]=qz(A,B)
[T,B]=balance(A)
balance(A)
Pgina 13 de 90
Bases de Matlab
[V,D] = cdf2rdf(V,D)
Alejandro Hayes
Transforma la salida compleja [V,D] del comando eig a forma real. Cada autovalor complejo en la diagonal de D origina una submatriz de 2x2 en la forma real de la matriz D Da una matriz T y una matriz unitaria U tales que A = U*T*U y U*U=I. Si A es compleja, T es una matriz triangular superior con los autovalores de A en la diagonal. Si A es real, la matriz T tiene los autovalores de A en la diagonal, y los correspondientes autovalores complejos se corresponden con los bloques diagonales 2x2 de la matriz T Devuelve solo la matriz T Convierte a real la salida [U,T] del comando schur Devuelve la matriz unitaria P y la matriz Hessenberg H tales que A=P*H*P y P`*P=eye(size(P)) Devuelve la matriz Hessenberg Devuelve el polinomio caracterstico de la matriz A Devuelve un vector cuyas componentes son los coeficientes del polinomio cuyas raices son los elementos del vector V. Devuelve la matriz de Vandermode A tal que su j-esima columna es A(:,j)=C^(n-j)
[U,T]=schur(A)
Tabla 5
Veamos algunos ejemplos: Ejemplo 3.1:
d) M h) P ( )
g) Los Autovalores de M
M= 1 -2 5
Pgina 14 de 90
Bases de Matlab
3 9 8 -4 -1 6
Alejandro Hayes
Transpuesta_M=M' Transpuesta_M = 1 -2 5 3 8 -1 9 -4 6
Inversa_M=inv(M) Inversa_M = -22/161 27/322 6/23 4/161 19/161 39/322 -8/161 1/23 -1/23
Identidad=M*Inversa_M Identidad = 1 0 0 0 1 0 0 0 1
Potencia_3=M^3
Autovalores_M=eig(M)
Pgina 15 de 90
Bases de Matlab
Alejandro Hayes
+ 9553/14427i - 9553/14427i
Ejemplo 3.2:
2 5 9 3 8 determinar: a) A + B B= 0 15 12 10 e) A B B A f) A g) B
k) A + B
A=[1 3 -5 ; 6 -7 9 ; -5 -2 -1] A= 1 6 -5 3 -5 -7 9 -2 -1
B=[9 2 -5 ; 0 -3 8 ; -15 -12 10] B= 9 2 -5 0 -3 8 -15 -12 10 M_1=A+B M_1 = 10 5 -10 6 -10 17 -20 -14 9 M_2=A- B M_2 = -8 1 0
Pgina 16 de 90
Bases de Matlab
6 -4 1 10 10 -11 M_3=A*B M_3 = 84 53 -31 -81 -75 4 -30 8 -1 M_4=B*A M_4 = 46 23 -22 -58 5 -35 -137 19 -43 M_5=M_4-M_3 M_5 = -38 -30 9 23 80 -39 -107 11 -42 Determinante_A=det(A) Determinante_A = 143
Alejandro Hayes
Pgina 17 de 90
Bases de Matlab
Determinante_M_2 = -196 Determinante_A+Determinante_B ans = 722
Alejandro Hayes
Tabla 6
Ejemplo 3.3:
A=[1 2 7 5;-5 6 -8 9;3 -3 -2 9; 10 -2 6 -4] A= 1 2 7 -5 6 -8 3 -3 -2 10 -2 6 A(2,3) ans = -8 A(2,:) ans = -5 A(:,2) ans = 2 6 -3 -2 6 -8 9 5 9 9 -4
Pgina 18 de 90
Bases de Matlab
Alejandro Hayes
blkdiag(x1,x2,...,xn) eye(n) , eye(n,m) ones(n) , ones(n,m) rand(n) , rand(n,m) randn(n) , randn(n,m) zeros(n) , zeros(n,m) magic(n)
Tabla 7
>> B=[11;9;4] B= 11
Pgina 19 de 90
Bases de Matlab
9 4 >> A_1=inv(A)
Alejandro Hayes
A_1 = 2/9 -1/45 7/45 -1/9 1/9 2/9 -1/9 14/45 -8/45
Es importante aclarar que si bien en el ejemplo y solo con fines didcticos y para relacionar el manejo de Matlab con la teora conocida de lgebra Lineal sobre la resolucin de sistemas de ecuaciones lineales hemos optado por trabajar con la matriz inversa, esto no es frecuente ya que a la hora de invertir matrices Matlab emplea mucho tiempo, tanto mas cuanto mas grande sea la matriz. En los ejemplos del apartado 3.4 de aplicaciones a la ingeniera se muestran otras formas de resolver el sistema de ecuaciones.
Pgina 20 de 90
Bases de Matlab
Alejandro Hayes
Figura 1
V1=15v , V2=6v, R1=220, R2=470, R3=560, R4=100, R5=390, R6=120. El sistema de ecuaciones que permite calcular las corrientes esta dado por:
( R1 + R 2 + R3 ) I 1 R 2 I 2 R3 I 3 = 0 R 2 I 1 + ( R 2 + R 4 + R 5 ) I 2 R 4 I 3 = V 1 R3 I 1 R4 I 2 + ( R3 + R6 + R4 ) I 3 = V 2
Para el caso del punto b) consideramos que solo acta el generador V1 y el sistema se reduce a:
Figura 2
Pgina 21 de 90
Bases de Matlab
( R1 + R 2 + R 3 ) I 1 R 2 I 2 R 3 I 3 = 0 R 2 I 1 + ( R 2 + R 4 + R 5 ) I 2 R 4 I 3 = V 1 R 3 I 1 R 4 I 2 + ( R 3 + R6 + R 4 ) I 3 = 0
Alejandro Hayes
Pgina 22 de 90
Bases de Matlab
Alejandro Hayes
>> V1=15; >> V2=6; >> R1=220; >> R2=470; >> R3=560; >> R4=100; >> R5=390; >> R6=120; >> R=[R1+R2+R3 -R2 -R3;-R2 R2+R4+R5 -R4;-R3 -R4 R3+R6+R4] R= 1250 -470 -560 -470 960 -100 -560 -100 780
>> V=[0;V1;V2] V= 0 15 6 >> I=R\V I= 2.4771e-002 3.0818e-002 2.9428e-002 %Calculo de la potencia en cada resistencia % >> PR1=((I(1))^2)*R1 PR1 = 1.3499e-001 >> PR2=((I(2)-I(1))^2)*R2 PR2 = 1.7185e-002 >> PR3=((I(1)-I(3))^2)*R3 PR3 = 1.2143e-002 >> PR4=((I(2)-I(3))^2)*R4 PR4 = 1.9326e-004 >> PR5=((I(2))^2)*R5 PR5 =
Pgina 23 de 90
Bases de Matlab
Alejandro Hayes
3.7040e-001 >> PR6=((I(3))^2)*R6 PR6 = 1.0392e-001 %Calculo de la resistencia que ve V1% %Hacemos V2=0 y calculamos las corrientes >> V=[0;V1;0] V= 0 15 0 >> I=R\V I= 1.5947e-002 2.4958e-002 1.4649e-002 >> RV1=V1/I(2) RV1 = 6.0100e+002
Tabla 8
length(v) abs(v) norn(v) dot(v1,v2) cross(v1,v2) v1.*v2 Nos da el numero de elementos o longitud del vector v. Nos devuelve un vector en el que cada componente es el valor absoluto de la correspondiente en v. Calcula la norma 2 de un vector. La funcin norm() admite argumentos que permiten calcular otras normas. Calcula el producto escalar entre los vectores v1 y v2. Calcula el producto vectorial entre los vectores v1 y v2. Nos devuelve un vector cuyas componentes el producto de las componentes de v1 y v2
Pgina 24 de 90
Bases de Matlab
v1./v2 Ejemplo 3.6
Alejandro Hayes
Nos devuelve un vector cuyas componentes el cociente de las componentes de v1 y v2
Dados los vectores v1 = ( 1,1,6 ) , v 2 = ( 5 ,1,11 ) vamos a aplicar las instrucciones indicadas en la tabla 8
>> v1=[1 -1 6] v1 = 1 -1 6
>> a=abs(v1) a= 1 1 6
>> n=norm(v1) n= 6.1644 >> d=dot(v1,v2) d= -70 >> c=cross(v1,v2) c= 17 -19 >> v=v1.*v2 v= -5 1 -66 -6
>> l=length(v) l= 3
Pgina 25 de 90
Bases de Matlab
Alejandro Hayes
Tabla 9
Ejemplo 3.6.1 Dados los siguientes polinomios:
P( x ) = x 3 4 x 2 + 11x 23
Q( x ) = 2 x 7 5 x 5 + x 4 + 15 x 2 + x 8
se pide: a) P+Q, P Q. b) Especializar a P en 8 y a Q en 5. c) Hallar la derivada y la integral de P y Q considerando nulas las constantes de integracin.
Pgina 26 de 90
Bases de Matlab
d) Hallar las races de P y Q. e) Hallar la descomposicin en fracciones simples de H ( x ) = Resolucin en Matlab
>> P=[0 0 0 0 1 -4 11 -23] P= 0 0 0 0 1 -4 11 -23
P( x ) Q( x )
Alejandro Hayes
>> C=conv(P,Q) C= Columns 1 through 8 0 0 0 Columns 9 through 15 -59 141 -82 >> polyval(P,-8) ans = -879 >> polyval(Q,5) ans = 141622 >> dP=polyder(P) dP = 3
0 153
2 -302
-8 -111
17
-25 184
-8
11
-25
30
1/4
-4/3
11/2
-23
Pgina 27 de 90
Bases de Matlab
Alejandro Hayes
>> IQ=polyint(Q) IQ = Columns 1 through 8 1/4 0 -5/6 Column 9 0 RP=roots(P) RP = 2.9267 0.5367 + 2.7515i 0.5367 - 2.7515i >> RQ=roots(Q) RQ = -1.9091 1.3902 + 0.6687i 1.3902 - 0.6687i -0.4374 + 1.2308i -0.4374 - 1.2308i -0.7166 0.7201 >> [R,PO,K]=residue(P,Q) R= -0.2506 0.1233 - 0.0663i 0.1233 + 0.0663i -0.1884 - 0.1809i -0.1884 + 0.1809i -0.8682 1.2490
1/5
1/2
-8
PO = -1.9091 1.3902 + 0.6687i 1.3902 - 0.6687i -0.4374 + 1.2308i -0.4374 - 1.2308i 0.7201 -0.7166
K= []
Pgina 28 de 90
Bases de Matlab
Alejandro Hayes
4.Funciones Escalares
La funcin como objeto de estudio es conceptualmente muy importante a la hora de trabajar con un software matemtico pues la forma de manejar e implementar las funciones varia de un software a otro. Matlab nos permite definir y manejar funciones de una forma muy simple, solo hay que acostumbrarse a la sintaxis y a las Manias del programa en cuestin. Matlab al igual que la mayora de los paquetes de calculo simblico trae funciones predefinidas asi como permite al usuario definir sus propias funciones. Algunas de las funciones predefinidas con las que cuenta Matlab son las siguientes: abs( x ) sqrt( x ) round(x) fix(x) floor( x) ceil( x) exp( x) log( x) log10( x ) sin ( x ) cos( x ) tan ( x ) asin( x ) acos( x ) atan( x ) atan2( y, x ) sinh( x ) cosh( x ) tanh ( x ) Calcula el modulo de x Calcula la raz cuadrada de x Redondea al entero mas cercano Redondea x al entero mas cercano a cero Redondea al entero mas cercano a - Redondea al entero mas cercano a Calcula ex , Donde e es la base de los logaritmos naturales Calcula ln x, el logaritmo natural de x con base e. Calcula log10 x Calcula el sen( x) Calcula cos ( x ). Calcula tg( x ). Calcula el arcoseno de x Calcula el arcocoseno de x Calcula el arcotangente de x. Cacula el arcotangente de y/x Calcula el seno hiperblico de x Calcula el coseno hiperblico de x Calcula la tangente hiperblica de x.
Tabla 10
Por supuesto Matlab cuenta con muchas otras funciones que no fueron contempladas en la tabla. Veamos algunos ejemplos : Ejemplo 4.1: Definir las funciones f ( x) = sen x , g ( x) = cos x , h( x) = e en el intervalo [0,10] .
x
Lo que muestra el ejemplo 1 es la forma de ingresar funciones en Matlab. Si trabajamos en forma numrica debemos indicar los valores que toma la variable independiente, en el ejemplo x varia entre 0 y 10 en pasos de 0.01. Podemos observar que si no indicamos el valor de x Matlab nos dice que no conoce a la variable.
f=exp(x) ??? Undefined function or variable 'x'.
Pgina 29 de 90
Bases de Matlab
Ejemplo 4.2: Definir una funcin trabajando con la variable definida en forma simblica.
syms x real f=log(x);
Alejandro Hayes
El comando syms indica que la variable x es simblica y la palabra real indica que se trata de una variable real. De no poner nada matlab la toma como una variable compleja. Se pueden poner otros atributos a la variable por ejemplo.
syms x positive
Si queremos evaluar la funcin en un punto Matlab cuenta con una funcin llamada subs cuya sintaxis es la que se indica abajo. subs ( f ) subs (f,n) subs(f,o,n) Reemplaza todas las variables en la expresin simblica f Reemplaza la variable libre simblica en s con n Reemplaza o con n en la expresin simblica f.
Tabla 11
Ejemplo 4.3 : Dada la funcin escalar imagen de 4.
syms x f=sin(x)+exp(-x); x=4; subs(f) ans = -0.7385 format rat subs(f) ans = -449/608
Pgina 30 de 90
Bases de Matlab
Alejandro Hayes
Tabla 12
Deseamos graficar el valor de los elementos de un vector en funcin de su ndice , escribimos lo siguiente.
x=0:0.01:5; plot(x)
Figura 3
Pgina 31 de 90
Bases de Matlab
Alejandro Hayes
En esta grafica sobre el eje de abscisas figuran los ndices de cada elemento y sobre el eje de ordenadas el valor de x para cada elemento. Entre elemento y elemento Matlab interpola. Ejemplo 4.5: Dada la funcin escalar f ( x ) = 2e 0.3 x cos( 8 x + 3 ) realizar la grafica de la misma.
x=0:0.01:10; f=2*exp(-0.3*x).*cos(8*x+3); plot(x,f)
1.5
0.5
-0.5
-1
-1.5
-2 0 1 2 3 4 5 6 7 8 9 10
Figura 4
Si queremos ver algunas opciones para la salida del grafico veamos otros ejemplos: Ejemplo 4.6: Idem anterior pero con distintas opciones de visualizacin.
Pgina 32 de 90
Bases de Matlab
2
Alejandro Hayes
1.5
0.5
-0.5
-1
-1.5
-2 0 1 2 3 4 5 6 7 8 9 10
Figura 5
Ejemplo 4.7: Realizar en un mismo grafico las representaciones de f ( x ) = sen 3 x , g ( x ) = cos(2 x + 6) , h( x ) = sen x + cos 2 x en el intervalo [0 ,10 ] las siguientes funciones
fplot('[sin(3*x),cos(2*x+6),sin(x)+cos(2*x)]',[0,10])
0.5
-0.5
-1
-1.5
-2 0 1 2 3 4 5 6 7 8 9 10
Figura 6
Ejemplo 4.8: Idem anterior pero con la opcin de escala establecida
fplot('[sin(3*x),cos(2*x+6),sin(x)+cos(2*x)]',[0,10,-4,2])
Pgina 33 de 90
Bases de Matlab
2
Alejandro Hayes
-1
-2
-3
-4 0 1 2 3 4 5 6 7 8 9 10
Figura 7
Ejemplo 4.9: Graficar la funcin f ( x ) = sen 2 x + 2 x cos x utilizando el comando ezplot
ezplot('sin(x)^2+2*x*cos(x)',[-10,10])
s in(x)2 + 2 x c os(x) 20
15 10 5
0 -5 -10
Figura 8
Matlab cuenta con una serie de comandos que se utilizan para trabajar con ttulos , etiquetas, mallas y textos, hemos utilizado algunos en los ejemplos anteriores pero daremos a continuacin una tabla con los mas comunes. title(texto) xlabel(texto) ylabel(texto) Aade el texto como titulo del grafico en la parte superior del mismo . Sita el texto al lado del eje x Sita el texto al lado del eje y
Pgina 34 de 90
Bases de Matlab
zlabel(texto) text(x,y,texto) text(x,y,z,texto) gtext(texto) grid hold
Alejandro Hayes
Sita el texto al lado del eje z Sita el texto en el punto (x,y) dentro del grafico 2 D Sita el texto en el punto (x,y,z) dentro del grafico 3 D Permite situar el texto en un punto elegido con el Mouse. Sita rejillas en los ejes. Permite mantener grficos para superponerlos.
Tabla 13
Ilustraremos con algunos ejemplos la utilizacin de estos comandos. Ejemplo 4.10: Graficar las funciones f ( x) = x sen 2 x y g ( x) = sen 2 x + cos( x + 3)
x=0:0.1:10; f1=x.*sin(2*x); f2=sin(2*x)+cos(x+3); plot(x,f1,'r'); ylabel('Variable Dependiente') xlabel('Variable Independiente') grid on hold on plot(x,f2,'g'); plot(x,f2+f1,'k +');
15
10
V ariable Dependiente
-5
Figura 9
Pgina 35 de 90
Bases de Matlab
Alejandro Hayes
Sobre la computadora se observa el efecto del hold on para dibujar cada grafica manteniendo la figura anterior. Ejemplo 4.11 Definir la funcin f ( x) = e
syms x real f=exp(-sin(x.^2+3)); ezplot(f,[-5,5])
sen ( x 2 + 3)
2.5
1.5
0.5
-5
-4
-3
-2
-1
0 x
Figura 10
Matlab cuenta con una serie importante de comandos para la manipulacin de grficos algunos de ellos se dan en la tabla. axis ([xmin xmax ymin ymax]) axis(auto) axis(axis) V=axis axis(xy) axis(ij) axis(square) axis(equal) axis(normal) axis(off) Ubica los valores maximo y minimo para los ejes coordenados respectivos. Sita los ejes en la escala automtica por defecto. Congela la escala en los limites corrientes de modo de permitir situar otro grafico sobre los mismos ejes Da un vector de 4 elementos conteniendo la escala del grafico corriente. Sita el origen en la parte inferior izquierda. Sita el origen en la parte superior izquierda Convierte el rectangulo del grafico en un cuadrado. Situa el mismo factor de escala en ambos ejes. Elimina las ociones square y equal Elimina etiquetas y marcas y rejillas de los
Pgina 36 de 90
Bases de Matlab
Alejandro Hayes
ejes. Coloca de nuevo las etuquetas, marcas y rejillas
axis(on)
Tabla 14
Veamos algunos ejemplos: Ejemplo 4.12: Para el ejemplo 4.11 consideremos las siguientes modificaciones:
-1
-2 -5 -4 -3 -2 -1 0 1 2 3 4 5
Figura 11
axis('equal')
Pgina 37 de 90
Bases de Matlab
Alejandro Hayes
2.5
1.5
0.5
0 -5
Figura 12
En muchos casos es importante poder visualizar varios graficas simultneamente pero no superpuestas y para eso Matlab cuenta con una funcin que permite dividir la ventana grafica en nxm subventanas y coloca el grafico en la ventana p-esima la sintaxis es:
subplot( m,n,p )
x=(0:0.1:10); f1=sin(3*x); f2=cos(2*x); f3=cos(2*x+1); f4=exp(cos(2*x+1)); subplot(2,2,1); plot(x,f1); subplot(2,2,2); plot(x,f2); subplot(2,2,3); plot(x,f3); subplot(2,2,4); plot(x,f4);
Pgina 38 de 90
Bases de Matlab
Alejandro Hayes
1 0.5 0 -0.5 -1 0 5 10
1 0.5 0 -0.5 -1 0 5 10
1 0.5
2 0 1 -0.5 -1 0 5 10 0 0 5 10
Figura 13
En mltiples aplicaciones de ingeniera y ciencias se facilita la tarea usando grficos logartmicos o semilogaritmicos las funciones que Matlab tiene para definir esto son las que se detallan a continuacin: loglog(x,y) semilogx(x,y) semilogy(x,y) Realiza los mismos grficos que plot(x,y) pero con escala logartmica. Realiza los mismos grficos que plot(x,y) pero con escala logartmica x. Realiza los mismos grficos que plot(x,y) pero con escala logartmica y.
Tabla 15
Veamos un ejemplo combinando las funciones de grafica logartmica con subplot. Ejemplo 4.14:
x=0:0.1:10; f=exp(x)-1; subplot(2,2,1); plot(x,f); subplot(2,2,2); loglog(x,f); subplot(2,2,3); semilogx(x,f); subplot(2,2,4); semilogy(x,f);
Pgina 39 de 90
Bases de Matlab
Obtenemos la siguiente salida
x 10 2.5 2 1.5 10 1 0.5 0 0 x 10 2.5 2 1.5 10 1 0.5 0 -1 10 10 10
0 -5 0 4 0 4 5
Alejandro Hayes
10
10 5 10
-5
10 10
5
-1
10
10
10
10
Figura 14
4.1.2.Graficas parametricas.
de
curvas
dadas
en
coordenadas
polares
En muchos casos se hace necesario realizar graficas en forma Parametrica para lo cual lo nico que debemos hacer es parametrizar la curva correspondiente como ilustra el ejemplo 17. Ejemplo 4.15 Dada la curva definida en forma Parametrica por:
x( t ) = 2 cos t cos 2t con 0 t 10 . y( t ) = 2 sen t sen 2t
Pgina 40 de 90
Bases de Matlab
3
Alejandro Hayes
-1
-2
-3 -3
-2.5
-2
-1.5
-1
-0.5
0.5
1.5
Figura 15
Para realizar graficas en coordenadas polares Matlab cuenta con los siguientes comandos: polar(a,r) polar(a,r,S) Representa la curva en coordenadas polares Representa la curva en coordenadas polares con el estilo de lneas especificado por S.
Tabla 16
Ejemplo 4.16:
a=0:0.01:2*pi; r=sin(2*a).*cos(2*a); polar(a,r)
90 120
30
210
330
240 270
300
Figura 16
Pgina 41 de 90
Bases de Matlab
Ejemplo 4.17:
a=0:0.01:2*pi; r=4*(1+cos(a)); polar(a,r)
Alejandro Hayes
90 120
8 60 6
150
4 2
30
180
210
330
240 270
300
Figura 17
Para la seal de Amplitud Modulada hacemos efectuamos los siguientes grficos con Matlab
t=0:0.01:10; >> v1=2*cos(10*t); >> subplot(2,2,1) >> plot(t,v1) >> axis([0 10 -3 3]) >> grid on >> xlabel('t') >> ylabel('v1(t)') >> title('Seal portadora sin modulacion') v2=(4+2*cos(t)).*cos(10*t); >> subplot(2,2,2) >> plot(t,v2) >> axis([0 10 -7 7]) >> grid on >> xlabel('t') >> ylabel('v2(t)') >> title('Seal portadora modulada al 50%')
Pgina 42 de 90
Bases de Matlab
v3=(4+4*cos(t)).*cos(10*t); >> subplot(2,2,3) >> plot(t,v3) >> axis([0 10 -9 9]) >> grid on >> xlabel('t') >> ylabel('v3(t)') >> title('Seal portadora modulada al 100%') >> v4=(4+6*cos(t)).*cos(10*t); >> subplot(2,2,4) >> plot(t,v4) >> axis([0 10 -11 11]) >> grid on >> xlabel('t') >> ylabel('v4(t)') >> title('Seal portadora sobremodulada')
Alejandro Hayes
Figura 19
Para la seal de FM tenemos el guin que se muestra a continuacin
t=0:0.01:10;
Pgina 43 de 90
Bases de Matlab
>> v1=4*cos(10*t+t.^2); >> subplot(2,2,1) >> plot(t,v1) >> grid on >> axis([0 10 -5 5]) >> xlabel('t') >> ylabel('v1(t)') >> title('Seal modulada por una seal cuadratica') >> v2=4*cos(10*t+2*cos(t)); >> subplot(2,2,2) >> plot(t,v2) >> grid on >> axis([0 10 -5 5]) >> xlabel('t') >> ylabel('v2(t)') >> title('Seal modulada por una seal cosenoidal') v3=4*cos(10*t+6*exp(t)); >> subplot(2,2,3) >> plot(t,v3) >> axis([0 10 -5 5]) >> grid on >> xlabel('t') >> ylabel('v3(t)') >> title('Seal modulada por una seal exponencial') >> v4=4*cos(10*t+6*abs(t)); >> subplot(2,2,4) >> plot(t,v4) >> axis([0 10 -5 5]) >> grid on >> xlabel('t') >> ylabel('v4(t)') >> title('Seal modulada por una seal modulo') >>
Alejandro Hayes
Pgina 44 de 90
Bases de Matlab
Alejandro Hayes
Seal modulada por una seal cuadratica Seal modulada por una seal cosenoidal 5 5
v1(t)
v2(t) 0 v4(t) 0 5 t 10
-5
-5
v3(t)
-5
-5
5 t
10
Ejemplo 4.19
Figura 20
A partir de una medicin efectuada con voltmetro y ampermetro sobre tres lmparas de 25W, 40W, y 100W respectivamente se guardaron los registros de tensin , corriente y potencia en un archivo y luego se pasaron estos datos a una matriz de Matlab con el objeto de interpolarlos y obtener graficas de la corriente como funcin de la tensin y de la potencia como funcin de la tensin. Si bien en este primer curso no hemos estudiado interpolacin con Matlab usaremos para el guin que sigue la funcin interp1 que efecta una interpolacin de datos 1D, es intencin de un curso futuro el tratar las funciones de interpolacin y ajuste que usa Matlab as como otras herramientas del calculo estadstico y numrico. El guin utilizado se muestra a continuacin as como la salida grafica obtenida.
M= 220.0000 200.0000 175.0000 150.0000 125.0000 110.0000 100.0000 75.0000 50.0000 25.0000 15.0000 10.0000 5.0000
118.0000 112.0000 103.0000 94.0000 84.0000 78.0000 74.0000 62.0000 49.0000 32.0000 24.0000 18.0000 12.0000
25.9600 185.0000 22.4000 177.0000 18.0200 166.0000 14.1000 154.0000 10.5000 141.0000 8.5800 134.0000 7.4000 128.0000 4.6500 113.0000 2.4500 98.0000 0.8000 78.0000 0.3600 67.0000 0.1800 59.0000 0.0600 38.0000
40.7000 35.4000 29.0500 23.1000 17.6200 14.7400 12.8000 8.4700 4.9000 1.9500 1.0000 0.5900 0.1900
43.0000 41.0000 38.0000 35.0000 31.0000 29.0000 28.0000 24.0000 19.0000 17.0000 14.6000 12.8000 9.7000
94.6000 82.0000 66.5000 52.5000 38.7500 31.9000 28.0000 18.0000 9.5000 4.2500 2.1900 1.2800 0.5000
>> v=M(:,1);
Pgina 45 de 90
Bases de Matlab
Alejandro Hayes
>> I25=M(:,2); >> vinterp=5:1:220; >> I25interp=interp1(v,I25,vinterp); >> subplot(2,1,1) >> plot(vinterp,I25interp) >> grid on >> I40=M(:,4); >> I40interp=interp1(v,I40,vinterp); >> hold on >> plot(vinterp,I40interp,'r') >> I100=M(:,6); >> I100interp=interp1(v,I100,vinterp); >> plot(vinterp,I100interp) >> plot(vinterp,I100interp,'g') >> grid on >> xlabel('V') >> ylabel('I(V)') >> title('Variacion de la corriente en funcion de la tension en lamparas de 25 40 y 100 W') >> P25=M(:,3); >> P25interp=interp1(v,P25,vinterp); >> subplot(2,1,2) >> plot(vinterp,P25interp) >> P40=M(:,5); >> P40interp=interp1(v,P40,vinterp); >> hold on >> plot(vinterp,P40interp,'r') >> P100=M(:,7); >> P100interp=interp1(v,P100,vinterp); >> plot(vinterp,P100interp,'g') >> grid on >> xlabel('V') >> ylabel('P(V)') >>
Pgina 46 de 90
Bases de Matlab
Alejandro Hayes
Variacion de la corriente en funcion de la tension en lamparas de 25 40 y 100 W 200 150 I(V) 100 50 0
50
100 V
150
200
250
Figura 21
Con estos dos ejemplos tratamos de ilustrar la gran aplicacin que tiene Matlab en Ingeniera y por supuesto dejar la puerta abierta a un mundo de otras aplicaciones a la ingeniera y a las ciencias.
5.Introduccin a la Programacin
Hasta ahora hemos visto que todos las instrucciones de Matlab que pueden escribirse y ejecutarse desde la lnea de comandos ingresndolos directamente desde el teclado. Esta forma de trabajar es muy simple pero en la practica presenta limitaciones cuando de desarrollos grandes se trata y es en estos casos donde el usuario necesita hacerse un programa propio y personalizarlo a sus necesidades. Matlab permite desarrollar programas con archivos M los que pueden hacerse mediante el editor de texto que viene con Matlab y luego para ser ejecutado se lo llama desde la ventana de comandos con el nombre del archivo. Por defecto Matlab guarda estos archivos en un directorio propio llamado work pero es posible guardarlos en cualquier directorio deseado y luego poder accederlo indicando en forma adecuada la ruta. Estudiaremos dos tipos de archivos-M que se detallan a continuacin.
Pgina 47 de 90
Bases de Matlab
Sentencia 1 Sentencia 2 ................ Sentencia n
Alejandro Hayes
Toma de Decisin: Permite tomar una decisin a partir de una o varias condiciones las que segn sean verdaderas o falsas permiten ejecutar una sentencia u otra. Esto se implementa en Matlab mediante la sentencias if y switch. La estructura del if en Matlab es la siguiente:
if condicion Sentenciasx else Sentenciasy end La estructura de switch en Matlab es la siguiente: switch expresin case exp1
determinadas, se repitan las veces requeridas por el algoritmo. Estas sentencias son for y while cuya estructura en Matlab es la siguiente. for cont=n_min:paso:n_max end Sentencias
Pgina 48 de 90
Bases de Matlab
Alejandro Hayes
5.2.Archivos-M Script
Supongamos que elegimos nuestro editor de texto favorito por ejemplo notepad para crear un archivo llamado funcion.m conteniendo las lineas:
x=-15:0.01:15; f=sin(x)+4*sin(3*x)-cos(10*x); plot(x,f);
Luego lo guardamos en principio en el directorio work y lo ejecutamos desde la lnea obtenemos lo siguiente:
funcion
de comandos y
-2
-4
-6 -15
-10
-5
10
15
Figura 22
Con esto no hemos hecho otra cosa que juntar un conjunto de instrucciones en un solo archivo y ejecutarlo con un solo llamado a la funcin correspondiente, sin embargo hay casos en los que deseamos interactuar con otros programas as como mecanizar procedimientos entre otras cosas, que hacen que necesitemos hacer un script mas elaborado y es de eso que se trata esta seccin. Cabe aclarar que en este primer curso se dan nociones bsicas de programacin pero es intencin de un curso futuro y mas avanzado profundizar sobre este tema y en tpicos tales como nocin de algoritmo, estructuras de datos, programacin estructurada y otros.
5.3.Archivos-M de Funcin
Los archivos de funcin provienen como una extensin de Matlab permitiendo al usuario crear funciones para problemas especficos. Las funciones son como los Scripts, pero con el propsito de mejorar la velocidad del computador se compilan en un bajo nivel de codigo de bytes cuando se los llama por primera vez. Los ejemplos que desarrollaremos son todos de funciones-M para comenzar a familiarizarnos.
Pgina 49 de 90
Bases de Matlab
Ejemplo 5.3.1:
Alejandro Hayes
Supongamos que necesitamos determinar el volumen y la superficie de cilindros de distinto tamao para lo que necesitamos una funcin que ingresndole el radio y la altura del cilindro nos de los datos requeridos. Entramos en el editor de archivos M de Matlab y desarrollamos el siguiente programa.
%************************************************************************************************% %Programa para determinar el volumen y la superficie de un cilindro ingresando %el radio y la altura %***********************************************************************************************% function [volumen,superficie]=volumen_y_superficie_cilindro(radio,altura) volumen=pi*radio.^2*altura; superficie=2*pi*radio*altura+2*pi*radio.^2;
Luego salvamos el archivo con el nombre de cilindro_vol_sup.m en el directorio work de Matlab. Ahora vamos a la linea de comandos y ejecutamos:
> cilindro_vol_sup(1,1) ans = 3.14159265358979
Vemos como el programa calcula lo solicitado. Ejemplo 5.3.2: Supongamos que deseamos realizar un programa que nos cargue una matriz elemento a elemento. En el ejemplo realizado armamos la matriz A tal que a( h , k ) = de la matriz veamos el programa:
%**********************************************************************% %Programa que ingresando como argumentos el numero de filas y el numero %de columnas de la matriz requerida ubica en cada posicion de la misma %lo solicitado. %**********************************************************************%
hk h2 + k 2
Pgina 50 de 90
Bases de Matlab
function y=llenamatriz(num_fila,num_columna) for k=1:num_fila for h=1:num_columna y(k,h)=h.*k/(h.^2+k.^2); end end
Alejandro Hayes
Columns 6 through 10 6/37 3/10 2/5 6/13 30/61 1/2 42/85 12/25 6/13 15/34 >> 7/50 14/53 21/58 28/65 35/74 42/85 1/2 56/113 63/130 70/149 8/65 9/82 10/101 4/17 18/85 5/26 24/73 3/10 30/109 2/5 36/97 10/29 40/89 45/106 2/5 12/25 6/13 15/34 56/113 63/130 70/149 1/2 72/145 20/41 72/145 1/2 90/181 20/41 90/181 1/2
Utilizamos el formato racional para obtener resultados exactos y vemos como se genero la matriz pedida. Ejemplo 5.3.3: Supongamos ahora que dada una matriz queremos recorrerla y modificar alguno de sus elementos en este caso el programa que se muestra a continuacin.
%*****************************************************************************************% %Programa que recorre la matriz ingresada y si e elemento hk es negativo %o cero lo reemplaza por un cero de lo contrario lo reemplaza por un uno %****************************************************************************************% function y=recorre_matriz(A) num_fila=length(A(1,:));
Pgina 51 de 90
Bases de Matlab
num_columna=length(A(:,1)); for k=1:num_fila for h=1:num_columna if A(k,h)<=0 A(k,h)=0; else A(k,h)=1; end end end y=A;
Alejandro Hayes
A= 1 9 2 9 2 -6 -1 -6 -4 -8 -3 -5 5 7 -3 7
>> recorre_matriz(A)
ans = 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0
Ejemplo 5.3.4: Supongamos que queremos construir una funcin que no se encuentra como predeterminada por Matlab por ejemplo la funcin f ( x ) =
x x +1
2
%************************************************************************% %Programa que crea una funcion racional% %************************************************************************% function f=func_racional_1(x) f=x./(x.^2+1); Veamos que ocurre si vamos a la lnea de comandos y escribimos lo siguiente:
Pgina 52 de 90
Bases de Matlab
>> x=-10:0.1:10; >> f=func_racional(x); >> plot(x,f); >> grid on >> Obtenemos el siguiente grafico:
0.5 0.4 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 -0.5 -10
Alejandro Hayes
-8
-6
-4
-2
10
Ejemplo 5.3.5:
Figura 23
Como ultimo ejemplo vamos a realizar un algoritmo que permita calcular la raz aproximada de una ecuacin poli nmica mediante la aplicacin del mtodo de biseccin. Supongamos que deseamos calcular el valor aproximado de 2 con un error menor que 10 6 para ello consideremos la funcin f ( x ) = x 2 2 en el intervalo [1,2] realicemos el siguiente programa:
%******************************************************************************************************************************% %Programa que aplica el metodo de Biseccion a una funcion f que hay que ingresarla entre comas 'f'% %******************************************************************************************************************************% function biseccion(f,x_max,x_min,error) %El ciclo se ejecuta mientras x_max-x_min sea mayor que el error deseado% while abs(x_max-x_min)>error %Evaluamos la funcion en x_max% y_x_max=feval(f,x_max); %Evaluamos la funcion en x_min% y_x_min=feval(f,x_min); %Vemos si es cero x_max% if y_x_max==0; disp('Una Raiz es:'); disp(x_max); break; %Vemos si es cero x_min% elseif y_x_min==0; disp('Una Raiz es:');
Pgina 53 de 90
Bases de Matlab
disp(x_min); break; %Vemos si el intervalo no cumple Bolzano% elseif y_x_max*y_x_min>0; disp('Intervalo Incorrecto') break; else %Calculamos el punto medio% x_medio=(x_max+x_min)/2; %Evaluamos la funcion en el punto medio% y_x_medio=feval(f,x_medio); %Vuelvo a probar Bolzano% if y_x_min*y_x_medio<0 x_max=x_medio; else x_min=x_medio; end end end if flag==0 disp('El valor de la raiz es:') disp(x_medio) else end
Alejandro Hayes
Ahora vamos a la lnea de comandos y lo ejecutamos lo siguiente: biseccion('polinomio_1',1,2,0.000001) El valor de la raiz es: 1.41421413421631 Para poder llamar a la funcin polinomio_1 esta tuvo que ser definida previamente por el usuario y esto se logro haciendo el siguiente archivo. function y=polinomio_1(x) y=x.^2-2;
11. Nmeros
Complejos
Recordemos que un numero complejo no es otra cosa que un par ordenado de nmeros reales de la forma z = ( a , b ) y que admiten una notacin en forma binmica dada por z = a + ib . La importancia de los nmeros complejos en ingeniera reside en el hecho de que aparecen muy frecuentemente en sistemas oscilatorios, funciones de transferencia, anlisis fasorial, etc. Matlab cuenta con una serie de comandos para un buen manejo de estos nmeros. La Tabla 1 muestra las funciones bsicas que permiten operar con nmeros complejos. a+i*b a+j*b Forma de representar un numero complejo. Matlab reserva las letras i y j para la unidad imaginaria, sin embargo a diferencia de otros programas no nos prohbe usarlas como variables por lo que si vamos a operar con
Pgina 54 de 90
Bases de Matlab
Alejandro Hayes
nmeros complejos es conveniente no usar estas letras como variables. Nos da el valor absoluto o modulo del numero complejo z Nos da el argumento del numero complejo z en radianes por defecto Construye un numero complejo a partir de las partes real e imaginaria a y b respectivamente Nos da el complejo conjugado de z Ordena nmeros complejos en pares complejos conjugados. Nos devuelve la parte imaginaria del complejo z Nos devuelve la parte real del numero complejo z. Nos devuelve un 1 si todos los elementos de A son nmeros reales y un cero si algn numero tiene parte imaginaria no nula. Corrige ngulos de fase si se pasan de 2 radianes
Tabla 15
Ejemplo 6.1 Dados los siguientes nmeros complejos z 1 = 5 + 3i , z 2 = 8 2i se pide: a) Calcular sus mdulos y argumentos respectivamente. b) Sus partes real e imaginaria. c) Los nmeros complejos conjugados de cada uno de ellos. d) Graficar tanto a los nmeros dados como a sus complejos conjugados.
>> z1=-5+3*i z1 = -5.0000 + 3.0000i >> z2=8-3*i z2 = 8.0000 - 3.0000i >> M1=abs(z1) M1 = 5.8310 >> A1=angle(z1) A1 = 2.6012 >> M2=abs(z2) M2 = 8.5440 >> A2=angle(z2)
Pgina 55 de 90
Bases de Matlab
A2 = -0.3588 r1=real(z1) r1 = -5 >> r2=real(z2) r2 = 8 >> i1=imag(z1) i1 = 3 >> i2=imag(z2) i2 = -3 >> c1=conj(z1) c1 = -5.0000 - 3.0000i >> c2=conj(z2) c2 = 8.0000 + 3.0000i >> plot(-5,3,'o') >> hold on >> plot(-5,-3,'o') >> plot(8,-3,'o') >> plot(8,3,'o') >> grid on >> axis([-8 -10 -6 6]) >> xlabel('x') >> ylabel('y') >>
Alejandro Hayes
-2
-4
-6 -8
-6
-4
-2
0 x
10
Figura 24
Pgina 56 de 90
Bases de Matlab
Alejandro Hayes
Mediante la utilizacin del comando line(x,y) podemos trazar lneas desde el origen a cada uno de los puntos graficados visualizando de ese modo los vectores asociados a cada numero complejo z.
>> x=[0 8]; >> y=[0 -3]; >> line(x,y) >> x=[0 8]; >> y=[0 3]; >> line(x,y) >> x=[0 -5]; >> y=[0 3]; >> line(x,y) >> x=[0 -5]; >> y=[0 -3]; >> line(x,y)
-2
-4
-6 -8
-6
-4
-2
0 x
10
Figura 25
Pgina 57 de 90
Bases de Matlab
Dadas las funciones
f : R 2 R / f ( x , y ) = sen( x + y )
g : R 2 R / g ( x , y ) = e ( x
2
Alejandro Hayes
+ y2 )
syms x y real f=sin(x+y); g=exp(-x.^2-y.^2); x=2; y=3; subs(f) ans = -0.9589 subs(g) ans = 2.2603e-006
surf(x,y,z,C)
Pgina 58 de 90
Bases de Matlab
Alejandro Hayes
especificados en C. Representa el grafico de superficie de la funcin z=f(x,y) junto con el grafico de contorno correspondiente con los colores especificados en C. (curvas de nivel proyectadas sobre el plano xy). Representa el grafico de superficie de la funcin z=f(x,y) realizando un dibujo con sombreado. Representa el grafico de malla de la funcin z=f(x,y), dibujando las lneas de la rejilla que componen la malla con los colores especificados en C. Representa el grafico de malla de la funcin z=f(x,y), con el grafico de contorno correspondiente. Representa el grafico de malla de la funcin z=f(x,y) con una especie de cortina o teln en la parte inferior. Dibuja el grafico de contorno (curvas de nivel) para la matriz z. El numero de lneas de contorno a utilizar se elige automticamente. Dibuja el grafico de contorno (curvas de nivel ) para la matriz z usando n lneas de contorno. Dibuja el grafico de contorno (curvas de nivel) para la matriz z usando en los ejes x e y el escalado definido por los vectores x e y , n lneas. Superficie de nivel Superficie de nivel Superficie de nivel Dibuja un grafico de contorno (curvas de nivel) para la matriz (x,y,z) utilizando una representacin basada en densidades de colores. Suele denominarse grafico de densidad.
surfc(x,y,z,C)
Tabla 16
Veamos algunos ejemplos de funciones de 2 y 3 variables: Ejemplo 8.1 : Dada la curva definida en forma parametrica por:
x = 2 sen t y = 5 cos t 2 z = t
0 t 20
Pgina 59 de 90
Bases de Matlab
Efectuar una grafica en R3 de la misma
t=0:pi/50:20*pi; x=2*sin(t); y=5*cos(t); z=t.^2; plot3(x,y,z)
Alejandro Hayes
4000
3000
2000
1000
0 5 2 0 0 -1 -5 -2 1
Figura 26
Ejemplo 8.2: Dado el campo escalar f ( x , y ) =
sen( x 2 + y 2 ) x2 + y2
Pgina 60 de 90
Bases de Matlab
Alejandro Hayes
Ejemplo 8.3:
Figura 27
Dado el campo escalar f ( x , y ) = sen x sen y se desea graficarla utilizando el comando surf.
xa=-2*pi:0.2:2*pi; ya=-2*pi:0.2:2*pi; [x,y]=meshgrid(xa,ya); f=sin(x).*sin(y); surf(x,y,f)
Figura 28
Ejemplo 8.4 : Para la funcin del ejemplo 8.3 se desea graficar las 20 primeras curvas de nivel .
Pgina 61 de 90
Bases de Matlab
Alejandro Hayes
60
50
40
30
20
10
10
20
30
40
50
60
Figura 29
Lo que nos interesa es poder visualizar como se transforma una curva descripta en forma Parametrica por:
:
x = x(t ) y = y (t )
u = u (t ) v = v(t )
Ejemplo 9.1: Dada la funcin compleja de variable compleja f : C C / f ( z ) = z 2 + 1 nos interesa saber sus componentes real e imaginaria y saber en que se transforma la regin:
R = { ( x , y ) C / x = 5 ,10 y 10 }
Pgina 62 de 90
Bases de Matlab
Alejandro Hayes
syms x y real >> z=x+i*y; >> f=z.^ 2+1; >> u=expand(real(f)) u= x^2-y^2+1 >> v=expand(imag(f)) v= 2*x*y >> x=5; >> y=-10:0.1:10; >> axis([0 6 -12 12]) >> u=x.^2-y.^2; >> v=2*x.*y; >> subplot(1,2,1) >> plot(x,y) >> line([5,5],[-10,10]) >> axis([0 6 -12 12]) >> grid on >> xlabel('x') >> ylabel('y') >> subplot(1,2,2) >> plot(u,v) >> xlabel('u') >> ylabel('v') >> grid on
-50 u
50
Figura 30
El grafico muestra los puntos en los que se transformo la regin propuesta.
Pgina 63 de 90
Bases de Matlab
Alejandro Hayes
En muchos casos nos interesa visualizar la superficie correspondiente al modulo y a la fase de la funcin de variable compleja en cuestin. El siguiente ejemplo ilustra este caso. Ejemplo 9.2 Para la funcin del ejemplo 4.1 se desea hallar y visualizar los campos escalares dados por:
( x, y ) = f ( z )
( x , y ) = arg( f ( z ))
>> xa=-10:0.1:10; >> ya=-10:0.1:10; >> [x,y]=meshgrid(xa,ya); >> z=x+i*y; >> f=z.^2+1; >> M=abs(f); >> A=angle(f); >> subplot(1,2,1) >> meshc(x,y,M) >> axis([-12 12 -12 12 0 260]) >> xlabel('x') >> ylabel('y') >> zlabel('|f|') >> subplot(1,2,2) >> meshc(x,y,A) >> axis([-12 12 -12 12 -4 6]) >> xlabel('x') >> ylabel('y') >> zlabel('fase')
250 5 200 150 |f| 100 50 0 10 0 y -10 0 -10 x y 10 -5 10 10 0 -10 -10 0 x Arg 0
Figura 31
Pgina 64 de 90
Bases de Matlab
Alejandro Hayes
Figura 32
Los valores de los componentes son: RL=100 , GC=0.02 S, L=1mHy, C=1F.
>> w=0:1.25e5; >> z1=100+i*w*(1e-3); >> y1=0.02+i*w*(1e-6); >> z=z1+1./y1; >> Z=abs(z); >> T=angle(z); >> R=real(z); >> X=imag(z); >> plot(w,Z) >> hold on >> plot(w,R,r) >> plot(w,X,g) >> grid on >> xlabel(w) >>ylabel(|z| R X) >> figure(2) >> plot(w,T) >> T=(180/pi)*T; >> plot(w,T) >> grid on >> xlabel(w) >> ylabel(Fase) >>plot(R,X) >> grid on >> axis([0 200 20 120])
Pgina 65 de 90
Bases de Matlab
>> xlabel(R) >> ylabel(X)
Alejandro Hayes
6 w
10
12
14 x 10
4
Figura 33
50
40
30
Fase
20
10
-10
6 w
10
12
14 x 10
4
Figura 34
Respecto al lugar geomtrico de la impedancia se obtuvo el siguiente grafico.
Pgina 66 de 90
Bases de Matlab
120
Alejandro Hayes
100
80
60 X 40 20 0 -20 0
20
40
60
80
100 R
120
140
160
180
200
Figura 35
10. Diferenciacin e integracin con Matlab 10.1.Derivacin e integracin de funciones escalares y campos escalares.
Matlab cuenta con varios comandos que permiten hallar la derivada e integral tanto en forma simblica como en forma numrica. La tabla 3 detalla algunas de esas funciones.
diff(f)
Determina la derivada de f respecto de la variable independiente en funciones de una sola variable siempre y cuando las variables de f estn definidas en forma simblica. En el caso de que f sea un vector de datos la funcin devuelve un nuevo vector donde cada componente es f(n)-f(n-1) Determina la derivada de f respecto de x. Determina la derivada de orden n en x de f. Devuelve una matriz cuyas componentes son las componentes del vector gradiente de f calculadas en forma numrica. Devuelve una matriz cuyas componentes son las componentes del vector gradiente de f calculadas en forma numrica con un espaciamiento dado por h. Calcula la integral indefinida de f respecto de su variable definida en forma simblica. Calcula la integral indefinida de f respecto de su variable x definida en forma simblica. Calcula la integral definida de f entre a y b
Pgina 67 de 90
Bases de Matlab
int(f,x,a,b)
Alejandro Hayes
Calcula la integral definida de f respecto de x entre a y b
Tabla 18
Ejemplo 10.1.1 Dada la funcin f ( x , y ) = ( x + y ) sen( x 2 + y 2 ) se desea hallar las derivadas parciales respecto de x y de y.
>> syms x y real >> f=(x+y).*sin(x.^2+y.^2); >> fx=diff(f,x) fx = sin(x^2+y^2)+2*(x+y)*cos(x^2+y^2)*x >> fy=diff(f,y) fy = sin(x^2+y^2)+2*(x+y)*cos(x^2+y^2)*y >>
Ejemplo 10.1.2 Dada la funcin f ( x ) = e x sen x 2 derivarla numricamente y graficarla en forma aproximada y a su derivada.
2
>> x=-10:0.01:10; >> f=exp(-x.^2).*sin(10*x.^2); >> df=diff(f); >> fd=df/eps; >> t=0:10/(length(fd)-1):10; >> subplot(2,1,1) >> plot(x,f) >> grid on >> xlabel(x) >> ylabel(f) >> subplot(2,1,2) >> plot(t,fd,r) >> grid on >> xlabel(x) >> ylabel(f) >>
Pgina 68 de 90
Bases de Matlab
1 0.5 0 -0.5 -1 -10 4 2 0 -2 -4 f x 10
14
Alejandro Hayes
-8
-6
-4
-2
0 x
10
5 x
10
Figura 36
Ejemplo 10.1.3 Dada la siguiente funcin f ( x , y ) = x 3 y 2 + 4 x 2 y 3 + 7 se desea hallar la integral doble de la misma en el recinto [0 ,1]x[0 ,1] .
>> syms x y real >> f=x^3*y^2+4*x^2*y^3+7; >> I=int(int(f,x,0,1),y,0,1)
I=
89/12 >>
Ejemplo 10.1.5 Para la funcin del ejemplo 5.1.3 hallar el vector gradiente asociado a la misma y graficar el modulo del mismo.
>> xa=-5:0.1:5; >> ya=-5:0.1:5; >> [x y]=meshgrid(xa,ya); >> f=x.^3.*y.^2+4*x.^2.*y.^3+7; >> [fx,fy]=gradient(f); >> M=sqrt(fx.^2+fy.^2); >> surf(x,y,M) >> xlabel('x') >> ylabel('y') >> zlabel('|grad(f)|') >> axis([-6 6 -6 6 -100 1200])
Pgina 69 de 90
Bases de Matlab
Alejandro Hayes
-6
Figura 37
Tabla 19
Ejemplo 10.2.1 Dado el campo vectorial f ( x , y ) = ( e x cos y , e x sen y ) deseamos graficar las lneas de campo
>> xa=0:0.1:4; >> ya=0:0.1:10; >> [x y]=meshgrid(xa,ya); >> u=exp(-x).*cos(y);
Pgina 70 de 90
Bases de Matlab
>> v=exp(-x).*sin(y); >> quiver(u,v) >> grid on
Alejandro Hayes
100
80
60
40
20
0 -5
10
15
20
25
30
35
40
45
Figura 38
Figura 39
El problema puede Modelizarse a travs de la ecuacin de Laplace : 2 v( x , y ) = 0 debido a que se trata de un problema Bidimensional la ecuacin anterior equivale a:
2 v( x , y ) x 2 + 2 v( x , y ) y 2 =0
Como se ve del anlisis del problema las condiciones de contorno son : v(0,y) =v(1,y)= v(x,1)=0 ; v(x,0)=10 . La resolucin del problema lleva a la siguiente solucin analtica.
Pgina 71 de 90
Bases de Matlab
v( x , y ) =
Alejandro Hayes
En el primer curso de Matlab aprendimos a realizar programas propios para aplicaciones especificas. En este hemos realizado un programa que grafica la solucin analtica en forma aproximada para n=10. Luego calcula el campo elctrico recordando que:
E = v( x , y )
Luego el programa grafica las 50 primeras superficies equipotenciales, las lneas de campo y el modulo del campo vectorial E . El cdigo del programa se muestra a continuacin.
function [x,y,f]=solucion_analitica h=0; xp=0:0.02:1; yp=0:0.02:0.5; [x,y]=meshgrid(xp,yp); for n=1:10 h=h+(-20./((pi*(2*n-1).*sinh(pi*(2*n-1))))*sinh(pi*(2*n-1).*(y-1)).*(sin(pi*(2*n-1).*x))); end f=h; [fx,fy]=gradient(-f); E=sqrt(fx.^2+fy.^2); subplot(2,2,1) mesh(x,y,f); xlabel('x'); ylabel('y'); zlabel('v(x,y)'); title('Potencial') subplot(2,2,2) contour(x,y,f,50) grid on xlabel('x') ylabel('y') title('Lineas Equipotenciales') subplot(2,2,3) quiver(x,y,fx,fy) grid on title('Lineas de campo electrico') subplot(2,2,4) mesh(x,y,E) xlabel('x') ylabel('y') title('Campo Electrico')
Pgina 72 de 90
Bases de Matlab
Potencial 0.5 10 v(x,y) 5 0 0.5 0.5 y 0.6 0.4 0.2 0 -0.2 -0.5 4 2 0 0.5 0.5 0 0.5 1 1.5 y 0 0 x 0 0 x Lineas de campo electrico 0.4 0.3 y 0.2 1 0.1 0 0 0.5 x Campo Electrico Lineas Equipotenciales
Alejandro Hayes
Figura 40
Este ejemplo ilustra algunas aplicaciones de las funciones vistas. Matlab cuenta con una infinidad de otras funciones para manejo de grficos.
errorbar(x,y,E) plotyy(x1,y1,x2,y2) area(x,y) bar(x,y) barh(x,y) bar3(z) bar3(z)h pie(x) pie3(x) pareto(x) stem(x,y) stem3(z)
Muestra el nivel de confianza de los datos o la desviacin a lo largo de la curva Realiza una grafica de xi versus y1 con las etiquetas del grafico en el eje y a la izquierda y x2 versus y2 con la etiqueta a la derecha. Realiza una grafica de rea. Realiza un grafico de barras vertical Realiza un grafico de barras horizontal Realiza una grafica de barras 3D vertical Realiza una grafica de barras 3D horizontal Realiza un diagrama de tortas donde el porcentaje a representar en cada porcin es aproximadamente 100*x/sum(x) Realiza un diagrama de tortas 3D Realiza diagramas de paretto. Realiza un diagrama discreto de puntos. Es ideal para representar sucesiones. Realiza un diagrama discreto de puntos en
Pgina 73 de 90
Bases de Matlab
Alejandro Hayes
3D. Es ideal para representar sucesiones. Realiza grficos en escalera. Realiza un histograma Realiza un histograma polar Realiza un diagrama de dispersin Realiza un diagrama de dispersin en 3D
Tabla 20
Ejemplo 10.4.1 Se disponen de dos funciones a saber f ( x ) = sen 2 x , g ( x ) = 20 sen 4 x y se desea visualizarlas sobre una misma grafica.
x=0:0.01:2*pi; >> f1=sin(2*x); >> f2=20*sin(4*x); >> plotyy(x,f1,x,f2) >> grid on
Figura 41
Ejemplo 10.4.2 Dada la funcin
f ( x ) = e x hacer una grafica discreta con la funcin stem.
2
Pgina 74 de 90
Bases de Matlab
>> stem(x,f) >> help stem Obtuvimos la siguiente salida
Alejandro Hayes
Figura 42
Tabla 21
Ejemplo 11.1 Se desea resolver las siguientes ecuaciones diferenciales
Pgina 75 de 90
Bases de Matlab
d 2 x( t ) dx( t ) + + x( t ) = e t b) dt 2 dt x( 0 ) = 0 , x' ( 0 ) = 0
Alejandro Hayes
dx( t ) + x( t ) = 2 a) dt x( 0 ) = 0
Figura 41
Pgina 76 de 90
Bases de Matlab
Alejandro Hayes
12. Manejo de listas y arreglos de datos. 12.1. Algunos comandos para manejo de datos
Frecuentemente nos encontramos con listas de datos que pueden provenir ya sea de una medicin como del registro de algn instrumento tales como seales meteorolgicas, biomdicas, elctricas entre otras y es comn querer procesar esa informacin ya sea ordenar los datos de mayor a menor, buscar mximos, mnimos, interpolarlos o ajustarlos etc. Matlab cuenta con una gran cantidad de comandos por dems tiles para el procesamiento de vectores y matrices entendiendo listas de datos como estos ltimos. La tabla 7 lista algunos de estos comandos. cumprod(x) Devuelve un vector con los productos de acumulacin de x. Si x es una matriz devuelve un vector que tiene en cada posicin el producto de acumulacin de la columna correspondiente.
cumsum(x)
max(x)
min(x)
mean(x)
median(x)
prod(x)
sum(x)
Devuelve un vector con las sumas de acumulacin de x. Si x es una matriz devuelve un vector que tiene en cada posicin la suma de acumulacin de la columna correspondiente. Devuelve el mximo valor de una lista de elementos. Si x es una matriz devuelve un vector que tiene en cada posicin el mximo valor de la columna correspondiente. Devuelve el mnimo valor de una lista de elementos. Si x es una matriz devuelve un vector que tiene en cada posicin el valor mnimo de la columna correspondiente. Devuelve el promedio de una lista de nmeros. Si x es una matriz devuelve un vector que tiene en cada posicin el valor promedio de la columna correspondiente. Devuelve la mediana de un conjunto de valores. Si x es una matriz devuelve un vector que tiene en cada posicin el valor de la mediana de la columna correspondiente. Devuelve el producto de los elementos de un array. Si x es una matriz devuelve un vector que tiene en cada posicin el producto de los elementos de la columna correspondiente. Devuelve la suma de los elementos de un array. Si x es una matriz devuelve un vector que tiene en cada posicin el producto de los elementos de la columna correspondiente. Ordena en forma creciente los elementos de un array. Si x es una matriz ordena en forma creciente los elementos de cada columna . Ordena una matriz en orden ascendente por la primera columna o la columna indicada . Calcula la desviacin estndar de un array. Si
Pgina 77 de 90
Bases de Matlab
Alejandro Hayes
x es una matriz devuelve un vector que tiene en cada posicin la desviacin estndar de la columna correspondiente. Calcula la varianza de un array. Si x es una matriz devuelve un vector que tiene en cada posicin la varianza de la columna correspondiente. Devuelve la matriz de covarianza de la matriz x. Devuelve los coeficientes de correlacin de x Devuelve un 1 lgico si la matriz esta vaca. Devuelve un 1 lgico si los vectores x e y son iguales. Devuelve un 1 si es un array lgico. Devuelve un 1 si es un array numrico. Devuelve el numero de elementos del vector x Devuelve el tamao de la matriz x. Devuelve el numero de elementos de la matriz x Devuelve el numero de dimensiones de una matriz o vector. Devuelve un 1 si la matriz x es dispersa. Reordena en una matriz grande en cuya diagonal estn las matrices x , y, z etc. Concatena las matrices x e y en la dimensin indicada en dim. Devuelve la diagonal de la matriz x o arma una matriz diagonal con los elementos de x Indica el final de la lista Devuelve los ndices de donde se encuentran los elementos que cumplen la condicin Rota la matriz x de izquierda a derecha Rota la matriz x de arriba hacia abajo Rota la matriz segn la dimensin indicada Concatena matrices en forma horizontal Repite la matriz x en un arreglo de nxm Redimensiona una matrix x a nxm Rota la matrix x 90 grados k veces Devuelve la parte triangular inferior de x Devuelve la parte triangular superior de x
Concatena matrices verticalmente
var(x)
cov(x) corrcoef(x) isempty(x) isequal(x,y) islogical isnumeric(x) length(x) size(x) numel(x) ndims(x) issparse(x) blkdiag(x,y,z ...) cat(dim,x,y) diag(x) end find(condicion) fliplr(x) flipud(x) flipdim(x,dim) horzcat(x,y) repmat(x,n,m) reshape(x,n,m) rot90(x,k) tril(x) triu(x)
vertcat(x)
Tabla 22
Ejemplo 12.1: Se dispone de la siguiente lista de datos proveniente de un registro:
Pgina 78 de 90
Bases de Matlab
Alejandro Hayes
x y
1 1
2 4
3 -4
4 8
5 7
6 11
7 2
8 -3
9 -6
10 9
11 0
12 5
13 7
14 33
15 29
Tabla 23
Se desea: a) Calcular el valor promedio, la desviacin estndar y la varianza de la variable y. b) Ordenar de menor a mayor y de mayor a menor los valores del vector y. c) Determinar los valores mximos y mnimos de y. d) Determinar la suma y el producto de los elementos de y. e) Hallar el valor del primero y ultimo elemento del vector y. f) Encontrar las posiciones de los valores mayores a 3 y de los distintos de cero del vector y. >> y=[1 4 -4 8 7 11 2 -3 -6 9 0 5 7 33 29]; >> v_medio=mean(y) v_medio = 6.8667 >> d_sta=std(y) d_sta = 10.9991 >> vari=var(y) vari = 120.9810 >> or_min_max=sort(y) or_min_max = -6 -4 -3 0 1 2 4 5 7 7 8 9 11 29 33 >> or_max_min=fliplr(or_min_max) or_max_min = 33 29 11 9 8 7 7 5 4 2 1 0 -3 -4 -6 >> v_max=max(y) v_max = 33 >> v_min=min(y) v_min = -6 >> suma=sum(y) suma = 103 >> producto=prod(y) producto = 0 >> y(1) ans = 1 >> y(end) ans = 29 >> ind_may3=find(y>3) ind_may3 =
Pgina 79 de 90
Bases de Matlab
2 4 5 6 10 >> no_cero=find(y) no_cero = 1 2 3 4 5 >> 12 13 14 15
Alejandro Hayes
10
12
13
14
15
Estas funciones y algunas otras presentadas en la tabla 7 son extensivas a matrices veamos el ejemplo 7.2 para visualizar mejor los resultados. Ejemplo 12.2 Dada la siguiente matriz A realizaremos aplicaremos una serie de comandos que ilustren los resultados correspondientes.
A= 6 7 8 9 10 0 0 0 0 11 12 13 14 15 0 0 0 0 16 17 18 19 20 0 0 0 0 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 1 2 3 4 5 0 0 0 0
A= 1 6 11 16 21 30 39 48 57 66 75 84 93 2 7 12 17 22 31 40 49 58 67 76 85 94 3 8 13 18 23 32 41 50 59 68 77 86 95 4 9 14 19 24 33 42 51 60 69 78 87 96 5 10 15 20 25 34 43 52 61 70 79 88 97 0 0 0 0 26 35 44 53 62 71 80 89 98 0 0 0 0 0 0 0 0 27 28 36 37 45 46 54 55 63 64 72 73 81 82 90 91 99 100 0 0 0 0 29 38 47 56 65 74 83 92 101
Pgina 80 de 90
Bases de Matlab
102 111 120 129 138 103 112 121 130 139 104 113 122 131 140 105 114 123 132 141 106 115 124 133 142 107 116 125 134 143 108 117 126 135 144 109 118 127 136 145 110 119 128 137 146
Alejandro Hayes
>> flip_lr=fliplr(A) flip_lr = 0 0 0 0 5 4 3 2 1 0 0 0 0 10 9 8 7 6 0 0 0 0 15 14 13 12 11 0 0 0 0 20 19 18 17 16 29 28 27 26 25 24 23 22 21 38 37 36 35 34 33 32 31 30 47 46 45 44 43 42 41 40 39 56 55 54 53 52 51 50 49 48 65 64 63 62 61 60 59 58 57 74 73 72 71 70 69 68 67 66 83 82 81 80 79 78 77 76 75 92 91 90 89 88 87 86 85 84 101 100 99 98 97 96 95 94 93 110 109 108 107 106 105 104 103 102 119 118 117 116 115 114 113 112 111 128 127 126 125 124 123 122 121 120 137 136 135 134 133 132 131 130 129 146 145 144 143 142 141 140 139 138 >> flip_arab=flipud(A) flip_arab = 138 139 140 141 142 143 144 145 129 130 131 132 133 134 135 136 120 121 122 123 124 125 126 127 111 112 113 114 115 116 117 118 102 103 104 105 106 107 108 109 93 94 95 96 97 98 99 100 101 84 85 86 87 88 89 90 91 92 75 76 77 78 79 80 81 82 83 66 67 68 69 70 71 72 73 74 57 58 59 60 61 62 63 64 65 48 49 50 51 52 53 54 55 56 39 40 41 42 43 44 45 46 47 30 31 32 33 34 35 36 37 38 21 22 23 24 25 26 27 28 29 16 17 18 19 20 0 0 0 0 11 12 13 14 15 0 0 0 0 6 7 8 9 10 0 0 0 0 1 2 3 4 5 0 0 0 0
>> medio=mean(A) medio = 63.7222 64.7222 65.7222 66.7222 67.7222 65.7222 66.5000 67.2778 68.0556 >> desvio=std(A) desvio = 44.8760 44.8760 44.8760 44.8760 44.8760 48.8946 49.2117 49.5305 49.8509 >> ordena=sort(A)
Pgina 81 de 90
Bases de Matlab
ordena = 1 2 3 4 5 0 0 0 0 6 7 8 9 10 0 0 0 0 11 12 13 14 15 0 0 0 0 16 17 18 19 20 0 0 0 0 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 >> A(end) ans = 146 >> tu=triu(A) tu = 1 2 3 4 5 0 0 0 0 0 7 8 9 10 0 0 0 0 0 0 13 14 15 0 0 0 0 0 0 0 19 20 0 0 0 0 0 0 0 0 25 26 27 28 29 0 0 0 0 0 35 36 37 38 0 0 0 0 0 0 45 46 47 0 0 0 0 0 0 0 55 56 0 0 0 0 0 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> tl=tril(A) tl = 1 0 0 6 7 0 11 12 13 16 17 18 21 22 23 30 31 32 39 40 41 48 49 50 57 58 59 66 67 68
Alejandro Hayes
0 0 0 19 24 33 42 51 60 69
0 0 0 0 25 34 43 52 61 70
0 0 0 0 0 35 44 53 62 71
0 0 0 0 0 0 45 54 63 72
0 0 0 0 0 0 0 55 64 73
0 0 0 0 0 0 0 0 65 74
Pgina 82 de 90
Bases de Matlab
75 84 93 102 111 120 129 138 76 85 94 103 112 121 130 139 77 78 79 80 81 82 83 86 87 88 89 90 91 92 95 96 97 98 99 100 101 104 105 106 107 108 109 110 113 114 115 116 117 118 119 122 123 124 125 126 127 128 131 132 133 134 135 136 137 140 141 142 143 144 145 146
Alejandro Hayes
>> tamano=size(A) tamano = 18 9 >> R=reshape(A,3,54) R= Columns 1 through 18 1 16 39 66 93 120 6 21 48 75 102 129 11 30 57 84 111 138 Columns 19 through 36 4 19 42 69 96 123 9 24 51 78 105 132 14 33 60 87 114 141 Columns 37 through 54 0 0 45 72 99 126 0 27 54 81 108 135 0 36 63 90 117 144
2 17 40 67 94 121 3 18 41 68 95 122 7 22 49 76 103 130 8 23 50 77 104 131 12 31 58 85 112 139 13 32 59 86 113 140 5 20 43 70 97 124 0 0 44 71 98 125 10 25 52 79 106 133 0 26 53 80 107 134 15 34 61 88 115 142 0 35 62 89 116 143 0 0 0 0 46 73 100 127 0 0 47 74 101 128 28 55 82 109 136 0 29 56 83 110 137 37 64 91 118 145 0 38 65 92 119 146
>> R90=rot90(A) R90 = 0 0 0 0 29 38 47 56 65 74 83 92 101 110 119 128 137 146 0 0 0 0 28 37 46 55 64 73 82 91 100 109 118 127 136 145 0 0 0 0 27 36 45 54 63 72 81 90 99 108 117 126 135 144 0 0 0 0 26 35 44 53 62 71 80 89 98 107 116 125 134 143 5 10 15 20 25 34 43 52 61 70 79 88 97 106 115 124 133 142 4 9 14 19 24 33 42 51 60 69 78 87 96 105 114 123 132 141 3 8 13 18 23 32 41 50 59 68 77 86 95 104 113 122 131 140 2 7 12 17 22 31 40 49 58 67 76 85 94 103 112 121 130 139 1 6 11 16 21 30 39 48 57 66 75 84 93 102 111 120 129 138
Pgina 83 de 90
Bases de Matlab
interp1(x,y,xi,metodo)
Alejandro Hayes
Devuelve un vector con los valores de y interpolados segn los datos del vector xi a partir de los datos de los vectores x e y y con el mtodo indicado por mtodo Devuelve un vector con los valores de z interpolados segn los datos de los vectores xi e yi a partir de los datos de los vectores x e y y z con el mtodo indicado por, mtodo Devuelve un vector con los valores de z interpolados segn los datos de los vectores xi , yi, zi a partir de los datos de los vectores x e y z v con el mtodo indicado por, mtodo Interpolacin multidimensional. Devuelve un vector yi con los datos de x e y interpolados segn un esquema cbico de Hermite. Devuelve un vector que es la interpolacin de los valores de x e y segn xi con un esquema de spline cbicas.
interp2(x,y,z,xi,yi,metodo)
interp3(x,y,z,v,xi,yi,zi ,metodo)
Tabla 24
Ejemplo 12.2.1
>> x=[-1 0 3 5]; >> y=[1 3 4 -2]; >> plot(x,y,'o') >> grid on >> xi=-1:0.1:5; >> yi=interp1(x,y,xi); >> hold on >> plot(xi,yi,'-.r') >> yi=interp1(x,y,xi,'spline'); >> plot(xi,yi,'--k') >> yi=interp1(x,y,xi,'pchip'); >> plot(xi,yi,'-g') >> xlabel('x') >> ylabel('P(x)') >> title('Interpolacin de datos segn distintos mtodos')
Pgina 84 de 90
Bases de Matlab
Interpolacion de datos segun distintos metodos 5
Alejandro Hayes
2 P(x) 1 0 Datos Originales Interpolacion Lineal Interpolacion por Spline Cubica Interpolacion por Hermite Cubica 0 1 2 x 3 4 5 -1 -2 -1
Figura 42
Ejemplo 12.2 Dada la funcin f ( x , y ) = ( x + y ) e ( x mostradas en la tabla 8.
>> xa=-2:0.4:2; >> ya=-2:0.4:2; >> [x y]=meshgrid(xa,ya); >> z=(x+y).*exp(-(x.^2+y.^2)); >> xaa=-2:0.1:2; >> yaa=-2:0.1:2; >> [xi yi]=meshgrid(xaa,yaa); >> zi=interp2(x,y,z,xi,yi,'spline'); >> mesh(x,y,z) >> hold on >> mesh(xi,yi,zi+2)
2
+ y2 )
Pgina 85 de 90
Bases de Matlab
Alejandro Hayes
-1 2 1 0 -1 -2 -2 -1 0 2 1
Figura 43
polyval(p,v)
Pgina 86 de 90
Bases de Matlab
Alejandro Hayes
vector Evala al polinomio p en la matriz A Nos da la descomposicin en fracciones simples del cociente de polinomios cuyo numerador es n y cuyo denominador es d. Nos devuelve un vector con las races del polinomio dado en p. Devuelve los coeficientes del polinomio de grado n que mejor ajusta los datos de los vectores x e y por mnimos cuadrados.
Ejemplo 12.2.2.1.1
Tabla 25
Se ha medido una resistencia no lineal con voltmetro y ampermetro y se obtuvieron los siguientes valores: V I 220 200 175 150 125 110 100 75 50 25 15 10 5 25,96 22,4 18,02 14,1 10,5 8,58 7,40 4,65 2,45 0,8 0,36 0,18 0,06
Tabla 26
Se desea ajustar los datos mediante una recta, y una parbola.
>> i=rnolin(:,1); >> v=rnolin(:,2); >> plot(i,v,'*') >> grid on >> hold on >> p1=polyfit(i,v,1) p1 = 8.2525 23.6281 >> xi=0:0.1:30; >> pp1=polyval(p1,x); >> plot(xi,pp1,'k') >> p2=polyfit(i,v,2) p2 = -0.1942 12.8419 12.2369 >> pp2=polyval(p2,x); >> plot(xi,pp2,'r') >> xlabel('i') >> ylabel('v') >> title('Resistencia no lineal')
Pgina 87 de 90
Bases de Matlab
Resistencia no lineal 300
Alejandro Hayes
250
200
150
100
50
10
15 i
20
25
30
Figura 44
Funcin
y = ae
bx
Transformacin ln y
ln y ln x ln x 1 x
Forma Lineal ln y = b x + ln a
ln y = ln a + b ln x y = a + b ln x y =a+ b x
y = a xb y = a + b ln x y =a+ b x
Tabla 26
Ejemplo 12.2.2.2.1 En el articulo Thermal Conductivity of Polyethylene: The effects of Crystal Size, Density, and Orientation on the Thermal Conductivity (Polymer Eng. And Science, 1972,pp. 204-208) sugiere que la conductividad trmica en funcin del grosor laminar esta dada por:
C( x ) = a + 10 4 b x
Pgina 88 de 90
Bases de Matlab
Alejandro Hayes
x C
240 12
410 14.7
460 14.7
490 15.2
520 15.2
590 15.6
745 16
8300 18.1
>> x=[240 410 460 490 520 590 745 830]; >> C=[12 14.7 14.7 15.2 15.2 15.6 16 18.1]; >> xx=1./x; >> p=polyfit(xx,C,1) p= 1.0e+003 * -1.7079 0.0188
>> plot(x,C,'*') >> xi=240:830; >> yi=1./xi; >> pp=polyval(p,yi); >> hold on >> plot(xi,pp,'k') >> grid on >> xlabel('Espesor') >> ylabel('Conductividad Termica')
Figura 45
Pgina 89 de 90
Bases de Matlab
Alejandro Hayes
13.Referencias:
[1] Mark Austin, and David Chancogne : Engineering Programming C , MATLAB , JAVA.John Wiley & Sons. Inc. 1999. [2] Delores M. Etter: Solucion de Problemas de Ingeniera con Matlab 2da Edicin . Prentice Hall 1998. [3] Cesar Perez: Anlisis Matemtico y lgebra Lineal con Matlab. Ra-Ma 1999. [4] Shoichiro Nakamura: Anlisis Numerico y Visualizacion Grafica con Matlab. Prentice Hall 1999. [5] Juan Carlos Lescarboura: Bases de la Programacion.
Pgina 90 de 90