13.07.2015 Views

Funciones Básicas - FI-UAEMex

Funciones Básicas - FI-UAEMex

Funciones Básicas - FI-UAEMex

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Funciones</strong> BásicasMATLAB tiene un gran número de funciones incorporadas.Algunas son funciones intrínsecas, esto es, funciones incorporadas en elpropio código ejecutable del programa. Et Estas funciones sonparticularmente rápidas y eficientes.Existen además funciones definidas en ficheros *.m y *.mex12 que vienencon el propio programa o que han sido aportadas por usuarios del mismo.Estas funciones extienden en gran manera las posibilidades del programaMATLAB dispone también de ficheros *.p, que son los ficheros *.m pre-compilados con la función pcode.Para que MATLAB encuentre una determinada función de usuario elcorrespondiente fichero-M debe estar en el directorio actual o en uno delos directorios del search path.


Características generales de las funciones de MATLABEl concepto de función en MATLAB es semejante al de C y al de otros lenguajes deprogramación, aunque con algunas diferencias importantes. Al igual que en C, unafunción tiene nombre, valor de retorno y argumentos.outputargumentfunction (y,w) = fact(x,z)input argumentfunction name‣ Una función se llama utilizando su nombre en una expresión o utilizándolo como uncomando más.‣ Las funciones se definen en ficheros de texto *.m en la forma que se verá másadelante.‣ Los valores de retorno son el resultado de la función y sustituyen a ésta en laexpresión donde la función aparece‣ Los argumentos de cada función van a continuación del nombre entre paréntesis(y separados por comas si hay más de uno)..‣ En MATLAB las funciones pueden tener valores de retorno matricialesmúltiples; los valores de retorno se recogen entre corchetes, separados porcomas


Características generales de las funciones de MATLAB‣ Una característica de MATLAB es que las funciones que no tienen argumentosno llevan paréntesis‣ Los nombres de las funciones de MATLAB no son palabras reservadas dellenguaje‣ Es posible crear una variable llamada sin o cos, que ocultan las funcionescorrespondientes.‣ Para poder acceder alasfunciones hay que eliminar (clear) las variables delmismo nombre que las ocultan, o bien haber definido id previamente unareferencia a función (functionhandle).‣ MATLAB permite que una función tenga un número de argumentos deentrada y valores de retorno, variables; determinado sólo en tiempo deejecución.


Diversos tipos de funciones en MATLAB1.- <strong>Funciones</strong> matemáticas elementales.2.- <strong>Funciones</strong> especiales.3.- <strong>Funciones</strong> matriciales elementales.4.- <strong>Funciones</strong> matriciales específicas.5. - <strong>Funciones</strong> para la descomposición y/o factorización de matrices.6.- <strong>Funciones</strong> para análisis estadístico de datos.7.- <strong>Funciones</strong> para análisis de polinomios.8.- <strong>Funciones</strong> para integración ió de ecuaciones diferenciales i ordinarias.i9.- Resolución de ecuaciones no-lineales y optimización.10.- Integración numérica.11.- <strong>Funciones</strong> para procesamiento de señal.12.- <strong>Funciones</strong> definidas por el usuario


<strong>Funciones</strong> matemáticas elementalesEstas funciones, comprenden las funciones matemáticas trascendentales y otrasfunciones básicasCuando se aplican a una matriz actúan sobre cada elemento de la matriz como sise tratase de un escalar.Por tanto, se aplican de la misma forma a escalares, vectores y matrices. Algunasde las funciones de este grupo son las siguientes:‣sin(x) seno‣cos(x) coseno‣tan(x)tangente‣asin(x) arco seno‣acos(x) arco coseno‣atan(x)arco tangente (devuelve un ángulo entre -π/2 y +π/2)‣atan2(x) arco tangente (devuelve un ángulo entre -π y +π)‣sinh(x) seno hiperbólico‣cosh(x)coseno hiperbólico‣tanh(x) tangente hiperbólicas en radia anesArgumento


‣asinh(x)arco seno hiperbólico‣acosh(x) arco coseno hiperbólico‣atanh(x)‣log(x)‣log10(x)arco tangente hiperbólicalogaritmo naturallogaritmo decimal‣exp(x)) función exponencial‣sqrt(x)raíz cuadrada‣sign(x) devuelve -1 si 0. Aplicada a un númerocomplejo, devuelve un vector unitario en la misma dirección‣rem(x,y) resto de la división (los argumentos no tienen que ser enteros)‣mod(x,y) similar a rem (Ver diferencias con el Help)‣round(x) redondeo hacia el entero más próximo‣fix(x) redondea hacia el entero más próximo a 0‣floor(x) valor entero más próximo hacia -∞‣ceil(x) valor entero más próximo hacia +∞‣gcd(x)‣lcm(x)‣real(x)‣imag(x)‣abs(x)‣angle(x)máximo común divisormínimo común múltiplopartes realespartes imaginariasvalores absolutosángulos de fase:


