Email: gpcampomanes@gmail.com Blog:ingenieriahidraulicaunmsmimf.blogspot.com El MATLAB, es un entorno de trabajo para el calculo cientfico. Programado originalmente como Clever Moler a finales de los aos 70, su finalidad inicial era proporcionar una forma sencilla de acceder a libreras LINPACK y EISPACK donde estn implementadas de una forma altamente eficiente de algoritmos; clave del anlisis matricial.
Su primera implementacin se hizo en Fortran que era y aun sigue sindolo, el lenguaje estndar en la implementacin de mtodos numricos.
INTRODUCCION Posteriormente se reimplemento en C, que es como se encuentra en la actualidad. Las aplicaciones de MATLAB, se fueron extendiendo a otras ramas del calculo cientfico y de las ciencias aplicadas en general, dotndose de una gran popularidad en ambientes cientficos (especialmente ingeniera). Dichas extensiones se consiguieron en gran parte mediante la implementacin de toolboxes( libreras escritas en el lenguaje de programacin), propio del MATLAB, y que ampliaban el rango de problemas que podran resolverse.
DEFINICIONES: Es un programa de calculo numrico orientado a matrices. Por tanto, ser ms eficiente si se disean los algoritmos en trminos de matrices y vectores.
MATLAB (abreviatura de Matrix Laboratory, ("laboratorio de matrices") es una herramienta de software matemtico que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programacin propio (lenguaje MATLAB)
La desventaja es que el computador donde la aplicacin tiene que ser utilizada necesita MCR(MATLAB Component Runtime) para que los archivos MATLAB funcionen correctamente. MCR se puede distribuir libremente con los archivos de biblioteca generados por el compilador MATLAB. Contenidos 1) Entorno de MATLAB: En este capitulo se realizara una descripcin de las diversas partes del MATLAB y algunos comandos importantes.
2) Operacin con matrices y vectores: Se describe como se define una matriz o un vector, las operaciones aritmticas y la descripcin de comandos importantes que involucran vectores y matrices.
3) Tipos de datos: Se comenta sobre los tipos de datos que MATLAB maneja y de algunos comandos que trabajan con ellos.
4) Programacin en MATLAB: En este capitulo se describe las nociones bsicas que debe tener un programador en MATLAB, teniendo problemas resueltos.
5) Grficos en MATLAB: Se describe como MATLAB realiza diversos tipos de grficos de funciones: Ecuaciones no lineales, algebra lineal y sistemas de ecuaciones lineales, polinomio e interpolacin, diferenciacin numrica, integracin numrica y soluciones numricas.
1. Entorno de MATLAB: Barra de mens y Herramientas Ventana de directorio actual Ventana de historial de comandos: Sobre la cual empezamos a digitar las ordenes despus del signo >>.
Algunos comandos de importancia:
clc: limpia la informacin de la ventana de comandos. clear: borra las variables usadas en memoria( del espacio de trabajo).
Demo: gua al usuario a ejecutar diversas demostraciones que se eligen en un men. Help: nos permite visualizar caracteres y operaciones especiales que posee el MATLAB. Para conocer la sintaxis de un comando solo tenemos que digitar Help, seguido del comando. Asignacin de variables: Se debe tener en cuenta que cada variable que definimos debe comenzar con una letra del alfabeto. Ejemplo: Operaciones aritmticas en MATLAB: Al igual que la aritmtica, las operaciones de adicin, sustraccin, multiplicacin, divisin, potenciacin y radicacin que se pueden realizar. 2. Operaciones con matrices y vectores: Existen diferentes formas de definir una variable vectorial sin necesidad de explicar entre corchetes todos los miembros separados por comas o espacios en blanco. Variable =[a:b] Define al vector cuyos primero y ultimo elemento son a y respectivamente y los elementos intermedios se diferencian en una unidad Variable =[a:s:b] Define el vector cuyos primeros y ultimo elementos son a y b, y los elementos intermedios se diferencian en la cantidad especifica de incrementos. Variable=linspace(a,b,n) Define el vector cuyos primeros y ultimo elementos son a y b, que tiene en total n elementos uniformemente espaciados entre si. Variable =logspace(a,b,n) Define el vector cuyos primeros y ltimos elementos son los elementos especificados y que tienen en total n elementos en escala logartmica uniformente espaciados entre si. Visualizacin de un elemento de un vector y de una matriz:
x(n) Devuelve el enesimo elemento del vector x x(a:b) Devuelve los elementos del vector x situados entre el a-esimo y el b-esimo, ambos inclusive. x(a:p:b) devuelve los elementos del vector x situados entre el a-esimo y el b-esimo, ambos inclusive, pero separados de p en p unidades. x(b:p:a) devuelve los elementos del vector x situados entre el b-esimo y el a- esimo ambos inclusive separados de p en p unidades empezando por el b-esimo (b>a). Funcin Descripcion ones(m,n) Crea una matriz mxn, todos unos zeros(m,n) crea una matriz mxn, todos ceros eye(m,n) crea una matriz identidad: una matriz de mxn con unos en la diagonal y ceros en los dems elementos A transpose(A) Crea la matriz transpuesta de A(intercambia sus filas por columnas) diag(vect.) Crea una matriz diagonal a partir de un vector. horzcat Concatena matrices horizontalmente eig(A) Calcula los valores y vectores propios de la matriz A rref(A) Devuelve la matriz equivalente o forma canonica de A magic(n) crea una matriz cuadrada de nxn con filas, columnas y diagonales cuyas sumas es la misma. rand(m,n) crea una matriz de mxn en forma aleatoria, donde sus elementos estn distribuidos uniformemente entre 0 y 1. find(A) devuelve los indices de los elementos de la matriz A, que no son ceros, en forma vertical size(A) devuelve el tamao de la matriz trace(A) Computa la suma de los elementos de la diagonal principal inv(A) Devuelve una matriz inversa a la original det(A) Entrega el valor de la determinante de la matriz tril(A) Devuelve la parte triangular inferior de la matriz A. triu(A) Devuelve la parte triangular superior de la matriz A. flipud(A) devuelve la matriz cuyas filas estan colocadas en orden inverso ( de arriba abajo) a las filas de A fliplr(A) Devuelve la matriz cuyas columnas estan colocadas en orden inverso ( de izquierda a derecha) a las A rot90(A) rota 90 grados la matriz A reshape(A,m,n) devuelve la matriz de orden mxn extrada de la matriz a tomando elementos consecutivos de A por columnas. MATRICES ESPECIALES EN MATLAB Comandos Descripcion det(A) Calcula el determinante de la matriz A length(v) Calcula la dimensin del vector v. size(A) Calcula la dimensin de la matriz A. cross(u,v) Calcula el producto vectorial de dos vectores u y v en R3. norm(v,p) Calcula la norma de un vector v. donde puede ser 1,2 o inf. Si p=1 (calcula la suma de los valores absolutos de todos los elementos de v); si p=2 (norma Euclidiana, opcin por defecto); p=inf(calcula el mximo valor absoluto de sus elementos). norm(V,p) Calcula la norma de una matriz A. rank(A) Calcula el rango de la matriz A. Propiedades y comandos de vectores y matrices Concatenacin de matrices: Es el proceso de unir una o mas matrices para crear una nueva. Los smbolos corchetes[ ], sirven para construir matrices y tambin para concatenar.
C= [A B] Concatena horizontalmente las matrices A y B. C=[A;B] Concatena verticalmente las matrices Ay B.
Existen funciones que tambin permiten concatenar.
Funcin Descripcion Cat Concatena matrices con una dimensin especifica horzcat Concatena matrices horizontalmente vertcat Concatena matrices verticalmente repmat(A,m,n) Crea una nueva matriz de copias , m veces verticalmente y n veces horizontalmente blkdiag Crea una nueva matriz de copias , m veces verticalmente y n veces horizontalmente bloque diagonal a partir de matrices existentes, los dems elementos de la nueva matriz son ceros. Operadores lgicos: Matlab, ofrece smbolos para denotar las operaciones lgicas. Los operadores lgicos ofrecen un camino para combinar o negar expresiones relacionales. Para aplicar los siguientes operadores las matrices deben tener dimensiones iguales. Operador Descripcion & Devuelve el valor de 1 en cada posicin , donde los elementos de ambas matrices no son ceros , o para los otros casos I devuelve el valor de 1 en cada posicin , donde los elementos por lo menos de una matriz no es nula, y o para los otros casos. ~ Complementa cada elemento de la matriz de entrada. xor Devuelve el valor de 1, en cada posicin donde los elementos de ambas matrices son diferentes, y 0 para los otros casos. Operadores relacionales: Los operadores relacionales ejecutan comparaciones elemento a elemento entre dos matrices y devuelve una matriz del mismo tamao cuyos elementos son ceros si la correspondiente relacin es cierta. O unos si la correspondiente relacin es falsa. Los operadores relacionales tambin permiten comparar escalares con vectores o matrices, en cuyo caso se compara el escalar con todos los elementos de la matriz. Operadores Descripcin ~ = a~=: establece la condicin de ab(afecta a los nmeros complejos) > a>b: establece la condicin de a mayor que b. ( solo afecta a partes reales) < a<b: establece la condicin de a menor que b. ( para complejos solo afecta a partes reales) >= a>=b: establece la condicin de a mayor o igual que b. <= a<=b: establece la condicin de a menor o igual que b (solo afecta a las partes reales) ab: establece la disyuncin a o b. = = a==b: establece la condicin de a igual que b. (afecta a los nmeros complejos) Tipos de datos: Nmeros enteros
NUMEROS ENTEROS TIPO DE DATO RANGO DE VALORES FUNCION DE CONVERSION Entero con signo de 8 bit -2^7 a 2^7-1 int8 Entero con signo de 16 bit -2^15 a 2^15-1 int16 Entero con signo de 32 bit -2^31 a 2^31-1 int32 Entero con signo de 64 bit -2^63 a 2^31-1 int64 Entero sin signo de 8 bit 0 a 2^8-1 uint8 Entero sin signo de 16 bit 0 a 2^16-1 uint16 Entero sin signo de 32 bit 0 a 2^32-1 uint32 Entero sin signo de 64 bit 0 a 2^32-1 uint64 Nmeros enteros: Matlab representa nmeros decimales en forma simple y doble precisin con una funcin de conversin. a) Doble precisin: Valores mximo y mnimos de doble precisin: Las funciones realmax y realmin retornan los valores mximos y mnimos que pueden representarse con el tipo doubl Creacin de datos de doble precisin: como el tipo de dato numrico por defecto de Matlab es de doble precisin, entonces solo se requiere una simple sentencia de comandos. Conversin a doble precisin: Se puede convertir otros datos numricos, caracteres o cadenas , y datos lgicos a doble precisin usando la funcin Matlab double. Programacin en Matlab:
1. Lectura y escritura de variables : input, disp, fprintf.
Las siguientes funciones permiten leer variables desde el teclado y visualizar mensajes en la pantalla de la computadora.
a. Input: Aparece un mensaje en la pantalla pidiendo un dato. El valor digitado ser asignado a la variable. Si se desea asignar una cadena que debe aadir el argumento s.
b)disp: Permite visualizar en pantalla un mensaje de texto o el valor de una matriz, pero sin imprimir su nombre. Las cadenas de caracteres se consideran un caso especial de errores.
c) fprintf: Permite visualizar un valor numrico o el resultado de la expresin guardada por el usuario. Tiene ventaja que se pueda escoger un formato. Las especificaciones de formato para las variables son:
%s para cadenas de caracteres. %d para variables enteras. %f para variables decimales . %lf para grandes variables decimales.
Estructuras condicionales:
Son instrucciones que permiten controlar un bloque de sentencias segn cumpla o no una condicin.
a. Estructura if: Caso 1.1. Su forma mas simple se escribe as: if condicin sentencias end Caso 1.2. Con dos bloque de sentencias else %opcin por defecto cuando no se cumple la condicin 1, puede ser omitida. Bloque2 de sentencias end Caso 1.3. Con condiciones mltiples ( anidadas) if Condicion1 bloque1 Elseif condicion2 bloque2 Elseif condicion3 bloque3 Else %opcin por defecto cuando no se cumplen ni la condicin 1,ni 2,ni3. Bloque4 End
b. Estructura Swich. ( similar a la instruccin if anidada) Swich expresin case Valor1 Bloque1 Case {valor2,valor3,valor4,.) Bloque2 . Case Valor n Bloquen otherwise Bloque(n+1) End
c. Estructura Try.catchend Controla los errores que se producen durante la ejecucin de un programa. Si el error se produce durante la ejecucin del bloque sentencias1, el control se transfiere al bloque sentencias2. si la ejecucin transcurriera sin errores, sentencias 2 no se ejecuta. Sintaxis: Try sentencias1 Catch end sentencias End.
3. Estructuras repetitivas: Permiten ejecutar mas de una vez un mismo bloque de sentencias. Al igual que las estructuras condicionales, tambin se pueden anidar.
a. Estructura For permite repetir la ejecucin de un bloque de sentencias, un numero definitivo de veces. Si se omite el incremento, se asigna un incremento de 1.
b Estructura While: La repeticin del bloque de sentencias depende si se cumple o no las condiciones. Si se usa cuando no se sabe previamente el numero de veces que se ha repetir el proceso. While ( mientras se cumple la condicin) sentencias End Si se cumple la condicin vuelve a ejecutarse la repeticin.
4 Operadores lgicos:
Operadores Lgicos &(and) Condicion1 Condicion1 Resultado Falsa falsa falsa Falsa VERDADERO falsa VERDADERO Falsa falsa VERDADERO VERDADERO VERDADERO /(Or) Condicion1 Condicion1 Resultado Falsa falsa falsa Falsa VERDADERO VERDADERO VERDADERO Falsa VERDADERO VERDADERO VERDADERO VERDADERO ~(Not) c Estructura break: Termina la ejecucin de un bucle for y/o while mas interno de los que comprende dicha sentencia.
5 Creacin de archivos M: La ejecucin de comandos en la ventana de comandos solo es adecuada si se desea probar un numero pequeo de ideas en forma interactiva donde no se tenga que corregir . Sin embargo, en los casos en que los comandos ocupen mas de unas cuantas lneas es preferible almacenar estas lneas de comandos en archivos de textos. Tiene ventajas usar el propio editor de Matlab llamado medit, que tiene extensin (.m).
Existen dos tipos de archivos *.m:
a. Los archivos de comandos *.m(o scripts): Contienen un conjunto de comandos que se ejecutan sucesivamente cuando se digita el nombre del archivo en la ventana de comandos de Matlab. Cuando se llama a un archivo de comando desde la lnea de comandos se crean variables en el espacio de trabajo que permanecen en la memoria al terminar la ejecucin de dicho archivo. Para crear un archivo m:seleccionar del men File, la opcin new y luego SCRIPT. b. Las funciones: Una funcin es un bloque de instrucciones que realiza una tarea y que devuelve un valor al procedimiento o funcin que la llama. El espacio de trabajo de una funcin es independiente del espacio de trabajo base y del espacio de trabajo de las dems funciones. No puede haber interferencia entre nombres de variables. El comando function permite definir funciones similares a las de Matlab, con su nombre, argumentos y valores de retorno. Los argumentos de entrada son los datos de la funcin. Los argumentos de salida o valores son los resultados. La sintaxis para definir una funcin es: Function[valores de retorno]= nombre_funcion(argumentos de entrada). En caso de que haya mas de un parmetro por de salida , se separan por comas. Si solo hay un valor de retorno no se colocan corchetes.
Variable local: La variable local se declara dentro de una funcin y es reconocida solo por esta. Pertenece al propio espacio de trabajo de la funcin.
Variable global: Son aquellas a las cuales puede acceder una funcin sin haber sido pasadas como argumentos. La variable se debe declarar tanto en el programa principal como en las distintas funciones que deben acceder a su valor. 6. Subfunciones: Los archivos m pueden contener cdigo para mas de una funcin. A la funcin principal se le llama funcin primaria, que es la funcin que invoca el archivo m. Las otras funciones secundarias son llamadas subfunciones.
7. Creacin de referencias a funciones: El tipo de dato: Manipulador de funcin ( Function Handle). Un manipulador de funcin es un valor MATLAB que provee una forma de llamada indirecta a una funcin. Se puede pasar manipuladores de funcin en la llamada a otras funciones para que esta se haga referencia a una funcin especifica de entre varias ( lo que se llama funcin de funciones).
Tambin puede ser utilizado en estructuras de datos para un uso posterior. a. Construccin de un manipulador de una funcin conocida(funciones de la biblioteca de MATLAB): Sintaxis: fhandle=@nombrefuncion
Ejemplo: Crear un manipulador de funcin senoidal de MATLAB y evaluar la funcin referenciada en pi/2; luego, evalu el valor de e1 mediante una nueva referencia de la misma variable manipuladora de funcin.
b. Manipuladores a funciones personalizadas: Consiste en crear un manipulador de una funcin creada por el usuario Sintaxis: fhandle= @(lista de variables) implementacin de funcin Para ejecutar la funcin asociada al manipulador se hace mediante: fhandle(arg1,arg2,argN). Ejemplo: Crear una funcin sqr que calcule el cuadrado de un numero c. Funciones que utilizan manipuladores de funcin: Estas funciones reciben como argumentos de entrada manipuladores a funcin para particularizar sus clculos con la funcin referenciada. Dadas las funciones:
Calcular el valor de:
Sintaxis: q=quad(fhandle,a,b) Nota: la funcin quad, calcula la integral aproximada de la funcin de valores escalares a la que hace fhandle desde a hasta b con error de 1 e-6, usando la cuadratura Simpson adoptiva y recursiva. Grficos en Matlab: 1. Las ventanas de la figura: Todas las graficas realizadas en MATLAB se realizan en ventanas denominadas ventanas de figura. Cada ventana figura tiene asignado un identificador, con lo cual podremos hacer referencia a ella. A este manipulador (handle) de ventana de figura. 2. Creacin de ventanas figura: Las ventanas de figura se crean de 2 maneras: a. Automticamente al invocar alguna funcin de trazado de grafica.
b. Manualmente, mediante la invocacin a la funcin figure. Ejemplo: Obtener en una ventana de figura, el trazado de la funcin f(x) = x^2, para x [-3;3] con paso x=0.5 Ejemplo: teniendo cerradas cualquier ventanas figura, crear una ventana de figura vaca mediante: En este instante, cualquier funcin de trazado se efectuara sobre la ventana de la figura que sean necesarias; asi:
En este instante, cualquier funcin de trazado se efectuara sobre la ventana de figura figure3(ventana de figura actual). Para obtener el manipulador de la actual ventana de figura ( la ultima visualizacin) utilizamos funcin gcf (get current figure). Finalmente, para cerrar una ventana de figura figure n lo hacemos mediante la funcin close(n); el orden no interesa, en caso no exista la ventana close retornara el mensaje de error invalid figure handle Graficas en dos dimensiones en el plano: COMANDOS DESCRIPCION Plot(X,Y) Dibuja el conjunto de puntos (x,y) en un sistema cartesiano Bar(X,Y) Grafico de barras vertical , donde "y" representa las frecuencias y "x" define el intervalo en el eje x. Barh(x,y) Grafico de barras horizontal, donde "y" representa las frecuencias y "x" define el intervalo del eje y. stem(x,y) Grafico de bastones verticales, donde "y" representa las frecuencias y "x"define el intervalo en el eje x. stairs(x,y) Grafica una curva escalada Polar(x,y) Dibuja una curva en coordenadas polares , y=y(x) Pie(x) Realiza el grafico de sectores relativo al vector x. rose(x) Dibuja el histograma angular relativo al vector x. compass(x,y) Dibuja un conjunto de flechas con origen en (0,0) y cuya magnitud y direccin estn determinadas por el modulo de z. (z=x+iy) feather(x,y) Dibuja un conjunto de flechas con origen en el eje x, y cuya magnitud y direccin estn determinados por el modulo de y. fplot("f",[a,b]) grafica la funcin f en el intervalo [a,b]. ezplot("f",[a,b]) grafica la funcin f en el intervalo [a,b], adicionndole el titulo por defecto loglog(x,y) Realiza una grafica cartesiana con escala logartmica en los ejes coordenados. semilogx(x,y) Realiza una grafica cartesiana con escala logartmica en el eje "x" y escala normal en el eje "y". semilogy(x,y) Realiza una grafica cartesiana con escala logartmica en el eje "y" y escala normal en el eje "x". fill(x,y,c) dibuja la regin poligonal cuyos vrtices son los elementos de los vectores columna x, y;el parmetro "c" contiene el color al graficar line: bar: stairs: polar: polar: pie: loglog: fplot: GRAFICAS EN 3 DIMENSIONE S. COMANDOS DESCRIPCION Plot3(x,y,z) Dibuja el conjunto de puntos (x,y,z) en un sistema de tres dimensiones fill3(x,y,z,c) Dibuja una regin poligonal cuyos vrtices son los elementos de los vectores columna x,y,z. el parmetro "c" contiene el color a graficar. meshgrid(x,y) Crea arreglos bidimensionales a partir de los arreglos "x" e "y", para elaborar la grafica de una superficie explicita z=f(x,y). mesh(x,y,z) Grafica una superficie explicita z=f(x,y) con los arreglos x,y e z. meshc(x,y,z) Grafica una superficie explicita z= f(x,y) con los arreglos x,y e z, proyectando las curvas de nivel en el plano xy. meshz(x,y,z) Grafica una superficie explicita z= f(x,y) con los arreglos x,y e z, cerrando la grafica con las fronteras de dominio. surf(x,y,z) Grafica una superficie explicita z= f(x,y) con los arreglos x,y e pintando cada una de las celdas surfc(x,y,z) Grafica una superficie explicita z= f(x,y) con los arreglos x,y e z, proyectando las curvas de nivel en el plano xy. surfl(x,y,z) Grafica una superficie explicita z= f(x,y) con los arreglos x,y e z, considerando una iluminacin en formato bsico. waterfall(x,y,z) grafica una superficie explicita z=f(x,y) en forma de cascada contour(x,y,z) Grafica las curvas de nivel de la superficie explicita z=f(x,y). bar3(x,y) Grafica barras verticales , donde "y" representa las frecuencias y el incremento en "x" define el lado del cuadrado que es la base del paralelepipedo. comet3(x,y,z) grafica con movimiento una curva para mtrica x=x(t), y=y(t), z= z(t). sphere grafica la esfera unitaria usando 20*20 caras cylinder('f') grafica una superficie de revolucin generada por la rotacin de la funcin f=f(t) en el intervalo definido para t. stem3r(x,y,z) grafica puntos de una curva para mtrica x=x(t), y=y(t), z=z(t), representndola con bastones. pie3(x) grafica sectores tridimensionales para la frecuencia de x. ribbon(y,z,c) grafica una superficie explicita z=f(x,y) como cintas tridimensionales , "c" especifica el ancho de la cinta. quiver3(x,y,z,u,v,w,c) grafica los vectores de componentes (u,v,w) en los puntos (x,y,z); "c" indica el tamao de los vectores.
ING. GIOVENE PEREZ CAMPOMANES Email: gpcampomanes@gmail.com Blog:ingenieriahidraulicaunmsmimf.blogspot.com