Source: https://es.scribd.com/doc/20887841/Curso-Completo-Mathlab
Timestamp: 2016-04-30 16:39:19+00:00

Document:
Curso Completo Mathlab
SubirSign inJoinBooksAudiobooksComicsSheet MusicEditors' Picks BooksHand-picked favorites from our editorsEditors' Picks AudiobooksHand-picked favorites from our editorsEditors' Picks ComicsHand-picked favorites from our editorsEditors' Picks Sheet MusicHand-picked favorites from our editorsTop BooksWhat's trending, bestsellers, award-winners & moreTop AudiobooksWhat's trending, bestsellers, award-winners & moreTop ComicsWhat's trending, bestsellers, award-winners & moreTop Sheet MusicWhat's trending, bestsellers, award-winners & moreCategoriesArts & IdeasBiography & MemoirBusiness & LeadershipChildren'sComputers & TechnologyCooking & FoodCrafts & HobbiesFantasyFiction & LiteratureHappiness & Self-HelpHealth & WellnessHistoryHome & GardenHumorLGBTMystery, Thriller & CrimePolitics & EconomyReferenceReligionRomanceScience & NatureScience FictionSociety & CultureSports & AdventureTravelYoung AdultCategoriesArts & IdeasBiography & MemoirBusiness & LeadershipChildren'sComputers & TechnologyCooking & FoodFantasyFiction & LiteratureHappiness & Self-HelpHealth & WellnessHistoryHome & GardenHumorLGBTMystery, Thriller & CrimePolitics & EconomyReferenceReligionRomanceScience & NatureScience FictionSociety & CultureSports & AdventureTravelYoung AdultCategoriesAdaptationsChildren’sCrime & MysteryFictionHumorMangaNonfictionRomanceSciFi, Fantasy & HorrorSuperheroesYoung AdultPublishersArcanaArchie ComicsBOOM! StudiosDynamiteIDW PublishingKingstone ComicsMarvel ComicsSpace Goat ProductionsTop Cow ComicsTop Shelf ProductionsValiant Comics ZenescopeDifficultyBeginnerIntermediateAdvancedMixedInstrumentBrassDrums & PercussionGuitar, Bass, and FrettedPianoStringsVocalWoodwindsGenreClassicalCountryFolkJazz & BluesMovies & MusicalsPop & RockReligious & HolidayStandardsWelcome to Scribd! Start your free trial and access books, documents and more.Find out moreSections1.Introducción1.1.El Programa Matlab1.2.Constitución de Matlab2.2.Tipos de Archivos con los que trabaja Matlab:2.3.Variables en el espacio de trabajo:2.7.Formatos de Exhibición de Números:2.8.Caracteres especiales y Operadores2.9.Operaciones Básicas3.Escalares, Vectores y Matrices3.1.Comandos para el manejo de matrices:3.2.Algunas Matrices Especiales:3.3. Aplicaciones a la resolución de sistemas de ecuaciones lineales3.4. Una aplicación a la Ingeniería3.5. Comentarios adicionales sobre escalares y vectores3.6. Polinomios y vectores4.Funciones Escalares4.1.1.Grafica de funciones escalares dadas en forma explicita4.1.2.Graficas de curvas dadas en coordenadas polares y4.2. Aplicaciones a la Ingeniería5.Introducción a la Programación5.1. Estructuras elementales5.2.Archivos-M Script5.3.Archivos-M de Función11. Números Complejos7.Funciones Matemáticas Reales de varias variables reales o campos
escalares8. Graficas Tridimensionales (3-D)9.Funciones Matemáticas Complejas de variable Compleja9.1 Una aplicación a la ingeniería10. Diferenciación e integración con Matlab10.1.Derivación e integración de funciones escalares y campos
escalares10.2. Campos vectoriales, generalización de los conceptos vistos10.4. Otras funciones para manejo de graficas11. Ecuaciones diferenciales11.1. Ecuaciones diferenciales ordinarias11.2. Ecuaciones diferenciales en derivadas parciales12. Manejo de listas y arreglos de datos12.1. Algunos comandos para manejo de datos12.2. Interpolación y ajuste de datos12.2.1. Interpolación polinómica12.2.2. Ajuste de curvasBases de MatlabCon aplicaciones a las ciencias e ingeniería
Alejandro Hayes
Bases de Matlab
1. Introducción.....................................................................................................................................3 1.1 El programa MATLAB...........................................................................................................................3 1.2 Constitución de MATLAB.......................................................................................................................3 1.3 Simulink..............................................................................................................................................4 2. Primeros pasos con MATLAB...........................................................................................................4 2.1 Conociendo la versión..........................................................................................................................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 búsqueda...............................................................................................................................7 2.6 Diario.................................................................................................................................................8 2.7 Formato de exhibición de números.......................................................................................................8 2.8 Caracteres especiales y operadores......................................................................................................9 2.9 Operaciones básicas...........................................................................................................................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 resolución de sistemas de ecuaciones lineales..............................................................19 3.4 Una aplicación a la ingeniería...............................................................................................................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 ingeniería.................................................................................................................42 5. Introducción a la programación....................................................................................................47 5.1.Estructuras elementales………………………………………………………………………………………………………………..….47 5.2.Archivos-M Script.…………………………………………………………………………..……….………………………...………......49 5.3.Archivos-M de función........................................................................................................................49 6. Números Complejos.......................................................................................................................54 7. Funciones Matemáticas Reales de varias variables reales o campos escalares .........................57 8. Graficas Tridimensionales(2-D)....................................................................................................58 9. Funciones Matemáticas Complejas de Variable Compleja ..........................................................62 9.1. Una Aplicación a la ingeniería............................................................................................................65 10. Diferenciación e integración con Matlab......................................................................................67 10.1. Derivación e integración de funciones escalares y campos escalares...................................................67 10.2. Campos vectoriales, generalización de los conceptos vistos................................................................70 10.3.Una aplicación a la ingeniería............................................................................................................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.Interpolación y ajuste de datos........................................................................................................83 12.2.1.Interpolación Polinómica...............................................................................................................83 12.2.2.Ajuste de curvas...........................................................................................................................86
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
En los últimos años 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 numérico. Aparecen entonces una cantidad importante de programas de calculo simbólico y numérico entre los que se destacan Mathemática, Maple y Matlab entre muchos otros. Matlab que es quien nos ocupa es un sistema general de software para cálculos matemáticos y diversas aplicaciones a la ingeniería. Actualmente se utiliza mucho en Investigación y Análisis en Ingeniería y en la Industria ya que sus aplicaciones comprenden la mayoría de las áreas de ciencia y tecnología. Las ultimas versiones constan de un potente entorno integrado de calculo numérico y simbólico con extensiones para la programación y otros campos específicos de la ingeniería.
1.1.El Programa Matlab
El Nombre Matlab proviene de ‘’ MATrix LABoratory’’ por lo que constituye un programa orientado al calculo con vectores y matrices pero también es posible trabajar con escalares o números complejos considerándolo como un caso particular de matriz. MATLAB es un lenguaje de alto nivel para computación científica. Entre otras cosas integra computación, visualización y programación en un entorno de fácil utilización donde tanto los problemas como las soluciones se expresan en una notación matemática familiar. Entre las utilidades que posee pueden mencionarse: Matemática Computacional , Desarrollo de algoritmos , Modelado y simulación de prototipos, Análisis de datos, Graficación , Animaciones y la Construcción de una interfaz grafica.
1.2.Constitución 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, características para la programación orientada a objetos. Permite crear desde programas pequeños de rápida ejecución 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. También posee herramientas de programación, desarrollo , y manipulación 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 Gráficos: Es el sistema de graficación de Matlab. Incluye una serie de comandos de muy
alto nivel para de visualización de imágenes 2D y 3D , animaciones y presentaciones. También posee comandos de no tan alto nivel que permiten personalizar la presentación de la figura correspondiente. También permite que el usuario pueda construirse una Interfaz Grafica de Usuario (GUI ) en la aplicación de Matlab que Corresponda.
las funciones mas elementales como senos , cosenos etc. a otras mas sofisticadas como las tranformadas de Laplace, FFT y otras.
La librería de Funciones Matemática de Matlab: Es una vasta colección de algoritmos que va desde
La Interface de Aplicación de Programas de Matlab (API): Es una Librería que permite escribir
programas en C y Fortran que interactúen 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 Dinámicos lineales y no Lineales. Permite modelizar un sistema dibujando los correspondientes diagrames en bloques y manipularlos dinámicamente. 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 librerías adicionales de bloques para aplicaciones especificas como Comunicaciones , Procesamiento de Señales , Sistemas de Potencia etc. También cuenta con un programa llamado Real-time Workshop que permite generar un código en C desde tu diagrama en bloques y correrlo en una variedad de sistemas en tiempo real.
2.Primeros Pasos con Matlab
Para introducirnos en el uso de Matlab comenzaremos dando algunos comandos básicos para conocer nuestro entorno de trabajo. Para eso hagamos doble clic en el icono de Matlab y nos aparecerá una ventana de comandos donde debemos comenzar a escribir.
2.1.Conociendo la Versión :
Para conocer la versión 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 »
2.2.Tipos de Archivos con los que trabaja Matlab:
Matlab trabaja con distintos tipos de archivos a saber:
Archivos M: Son archivos de texto que contienen código de Matlab. El usuario puede crearlos usando los
mismos comandos que ingresa por líneas de comandos y otras sentencias que veremos oportunamente. El archivo se guarda con la extensión .m (Por ejemplo nombre_archivo.m) y podemos llamarlo desde la línea de comando y lo ejecutamos.
Archivos MAT: Son archivos que contienen datos binarios que se guardan con extensión .mat y que posteriormente detallaremos.
extensión .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 explicación sobre los tipos de archivos que maneja Matlab fue por demás 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
2.3.Variables en el espacio de trabajo:
Para conocer las variables cargadas en el espacio de trabajo, Matlab cuenta con los respectivos comandos who y whos que producen una lista de las variables en el espacio de trabajo actual. Podemos ver un ejemplo: » a=10; » b=897; » who Your variables are: a b Size 1x1 1x1 Bytes Class 8 double array 8 double array
» 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 tamaño 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: [año , mes , dia , hora , minuto , segundo] Podemos mostrar la hora en formato entero fix(clock) ans = 2003 9 1 13 40 33
2.5.Ruta de Búsqueda :
El comando path nos muestra la ruta de búsqueda 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
C:\MATLABR11\work C:\MATLABR11\toolbox\local
2.6.Diario:
Si deseamos guardar en algún archivo las entradas por líneas de comando el comando diary on guarda todo lo que se introduce por el teclado así como la mayor parte de lo que se envía a la pantalla, en un archivo llamado diary diary off termina la escritura .
2.7.Formatos de Exhibición de Números:
Matlab Cuenta con la posibilidad de definir distintos formatos de exhibición de números la Tabla 1 muestra algunos de ellos: Formato de Exhibición de Números format short (default) Muetra 4 cifras decimales 3.1416 format long Muetra 14 cifras decimales 3.14159265358979 format bank Muetra 2 cifras decimales 3.14 format short e Muetra 4 cifras decimales 1.5225e+008 format long e Muetra 15 cifras decimales 1.606938044258990e+060 format + +,-, Espacio +
Veamos algunos ejemplos: pi ans = 3.1416 » format long » pi ans = 3.14159265358979 » format bank » pi ans = 3.14 » format long e » pi
ans = 3.141592653589793e+000
2.8.Caracteres especiales y Operadores
A continuación damos dos tablas con los operadores mas usuales y de mayor uso en Matlab y a continuación algunos ejemplos.
2.9.Operaciones Básicas
Las operaciones tales como suma resta multiplicación y división se realizan en forma inmediata con Matlab. Veamos algunos ejemplos: Ejemplo 2.1: Efectuaremos algunas operaciones básicas con dos números cualquiera:
» 2+3 ans = 5 » 2-3 ans =
-1 » 2*3 ans = 6 » 2/3 ans = 0.6667
Una de las bondades de Matlab reside en la capacidad para trabajar en distintas plataformas y según la capacidad del hardware y del software de las mismas trabajara con mayor o menor precisión. En general Matlab realiza todas las operaciones con números enteros en forma exacta, independientemente del tamaño que tenga el resultado. Por ejemplo Matlab cuenta con una función que nos permite visualizar el resultado de una operación con un determinado numero de cifras exactas el comando es el siguiente: vpa ‘operación’ numero de cifras exactas Ejemplo 2.2: Supongamos que queremos calcular 55 elevado a la 100 con 5000 cifras exactas.
vpa '55^100' 50000 ans = 108709863248920416095013731486527307045630210519463889299295688391297964565 354754425988396643047321308614644661151788127357805455576542780216087180633 6217559874057769775390625.
Otras funciones que trae Matlab para trabajar con números 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 división 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 máximo valor entre n1 y n2 Halla el mínimo valor entre n1 y n2 Mínimo común múltiplo
gcd(n1,n2)
Máximo común divisor de n1 y n2
Ejemplo 2.3:
Veamos algunos ejemplos de utilización de las funciones de la Tabla 4:
rem(25,11) ans = 3 » sign(-8) ans = -1 » sign(8) ans = 1 » nchoosek(5,3) ans = 10
» max(2,5) ans = 5 » min(2,5) ans = 2
» gcd(2,5) ans = 1 » lcm(2,5) ans =
Matlab cuenta con muchos otros comandos para operaciones básicas acá hemos presentado algunos y queda como deber para el lector indagar sobre otros comandos no explicados en esta sección.
3.Escalares, Vectores y Matrices
Es muy común en Ingeniería que Aparezcan problemas que involucren matrices en su resolución, y siendo que los métodos matriciales para distintos tipos de problemas en Ingeniería y ciencias han proliferado mucho es importante que comencemos el curso explicando el manejo de matrices que tiene Matlab ya que es la base para la implementación de casi cualquier aplicación. El razonamiento será valido para escalares y para vectores ya que un escalar puede verse como una matriz de 1x1 mientras que un vector puede verse como una matriz de 1x n. Sobre el final de esta sección haremos algunos comentarios sobre vectores y escalares como casos particulares de matrices. Matlab cuenta con una serie de comandos para el manejo de matrices algunos de los cuales se indican en la tabla 1.
3.1.Comandos para el manejo de matrices:
Funciones Principales Para Trabajar con Matrices Suma de las matrices A y B Diferencia de las matrices A y B(A menos B) C *M Producto escalar c por la matriz M A*B Producto de las matrices A y B(A por B) A^p Matriz A elevada a la potencia escalar p p^A Escalar elevado a la matriz A expm(A) eA calculada a través de autovalores expm1(A) eA calculada a través de aproximantes de Padé expm2(A) eA calculada a través de series de Taylor expm3(A) eA calculada a través de la condición de la matriz de autovectores logm(A) Logaritmo neperiano de la matriz A sqrtm(A) Raíz cuadrada de la matriz cuadrada A funm(A,´funcion´) Aplica la función a la matriz cuadrada A traspose(A) o A´ Matriz traspuesta de A inv(A) Matriz inversa de la matriz cuadrada A(A-1) det(A) Determinante de la matriz cuadrada rank(A) Rango de la matriz A trace (A) Suma de los elementos de la diagonal svd(A) Da el vector V de los valores singulares de A. Los valores singulares de A son las raíces cuadradas de los autovalores de la matriz simétrica A´A [U,S,V]=svd(A) Da la matriz diagonal S de valores singulares de A(ordenados de mayor a menor), y las matrices U y V tales que A=U*S*V cond(A) Da la condición de la matriz A(cociente entre el mayor y el menor valor singular de A) rcond(A) Reciproco de la condición de la matriz A A+B A–B
norm(A) norm(A) norm(A,inf) norm(A,´fro´) Z=null(A)
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(A´A))) Da una base ortonormal del núcleo de A(Z´Z=I). El numero de columnas de Z es la nulidad de A Da una base ortonormal para el rango de A(Q´Q=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, cumpliéndose que A*V = V*D Da un vector que contiene los autovalores generalizados de las matrices cuadradas A y B son las raíces 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, cumpliéndose 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 transformación 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 difíciles de calcular. Se tiene que eig(A)=eig(balance(A))
Q=orth(A)
subspace(A,B)
rref.(A) eig(A) [V,D]=eig(A)
eig(A,B) [V,D]=eig(A,B)
[AA,BB,Q,Z,V]=qz(A,B)
[T,B]=balance(A)
balance(A)
[V,D] = cdf2rdf(V,D)
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 característico 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)
schur(A) [U,T]= rsf2csf(U,T) [P,H]=hess(A) hess(A) poly(A) poly(V) vander(C)
Veamos algunos ejemplos: Ejemplo 3.1:
⎛1 − 2 5 ⎞ ⎜ ⎟ Se desea ingresar la matriz M = ⎜ 3 8 − 1⎟ y determinar: ⎜9 − 4 6 ⎟ ⎝ ⎠ T −1 −1 a) M b) M si existe. c) Verificar M M = I
e) Tr (M ) f) M , M
d) M h) P (λ )
g) Los Autovalores de M
M=[1 -2 5;3 8 -1;9 -4 6]
M= 1 -2 5
3 9 8 -4 -1 6
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
Determinante_M=det(M) Determinante_M = -322 Traza_M=trace(M) Traza_M = 15 Potencia_2=M^2 Potencia_2 = 40 18 51 -38 62 -74 37 1 85
Potencia_3=M^3
Potencia_3 = 259 213 594 -532 456 -1034 460 34 839
Autovalores_M=eig(M)
Autovalores_M = -2576/701 4622/495 4622/495
+ 9553/14427i - 9553/14427i
Polinomio_Caracteristico_M=poly(M) Polinomio_Caracteristico_M = 1 -15 19 322
Ejemplo 3.2:
3 − 5⎞ ⎛ 1 ⎜ ⎟ Dadas las matrices A = ⎜ 6 − 7 9 ⎟ ⎜ − 5 − 2 − 1⎟ ⎝ ⎠ b) A − B c) A B d) B A
h) A B i) A B j) A + B
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
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
Determinante_B=det(B) Determinante_B = 579 Determinante_M_3=det(M_3) Determinante_M_3 = 82797
Determinante_A*Determinante_B ans = 82797 Determinante_M_2=det(M_2)
Determinante_M_2 = -196 Determinante_A+Determinante_B ans = 722
Ejemplo 3.3:
2 7 5 ⎞ ⎛ 1 ⎜ ⎟ ⎜− 5 6 −8 9 ⎟ . Llamar al elemento a 23 . Visualizar la fila 2 y la columna 2. Dada la matriz A = ⎜ 3 −3 −2 9 ⎟ ⎜ ⎟ ⎜ 10 − 2 6 − 4 ⎟ ⎝ ⎠
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
3.2.Algunas Matrices Especiales:
Matlab cuenta con algunos comandos que crean matrices especificas. Algunos de los mismos se dan en la siguiente tabla: Funciones Especificas Construye una matriz diagonal con los datos de x1,x2,...,xn Genara una matriz identidad de nxn o de nxm respectivamente. Genera una matriz de unos de nxn o nxm respectivamente. Genera una matriz de elementos aleatorios uniformemente distribuidos en el intervalo (0,1) de nxn o nxm elementos Genera una matriz de elementos aleatorios normalmente distribuidos en el intervalo (0,1) de nxn o nxm elementos Genera una matriz de ceros de nxn o nxm respectivamente. Genera una matriz de nxn de los enteros de 1 a n2
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)
3.3. Aplicaciones a la resolución de sistemas de ecuaciones lineales
Una aplicación importante del álgebra de matrices esta en la resolución de sistemas de ecuaciones lineales. Veremos un ejemplo. Ejemplo 3.4:
⎧4 x + 2 y + z = 11 ⎪ Dado el sistema lineal ⎨− 2 x + y + 3 z = 9 . Resolverlo en forma matricial. ⎪x + 3 y − z = 4 ⎩
format rat >> A=[4 2 1;-2 1 3;1 3 -1] A= 4 -2 1 2 1 3 1 3 -1
>> B=[11;9;4] B= 11
9 4 >> A_1=inv(A)
A_1 = 2/9 -1/45 7/45 -1/9 1/9 2/9 -1/9 14/45 -8/45
>> x=A_1*B x= 1 2 3 >>
Es importante aclarar que si bien en el ejemplo y solo con fines didácticos y para relacionar el manejo de Matlab con la teoría conocida de Álgebra Lineal sobre la resolución 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 ingeniería se muestran otras formas de resolver el sistema de ecuaciones.
3.4. Una aplicación a la Ingeniería
Ejemplo 3.5 Se dispone del circuito eléctrico mostrado en la figura y se desea calcular: a) La corriente en cada resistor y la potencia eléctrica disipada. b) La resistencia que ve cada generador de tensión actuando en forma independiente.
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 actúa el generador V1 y el sistema se reduce a:
⎧( 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 ⎩
La resolución con Matlab se muestra a continuación.
>> 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 =
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
3.5. Comentarios adicionales sobre escalares y vectores
De acuerdo a lo visto hasta el momento queda claro que un vector no es otra cosa que un caso particular de matriz que puede ser de una fila (vector fila) como de una columna (vector columna) , pero el concepto de vector para Matlab es mucho mas general ya que toda lista de datos ya sea mediciones, registros, o listas generadas etc. Puede ser tratado como un vector. La tabla 8 lista una serie de funciones para el manejo de vectores.
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 función 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
v1./v2 Ejemplo 3.6
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
>> v2=[-5 -1 -11] v2 = -5 -1 -11
>> 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
3.6. Polinomios y vectores
Tanto en Ingeniería como en ciencias en general es frecuente la aparición de polinomios en diversos tipos de modelos a saber, funciones de transferencia, aproximaciones polinomiales, interpolación, ecuaciones diferenciales etc. Además sabemos que un polinomio queda determinado por sus coeficientes, además hay una relación entre estos y sus raíces. Todo esto hace posible que Matlab disponga de un conjunto de comandos que permitan tratar a los polinomios como vectores y poder efectuar las operaciones usuales entre ellos, es por eso que hemos decidido darle un tratamiento aparte antes de comenzar con las funciones escalares que será tema de la sección 4. La Tabla 9 ilustra las funciones básicas para el manejo de polinomios. conv(p1,p2) deconv(p1,p2) poly(r), poly(A) Nos devuelve un vector con los coeficientes del polinomio producto entre p1 y p2. Nos devuelve dos vectores con los coeficientes del polinomio cociente y del resto respectivamente de dividir p1 por p2. Nos devuelve un vector con los coeficientes del polinomio cuyas raíces son los elementos del vector r. En el caso de que el argumento sea una matriz A de nxn el comando nos devuelve el un vector con los coeficientes del polinomio característico de A Nos devuelve los coeficientes del polinomio derivado de p. Nos devuelve los coeficientes del polinomio integrado de p. El argumento k es la constante de integración, si no ingresamos este valor, Matlab lo considera cero. Evalúa al polinomio p en el o los valores indicados en v que puede ser un escalar o un vector Evalúa al polinomio p en la matriz A Nos da la descomposición en fracciones simples del cociente de polinomios cuyo numerador es n y cuyo denominador es d. Nos devuelve un vector con las raíces del polinomio dado en p.
polyder(p) polyint(p,k), polyint(p)
polyval(p,v) polyvalm(p,A) residue(n,d) roots(p)
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 integración.
d) Hallar las raíces de P y Q. e) Hallar la descomposición en fracciones simples de H ( x ) = Resolución en Matlab
>> P=[0 0 0 0 1 -4 11 -23] P= 0 0 0 0 1 -4 11 -23
P( x ) Q( x )
>> Q=[2 0 -5 1 0 15 1 -8] Q= 2 >> S=P+Q S= 2 0 -5 1 1 11 12 -31 0 -5 1 0 15 1 -8
>> 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
2 -302
-8 -111
-25 184
>> dQ=polyder(Q) dQ = 14 0 >> IP=polyint(P)
IP = Columns 1 through 8 0 0 0 Column 9 0
>> 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
PO = -1.9091 1.3902 + 0.6687i 1.3902 - 0.6687i -0.4374 + 1.2308i -0.4374 - 1.2308i 0.7201 -0.7166
K= []
4.Funciones Escalares
La función como objeto de estudio es conceptualmente muy importante a la hora de trabajar con un software matemático 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 cuestión. Matlab al igual que la mayoría de los paquetes de calculo simbólico 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 raíz 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 hiperbólico de x Calcula el coseno hiperbólico de x Calcula la tangente hiperbólica de x.
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=0:0.01:10; f1=sin(x); f2=cos(x); f3=exp(x);
Lo que muestra el ejemplo 1 es la forma de ingresar funciones en Matlab. Si trabajamos en forma numérica 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'.
Ejemplo 4.2: Definir una función trabajando con la variable definida en forma simbólica.
syms x real f=log(x);
El comando syms indica que la variable x es simbólica 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.
Si queremos evaluar la función en un punto Matlab cuenta con una función 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 expresión simbólica f Reemplaza la variable libre simbólica en s con n Reemplaza o con n en la expresión simbólica f.
Ejemplo 4.3 : Dada la función escalar imagen de 4.
f ( x) = sen x + e − x . Definirla con la variable dada en forma simbólica y calcular la
syms x f=sin(x)+exp(-x); x=4; subs(f) ans = -0.7385 format rat subs(f) ans = -449/608
4.1.Grafica de Funciones en 2D.
Es notoria la calidad y capacidad de graficación que tiene Matlab por lo que corresponde comenzar a aprender los comandos necesarios para graficar distintas curvas y superficies dadas en forma Explicita, Implícita, y Parametrica.
4.1.1.Grafica de funciones escalares dadas en forma explicita
Algunas de las sentencias para graficar son las que se detallan en la siguiente tabla. plot (x, y) Dibuja el conjunto de puntos ( x, y ), donde x e y son vectores fila. plot(y) Grafica los elementos de Y contra sus índices. plot(x,y,s) Idem plot (x, y) pero con las opciones de s. fplot( ‘funcion’, [ xmin,xmax ]) Grafica la función en el intervalo de variación de x dado. fplot(‘funcion’, [ xmax,xmin,ymax,ymin ], s)Grafica la función en el intervalo de variación de x e y dado. Con las opciones de S. fplot([f1,f2,...,fn ]’, [ xmax,xmin,ymax,ymin Grafica las funciones f1,f2,..,fn sobre los mismos ejes en los intervalos de variación de x e y especificados y con las especificaciones de s. ezplot(‘funcion’ , [ xmin,xmax ]) Grafica la función en un intervalo de variación x dado.
Veamos algunos ejemplos en 2D: Ejemplo 4.4:
Deseamos graficar el valor de los elementos de un vector en función de su índice , escribimos lo siguiente.
x=0:0.01:5; plot(x)
Podemos visualizar en la ventana de gráficos la siguiente figura:
5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 0 100 200 300 400 500 600
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 función 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)
-2 0 1 2 3 4 5 6 7 8 9 10
Si queremos ver algunas opciones para la salida del grafico veamos otros ejemplos: Ejemplo 4.6: Idem anterior pero con distintas opciones de visualización.
x=0:0.01:10; f=2*exp(-0.3*x).*cos(8*x+3); plot(x,f,'*'); plot(x,f,'r *'); grid on.
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])
Obtenemos la siguiente figura
Ejemplo 4.8: Idem anterior pero con la opción de escala establecida
fplot('[sin(3*x),cos(2*x+6),sin(x)+cos(2*x)]',[0,10,-4,2])
-4 0 1 2 3 4 5 6 7 8 9 10
Ejemplo 4.9: Graficar la función 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 -20 -10 -8 -6 -4 -2 0 x 2 4 6 8 10
Matlab cuenta con una serie de comandos que se utilizan para trabajar con títulos , etiquetas, mallas y textos, hemos utilizado algunos en los ejemplos anteriores pero daremos a continuación una tabla con los mas comunes. title(‘texto’) xlabel(‘texto’) ylabel(‘texto’) Añade el texto como titulo del grafico en la parte superior del mismo . Sitúa el texto al lado del eje x Sitúa el texto al lado del eje y
zlabel(‘texto’) text(x,y,’texto’) text(x,y,z,’texto’) gtext(‘texto’) grid hold
Sitúa el texto al lado del eje z Sitúa el texto en el punto (x,y) dentro del grafico 2 D Sitúa el texto en el punto (x,y,z) dentro del grafico 3 D Permite situar el texto en un punto elegido con el Mouse. Sitúa rejillas en los ejes. Permite mantener gráficos para superponerlos.
Ilustraremos con algunos ejemplos la utilización 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 +');
V ariable Dependiente
-10 0 1 2 3 4 5 6 V ariable Independiente 7 8 9 10
Sobre la computadora se observa el efecto del hold on para dibujar cada grafica manteniendo la figura anterior. Ejemplo 4.11 Definir la función f ( x) = e
syms x real f=exp(-sin(x.^2+3)); ezplot(f,[-5,5])
− sen ( x 2 + 3)
definiendo la variable en forma simbólica. Graficarla en el intervalo [− 5,5]
ex p(-sin(x 2 + 3))
Matlab cuenta con una serie importante de comandos para la manipulación de gráficos 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. Sitúa los ejes en la escala automática 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. Sitúa el origen en la parte inferior izquierda. Sitúa 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
ejes. Coloca de nuevo las etuquetas, marcas y rejillas
axis(‘on’)
Veamos algunos ejemplos: Ejemplo 4.12: Para el ejemplo 4.11 consideremos las siguientes modificaciones:
x=-5:0.01:5; f=exp(-sin(x.^2+3)); plot(x,f); V=axis V= -5 5 0 3 axis('square')
-2 -5 -4 -3 -2 -1 0 1 2 3 4 5
En muchos casos es importante poder visualizar varios graficas simultáneamente pero no superpuestas y para eso Matlab cuenta con una función 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 )
Ejemplo 4.13: Visualizar simultáneamente las graficas de:
f ( x) = sen 3x , g( x ) = cos 2 x , h( x ) = cos( 2 x + 1 ) , k ( x ) = e cos( 2 x +1 )
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);
1 0.5 0 -0.5 -1 0 5 10
2 0 1 -0.5 -1 0 5 10 0 0 5 10
En múltiples aplicaciones de ingeniería y ciencias se facilita la tarea usando gráficos logarítmicos o semilogaritmicos las funciones que Matlab tiene para definir esto son las que se detallan a continuación: loglog(x,y) semilogx(x,y) semilogy(x,y) Realiza los mismos gráficos que plot(x,y) pero con escala logarítmica. Realiza los mismos gráficos que plot(x,y) pero con escala logarítmica x. Realiza los mismos gráficos que plot(x,y) pero con escala logarítmica y.
Veamos un ejemplo combinando las funciones de grafica logarítmica 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);
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
4.1.2.Graficas parametricas.
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
t=0:0.1:10; x=2*cos(t)-cos(2*t); y=2*sin(t)-sin(2*t); plot(x,y,'r')
Obtenemos las siguiente salida:
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 líneas especificado por S.
Ejemplo 4.16:
a=0:0.01:2*pi; r=sin(2*a).*cos(2*a); polar(a,r)
0.5 60 0.4 0.3
150 0.2 0.1 180
Ejemplo 4.17:
a=0:0.01:2*pi; r=4*(1+cos(a)); polar(a,r)
4.2. Aplicaciones a la Ingeniería
Ejemplo 4.18 Se dispone de dos señales moduladas en amplitud y frecuencia respectivamente, y se desea visualizarlas bajo distintas condiciones.
v AM ( t ) = ( V p + V m cos ω m t ) cos ω p t v FM ( t ) = V p cos( ω p t + g ( t ))
Para la señal de Amplitud Modulada hacemos efectuamos los siguientes gráficos 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('Señal 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('Señal portadora modulada al 50%')
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('Señal 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('Señal portadora sobremodulada')
Señal portadora sin modulacion 3 2 1 v1(t) 0 -1 -2 -3 5 10 t Señal portadora modulada al 100% 10 5 v3(t) 0 -5 0 5 t 10 v4(t) 5 0 -5 -10 0 5 t 10 0 -5 0 5 10 t Señal portadora sobremodulada v2(t) 0 5 Señal portadora modulada al 50%
Para la señal de FM tenemos el guión que se muestra a continuación
>> 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('Señal modulada por una señal 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('Señal modulada por una señal 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('Señal modulada por una señal 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('Señal modulada por una señal modulo') >>
Obtuvimos la siguiente salida:
Señal modulada por una señal cuadratica Señal modulada por una señal cosenoidal 5 5
v2(t) 0 v4(t) 0 5 t 10
5 10 t Señal modulada por una señal exponencial 5
5 10 t Señal modulada por una señal modulo 5
Ejemplo 4.19
A partir de una medición efectuada con voltímetro y amperímetro sobre tres lámparas de 25W, 40W, y 100W respectivamente se guardaron los registros de tensión , 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 función de la tensión y de la potencia como función de la tensión. Si bien en este primer curso no hemos estudiado interpolación con Matlab usaremos para el guión que sigue la función interp1 que efectúa una interpolación de datos 1D, es intención de un curso futuro el tratar las funciones de interpolación y ajuste que usa Matlab así como otras herramientas del calculo estadístico y numérico. El guión utilizado se muestra a continuación 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);
>> 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)') >>
Variacion de la corriente en funcion de la tension en lamparas de 25 40 y 100 W 200 150 I(V) 100 50 0
100 80 P(V) 60 40 20 0 0 50 100 V 150 200 250
Con estos dos ejemplos tratamos de ilustrar la gran aplicación que tiene Matlab en Ingeniería y por supuesto dejar la puerta abierta a un mundo de otras aplicaciones a la ingeniería y a las ciencias.
5.Introducción a la Programación
Hasta ahora hemos visto que todos las instrucciones de Matlab que pueden escribirse y ejecutarse desde la línea de comandos ingresándolos 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 continuación.
5.1. Estructuras elementales
Es posible demostrar que cualquier problema puede resolverse combinando tres estructuras elementales a saber:
Sucesión de sentencias: Esta constituida por un conjunto de sentencias consecutiva, teniendo en
cuenta que cada sentencia puede ser una combinación de otras.
Sentencia 1 Sentencia 2 ................ Sentencia n
Toma de Decisión: Permite tomar una decisión a partir de una o varias condiciones las que según 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 expresión case exp1
Sentenciax case exp2 Sentenciay ............ ............ otherwise Sentencia n end
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
Sentencias de ciclo o iteración: Se utilizan cuando se desea que un conjunto de sentencias
while condicion1 condicion2 … condicionn end Sentencias
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 línea obtenemos lo siguiente:
» funcion
de comandos y
Obtenemos la siguiente salida.
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 función 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 sección. Cabe aclarar que en este primer curso se dan nociones básicas de programación pero es intención de un curso futuro y mas avanzado profundizar sobre este tema y en tópicos tales como noción de algoritmo, estructuras de datos, programación estructurada y otros.
5.3.Archivos-M de Función
Los archivos de función provienen como una extensión de Matlab permitiendo al usuario crear funciones para problemas específicos. Las funciones son como los Scripts, pero con el propósito 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.
Ejemplo 5.3.1:
Supongamos que necesitamos determinar el volumen y la superficie de cilindros de distinto tamaño para lo que necesitamos una función que ingresándole 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
>> cilindro_vol_sup(1,3) ans = 9.42477796076938 >> cilindro_vol_sup(5,8) ans = 6.283185307179587e+002 >>
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
donde le indicamos a la función la dimensión
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
Veamos que obtenemos si vamos a la línea de comandos y le pedimos una matriz de
format rat >> A=llenamatriz(10,10) A= Columns 1 through 5 1/2 2/5 3/10 4/17 5/26 6/37 7/50 8/65 9/82 10/101 2/5 1/2 6/13 2/5 10/29 3/10 14/53 4/17 18/85 5/26 3/10 6/13 1/2 12/25 15/34 2/5 21/58 24/73 3/10 30/109 4/17 5/26 2/5 10/29 12/25 15/34 1/2 20/41 20/41 1/2 6/13 30/61 28/65 35/74 2/5 40/89 36/97 45/106 10/29 2/5
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 continuación.
%*****************************************************************************************% %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,:));
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;
Veamos que obtenemos cuando lo llamamos al programa por línea de comando:
>> A=[1 2 -4 7;9 -6 -8 5;2 -1 -3 7;9 -6 -5 -3]
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 función que no se encuentra como predeterminada por Matlab por ejemplo la función f ( x ) =
la hacemos de la siguiente forma:
%************************************************************************% %Programa que crea una funcion racional% %************************************************************************% function f=func_racional_1(x) f=x./(x.^2+1); Veamos que ocurre si vamos a la línea de comandos y escribimos lo siguiente:
>> 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
Ejemplo 5.3.5:
Como ultimo ejemplo vamos a realizar un algoritmo que permita calcular la raíz aproximada de una ecuación poli nómica mediante la aplicación del método de bisección. Supongamos que deseamos calcular el valor aproximado de 2 con un error menor que 10 −6 para ello consideremos la función 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:');
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
Ahora vamos a la línea 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 función 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;
Recordemos que un numero complejo no es otra cosa que un par ordenado de números reales de la forma z = ( a , b ) y que admiten una notación en forma binómica dada por z = a + ib . La importancia de los números complejos en ingeniería reside en el hecho de que aparecen muy frecuentemente en sistemas oscilatorios, funciones de transferencia, análisis fasorial, etc. Matlab cuenta con una serie de comandos para un buen manejo de estos números. La Tabla 1 muestra las funciones básicas que permiten operar con números 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 prohíbe usarlas como variables por lo que si vamos a operar con
números 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 números 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 números reales y un cero si algún numero tiene parte imaginaria no nula. Corrige ángulos de fase si se pasan de 2 π radianes
abs(z) angle(z) complex(a,b) conj(z) cplxpair(A) imag(z) real(z) isreal(A) unwrap(A)
Ejemplo 6.1 Dados los siguientes números complejos z 1 = −5 + 3i , z 2 = 8 − 2i se pide: a) Calcular sus módulos y argumentos respectivamente. b) Sus partes real e imaginaria. c) Los números complejos conjugados de cada uno de ellos. d) Graficar tanto a los números 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)
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') >>
Hemos obtenido el siguiente grafico:
Mediante la utilización del comando line(x,y) podemos trazar líneas 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)
7.Funciones Matemáticas Reales de varias variables reales o campos escalares.
La manipulación de funciones de varias variables reales es similar a la de funciones de una variable por lo que procedemos a dar un ejemplo: Ejemplo 7.1:
f : R 2 → R / f ( x , y ) = sen( x + y )
g : R 2 → R / g ( x , y ) = e −( x
veamos como se evalúan con Matlab.
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
8. Graficas Tridimensionales (3-D)
La potencialidad de la graficación 3D que posee Matlab permite una excelente visualización de superficies y manipulación de graficas. Algunas de los comandos para la graficación 3D se dan en la siguiente tabla: plot3( x,y,z) Dibuja un conjunto de puntos (x,y,z), donde x,y y z son vectores fila. Pueden ser matrices de la misma dimensión , en ese caso se hace una grafica por cada tripleta de filas y sobre los mismos ejes. Para valores complejos se ignora a la parte imaginaria. Ídem anterior pero con las opciones definidas en S. Combina sobre los mismos ejes, los gráficos definidos para las tripletas (xi,yi,zi,Si). Transforma el campo de definición dado de las variables x e y de la función a representar z=f(x,y) en argumentos matriciales utilizables por el comando Representa el grafico de superficie de la función z=f(x,y) con los colores
plot3( x,y,z,S) plot3(x1,y1,z1,S1,x2,y2,z2,S2....) [x,y] = meshgrid(x,y)
especificados en C. Representa el grafico de superficie de la función 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 función z=f(x,y) realizando un dibujo con sombreado. Representa el grafico de malla de la función z=f(x,y), dibujando las líneas de la rejilla que componen la malla con los colores especificados en C. Representa el grafico de malla de la función z=f(x,y), con el grafico de contorno correspondiente. Representa el grafico de malla de la función z=f(x,y) con una especie de cortina o telón en la parte inferior. Dibuja el grafico de contorno (curvas de nivel) para la matriz z. El numero de líneas de contorno a utilizar se elige automáticamente. Dibuja el grafico de contorno (curvas de nivel ) para la matriz z usando n líneas 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 líneas. 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 representación basada en densidades de colores. Suele denominarse grafico de densidad.
surfl(x,y,z,C) mesh( x ,y,z,c)
meshc( x ,y,z,c) meshz( x ,y,z,c) contour( z)
contour(z,n) contour( x,y,z,n)
contour3(z) contour3(z,n) contour3(x,y,z,n) pcolor(x,y,z)
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π
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)
0 5 2 0 0 -1 -5 -2 1
Ejemplo 8.2: Dado el campo escalar f ( x , y ) =
sen( x 2 + y 2 ) x2 + y2
efectuar una grafica de la superficie en R3
xa=-2*pi:0.05:2*pi; » ya=-2*pi:0.05:2*pi; » [x,y]=meshgrid(xa,ya); » f=sin(x.^2+y.^2)./(x.^2+y.^2); » mesh(x,y,f)
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)
Ejemplo 8.4 : Para la función del ejemplo 8.3 se desea graficar las 20 primeras curvas de nivel .
xa=-2*pi:0.2:2*pi; » ya=-2*pi:0.2:2*pi; » [x,y]=meshgrid(xa,ya); » f=sin(x).*sin(y); » contour(f,20)
9.Funciones Matemáticas Complejas de variable Compleja.
Sabemos de la teoría de la Variable compleja que una función de variable compleja es una transformación del plano xy al plano uv donde u y v son campos escalares de x y de y esto es:
f ( z ) = u ( x, y ) + iv( x, y )
Lo que nos interesa es poder visualizar como se transforma una curva descripta en forma Parametrica por:
γ :⎨
⎧ x = x(t ) ⎩ y = y (t )
con t ∈ D ⊆ R en el plano xy en otra dada por ξ : ⎨
⎧u = u (t ) ⎩v = v(t )
con t ∈ D ⊆ R en el plano uv.
Reemplazando en la expresión de f ( z ) nos queda:
f ( x(t ) + i y (t )) = u ( x(t ), y (t )) + i v( x(t ), y (t )) f (t ) = u (t ) + i v(t )
Ejemplo 9.1: Dada la función 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 región:
R = { ( x , y ) ∈ C / x = 5 ,−10 ≤ y ≤ 10 }
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
Obtenemos el siguiente grafico
100 10 80 60 5 40 20 0 0 -20 -5 -40 -60 -10 0 2 x 4 6 -80 -100 -100 y v
-50 u
El grafico muestra los puntos en los que se transformo la región propuesta.
En muchos casos nos interesa visualizar la superficie correspondiente al modulo y a la fase de la función de variable compleja en cuestión. El siguiente ejemplo ilustra este caso. Ejemplo 9.2 Para la función 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
9.1 Una aplicación a la ingeniería
Ejemplo 9.1.3 Dado el circuito de la figura y sabiendo que se trabaja en un rango de frecuencias entre 0 y 20 khz se pide: a) Graficar el modulo de la impedancia, la resistencia y la reactancia de entrada como función de la pulsación angular, así como la del ángulo de fase . b) Graficar el lugar geométrico en el plano complejo de los valores de la impedancia con la pulsación angular como parámetro.
Los valores de los componentes son: RL=100 Ω , GC=0.02 S, L=1mHy, C=1μF.
>> 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])
>> xlabel(‘R’) >> ylabel(‘X’)
Obtuvimos las siguientes salidas
160 140 120 100 X |z| R 80 60 40 20 0 -20 Impedancia Resistencia Reactancia
Respecto al lugar geométrico de la impedancia se obtuvo el siguiente grafico.
60 X 40 20 0 -20 0
10. Diferenciación e integración con Matlab 10.1.Derivación e integración de funciones escalares y campos escalares.
Matlab cuenta con varios comandos que permiten hallar la derivada e integral tanto en forma simbólica como en forma numérica. La tabla 3 detalla algunas de esas funciones.
diff(f,x) diff(f,x,n) gradient(f) gradient(f,h)
int(f) Int(f,x) Int(f,a,b)
Determina la derivada de f respecto de la variable independiente en funciones de una sola variable siempre y cuando las variables de f estén definidas en forma simbólica. En el caso de que f sea un vector de datos la función 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 numérica. Devuelve una matriz cuyas componentes son las componentes del vector gradiente de f calculadas en forma numérica con un espaciamiento dado por h. Calcula la integral indefinida de f respecto de su variable definida en forma simbólica. Calcula la integral indefinida de f respecto de su variable x definida en forma simbólica. Calcula la integral definida de f entre a y b
int(f,x,a,b)
Calcula la integral definida de f respecto de x entre a y b
Ejemplo 10.1.1 Dada la función 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 función f ( x ) = e − x sen x 2 derivarla numéricamente y graficarla en forma aproximada y a su derivada.
>> 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´’) >>
Se obtiene la siguiente salida
1 0.5 0 -0.5 -1 -10 4 2 0 -2 -4 f´ x 10
Ejemplo 10.1.3 Dada la siguiente función 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)
89/12 >>
Ejemplo 10.1.5 Para la función 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])
Obtuvimos la siguiente figura
1200 1000 800 |grad(f)| 600 400 200 0 5 0 -5 y -4 -2 x 2 4 6
10.2. Campos vectoriales, generalización de los conceptos vistos
Para cerrar esta sección vamos a presentar algunos comandos que permiten trabajar con campos vectoriales, de hecho vimos algo de funciones de variable compleja pero no vistas como campos vectoriales, y en el ejemplo 5.1.5 calculamos el vector gradiente de un campo escalar pero solo graficamos su modulo. Muchas veces se desea visualizar líneas de campo, líneas equipotenciales, así como calcular la matriz Jacobiana de alguna transformación. La tabla 4 lista algunas de los comandos correspondientes. quiver(u,v) quiver3(u,v) compass(x,y) feather(x,y) Muestra los vectores con componentes u y v, es decir permite visualizar las líneas de campo. Muestra los vectores con componentes u y v,w es decir permite visualizar las líneas de campo 3-D. Dibuja vectores con coordenadas x e y que salen del origen. Dibuja vectores cuyas componentes son x e y pero tomando el origen en cada punto x
Ejemplo 10.2.1 Dado el campo vectorial f ( x , y ) = ( e − x cos y , e − x sen y ) deseamos graficar las líneas de campo
>> xa=0:0.1:4; >> ya=0:0.1:10; >> [x y]=meshgrid(xa,ya); >> u=exp(-x).*cos(y);
>> v=exp(-x).*sin(y); >> quiver(u,v) >> grid on
Obtuvimos la siguiente salida
10.3. Una aplicación a la ingeniería integradora
Se desea conocer la distribución de potencial en el siguiente problema de contorno
El problema puede Modelizarse a través de la ecuación de Laplace : ∇ 2 v( x , y ) = 0 debido a que se trata de un problema Bidimensional la ecuación anterior equivale a:
∂ 2 v( x , y ) ∂x 2 + ∂ 2 v( x , y ) ∂y 2 =0
Como se ve del análisis del problema las condiciones de contorno son : v(0,y) =v(1,y)= v(x,1)=0 ; v(x,0)=10 . La resolución del problema lleva a la siguiente solución analítica.
v( x , y ) =
∑ − ( 2n − 1 ) π sh( 2n − 1 )π sh( 2n − 1 )π ( y − 1 ) sen ( 2n − 1 )π x
En el primer curso de Matlab aprendimos a realizar programas propios para aplicaciones especificas. En este hemos realizado un programa que grafica la solución analítica en forma aproximada para n=10. Luego calcula el campo eléctrico recordando que:
E = −∇v( x , y )
Luego el programa grafica las 50 primeras superficies equipotenciales, las líneas de campo y el modulo del campo vectorial E . El código del programa se muestra a continuación.
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')
Luego de ejecutar el programa por líneas de comando se obtiene la siguiente salida
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
Este ejemplo ilustra algunas aplicaciones de las funciones vistas. Matlab cuenta con una infinidad de otras funciones para manejo de gráficos.
10.4. Otras funciones para manejo de graficas
La tabla 20 enuncia algunas de estas funciones y a continuación se dan algunos ejemplos.
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 desviación 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 porción 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
3D. Es ideal para representar sucesiones. Realiza gráficos en escalera. Realiza un histograma Realiza un histograma polar Realiza un diagrama de dispersión Realiza un diagrama de dispersión en 3D
stairs(x) hist(x) rose(x) scatter(x,y) scatter3(x,y)
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
Ejemplo 10.4.2 Dada la función
f ( x ) = e − x hacer una grafica discreta con la función stem.
x=-4:0.2:4; >> f=exp(-x.^2);
>> stem(x,f) >> help stem Obtuvimos la siguiente salida
11. Ecuaciones diferenciales 11.1. Ecuaciones diferenciales ordinarias
Las ecuaciones diferenciales son un tema fundamental en la ingeniería que no puede faltar en ningún curso del estilo del presente. Actualmente la mayor parte de las ecuaciones diferenciales que aparecen en los modelos de ciencias e ingeniería no se resuelven por métodos analíticos sino por algoritmos iterativos que resultan ser muy eficientes a la hora de implementarlos y llevan a soluciones aproximadas muy confiables. Matlab cuenta con comandos para resolver ecuaciones diferenciales en forma simbólica así también como con otros que nos dan una solución aproximada, estos últimos son los mas utilizados aunque no es el objetivo de este curso enseñar los algoritmos de calculo numérico en base a los cuales funcionan estos comandos por lo cual solo explicaremos los comandos para la resolución simbólica de ecuaciones diferenciales y sistemas de ecuaciones diferenciales. La Tabla 6 lista algunos de los comandos para la resolución de ecuaciones diferenciales ordinarias. dsolve(‘eqn’) dsolve(‘eqn1’, ‘eqn2’..) Devuelve la solución de la ecuación diferencial eqn dada en forma simbólica. Devuelve la solución del sistema de ecuaciones diferenciales.
Ejemplo 11.1 Se desea resolver las siguientes ecuaciones diferenciales
⎧ d 2 x( t ) dx( t ) + + x( t ) = e t ⎪ b) ⎨ dt 2 dt ⎪ x( 0 ) = 0 , x' ( 0 ) = 0 ⎩
⎧ dx( t ) + x( t ) = 2 ⎪ a) ⎨ dt ⎪ x( 0 ) = 0 ⎩
x=dsolve('Dx=-x+2','x(0)=0') x= 2-2*exp(-t) x=dsolve('D2x+Dx=-x+exp(t)','x(0)=0,Dx(0)=0','t') x= 1/3*exp(t)-1/3*exp(-1/2*t)*cos(1/2*3^(1/2)*t)-1/3*exp(-1/2*t)*sin(1/2*3^(1/2)*t)*3^(1/2)
Respecto a las ecuaciones diferenciales en derivadas parciales y dejando de lado los algoritmos de calculo numérico Matlab cuenta con un Toolbox llamado Partial Differential Equation Toolbox. Se invoca por línea de comando escribiendo pdetool. Dejamos al lector que lo investigue por su cuenta pero es por demás amigable y muy fácil de utilizar y por otro lada tiene carácter de “caja negra” es decir se ingresan los datos de las ecuaciones y nos devuelve las graficas de la solución aproximada y otra graficas o datos solicitados solicitadas aun desconociendo los métodos empleados en su resolución. La figura 41 muestra la interfaz del usuario de este toolbox.
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 medición como del registro de algún instrumento tales como señales meteorológicas, biomédicas, eléctricas entre otras y es común querer procesar esa información ya sea ordenar los datos de mayor a menor, buscar máximos, mínimos, interpolarlos o ajustarlos etc. Matlab cuenta con una gran cantidad de comandos por demás ú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 acumulación de x. Si x es una matriz devuelve un vector que tiene en cada posición el producto de acumulación de la columna correspondiente.
sort(x) sortrows(x) std(x)
Devuelve un vector con las sumas de acumulación de x. Si x es una matriz devuelve un vector que tiene en cada posición la suma de acumulación de la columna correspondiente. Devuelve el máximo valor de una lista de elementos. Si x es una matriz devuelve un vector que tiene en cada posición el máximo valor de la columna correspondiente. Devuelve el mínimo valor de una lista de elementos. Si x es una matriz devuelve un vector que tiene en cada posición el valor mínimo de la columna correspondiente. Devuelve el promedio de una lista de números. Si x es una matriz devuelve un vector que tiene en cada posición 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 posición 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 posición 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 posición 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 desviación estándar de un array. Si
x es una matriz devuelve un vector que tiene en cada posición la desviación estándar de la columna correspondiente. Calcula la varianza de un array. Si x es una matriz devuelve un vector que tiene en cada posición la varianza de la columna correspondiente. Devuelve la matriz de covarianza de la matriz x. Devuelve los coeficientes de correlación de x Devuelve un 1 lógico si la matriz esta vacía. Devuelve un 1 lógico si los vectores x e y son iguales. Devuelve un 1 si es un array lógico. Devuelve un 1 si es un array numérico. Devuelve el numero de elementos del vector x Devuelve el tamaño 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 están las matrices x , y, z etc. Concatena las matrices x e y en la dimensión 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 condición Rota la matriz x de izquierda a derecha Rota la matriz x de arriba hacia abajo Rota la matriz según la dimensión 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
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)
Ejemplo 12.1: Se dispone de la siguiente lista de datos proveniente de un registro:
Se desea: a) Calcular el valor promedio, la desviación estándar 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 máximos y mínimos 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 =
2 4 5 6 10 >> no_cero=find(y) no_cero = 1 2 3 4 5 >> 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
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
>> 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
146 137 128 119 110
>> 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)
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
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
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
>> 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
12.2. Interpolación y ajuste de datos
Tanto en ingeniería como en distintas ciencias el ajuste e interpolación de datos ha alcanzado un nivel muy importante toda vez que se disponga solo de un conjunto de registros sin tener una expresión analítica de la relación entre los datos. En esta sección presentaremos las funciones que presenta Matlab para realizar interpolación y ajuste así como realizaremos algunos programas para tales fines.
12.2.1. Interpolación polinómica
Matlab cuenta con varias funciones muy útiles para realizar interpolación polinómica. La tabla 8 lista algunas de estas funciones.
interp1(x,y,xi,’metodo’)
Devuelve un vector con los valores de y interpolados según los datos del vector xi a partir de los datos de los vectores x e y y con el método indicado por ‘método’ Devuelve un vector con los valores de z interpolados según los datos de los vectores xi e yi a partir de los datos de los vectores x e y y z con el método indicado por, ‘método’ Devuelve un vector con los valores de z interpolados según los datos de los vectores xi , yi, zi a partir de los datos de los vectores x e y z v con el método indicado por, ‘método’ Interpolación multidimensional. Devuelve un vector yi con los datos de x e y interpolados según un esquema cúbico de Hermite. Devuelve un vector que es la interpolación de los valores de x e y según xi con un esquema de spline cúbicas.
interp2(x,y,z,xi,yi,’metodo’)
interp3(x,y,z,v,xi,yi,zi ,’metodo’)
interpn(xi,...xn,xi1,...xin-1 ,’metodo’) pchip(x,y,xi) spline(x,y,xi)
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('Interpolación de datos según distintos métodos')
Al realizar las graficas obtenemos la siguiente salida:
Interpolacion de datos segun distintos metodos 5
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
Ejemplo 12.2 Dada la función 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)
realizaremos su grafica usando las funciones de interpolación
Obtuvimos los siguientes gráficos
-1 2 1 0 -1 -2 -2 -1 0 2 1
12.2.2. Ajuste de curvas 12.2.2.1. Ajuste de curvas por polinomios
En esta sección recordaremos algunas de las funciones asociadas al manejo de polinomios así como presentaremos otras que incluye Matlab para realizar un ajuste de datos por mínimos cuadrados mediante funciones Polinomicas. En la siguiente sección mostraremos los casos de ajuste por funciones no Polinomicas llevando los datos a la forma adecuada. La tabla 9 lista las funciones de las que se dispone para el manejo de polinomios. conv(p1,p2) deconv(p1,p2) poly(r), poly(A) Nos devuelve un vector con los coeficientes del polinomio producto entre p1 y p2. Nos devuelve dos vectores con los coeficientes del polinomio cociente y del resto respectivamente de dividir p1 por p2. Nos devuelve un vector con los coeficientes del polinomio cuyas raíces son los elementos del vector r. En el caso de que el argumento sea una matriz A de nxn el comando nos devuelve el un vector con los coeficientes del polinomio característico de A Nos devuelve los coeficientes del polinomio derivado de p. Nos devuelve los coeficientes del polinomio integrado de p. El argumento k es la constante de integración, si no ingresamos este valor, Matlab lo considera cero. Evalúa al polinomio p en el o los valores indicados en v que puede ser un escalar o un
polyval(p,v)
vector Evalúa al polinomio p en la matriz A Nos da la descomposición en fracciones simples del cociente de polinomios cuyo numerador es n y cuyo denominador es d. Nos devuelve un vector con las raíces 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 mínimos cuadrados.
polyvalm(p,A) residue(n,d) roots(p) polyfit(x,y,n)
Ejemplo 12.2.2.1.1
Se ha medido una resistencia no lineal con voltímetro y amperímetro 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
Se desea ajustar los datos mediante una recta, y una parábola.
>> 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')
Resistencia no lineal 300
Datos Medidos Ajuste Lineal Ajuste Cuadratico
12.2.2.2. Ajuste de curvas por funciones no Polinomicas
En esta sección solo trataremos aquellas funciones llamadas intrínsecamente lineales esto es aquellas funciones que mediante una transformación conveniente se pueden llevar a la forma y = a x + b . La tabla 9 muestra algunos casos de funciones intrínsecamente lineales y las respectivas transformaciones.
Transformación 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
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 térmica en función del grosor laminar esta dada por:
C( x ) = a + 10 4 b x
a partir de mediciones experimentales se obtuvo la siguiente tabla de valores.
410 14.7
460 14.7
490 15.2
520 15.2
590 15.6
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')
Se obtuvo la siguiente salida:
[1] Mark Austin, and David Chancogne : ’’Engineering Programming C , MATLAB , JAVA’’.John Wiley & Sons. Inc. 1999. [2] Delores M. Etter: “Solucion de Problemas de Ingeniería con Matlab 2da Edición ”. Prentice Hall 1998. [3] Cesar Perez: “ Análisis Matemático y Álgebra Lineal con Matlab”. Ra-Ma 1999. [4] Shoichiro Nakamura: “Análisis Numerico y Visualizacion Grafica con Matlab”. Prentice Hall 1999. [5] Juan Carlos Lescarboura: “Bases de la Programacion”.
Más de este usuarioOpto Electronica - Dispositivos Electronicos - UTN - FRBAOpto Electronica - Dispositivos Electronicos - UTN - FRBAModelo de Giacoletto - Dispositivos Electronicos - UTN - FRBAModelo de Giacoletto - Dispositivos Electronicos - UTN - FRBADiodos Especiales Parte 2 - Dispositivos Electronicos - UTN - FRBADiodos Especiales Parte 2 - Dispositivos Electronicos - UTN - FRBADiodos Especiales Parte 1 - Dispositivos Electronicos -UTN - FRBADiodos Especiales Parte 1 - Dispositivos Electronicos -UTN - FRBAModelizacionModelizacion
Curso Completo Mathlab by Nico2,3K viewsEmbedDownloadCategories: Types, Books - Non-fiction, TravelRead on Scribd mobile: iPhone, iPad and Android.Copyright: Attribution Non-Commercial (BY-NC)Download as PDF, TXT or read online from ScribdFlag for inappropriate contentMore informationShow less
Relatedmathlabmathlabby Milton RhodesCurso Completo de MatlabCurso Completo de Matlabby Gonzalo1959Curso MatlabCurso Matlabby api-3693527comandos-ejemplo-matlabcomandos-ejemplo-matlabby jdvhssControl Con MATLABControl Con MATLABby Juan Manuel Jiménez Covarrubias6539229 Manual Matlab6539229 Manual Matlabby Pedro Cortes Carmona10SIMULINK10SIMULINKby fjvillategaDidactica y MatlabDidactica y Matlabby juan molinaCalculo y Algebra Con MatlabCalculo y Algebra Con Matlabby Jorge Luis Chahuasoncco PapelMLabLOLIMLabLOLIby vairon_1proyecto+matlabIproyecto+matlabIby LightDanCálculo simbólico con Matlab SymsCálculo simbólico con Matlab Symsby Boyan Ivanov BonevSimilar to Curso Completo MathlabmathlabmathlabCurso Completo de MatlabCurso Completo de MatlabCurso MatlabCurso Matlabcomandos-ejemplo-matlabcomandos-ejemplo-matlabControl Con MATLABControl Con MATLAB6539229 Manual Matlab6539229 Manual Matlab10SIMULINK10SIMULINKDidactica y MatlabDidactica y MatlabCalculo y Algebra Con MatlabCalculo y Algebra Con MatlabMLabLOLIMLabLOLIproyecto+matlabIproyecto+matlabICálculo simbólico con Matlab SymsCálculo simbólico con Matlab Syms

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 Resolución 
 resolución 
 resolución 
 resolución