<strong>Funciones</strong> que actúan sobre vectoresLas siguientes funciones sólo actúan sobre vectores (no sobre matrices, ni sobreescalares) :‣[xm,im]=max(x) máximo elemento de un vector. Devuelve el valor máximoxm y la posición que ocupa im‣min(x)‣sum(x)‣cumsum(x)‣mean(x)‣std(x)‣prod(x)mínimo elemento de un vector. Devuelve el valor mínimo y laposición que ocupa.suma de los elementos de un vector.devuelve el vector suma acumulativa de los elementos de unvector (cada elemento del resultado es una suma deelementos del original).valor medio de los elementos de un vectordesviación típicaproducto de los elementos de un vector‣cumprod(x) devuelve el vector producto acumulativo de los elementos de unvector‣[y,i]=sort(x) Ordena de menor a mayor los elementos de un vector x.Devuelve el vector ordenado y, y un vector i con las posicionesiniciales en x de los elementos en el vector ordenado y.


‣Blkdiag (a,b,c,d,...)‣diag(v)‣eye(n)Construct block diagonal matrix from input argumentsDiagonal matrices and diagonals of matrixIdentity matrix‣freqspaceFrequency spacing for frequency response‣Ind2sub(A)‣linspacelinspace(a,b,na,b,n)‣logspace‣meshgrid‣ndgrid‣ones‣rand‣randn‣sub2ind‣zerosSubscripts from linear indexGenerate linearly spaced vectorsGenerate logarithmically spaced vectorsGenerate X and Y arrays for 3-D plotsGenerate arrays for N-D functions and interpolationCreate array of all onesUniformly distributed pseudorandom numbersNormally distributed random numbersSingle index from subscriptsCreate array of all zeros


accumarrayarrayfunbsxfuncastcrosscumprodcumsumdotConstruct array with accumulationApply function to each element of arrayApply element-by-element binary operation to two arrays withsingleton expansion enabledCast variable to different data typeVector cross productCumulative productCumulative sumVector dot productidivideInteger divisioni i with rounding optionkronprodsumtriltriuKronecker tensor productProduct of array elementsSum of array elementsLower triangular part of matrixUpper triangular part of matrix


squeezevectorizevertcatRemove singleton dimensions, Ejemplo A=rand(2,1,3); B=squeeze(A)Vectorize expressionConcatenate arrays verticallycompan Companion matrixgalleryhankelhilbinvhilbmagicpascalrosservanderTest matricesHankel matrixHilbert matrixInverse of Hilbert matrixMagic squarePascal matrixMarices especializadasClassic symmetric eigenvalue test problemVandermonde matrix


FUNCIONES MATRICIALES ESPECIALES :‣ Las funciones exp(), sqrt() y log() se aplican elemento a elemento alasmatrices y/o vectores que se les pasan como argumentos.‣ Existen otras funciones similares que tienen también sentido cuando se aplicana una matriz como una única entidad. Estas funciones son las siguientes (sedistinguen porque llevan una "m" adicional en el nombre):‣ expm(A) matriz exponencial si A=XDX', expm(A) = X*diag(exp(diag(D)))*X'‣ sqrtm(A) devuelve una matriz que multiplicada por sí misma da la matriz A‣ logm() es la función recíproca de expm(A)‣ Aunque no pertenece a esta familia de funciones, se puede considerar que eloperador potencia (^) está emparentado con ellas. Así, es posible decir que:A^n está definida si A es cuadrada y n un número real.‣ Si n es entero, el resultado se calcula por multiplicaciones sucesivas. Si n esreal, el resultado se calcula como: A^n=X*D.^n*X' siendo [X,D]=eig(A)


FUNCIONES DE FACTORIZACIÓN Y/O DESCOMPOSICIÓN MATRICIAL‣[L,U] U]=lu(A)‣B = inv(A)descomposición de Crout (A = LU) de una matriz.calcula la inversa de A. Equivale a B=inv(U)*inv(L)‣d = det(A) devuelve el determinante d de la matriz cuadrada A.‣E =rref(A)reducción a forma de escalón (mediante la eliminación de Gausscon pivotamiento por columnas, haciendo ceros también encimade los pivotes) de una matriz rectangular A‣[E,xc][ , ] = rref(A) reducción a forma de escalón con un vector xc que dainformación sobre una posible base del espacio de columnas de A‣U = chol(A)‣c = rcond(A)descomposición de Cholesky de matriz simétrica y positivodefinida.devuelve una estimación del recíproco de la condición numérica dela matriz A basada en la norma-1. Si el resultado es próximo a 1 lamatriz A está bien condicionada; si es próximo a 0 no lo está.‣[X,D] D]=eig(A) valores propios (diagonal de D) y vectores propios (columnas de X)de una matriz cuadrada A.‣[X,D] = eig(A,B) valores propios (diagonal de D) y vectores propios (columnas deX) de dos matrices cuadradas A y B (Ax = λBx).


FUNCIONES DE FACTORIZACIÓN Y/O DESCOMPOSICIÓN MATRICIAL‣[Q,R] R]=qr(A)descomposición QR de una matriz rectangular.‣[Q,R] = qr(A,0) similar a la anterior, pero con Q del mismo tamaño que A, es decir,sin completar una base ortonormal cuando m>n.‣[Q,R,E] RE]=qr(A)factorización QR con pivotamiento por columnas. La matriz E esuna matriz de permutación tal que A*E=Q*R. La matriz E sedetermina de modo que los elementos de abs(diag(R)) sondecrecientes.‣B = null(A) devuelve una base ortonormal del subespacio nulo (kernel, oconjunto de vectores x tales que Ax = 0) de la matriz rectangular A,calculada mediante la descomposición de valores singulares. Lascolumnas de B son ortonormales: B'*B=IB=I.‣B = null(A,'r') devuelve una base del subespaco nulo de A calculada a partir de laforma de escalón reducida. Las columnas de B no sonortonormales y se obtienen alternativamente dando valor cero atodas las variables libres excepto a una a la que se da valor unidad.‣Q = orth(A) las columnas de Q son una base ortonormal del espacio decolumnas de A. El número de columnas de Q es el rango de A.


Lectura y escritura interactiva de variablesUna forma sencilla de leer variables desde teclado yescribir mensajes en lapantalla del PC, utilizando la función input y disp.FUNCIÓN INPUTLa función input permite imprimir un mensaje en la línea de comandos deMATLAB y recuperar como valor de retorno un valor numérico o el resultado deuna expresión tecleada por el usuario.Sintaxis,n = input('Teclee el número de ecuaciones'); “ Da al usuario el mensaje en lacadena de texto y luego espera la entrada de datos desde el teclado”.n = input('Teclee el número de ecuaciones');Otra forma de esta función es la siguiente (obsérvese el parámetro 's'):>> nombre = input('¿Cómo te llamas?','s‘)


FUNCIÓN DISPLa función disp permite imprimir en pantalla un mensaje de texto o el valor de unamatriz, pero sin imprimir su nombre.•Sintaxisdisp(X) muestra la matriz X, sin imprimir el nombreEjemplo>> disp('El programa ha terminado')>> A=rand(4,4);>> disp(A)


Entrada y salida de datosYa se ha visto una forma de realizar la entrada interactiva de datos por medio de lafunción input y de imprimir resultados por medio de la función disp.Sin embargo, MATLAB permite intercambiar datos con otras aplicaciones.IMPORTAR DATOS DE OTRAS APLICACIONESHay varias formas de utilizar los datos de otras aplicaciones –por ejemplo deExcel– a MATLAB. Se pueden utilizar las siguientes formas:1. Se puede utilizar el Copy y Paste para copiar datos de la aplicación original ydepositarlos entre los corchetes de una matriz o vector, en una línea decomandos de MATLAB.Ejemplo:1. >> A=[4.13941637 0.43516229 -14.3809959 -2.2222358922223589 4.160911560.2544432 -15.2615586 -3.22785872 4.30758208 0.26416528 -14.5116303 -2.07436909 2.25581395 0.29069767 -16.3959466 -2.42359637 2.33720930.6627907 -15.6547363 -2.55371351 2.43881602 1.41382517 -9.87890616 -6.84187243 2.50674757 0.75901242 -15.6607725 -3.02085084 2.736183173.61627907 -14.298507 -5.59203684]Archivos del alumno.


IMPORTAR DATOS DE OTRAS APLICACIONES1. Se puede crear un fichero *.m con un editor de textos, con lo cual no existenproblemas de edición.2. Se puede leer un flat file escrito con caracteres ASCII. Un flat file es un ficherocon filas de longitud constante separadas con Intro, , y varios datos (columnas )por fila separados por blancos (espacios).3. MATLAB lee este tipo de archivos con el comando load.Sintaxisload filenameEste comando recupera todas las variables de un archivo determinado, de unaruta completa o ruta relativa parcial de MATLABPATH.Si filename no tiene extensión, load busca <strong>FI</strong>LENAME.mat y si la encuentra, loadtrata el archivo como un archivo binario MAT, “<strong>FI</strong>LENAME.mat”. Si no seencuentra, o si el nombre del archivo tiene una extensión distinta a .mat, elarchivo se considera como un archivo ASCII.


IMPORTAR DATOS DE OTRAS APLICACIONES1. También se puede importar datos desde un archivo del tipo texto es decir conextensión .txt. Para cargar un archivo de este tipo, se ejecutaload datos.txtt t el contenido del flat file se almacena en una matriz conel nombre datos.Por ejemplo, crear un fichero llamado flat.txt txt que contenga las líneas:23.456_56.032_67.8023.749 _-98.906_34.910>>A=load('flat.txt')leerá estos valores y los asignará a la matriz A.


IMPORTAR DATOS DE OTRAS APLICACIONESOtro comando es textread, este permite leer datos de cualquier tipo,siempre y cuando estén en formato de texto.SintaxisA = TEXTREAD('<strong>FI</strong>LENAME')A = TEXTREAD(' ('<strong>FI</strong>LENAME','',N)A = TEXTREAD('('<strong>FI</strong>LENAME','',param,value<strong>FI</strong>LENAME','',param,value, '' , ...)A = TEXTREAD(' ('<strong>FI</strong>LENAME','',N,param,value,, ...)El comandos lee los datos numéricos del archivo de nombre <strong>FI</strong>LENAME. Sielarchivo contiene datos de texto, se produce un error.[A,B,C,, ...] = TEXTREAD(' ('<strong>FI</strong>LENAME','FORMAT')')[A,B,C,, ...] = TEXTREAD(' ('<strong>FI</strong>LENAME','FORMAT',N)[A,B,C,, ...] = TEXTREAD(' ('<strong>FI</strong>LENAME','FORMAT',param,value,, ...)[A,B,C,, ...] = TEXTREAD(' ('<strong>FI</strong>LENAME','FORMAT',N,param,value,, ...)>> Help textread.–


IMPORTAR DATOS DE OTRAS APLICACIONESTambién se pueden leer datos de un fichero con las funciones fopen y freadTambién se pueden leer datos de hojas de cálculo por ejemplo de Excel, para ellose utiliza el comando xlsread. El comando permite obtener datos yel texto de unahoja de calculo de un libor de excelSintaxis[NUMERIC,TXT,RAW]=xlsread(<strong>FI</strong>LE)Lee los datos especificados en el archivo de Excel (<strong>FI</strong>LE). Las celdas con datosnuméricos en <strong>FI</strong>LE se devuelven NUMERIC, las celdas de texto en <strong>FI</strong>LE sedevuelven en TXT, y las celdas sin transformar (no son ni texto ni numericas sedevuelven en RAW.[NUMERIC,TXT,RAW]=XLSREAD(<strong>FI</strong>LE,SHEET,RANGE)Aquí se lee una hoja especifica y un rango especificoFORMAS DE USO DEL COMANDONUMERIC = xlsread(<strong>FI</strong>LE);[NUMERIC,TXT]=xlsread(<strong>FI</strong>LE);[NUMERIC,TXT,RAW]=xlsread(<strong>FI</strong>LE);


IMPORTAR DATOS DE OTRAS APLICACIONESTambién se pueden leer imágenes y almacenarlas en una variable. Elcomando para leer imágenes es imreadSintaxis A = imread(filename,FMTfilename,FMT)La cadena de texto FMT, especifica el formato del archivo, que se identifica por suextensión de archivo estándar. Por ejemplo, "gif“, “bmp”, etc.Para ver una lista de formatos soportados, con sus extensiones de archivo, utilicela función imformats.


ALMACENAMIENTO DE DATOS EN OTRAS APLICACIONESMATLAB permite almacenar datos en archivos con extencion mat, m, txt y xls entreotras.Para el almacenamiento de datos con extensión xls para su uso en Excel, seutiliza el comando xlswrite. El cual graba una matriz X en un archivo de Excel(archivo .xls)Sintaxisxlswrite('filename', M (array), sheet, 'range')


EjemplosEjemplo 1, Escribir un grupo de datos números en una hoja de calculo de Excelxlswrite(‘prueba', (prueba, [12345678910])10])A = xlsread(‘prueba.xls', ‘datosdatos’)A=xlsreadxlsread('prueba xlsread(prueba.xls xls' , 'datos' , 'A1:B10')xlswrite('prueba.xls', A,'datos','e10:f20')xlswrite('prueba xlswrite(prueba.xls xls' , A, 'datos' , 'e10:f20')Ejemplo 2, crear el siguiente arreglo.d = {'Time', 'Temp'; 12 98; 13 99; 14 97};s = xlswrite('tempdata.xls', d, 'Temperatura', 'E1')Añadir una hoja a un libro creadoxlswrite('tempdata.xls', d, 'NewTemp', 'E1')


EXPORTAR DATOS DE TEXTOTambién existen funciones de MATLAB para exportar datos en varios formatoscomunes de ASCII.Por ejemplo, puede utilizar estas funciones para exportar una matriz de MATLABcomo un archivo de texto donde los valores numéricos de las filas y las columnasestén separadas por un espacio. La función que se utiliza depende de la cantidadde datos que desea exportar y su formato.FORMATOS DE ARCHIVO DE DATOS ASCIIExportación de archivos de datos ASCII delimitadosPara exportar un arreglo o una serie de datos como un archivo ASCII delimitado,se utiliza la función de save, especificando la clasificación -ASCII, o la funcióndlmwrite.La función save es fácil de usar, sin embargo, la función dlmwrite proporciona másflexibilidad, que le permite especificar cualquier carácter como delimitador, y sepueden exportar los subconjuntos de un arreglo, especificando un rango de valores.


EJEMPLOUtilizando Función save>> A = [ 1 2 3 4 ; 5 6 7 8 ];>> save my_data.txt A –ASCIIFunción archivo FormatoDe forma predeterminada, save utiliza losespacios como delimitadores, pero sepuede usar tabs en lugar de espacios,especificando la opción -tabstabs.>> save my_data.txt A –ASCII-tabsTambién se puede grabar una cadena de caracteres , sin embargo se almacena elequivalente al código ASCII>> s='holahola'>> save my_data.txt s -ASCIIUtilizando Función dlmwritePara exportar una matriz en formato ASCII, y especificar el delimitador usado en elarchivo, se utiliza la función dlmwrite>> A = [ 1 2 3 4 ; 5 6 7 8 ];>> dlmwrite ('my_data1.txt', A ,';')')FunciónarchivoArregloDelimitador


Utilizando Función diaryPara exportar pequeñas matrices numéricas o celdas de matrices, se puede utilizarla función diary. crea una copia literal de la sesión de MATLAB en un archivo en eldisco (excepto los gráficos).Sintaxis de la función diarydiarydiary('filename')diary offdiary ondiary filenameejemplo>> A = [ 1 2 3 4 ; 5 6 7 8 ];Para exportar esta matriz mediante diary, es necesario ejecutar estos comandos en el prompt deMATLAB.1.- Encender la función diary. Es opcional nombrar el archivo de salida utilizando diary.>> diary datosd.txtd t t2.- Mostrar el contenido del arreglo (matriz) a exportar>> A3.- Desactivar la función diary>> diary off


IMPORTAR DATOS DE TEXTOFUNCIONESdlmreadSintaxisM = dlmread(filename)M = dlmread(filename, delimiter)M = dlmread(filename, delimiter, R, C)M = dlmread(filename, delimiter, range)typeMuestra el contenido del archivoSintaxistype('filename')type filename


Sintaxis de la función savesavesave filenamesave filename contentsave filename optionssave filename content optionssave('filename', 'var1', 'var2', ...)Sintaxis de las funcionesSintaxis de la función dlmwritedlmwrite(filename, M)dlmwrite(filename, M, 'D')dlmwrite(filename, M, 'D', R, C)dlmwrite(filename, M, 'attrib1', value1, 'attrib2', value2, ...)dlmwrite(filename, M, '-append')dlmwrite(filename, M, '-append', attribute-value list)Ejemplo 1 :>> p = rand(1, 10);>> q = ones(10);>>save test.matEjemplo 2>>savefile = 'test.mat';>>p = rand(1, 10);>>q = ones(10);>>save(savefile, 'p', 'q')Ejemplo 3>>save('C:\alumnos\maestria\ejercicios curso\feb10.txt', 'p','q','-ASCII')>>type feb10.txtEjemplo 1 :>>M= rand(4);>> dlmwrite('archivoM.txt', M, 'delimiter', '\t', ...'precision', 6)>> type archivoM.txtEjemplo 2>>dlmwrite('archivoM.txt', M, 'precision', '%.6f', ...'newline', 'pc')>> dlmread archivoM.txtEjemplo 3>> dlmwrite('archivoM.txt', [M*5 M/5], ' ')>> dlmwrite('myfile.txt', rand(3), '-append', ...'roffset', 1, 'delimiter', ' ‘)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!