Matlab1                                        Universidad Nacional   Mayor de San Marcos                FACULTAD DE CIENCIAS                MATEMÁTICAS      Curso de   Perfeccionamiento Docente    MATLAB                                              Autor :                   LUCIO AVILIO MALASQUEZ RUIZ For Evaluation Only. Copyright (c) by Foxit Software Company, 2004 - 2007 Edited by Foxit PDF Editor 2012   Matlab        2  INTRODUCCIÓN      MATLAB  es  un  programa  para  cálculo  científico  y  técnico,  posibilitando  el  cálculo  numérico  y  simbólico  de  forma  rápida  y  precisa,  acompañado  de  características  gráficas con altos recursos de visualización.  Permite análisis, modelado, programación y  calculo  efectivo  de  problemas  de  ingeniería,  ciencias  de  la  salud,  situaciones  empresariales  y  de  finanzas,  procesamiento  de  señales,  procesamiento  de  voz,  sistemas  de telefonía fija/móvil o ADSL y distintos campos de aplicación.    MALTAB  gracias  a  sus  recursos  de  programación  de  alto  nivel  posibilita  una  solución personalizada de los problemas adecuado a las necesidades del usuario.    La potenciabilidad del MATLAB esta basada en el trabajo con arreglos los cuales  posibilitan una gran facilidad de trabajo.    MATLAB  es  abierto  y  extensible,  pues  interactúa  con  información  proveniente   de Excel, C, Fortran, etc.  Entre otras cosas el código usado en el lenguaje de MATLAB  puede ser traducido a C en forma inmediata.    MATLAB  es  compatible  a  diversas  plataformas  permitiendo  así  comodidad  de  trabajo.      MATLAB,  a  través  de  SIMULINK  permite  hacer  modelamiento  y  simulación  mediante  lenguaje  de  diagramas  de  bloques.    Admite  sistemas  en  tiempo  discreto  y  continuo,  sistemas  de  control  y  control  inteligente  y  una  serie  de  posibilidades  de  simulación.    MATLAB, a través de un entorno GUIDE permite una interfaz gráfica visual para  trabajos con mejores acabados de presentación y objetos visuales con lo cual la  potencia  se combina con las facilidades visuales para resolver diverso tipo de problemas.    Lic.      E-mail:       LUCIO AVILIO MALASQUEZ RUIZ 
[email protected]   Matlab        3  CAP 1.  ENTORNO DE MATLAB    1.   ENTRAR EN MATLAB    Si aparece el icono de MATLAB como acceso directo en la pantalla inicial (escritorio)     es suficiente pulsar DOBLE CLICK sobre el ratón. En otro caso, será necesario buscarlo  a partir del menú de inicio.    Una  vez  iniciado  MATLAB,  nos  encontramos  con  la  pantalla  de  la  figura,  donde  se  observan  los  diferentes  menús  y  ventanas.    El trabajo  inicial  se  realiza  en la  ventana  de  comandos “Command Window”.        2.   AMBIENTE MATLAB    EL ÁREA DE TRABAJO de MatLab esta básicamente constituida por:    [Command Window]: Ventana de Comandos  -  Área  en  la  cual  son  digitadas  las  instrucciones  para  el  MatLab  y  exhibidos  sus  resultados.  -  Indicador del sistema o prompt ‘>>’ indica estado de espera de entrada de datos.  -  Las teclas   y   repiten los comandos digitados anteriormente.  [Workspace]: Espacio de trabajo  -  Área  de  memoria  de  trabajo  del  Matlab,  en  la  cual  se  hallan  almacenadas  todas  las  variables definidas interactivamente.    Matlab        4  -  Las  variables  se  visualizan  en  esta  ventana  y  si  desea  visualizar  su  contenido  basta  pulsar doble click sobre la variable deseada.    [Current Directory]: Directorio actual  -  Área  en  la  cual  es  exhibida  la  lista  de  los  archivos  y  directorios  contenidos  en  el  directorio actual.    [Command History]: Historia de Comandos  -  Área  en  la  cual  se  hallan  almacenadas  todas  las  instrucciones  ejecutadas  en  el  MatLab.    EL ESCRITORIO del Matlab también contiene:    LA BARRA DEL MENÚ PRINCIPAL        Esta  barra  interactúa  según  se  encuentre  en  una  ventana  o  en  otra,  por  ejemplo  si  actualmente esta en la ventana [Workspace], la barra del menú principal se vería así        LA BARRA DE HERRAMIENTAS        Esta barra contiene    o  [New M-file] Crea nuevo M-file.  o  [Open] Abre archivo.  o  [Cut] Recorta datos.  o  [Copy] Copia datos.  o  [Paste] Pega datos.  o  [Undo] Deshace operación.  o  [Redo] Rehace operación.  o  [Simulink] Abre modelo de simulación.  o  [Guide] Abre editor de interfaz gráfica.  o  [Help] Abre el navegador de ayuda.          Matlab        5  o  Browse de Current Directory        EL BOTON DE INICIO DEL MATLAB    El  botón  Inicio  del  Matlab  provee  facil  acceso  a  las  herramientas,  demos  y  documentación  para  todos  los  productos  de  MathWorks.  Usando  el  atajo  Alt+S  puedes  también acceder al botón de Inicio.            Matlab        6  3.   MENÚS POP-UP EN EL MATLAB    Menú [File]: Manipulación de archivos.    Menú [Edit]: Edición.        Menú [Debug]: Depuración                    Menú [View]: Configuración de la visualización  Configura la visualización de las ventanas de [Workspace] y [Current Directory]    Si actualmente está en [Workspace]   el menú [View] se vería así:  Si actualmente está en [Current Directory]  el menú [View] se vería así:          Matlab        7  Menú [Desktop]: Configuración del escritorio    Para volver al escritorio por defecto se debe pulsar la opción   [Desktop] – [Desktop Layout] – [Default]      Menú [Window]: Ventanas.           Menú [Help]: Ayuda.            Matlab        8  EJERCICIOS DESARROLLADOS    ENTORNO DE MATLAB  1.  Listar los archivos del directorio actual.    >> dir  .                   fb555.m          jose.zip            ..                  fbef.asv           mefloli.asv         L1.M              fbef.m              mefloli.m           L2.M              fbef22222.asv  meflolimejor.m      LOLI              fbef22222.m    metnum              LOLI.asv        fbefmejor.m    metnum2             MATLAB      fbf.m               monografias3.doc    Ondaseno.mdl      integ2.m    sbef111.m           algo.m             integ3.m          timestwo.asv        e.m                 integ4.m          timestwo.m          fb.m                integc2.m       vsfunc.m            fb333.m          integc3.m           fb444.m          integc4.m             2.  Listar el path actual.  >> cd  C:\MATLAB7\work    3.  Listar los directorios de búsqueda.  >> path      MATLABPATH    C:\MATLAB7\toolbox\matlab\general    C:\MATLAB7\toolbox\matlab\ops    C:\MATLAB7\toolbox\matlab\lang    C:\MATLAB7\toolbox\matlab\elmat    C:\MATLAB7\toolbox\matlab\elfun    C:\MATLAB7\toolbox\matlab\specfun    C:\MATLAB7\toolbox\matlab\matfun    …    4.  Crear en la carpeta C:\MATLAB7 la subcarpeta GATO.  Como estamos por defecto en C:\MATLAB7\WORK, retrocedemos un nivel, con:  >> cd ..  Ahora estamos en C:\MATLAB7, y creamos la subcarpeta GATO  >> mkdir gato    5.  Cambiar el path de trabajo a GATO.  >> cd c:\matlab7\gato    6.  Copiar los archivos de extensión txt de C:\MATLAB7 a la carpeta GATO.  >> copyfile('C:\Matlab7\*.txt')    Matlab        9  >> dir  .            ..           license.txt    7.  Copiar el archivo license.txt asignando el nombre borrar.txt  >> copyfile('license.txt', 'borrar.txt')    8.  Borrar todos los archivos que comiencen con b y tengan extensión txt.  >> delete  b*.txt      EJERCICIOS PROPUESTOS    1.  ¿Qué muestra la ventana  ?.     2.  Listar (sin cambiar de path) el directorio raíz de la unidad C.    3.  Crear en la carpeta C:\, la subcarpeta COLOR.    4.  Cambiar el path de trabajo a COLOR.    5.  Copiar todos los archivos de C:\MATLAB7\TOOLBOX\MATLAB\ELFUN\JA, a la  carpeta COLOR.    6.  Duplicar los archivos de la carpeta COLOR que comiencen con m y tengan extensión  m asignando a los duplicados la letra inicial p y la extensión p.    7.  Borrar todos los archivos que comiencen con m y tengan extensión m.    Matlab        10    CAP 2.  MANEJO DE ARREGLOS    1.  TIPOS DE DATOS EN MATLAB    MATLAB  trabaja  habitualmente  con  valores  matriciales,  de  ahí  que  su  definición  y  manejo sean fundamentales.  En MATLAB existen una serie de tipos de datos los cuales  están basados en la estructura de matrices.        DATOS NÚMERICOS    COMPLEJOS DE DOBLE PRECISIÓN  El más común tipo de datos en MATLAB es los complejos de doble precisión, los cuales  contienen  la  parte  real  y  la  parte  imaginaria.    Su  uso  es  completamente  natural  en  en  Matlab.    En  estos  datos  la  unidad  imaginaria  es  manejada  como  i  o  j,  la  que  es  transformada por el Matlab a la notación i.    EJEMPLO  Digitar en la ventana de comandos:  >> u=2+3i  u =     2.0000 + 3.0000i  >> v=2-3j  v =     2.0000 - 3.0000i    OTROS TIPOS DE DATOS NUMÉRICOS  MATLAB  también  soporta  otros  tipos  numéricos  de  datos.  Estos  son:  DATOS  DE  SIMPLE  PRECISIÓN  DE  PUNTO  FLOTANTE,  ENTEROS  DE  8-,  16-  y  32-  BIT  con  SIGNO  o  SIN  SIGNO,  estos  tipos  de  datos  también  son  manejados  como  números  complejos.         DATOS LÓGICOS  Los  datos  tipo  lógico  representado  por  Verdadero  y  Falso  son  manejados  con  los  números 1 y 0 respectivamente.    EJEMPLO  Digitar en la ventana de comandos:  >> 7 * 10 > 40   ans =       1  >> P = (5 * 7 ~= 35)  P =       0        DATOS TIPO CARÁCTER Y CADENAS  Las cadenas son arreglos de datos tipo carácter.  A diferencia del C, Matlab no necesita el  carácter nulo para terminar una cadena.    EJEMPLO    Matlab        11  Digitar en la ventana de comandos:  >> mg='El minino es de color blanco'  mg =  El minino es de color blanco  >> m='Debes estudiar matemática'  m =  Debes estudiar matemática    NOTA  Matlab no requiere ningún tipo de comando para declarar variables.  Sencillamente crea  la variable mediante asignación directa de su valor.  Así si asigna a la variable un número  será variable numérica, si le asigna una cadena será variable alfanumérica.      DATOS TIPO FECHAS Y DE TIEMPO  Datos tipo cadena y numéricos reconocidos con formatos de fechas y horas de acuerdo a  los formatos establecidos.      DATOS TIPO ESTRUCTURAS  Parecidos a los de C, contiene los nombres de los campos que son de nombre dinámico.      DATOS TIPO ARREGLO DE CELLS  Contiene diferente tipo de datos y controles permite conversión automática.      DATOS TIPO FUNCIONES HANDLES  Permite acceso a datos y funciones complementa el trabajo de programación arientada a  objetos con gran facilidad.      DATOS TIPO MATLAB CLASES  Permite la creación de tu propio tipo de datos proveyéndoles clases y trabajo orientado a  objetos.      DATOS TIPO JAVA CLASES  Datos  tipo Java  classes  que  permite  la  interfaz  de  programación Java  y  que  es  aceptado  por Matlab.    2.   VECTORES Y MATRICES EN MATLAB    Los  vectores  se  pueden introducir  separando  sus  componentes  por espacios en  blanco  o  por  comas.  Para  definir  una  matriz  en  MATLAB,  basta  con  introducir  entre  corchetes  todos sus vectores fila separados por punto y coma.     VECTORES    Su sintaxis es la siguiente:  vector=[a, b, c, d, . . . m]   Define  un  vector  fila,  cuyos  elementos  son  los  valores a, b, c, d,.m.  vector=[a; b; c; d; . . . m]  Define un vector columna, cuyos elementos son los  valores a, b, c, d, .m.    En  resumen,  las  comas  separan  elementos  de  un  vector  (en  vez  de  comas  también  se  pueden usar espacios en blanco), mientras que el punto y coma separa las filas.        Matlab        12  Veamos algunos ejemplos:  >> a=[1, 2, 3, 4]        % vector fila  a =       1     2     3     4    >> a=[1 2 3 4];    >> b=[4; 2; -3; 4]         % vector columna  b =       4       2      -3       4    >> u=0:5  u =       0     1     2     3     4    5  >> v=0:2:10  v =       0     2     4     6     8    10    >> d=u+v    % suma de vectores  d =       0     3     6     9    12    15    >> c=a+1     % caso especial  c =       2     3     4     5      >> m=7*a     % escalar por un vector  m =       7     14     21     28    EL MANEJO A TRAVÉS DEL OPERADOR “:”  variable=primer_elemento:último_elemento  Define  el  vector  cuyos  primer  y  último elemento son los especificados, y los elementos intermedios se diferencian en una  unidad.  variable=primer_elemento:incremento:último_elemento  Define  el  vector  cuyos  primer  y  último  elemento  son  los  especificados,  y  los  elementos  intermedios  se  diferencian en la cantidad especificada por el incremento.    GENERACIÓN DE VECTORES POR linspace y logspace  variable=linspace(primer_elemento,último_elemento,n)  Define  el  vector  cuyos  primer  y  último  elemento  son  los  especificados,  y  que  tiene  en  total  n  elementos  uniformemente espaciados.  >> v=linspace(0,4,11)  v =           0    0.4000    0.8000    1.2000    1.6000    2.0000    2.4000    2.8000    3.2000    3.6000    4.0000  variable=logspace(primer_elemento,último_elemento,n)  Define  el  vector  cuyos primer y último elemento son los especificados, y que tiene en total n elementos en  escala logarítmica uniformemente espaciados entre sí.  >> v=logspace(0,4,5)  v =             1          10         100        1000       10000    ORDENAMIENTO    : Permite la generación de sucesiones de números tipo progresiones aritméticas y por  ende genera datos ordenados en forma decreciente o creciente.  >> u=4:2:20  u =         4     6     8    10    12    14    16    18    20    sort.  Permite el ordenamiento de datos.    Matlab        13  >> V=[6 7 2 8 9]  V =       6     7     2     8     9  >> W=sort(V)  W =       2     6     7     8     9    MÁXIMO Y MÍNIMO DE UN CONJUNTO DE DATOS  >> max(V)  ans =       9    >> min(V)  ans =       2    MATRICES    Para  generar  matrices  tenemos  que  introducir  vectores  fila  de  la  misma  cantidad  de  componentes, fila por fila.  Se usa punto y coma para separar las filas.  MATLAB indica  un error cuando las filas tienen diferente número de elementos.     Generemos las siguientes matrices de 3 filas y 4 columnas    1 2 3 4 5 6 7 8 9 10 11 12 A      (    ( =     (    ( ¸   ¸ ,  0 2 1 4 5 0 1 0 2 0 3 7 B      (    ( =     (    ( ¸   ¸     Introducimos en la ventana de comandos  >> A=[1 2 3 4;5 6 7 8;9 10 11 12]  A =       1     2     3     4       5     6     7     8       9    10    11   12  >> B=[0  2  1  4              5  0  1  0              2  0  3  7]  B =       0     2     1     4       5     0     1     0       2     0     3     7    Operaciones de suma de matrices y producto de una matriz por un escalar  >> S=A+B   % suma de matrices  S =       1     4     4     8      10     6     8     8      11    10    14    19    >> CE=10+B  % caso especial  CE =      10    12    11    14      15    10    11    10      12    10    13    17  >>% prod. de un escalar por una matriz  >> EP=2*B    EP =       0     4     2     8      10     0     2     0       4     0     6    14        Matlab        14  Más operaciones clásicas:  >> C=A'             % matriz traspuesta  C =       1     5     9       2     6    10       3     7    11       4     8    12    >> %producto de matrices  >> P=A*C     P =      30    70   110      70   174   278     110   278   446  >> E=[1 2;3 4]  E =       1     2       3     4    >> E^3   %potencia matricial=E*E*E  ans =      37    54      81   118      3.  OPERACIONES A ELEMENTO    Existen en MATLAB dos tipos de operaciones aritméticas:  Las operaciones aritméticas  matriciales, que se rigen por las reglas del álgebra lineal, y las operaciones aritméticas a  elemento, que se realizan elemento a elemento.    Símbolo  Operación  Símbolo  Operación  +   Suma de escalares, vectores o matrices  *   Producto matricial  ^   Potenciación matricial  /   Cociente matricial, B/A=B*inv(A)  \   Cociente matricial, A\B=inv(A)*B  -   Resta de escalares, vectores o matrices  .*   Producto elemental  .^   Potenciación elemental A.^B ÷ ajk ^ bjk  ./   Cociente elemental A./B ÷ ajk / bjk  .\   Cociente elemental A.\B ÷ bjk / ajk    Veamos algunos ejemplos de operaciones a elemento:    >> E=[1 2;3 4], F=[2 4;8 16]  E =       1     2       3     4  F =       2     4       8    16    >>%operación de potencia a elemento  >> P=E.^3     P =       1     8      27    64            Matlab        15  >> GP=E.*F  %operación de producto a elemento  GP =       2     8      24    64    >> GD=E./F  %operación de división a elemento  GD =      0.5000    0.5000      0.3750    0.2500    >> x=1:5; x.^x  %operación de potencia variable a elemento  ans =       1     4     27      256        3125    >> y=[1 2;3 2]; y.^y  %operación de potencia variable a elemento  ans =       1     4      27     4      4.   VECTORES Y MATRICES BLOQUES     Tabla 1  SELECCIÓN DE LOS ELEMENTOS DE UN VECTOR “V”  Se hace de acuerdo a la siguiente sintaxis:  V(n)     Devuelve el n-ésimo elemento del vector V.  V([n,m,p])   Devuelve los elementos del vector V situados en las posiciones n-ésima, m- ésima y p-ésima.  V(n:m)     Devuelve los elementos del vector V situados entre el n-ésimo y el m- ésimo, ambos inclusive.  V(n:p:m)   Devuelve  los  elementos  del  vector  V  situados  entre  el  n-ésimo  y  el  m- ésimo, ambos inclusive pero separados de p en p unidades.    Sea el vector  >> V=[6 7 2 8 9];    Para obtener su tercera componente  >> V(3)  ans =       2  Para obtener su 1ra, 4ta y última componente  >> V([1, 4, 5])  ans =       6     8     9    Tabla 2  SELECCIÓN DE LOS ELEMENTOS DE UNA MATRIZ “A”  Se hace de acuerdo a la siguiente sintaxis:  A(m,n)     Devuelve el elemento (m,n) de la matriz A (fila m y columna n).  A([m, n],[p, q])  Devuelve  la  submatriz  de  A  formada  por  la  intersección  de  las  filas  n- ésima y m-ésima y las columnas p-ésima y q-ésima.    Matlab        16  A(n,:)    Devuelve la fila n-ésima de la matriz A.  A(:,p)    Devuelve la columna p-ésima de la matriz A.  A(:)   Devuelve un vector columna cuyos elementos son las columnas de A situadas  por orden.  A(:,:)     Devuelve toda la matriz A.    Sea la matriz  >> A=[1:4; 5:8; 9:12]  A =       1     2     3     4       5     6     7     8       9    10    11    12    Para obtener el elemento de la 2da fila y  la 3ra col.  >> A(2,3)  ans =       7  Para obtener la primera fila  >> A(1,:)  ans =       1     2     3     4  Para obtener la tercera columna  >> A(:,3)  ans =       3       7      11   Para obtener la submatriz formada por la  1ra y 2da columna  >> A(:,1:2)  ans =       1     2       5     6       9    10    Para  obtener  la  matriz  aumentada  añadiendo a la matriz A su tercera columna  >> AD=[A A(:,3)]  AD =       1     2     3     4     3       5     6     7     8     7       9    10    11    12    11  Para  obtener  todos  sus  elementos  de  la  matriz A como un único vector   >> vect=A(:)  vect =       1       5       9       2       6      10       3       7      11       4       8      12    Extraer  la submatriz indicada de la matriz B.      3  6  10  12        2  16  30  31    B =    4  -2  3  96        5  32  96  97        2  1  3  4      >> B=[3,6,10,12;2,16,30,31;4,-2,3,96;5,32,96,97;2,1,3,4];  >> M=B(2:4,2:3)  M =    Matlab        17      16    30      -2     3      32    96      5.  MATRICES ESPECIALES    Tipos especiales de matrices  Función  Operación  Función   Operación  tril(A)  Parte triangular inferior de la  matriz A  eye(n)  Crea la matriz identidad de nxn  zeros(n) Crea la matriz nula de nxn  ones(n)  Crea la matriz de unos de nxn  rand(n)   Crea una matriz aleatoria  uniforme de nxn  randn(n) Crea una matriz aleatoria normal  de nxn   diag(A)  Extraer la diagonal de la matriz A  diag(A,k)Extraer  la  k-ésima  diagonal  de  la  matriz A.  k  =  0    es  la  diagonal  principal,       k  >  0  es  encima  de  la  diagonal  principal  y  k  <  0    es  debajo  de  la  diagonal principal.  triu(A)   Parte triangular superior de la  matriz A  eye(m,n)   Idem orden mxn  zeros(m,n)   Idem de orden mxn  ones(m,n)   Idem de orden mxn  rand(m,n)   Idem de orden mxn  randn(m,n)   Idem de orden mxn   diag(v)   Matriz diagonal con los  elementos de v  diag(v,k)    Matriz  diagonal  con  los  elementos  de  v  en  la  k-ésima  diagonal      EJEMPLOS  MATRIZ  COMANDO  SALIDA  NULA  >> zeros(2)  >> zeros(2,3)    UNOS   >> ones(2)  >> ones(2,3)    IDENTIDAD  >> I=eye(3)  I =       1     0     0       0     1     0       0     0     1  ALEATORIA  >> rand(3)  ans =      0.2028    0.2722    0.7468      0.1987    0.1988    0.4451      0.6038    0.0153    0.9318  DIAGONAL  >> A=[1:4; 5:8; 9:12]  A =       1     2     3     4       5     6     7     8       9    10    11    12  >> D=diag(A)  D =       1       6      11  DIAGONAL  >> I=diag(2:4)  I =    Matlab        18       2     0     0       0     3     0       0     0     4  LA MATRIZ  IDENTIDAD  GENERADA CON LA  DIAGONAL  >> I=diag(ones(3,1))     I =       1     0     0       0     1     0       0     0     1    MÁS MATRICES ESPECIALES:          magic       matriz Mágica.  M = magic(n) retorna una matriz de nxn construida con enteros del 1.. n 2   con  igual  suma  en  las  filas,  columnas,  diagonal  principal  y  diagonal  secundaria.     >> magic(3)  ans =       8     1     6       3     5     7       4     9     2    >> magic(4)  ans =      16     2     3    13       5    11    10     8       9     7     6    12       4    14    15     1         pascal       matriz de Pascal.  M=pascal(N)  es  la  matriz  de  orden  N,  simétrica  y  definida  positiva,  con  elementos  enteros,  construidos  como  el  triángulo  de  Pascal.    Su  matriz  inversa tiene elementos enteros.    >> pascal(2)  ans =       1     1       1     2    >> pascal(3)  ans =       1     1     1       1     2     3       1     3     6          vander      matriz de Vandermonde.  A = vander(v) matriz cuyas columnas son potencias del vector v, dado por  A(i,j) = v(i)^(n-j) .      Matlab        19  >> vander([2 4 1])  ans =        4     2     1      16     4     1       1     1     1  >>%tambien  >> vander([2;4;1])  ans =       4     2     1      16     4     1       1     1     1  >> vander([2 4 5 3 6])    ans =              16           8           4           2           1           256          64          16        4           1           625         125          25       5           1            81          27           9          3           1          1296         216        36        6           1              hilb         matriz de Hilbert.  H  =  hilb(n)  matriz  de  orden  n.  Es  una  matriz  pobremente  condicionada,  sus elementos son  1 H(i,j)= i j 1 +   ÷ .      invhilb      matriz Inversa de Hilbert.    >> hilb(3)  ans =      1.0000    0.5000    0.3333      0.5000    0.3333    0.2500      0.3333    0.2500    0.2000  >> invhilb(4)  ans =            16        -120         240        -140          -120        1200       -2700        1680           240       -2700        6480       -4200          -140        1680       -4200        2800      MÁS OPERACIONES CON MATRICES    Función  Operación  Función   Operación  A’   Matriz transpuesta de A  inv(A)   Matriz  inversa  de  la  matriz  cuadrada A  det(A)   Determinante de la matriz  cuadrada A  trace(A)  Suma  de  los  elementos  de  la  diagonal de A    sum(v)  Suma de los elementos del  vector v      prod(v)  Producto  de  los  elementos  del  vector v    transpose(A) Matriz transpuesta de A  rank(A)   Rango de la matriz A    length(v)   Devuelve la longitud del vector v    size(A)   Devuelve  el  orden  (tamaño)  de  la  matriz  A,  es  decir  el  numero  de  filas y numero de columnas.  sum(A)   Suma  de  los  elementos  de  la  matriz  A  en  cada  columna.   sum(A,2)  suma  de  los  elementos  de la matriz A en cada fila.  prod(A)   Producto  de  los  elementos  de  la  matriz  A  en  cada  columna.   prod(A,2)  producto  de  los    Matlab        20      cumsum(v)   Suma  acumulada  de  los  elementos del vector v    elementos de la matriz A en cada  fila.   cumsum(A)  Suma acum.  de los elementos  de  la  matriz  A  en  cada  columna.  cumsum(A,2)  suma  acum.  de  los  elem. de la matriz A en cada fila.           Matlab        21  EJERCICIOS DESARROLLADOS  MANEJANDO MATRICES    1.  Genere los vectores:  a)  u  vector ordenado de números pares desde 4 a 20.  b)  v  vector ordenado de 12 múltiplos de 3 comenzando de 6.  c)  w vector en orden inverso desde 12 hasta 4 usando la función linspace.  2.  Ingrese  las  matrices  2   1 3 4 6 0.4 7.1 0 A   ÷    (    ( =   t    (    ( ¸   ¸   y  B  =  matriz  aleatoria  de  3x3.  Construya  C  a  partir de A y B: C = [A  A ; A.^3  B]    3.  ¿Qué dimensiones tiene C?  ¿Cuál es la diferencia entre size y length?    4.  Extraer los siguientes elementos de las matrices formadas:  a) Última fila de A.  b) La submatriz formada por las dos columnas centrales de C.  c) La submatriz formada por las columnas 3ra, 5ta y 6ta de C.  d) Extraer una submatriz de 2x2 que comience del elemento C(2,2) de C.      5.  Crear A = matriz mágica de 3x3 y el vector columna b = [-13;1;4.2].  a) ¿Qué acción hace?  >> b(1) = [ ]  b) ¿Qué acción hace? >> A(:)'   c) ¿Qué acción hace?  >> A(2)  d) ¿Qué acción hace? >> A(1) = [ ]    6.  Luego de realizar los comandos, ¿Qué información tiene E?  >> M = 'MATHTYPE'; N='QUESTION';  >> M = M(2:5);N = N(2:5);  >> E = [M' N']'    7.  Extraer la diagonal y antidiagonal de la matriz A = [2,3,-7; 2,1,-1; 1,0.1,1].    8.  Extraer los elementos de la parte triangular superior de A.    9.  Crear la matriz mágica de M de 5x5 y usar la función del Matlab para hallar el valor  de la suma de los elementos de la diagonal.          Matlab        22  DESARROLLO    1.  Genere los vectores:    d)  u  vector ordenado de números pares desde 4 a 20.  e)  v  vector ordenado de 12 múltiplos de 3 comenzando de 6.  f)  w vector en orden inverso desde 12 hasta 4 usando la función linspace.    a)   u   vector ordenado de números pares desde 4 a 20.   >> u=[4:2:20]  u =         4     6     8    10    12    14    16    18    20  b) v vector ordenado de 12 múltiplos de 3 comenzando de 6.   >> v=(6:3:39)  v =    6     9    12    15    18    21    24    27    30    33    36    39  c)  w vector en orden inverso desde 12 hasta 4 usando la función linspace.   >> w=linspace(12,4,9)  w =        12    11    10     9     8     7     6     5     4    2.  Ingrese  las  matrices  2   1 3 4 6 0.4 7.1 0 A   ÷    (    ( =   t    (    ( ¸   ¸   y  B  =  matriz  aleatoria  de  3x3.  Construya  C  a  partir de A y B: C = [A  A ; A.^3  B]    >> A=[2 -1 3;4 pi 6;0.4 7.1 0]  A =      2.0000   -1.0000    3.0000      4.0000    3.1416    6.0000      0.4000    7.1000         0  >> B=rand(3)  B =      0.9501    0.4860    0.4565      0.2311    0.8913    0.0185      0.6068    0.7621    0.8214  >> C=[A A;A.^3 B]  C =      2.0000   -1.0000      3.0000     2.0000   -1.0000    3.0000      4.0000    3.1416      6.0000      4.0000    3.1416    6.0000      0.4000    7.1000           0        0.4000    7.1000         0      8.0000   -1.0000     27.0000      0.9501    0.4860    0.4565     64.0000   31.0063    216.0000      0.2311    0.8913    0.0185      0.0640  357.9110         0      0.6068    0.7621    0.8214      3.  ¿Qué dimensiones tiene C?  ¿Cuál es la diferencia entre size y length?  ¡DIMENSIONES DE C!    Matlab        23  >> size(C)  ans =       6     6    DIFERENCIA ENTRE SIZE Y LENGTH  length devuelve  la longitud del vector, y en caso de matrices  length devuelve el mayor  valor de la dimensión (es decir el mayor valor entre #filas y ·#columnas) de la matriz.  >> length(C)  ans =       6   Y  size    devuelve  la  dimensión  o  tamaño  de  la  matriz,  es  decir  el  número  de  filas  y   columnas. C tiene 6 columnas y 6 filas.  >> size(C)  ans =       6     6    4.  Extraer los siguientes elementos de las matrices formadas:  a) Última fila de A.  b) La submatriz formada por las dos columnas centrales de C.  c) La submatriz formada por las columnas 3ra, 5ta y 6ta de C.  d) Extraer una submatriz de 2x2 que comience del elemento C(2,2) de C.  a) Última fila de A.  >> A(3,:)  ans =      0.4000    7.1000         0  b) La submatriz formada por las dos columnas centrales de C.  >> C(:,3:4)  ans =      3.0000      2.0000      6.0000      4.0000           0        0.4000     27.0000      0.9501    216.0000      0.2311           0           0.6068  c) La submatriz formada por las columnas 3ra, 5ta y 6ta de C.  >> M=C(:,[3 5 6])  M =      3.0000     -1.0000    3.0000      6.0000         3.1416    6.0000           0      7.1000         0     27.0000      0.4860    0.4565    216.0000      0.8913    0.0185           0      0.7621    0.8214  d) Extraer una submatriz de 2x2 que comience del elemento C(2,2) de C.  >> L=C(2:3,2:3)  L =      3.1416    6.0000      7.1000         0        Matlab        24  5.  Crear A = matriz mágica de 3x3 y el vector columna b = [-13;1;4.2].  a) ¿Qué acción hace?  >> b(1) = [ ]  b) ¿Qué acción hace? >> A(:)'   c) ¿Qué acción hace?  >> A(2)  d) ¿Qué acción hace? >> A(1) = [ ]    >> A=magic(3)  A =       8     1     6       3     5     7       4     9     2  >> b = [-13;1;4.2]  b =    -13.0000      1.0000      4.2000  a)  ¿Qué acción hace? >> b(1) = [ ]  Elimina el primer elemento de la matriz B.    >>  b(1) = [ ]  B =      1.0000      4.2000  b)  ¿Qué acción hace? >> A(:)'     Me devuelve todos los elementos de la matriz A como una sola fila, por orden  consecutiva de cada columna.    >> A(:)'  ans =       8     3     4     1     5     9     6     7     2  c) ¿Qué acción hace? >> A(2)   Me devuelve el segundo componente de la Matriz A.  >> A(2)  ans =       3  d) ¿Qué acción hace? >> A(1) = [ ]        Elimina el primer elemento de la matriz A.  >> A(1) = [ ]  A =       3     4     1     5     9     6     7     2    6.  Luego de realizar los comandos, ¿Qué información tiene E?  >> M = 'MATHTYPE'; N='QUESTION';  >> M = M(2:5);N = N(2:5);  >> E = [M' N']'  >> M = 'MATHTYPE'; N='QUESTION';  >> M = M(2:5);N = N(2:5);  >> E = [M' N']'  E =  ATHT  UEST  Explicación: Cuando hago esto >> M = M(2:5);N = N(2:5);  estoy definiendo tanto en  M como en N.   Luego tomo solo los elementos de la posición 2 hasta la 5 en M e igual  en N. Luego Defino E para que me devuelva a M y N como columna, tomando solo los  elementos ya definidos  M = 'MATHTYPE'; N='QUESTION'      7.  Extraer la diagonal y antidiagonal de la matriz A = [2,3,-7; 2,1,-1; 1,0.1,1].  >> A = [2,3,-7; 2,1,-1; 1,0.1,1]    Matlab        25  A =      2.0000    3.0000   -7.0000      2.0000    1.0000   -1.0000      1.0000    0.1000    1.0000  >> diag(A)  ans =       2       1       1  >>% la antidiagonal  >> diag(fliplr(A))  ans =      -7       1       1    8.  Extraer los elementos de la parte triangular superior de A.  >> triu(A)  ans =       2     3    -7       0     1    -1       0     0     1    9.  Crear la matriz mágica de M de 5x5 y usar la función del Matlab para hallar el valor  de la suma de los elementos de la diagonal.  >> M=magic(5)  M =      17    24     1     8    15      23     5     7    14    16       4     6    13    20    22      10    12    19    21     3      11    18    25     2     9  >>%suma de elementos de la diagonal  >> trace(M)  ans =      65        Matlab        26  EJERCICIOS PROPUESTOS      1.  Hallar las dimensiones, la traza, el determinante, el rango y la inversa de la matriz  A.  A=[2, 3, 7; 2,1, 1;1, 2, 3] ÷   ÷ .     2.  Crear  una  matriz  de  dos  columnas  con  la  diagonal  y  antidiagonal  de  la  matriz  A=[2, 3, 7; 2,1, 1;1, 2, 3] ÷   ÷ .    3.  Crear una matriz M de 3 columnas:  Primera columna con la diagonal de [1:11; 2:12;...;11: 21] A traspuesta de =     .  Segunda columna con la primera diagonal inferior de  (12) B magic =   .  Tercera columna con la primera diagonal superior de  (12) C pascal = .      4.  Generar la matriz A con la orden diag.       5  -4  1  0  0  0  0          -4  6  -4  1  0  0  0        1  -4  6  -4  1  0  0        0  1  -4  6  -4  1  0    A =    0  0  1  -4  6  -4  1        0  0  0  1  -4  6  -4        0  0  0  0  1  -4  5        5.  Generar la matriz A con las órdenes diag y fliplr.       0  0  0  0  3  -4  2          0  0  0  3  -4  2  -4        0  0  3  -4  2  -4  0        0  3  -4  2  -4  0  0    A =    3  -4  2  -4  0  0  0        -4  2  -4  0  0  0  0        2  -4  0  0  0  0  0        Matlab        27  CAP 3.  ÁLGEBRA MATRICIAL    1.   SISTEMA LINEAL DE ECUACIONES    OPERACIONES DE LA MATRIZ     Hemos  visto  ya  el  operador    '  (traspuesto)  para  hallar  la  traspuesta  de  una  matriz  ó  traspuesta de un vector, también las operaciones con matrices.  Pero nótese que si   1 2 3 C= 4 5 6    (    ( ¸   ¸ ,  1 1 1 D= 2 2 2    (    ( ¸   ¸  y  |   | x 1 1 1 =  entonces:  a)  Están bien definidos C*x'= 1 1 2 3 1 4 5 6 1  (    (  (    (  ( ¸   ¸  ( ¸ ¸ , C*D' =  1 2 1 2 3 1 2 4 5 6 1 2    (    (    (    (    ( ¸   ¸    ( ¸   ¸ .  b)  Están bien definidos x*x' =  |   | 1 1 1 1 1 1  (  (  (  ( ¸ ¸  (producto interno que es equivalente a la  operación a elemento x.*x) y el x'*x =  |   | 1 1 1 1 1 1  (  (  (  ( ¸ ¸  (producto externo).  c)  Sin embargo C*x  y C*D no están bien definidos.      SOLUCIÓN DE SISTEMAS LINEALES    Para resolver los sistemas lineales A*x = B por ejemplo  1 2 3 2 3 4 3 1 1 1 0.5 4 7 14 2 x x x ÷    (    (      (    (    (      ( ÷   =   ÷    (    (      (    (    (      ( ÷ ¸   ¸ ¸   ¸   ¸   ¸   Recuerde las siguientes operaciones:  Símbolo  Operación  /   Cociente matricial, B/A=B*inv(A)  \   Cociente matricial, A\B=inv(A)*B    Si A es una matriz no singular cuadrada entonces  A\B y B/A corresponden formalmente  a la multiplicación izquierda y derecha de B por A -1  (inversa de A). Estas expresiones se  utilizan para solucionar los tipos siguientes de sistemas de ecuaciones:    División izquierda:   x = A\B y también x=linsolve(A, B) soluciona A * x = B    División derecha:   x = B/A soluciona  x * A = B    Matlab        28  EJEMPLO  Resolver   1 2 3 1 2 3 1 2 3 2x 3x 4x 3 x x x 0.5 4x 7x 14x 2 +   ÷   = ¦ ¦   ÷   +   =   ÷ ´ ¦   ÷   +   = ¹   Las acciones en MATLAB serán:  >> A=[2,3,-4;1,-1,1;4,-7,14]  A =       2     3    -4       1    -1     1       4    -7    14  >> b=[3;-0.5;2]  b =      3.0000     -0.5000      2.0000  >> x=A\b  %solución  x =      0.5000      2.0000      1.0000  >> linsolve(A,b) %con linsolve  ans =  [ 1/2]  [   2]  [   1]      2.   OPERACIONES ELEMENTALES FILA Y COLUMNA    OPERACIONES FILA  Sea A la siguiente matriz  >> A=[0  2  1  4;  5  0  1  0;  2  0  3  7]  A =       0     2     1     4       5     0     1     0       2     0     3     7  1ra) Multiplicación de una fila por un escalar  >> A(3,:) = 0.5*A(3,:)   %Accion 0.5xFila3  Fila3  >> A(3,:)=0.5*A(3,:)  A =           0    2.0000    1.0000    4.0000      5.0000         0    1.0000         0      1.0000         0    1.5000    3.5000  2da) Intercambio de filas  >> aux=A(1,:);A(1,:)=A(3,:);A(3,:)=aux      %Accion Fila1 ÷ Fila3  A =      1.0000         0    1.5000    3.5000      5.0000         0    1.0000         0           0    2.0000    1.0000    4.0000  3ra) Adicionar a una fila otra fila por un escalar  >> A(2,:)=A(2,:)-5*A(1,:)   %Accion Fila2 – 5xFila1  Fila2  A =      1.0000         0    1.5000    3.5000           0             0   -6.5000  -17.5000           0    2.0000    1.0000    4.0000  OPERACIONES COLUMNA  Sea B la siguiente matriz  >> B=[0  2  1  4;  5  0  1  0;  2  0  8  6]  B =       0     2     1     4       5     0     1     0       2     0     8     6    Matlab        29  1ra) Multiplicación de una columna por un escalar  >> B(:,2)=0.5*B(:,2)         %0.5xColumna2  Columna2  B =       0     1     1     4       5     0     1     0       2     0     8     6  2da) Intercambio de columnas  >> aux = B(:,1); B(:,1)=B(:,2); B(:,2)=aux       %Columna1 ÷ Columna2  B =       1     0     1     4       0     5     1     0       0     2     8     6  3ra) Adicionar a una columna otra columna por un escalar  >> B(:,4)=B(:,4)-4*B(:,1)        %Columna4 – 4xColumna1  Columna4  B =       1     0     1     0       0     5     1     0       0     2     8     6    Vía estas operaciones elementales se pueden realizar transformaciones de una matriz A a  matriz  escalonada,  matriz  triangular,  matriz  identidad, matriz  ortogonal,    …  etc.     Estas  son  por  ende  algunas  de  las  clásicas  operaciones  que  el  álgebra  lineal  usa  para  realizar  sus  acciones  con  diversos  objetivos  como  la  diagonalización,  la  forma  canónica  de  Jordan, la forma canónica Racional.      3.   FACTORIZACIÓN LOWER UPPER    FORMA DE GAUSS-DOOLITTLE  Otra    técnica  para  resolver  Ax  =  b  es  descomponer  en  factores  A  por  Eliminación  Gaussiana  y  después    solucionar  dos  sistemas  triangulares  para  computar  x.    Es  decir  descomponer  A de la forma Lower Upper, que en su forma más general será:  P * A = L * U  Siendo L = matriz triangular inferior unitaria,  U = matriz triangular superior,  P = matriz  de permutación.    FORMA DE CHOLESKI  Si  A  es  definida  positiva  y  simétrica  entonces  la  factorización  Lower  Upper  también  se  puede realizar de la forma de Choleski que será:  A = R’ * R  Siendo R = matriz triangular superior.    OPERACIONES DE FACTORIZACIÓN EN MATLAB  [L,U]=lu(A)   Descompone  la  matriz  A  en  el  producto  A  =L*U,  siendo  U  una  matriz  triangular  superior  y  L  una  matriz  pseudotriangular  inferior  unitaria  (triangularizable mediante permutación).    Matlab        30  [L,U,P]=lu(A)  Devuelve  una  matriz  triangular  inferior  unitaria  L,  una  matriz  triangular  superior U, y una matriz de permutación P tales que PA = LU.  R=chol(A)   Devuelve  la  matriz  triangular  superior  R  tal  que  R’  *  R  =  A  (descomposición  de  Cholesky  de  A),  en  caso  de  que  A  sea  definida  positiva y simétrica. Si A no es definida positiva devuelve un error.    EJEMPLO  Factorizar:  2 3 4 A 1 1 1 4 7 14 ÷    (    ( =   ÷    (    ( ÷ ¸   ¸  por Gauss Doolittle, y   B = matriz de pascal de 3x3 por Choleski.  Las acciones en MATLAB serán:  >> A=[2,3,-4;1,-1,1;4,-7,14]  A =       2     3    -4       1    -1     1       4    -7    14    >> [L,U]=lu(A)  L =      0.5000    1.0000         0      0.2500    0.1154    1.0000      1.0000          0            0  U =      4.0000   -7.0000   14.0000           0        6.5000  -11.0000           0              0       -1.2308  >> [L,U,P]=lu(A)  L =      1.0000         0             0      0.5000    1.0000         0      0.2500    0.1154    1.0000    U =      4.0000   -7.0000   14.0000           0        6.5000  -11.0000           0              0       -1.2308    P =       0     0     1       1     0     0       0     1     0  >> % Por Choleski  >> B=pascal(3)  B =         1     1     1       1     2     3       1     3     6    >> R=chol(B)  R =       1     1     1       0     1     2       0     0     1    Nótese que la matriz de pascal B es una  matriz simétrica y definida positiva, por lo cual  la factorización de la forma de Choleski se ha llevado con éxito.    4.   FACTORIZACIÓN ORTOGONAL    Cuando A  es rectangular, los factores de A se pueden hallar por ortogonalización.    [Q,R] = qr(A)  produce una matriz triangular superior R  de la misma  dimensión de  A  y  una matriz ortogonal Q tal que A = Q*R.  [Q,R,P] = qr(A) produce una matriz de permutación P, una matriz triangular superior R de  la misma dimensión de A y una matriz ortogonal Q tal que A*P = Q*R.    EJEMPLO  Factorizar ortogonalmente:    Matlab        31  2 3 4 A 1 1 1 4 7 14 ÷    (    ( =   ÷    (    ( ÷ ¸   ¸   y B =  1 2 3 1 2 1 2 4 0 2 3 1    (    ( ÷    (    ( ¸   ¸ .  Las acciones en MATLAB serán:  >> A=[2,3,-4;1,-1,1;4,-7,14]  A =       2     3    -4       1    -1     1       4    -7    14    >> [Q,R]=qr(A)  Q =     -0.4364    0.8927    0.1126     -0.2182    0.0164   -0.9758     -0.8729   -0.4504    0.1876  R =     -4.5826    5.0190  -10.6927           0    5.8146   -9.8602           0         0    1.2009  >>Q*R %verificando  ans =      2.0000    3.0000   -4.0000      1.0000   -1.0000    1.0000      4.0000   -7.0000   14.0000  >> B=[1,2,3,1;-2,1,2,4;0,2,3,1]  B =       1     2     3     1      -2     1     2     4       0     2     3     1    >> [Q,R]=qr(B)  Q =     -0.4472   -0.6667   -0.5963      0.8944   -0.3333   -0.2981           0      -0.6667    0.7454  R =     -2.2361    0.0000    0.4472    3.1305           0       -3.0000   -4.6667   -2.6667           0            0        -0.1491   -1.0435  >> Q*R %verificando  ans =      1.0000    2.0000    3.0000    1.0000     -2.0000    1.0000    2.0000    4.0000           0        2.0000    3.0000    1.0000    5.   NORMAS MATRICIALES    norm(A) Norma 2 de la matriz A (norma euclideana).  norm(A,1) Norma 1 de la matriz A  norm(A,Inf) Norma infinito de la matriz A (norma del máximo).  norm(A,'fro') Norma de Frobenius de la matriz   cond(A) Número de condición de la matriz A según la norma 2.    EJEMPLO  Extraer la norma 1, norma euclideana y norma del máximo de la matriz A.  >> A=[2,3,-4;1,-1,1;4,-7,14]  A =       2     3    -4       1    -1     1       4    -7    14  >> norm(A,2)  ans =     16.8014    >> norm(A,1)  ans =      19      >> norm(A,inf)  ans =      25        Matlab        32  6.   ARREGLOS MULTIDIMENSIONALES      Para  introducir  vectores  y  matrices  no  hubo  problemas,  ahora  es  tiempo  de  introducir  arreglos  multidimensionales.    Por  ejemplo  voy  a  introducir  el  arreglo  A  de  3x3x4 cuyos elementos esquematizo a continuación:      >> A(:,:,1)=pascal(3); A(:,:,2)=magic(3); A(:,:,3)=ones(3); A(:,:,4)=vander([2,4,5]) ;  >>% Veamos el arreglo A  >> A  A(:,:,1) =       1     1     1       1     2     3       1     3     6  A(:,:,2) =       8     1     6       3     5     7       4     9     2  A(:,:,3) =       1     1     1       1     1     1       1     1     1  A(:,:,4) =       4     2     1      16     4     1      25     5     1        Matlab        33  EJERCICIOS DESARROLLADOS    ÁLGEBRA MATRICIAL  1.  Hallar la norma euclideana, la norma del máximo, la norma L1, de v=[2, 3, 1, 2,1,3] ÷ .  >> v=[2,3,-1,2,1,3]    v =       2     3    -1     2     1     3  >> norm(v)    ans =        5.2915  >> norm(v,inf)    ans =         3  >> norm(v,1)    ans =        12    2.  Hallar  la  norma  euclideana,  la  norma  del  máximo,  la  norma  de  Frobenious,  el  número  de  condición, de A=[2,3, 7; 2,1, 1;1, 2,3] ÷   ÷ .  >> A=[2,3,-7;2,1,-1;1,2,3]  A =       2     3    -7       2     1    -1       1     2     3  >> norm(A)    ans =        8.2563  >> norm(A,inf)    ans =      12  >> norm(A,'fro')    ans =        9.0554  >> cond(A)    ans =        7.5751    3.  Resuelva el Sistema lineal  Ax = b, siendo  A=[2,3, 7; 2,1, 1;1, 2,3] ÷   ÷ ,   b=[1: 3]' .  >> A=[2,3,-7;2,1,-1;1,2,3]  A =       2     3    -7       2     1    -1       1     2     3  >> b=[1:3]'    b =       1       2       3  >> x=A\b    x =      0.9063      0.5313      0.3438    4.  Factorice por Gauss Doolitle y también ortogonalmente la matriz A.    >> [L,U,P]=lu(A)  L =    Matlab        34        1.0000         0             0      1.0000    1.0000         0      0.5000   -0.2500    1.0000  U =       2     3    -7       0    -2     6       0     0     8  P =       1     0     0       0     1     0       0     0     1  >> [Q,U]=qr(A)      Q =     -0.6667    0.4576   -0.5883     -0.6667   -0.7191    0.1961     -0.3333    0.5230    0.7845  U =     -3.0000   -3.3333    4.3333           0        1.6997   -0.9152           0               0      6.2757            Matlab        35    EJERCICIOS PROPUESTOS      1.  Resolver el sistema lineal  1 2 3 1 2 3 1 2 3 2x 3x 4x 3 x 2x x 0 x 7x 14x 2 +   ÷   = ¦ ¦   ÷   +   = ´ ¦   ÷   +   = ¹   2.  Resolver el sistema lineal  ¦ ¦ ¹ ¦ ¦ ´ ¦ = ÷ + + ÷   ÷ = + ÷ ÷   = + ÷ +   = + + 4 x x 3 x 2 x 3 x 2 x x x 3 1 x x x x 2 4 x 3 x x 4 3 2 1 4 3 2 1 4 3 2 1 4 2 1   3.  Resolver los sistemas  A x = b  y B x = b utilizando:   | | | | | . |      \ | ÷ ÷ ÷ ÷ = | | | | | . |      \ | ÷ ÷ = 2 0 3 5 1 2 6 0 0 1 6 2 2 / 1 2 3 1 B 1 2 5 1 0 0 5 1 1 1 4 2 1 0 2 1 A     Siendo b ==>  | | | | | . |      \ | ÷ ÷ = | | | | | . |      \ | = | | | | | . |      \ | = 3 2 0 1 4 3 2 1 0 1 0 1 3 2 1 b b b   4.  Factorice  1 1 1 1 1 1 3 5 3 7 1 3 6 1 1 1 4 1 2 3 0 2 3 4 5 A    (    (    (    ( =    (    (    ( ¸   ¸  por Gauss Doolitle y también ortogonalmente.     5.  Haga  operaciones  elementales  filas  a  la  matriz  A  con  tal  de  convertir  toda  la  1ra  columna y debajo del primer elemento de A en ceros.           Matlab        36  CAP 4.  POLINOMIOS. RAÍCES DE FUNCIONES    1.   POLINOMIOS    Un  polinomio  1 1 2 1 ...  n n n n a x a x a x a ÷ + +   +   +   en  Matlab  se  introduce  a  través  de  sus  coeficientes pero considerando el polinomio completo y ordenado decrecientemente.    EJEMPLO  El polinomio  10 4 ) ( 2 3 ÷ + = x x x p  en Matlab será  >> p=[1 4 0 -10]  p =       1     4     0   -10    EVALUACIÓN DE POLINOMIOS  polyval(p, x)  evalúa el polinomio  p (que es un vector de longitud n+1 cuyos elementos  son los coeficientes del polinomio) en x.    EJEMPLO  El polinomio  10 4 ) ( 2 3 ÷ + = x x x p  lo evaluamos en distintos x.  >> y=polyval(p,1)  y =      -5    >> y=polyval(p,-2.1+3i)  y =    19.0790 -37.7100i  >> x=1:0.25:2  x =      1.0000    1.2500    1.5000    1.7500    2.0000    >> y=polyval(p,x)  y =   -5.0000  -1.7969  2.3750  7.6094  14.0000    PRODUCTO DE POLINOMIOS      conv(p,d)       Multiplicación de los polinomios p y d    DIVISIÓN DE POLINOMIOS      [Q,R] = deconv(p,d)     División de polinomios p y d, obteniéndose el cociente Q y  residuo R.    EJEMPLO  Sean los polinomios  10 4 ) ( 2 3 ÷ + = x x x p  y  2 ( ) 2 d x x =   ÷  se tiene  >> p=[1,4,0,-10];d=[1,0,-2];  >> m=conv(p,d)  %producto de p(x) por d(x)  m =       1     4    -2   -18     0    20  >> [Q,R]=deconv(p,d) %division de p(x) por d(x)  Q =       1     4  R =       0     0     2    -2        Matlab        37  FRACCIONES PARCIALES      [R,P,Q] = residue(A,B)     Descomposición en fracciones parciales de  ( ) ( ) A x B x , siendo  ( ) (1) (2) ( )     ... ( ) ( ) (1) (2) ( ) A x R R R n Q x B x x P x P x P n =   +   +   +   + ÷   ÷   ÷     Si    ( )  ...  ( -1) P j P j m =   =   +   es  un  polo  de  orden  m,  entonces  la  expansión  incluye  términos de la forma              (   )   (   ) 2 ( ) ( 1) ( 1)   ... ( ) ( ) ( ) m R j R j R j m x P j x P j x P j +   +   ÷ +   +   + ÷   ÷   ÷     EJEMPLO  Descomponer en fracciones parciales    ( ) f x  =  3 2 2 2 4 3 2 ( 1) x x x x x ÷   ÷   ÷ +   =   (   ) 2 2                       1 1 a b c d x x x x +   +   + +   +   Solución:    3 2 ( ) 4 3 2 A x x x x =   ÷   ÷   ÷ , 2 2 4 3 2 ( ) ( 1) 2 B x x x x x x =   +   =   +   + , luego en Matlab se tiene:  >> A=[4,-1,-3,- 2];B=[1,2,1,0,0];   >> [R,P,Q]=residue(A,B)  R =       3      -4       1      -2  P =      -1      -1       0       0  Q =       [ ]    Entonces la expansión en fracciones parciales  será:    (   ) 3 2 2 2 2 2 4 3 2 3 4 1 2 ( 1) 1 1 x x x x x x x x x ÷   ÷   ÷   =   ÷   +   ÷ +   +   +       DERIVADAS DE POLINOMIOS  polyder(p)     Es la derivada del polinomio p.    EJEMPLO  Sea el polinomio p(x) = 4x 3  + 3x 2  +x – 1, su derivada y segunda derivada son:    >> p=[4 3 1 -1]    p =       4     3     1    -1  >> dp=polyder(p)  dp =      12     6     1  >> d2p=polyder(dp)    d2p =      24     6        2.   AUTOVALORES Y AUTOVECTORES    Función Operación  Función Operación    Matlab        38  eig(A) Autovalores de la matriz A.        poly(A) Polinomio característico de A.      jordan(A)  Forma  canónica  de  Jordan  de  la matriz A.  [V,D]=eig(A) Matriz diagonal de  autovalores D y matriz V de autovectores  por columnas.    poly(V)  Vector  (polinomio)  cuyas  raíces  son los elementos del vector V.    [V,J]=jordan(A)  Forma  canónica  de  Jordan J, de la matriz y la matriz de paso V  de autovectores por columnas.      EJEMPLO  Sea  2 3 4 A 1 1 1 4 7 14 ÷    (    ( =   ÷    (    ( ÷ ¸   ¸   a)  Calcular los autovalores de la matriz A.  b)  Calcular los autovalores y autovectores de A.  >> A=[2,3,-4;1,-1,1;4,-7,14]  A =       2     3    -4       1    -1     1       4    -7    14  >> % respuesta de (a)  >> D=eig(A)  D =     12.1493      3.5853     -0.7346  >> % respuesta de (b)  >> [V,D]=eig(A)  V =     -0.3550    0.9525    0.2442      0.0440    0.1499   -0.8485      0.9338   -0.2651   -0.4694  D =     12.1493         0             0           0         3.5853         0           0             0         -0.7346      3.   RAÍCES DE POLINOMIOS    roots Halla las raíces de polinomios.  roots(p)    calcula  las  raíces  del  polinomio  con  coeficientes  que  son  los  elementos  del  vector p.  EJEMPLO  Calcular las raíces del polinomio  10 4 ) ( 2 3 ÷ + = x x x p    >> p=[1,4,0,-10];  >> roots(p)  ans =    -2.6826 + 0.3583i    -2.6826 - 0.3583i     1.3652           Matlab        39          4.   RAÍCES DE FUNCIONES    fzero Extrae las raíces de funciones lineales  y no lineales, con el único requisito de que  introduzca un valor inicial.  >> fzero('sin(x)-cos(x)',0)    ans =        0.7854    >> fzero('sin(2*x)-2*cos(x)+x^2-3*x-6',3)    ans =        3.9113      Matlab        40  EJERCICIOS DESARROLLADOS      5.  Evaluar el polinomio  en x = 1:0.3:4,  3 1 2 7 p x x =   ÷   +     >> p1=[2,0,-1,7]      p1 =       2     0    -1     7  >> x = 1:0.3:4    x =      1   1.3  1.6   1.9  2.2 2.5 2.8  3.1  3.4   3.7  4  >> polyval(p1,x)    ans =    Columns 1 through 5       8.0000   10.0940   13.5920   18.8180   26.0960      Columns 6 through 10      35.7500   48.1040   63.4820   82.2080  104.6060      Column 11     131.0000    6.  Hallar el producto de polinomios p 1 (x).p 3 (x) , siendo  4 3 7 =   + p x    >> p3=[1,0,0,0,7]  >> conv(p1,p3)    7.  Hallar el cociente y residuo de p 3  entre p 1   >>[q,r]=deconv(p3,p1)    8.  Hallar la descomposición en fracciones parciales de  3 1 p p   >>[R,P,Q] = residue(p3,p1)           9.  Calcular las raíces del polinomio 3 2 ( ) 3 =   +   ÷   ÷ p x x x x i   >>p=[1,1,-1,-3i]  >> roots(p)  ans =    -1.8925 + 0.5281i     1.1483 + 0.6156i    -0.2557 - 1.1436i        Matlab        41  EJERCICIOS PROPUESTOS    6.  Evaluar los polinomios  en x = 1:0.3:7  i.  5 2 2 3 (6 2 ) p x ix i =   +   +   ÷   ii.  10 3 1 p x x =   +   +     7.  Hallar el desarrollo del trinomio  (   ) 4 3 p(x) = x - ix+2   usando comandos del Matlab.     8.  Calcular las raíces del polinomio:  (   )   (   ) 3 4 ( ) 3 5 7 p x x i xcis xcis =   ÷   +   ÷  [nota: cos sin cis i u =   u+   u]    9.  Hallar  el  resto  de  la  división  de    p(x)  por  3 d(x) = x - ix+2,  siendo  p(x)  el  polinomio  característico de la matriz A.    1 1 1 1 1 1 3 5 3 7 1 3 6 1 1 1 4 1 2 3 0 2 3 4 5 A    (    (    (    ( =    (    (    ( ¸   ¸     10. Hallar  la  derivada  del  cociente  de  la  división  de  p(x)  10 1 =   +   + x x   por  3 d(x) = x - ix+2.    11. Hallar las raíces de la función f(x)  2 =   + xsenx  cercanas a – 6, – 4, 4 y 6.        Matlab        42  CAP 5.  GRÁFICOS BIDIMENSIONALES (2-D)      Matlab produce gráficos de dos y tres dimensiones, así como contornos y gráficos de  densidad.     Se  pueden  representar  los  gráficos  y  listar  los  datos,  permite  el  control  de  colores,  sombreados  y  otras  características  de  los  gráficos,  también  soporta  gráficos  animados.    Los gráficos producidos por Matlab son portables a otros programas.      1.   GRÁFICOS EN COORDENADAS CARTESIANAS    Estos  gráficos  se  tratan  como  curvas  que  pasan  por  pares  ordenados,  pero  finalmente  Matlab  lo  que  hace  es  trazar  una  poligonal  lineal  que  pasa  por  estos  puntos  o  pares  ordenados.    ANATOMIA DE UN GRAFICO      Se pueden hacer los gráficos de dos formas:    Modelo matemático de la curva.          Datos discretos de la curva.    -  Modelo  matemático  de  la  curva.  Para  esto  se  tiene  que  tener  la  ley  o  modelo  matemático que describe el fenómeno, es decir  Modelo  Por una ley o modelo matemático      Matlab        43  -  Datos discretos de la curva.  Para esto se tiene que tener datos de los pares ordenados  (X,Y), es decir  Datos  X = Pre imágenes  Y= Imágenes    GRAFICANDO CON  PLOT    plot(X)  Representa  los  puntos  (k,  Xk).  Si  X  es  una  matriz,  hace  lo  mismo  para  cada  columna  de  la  matriz.  Si  X  es  un  vector  complejo,  representa  Real(X)  frente  a  Imag(X).    EJEMPLO  >> x=[7,9,3,1,5,20,5]    x =         7     9     3     1     5    20     5    >> plot(x)        plot(X,Y) Representa el conjunto de puntos (X,Y). Si X o Y son matrices, representa por  filas  o  columnas  los  datos  de  X  frente  a  los  datos  de  Y,  dependiendo  si  el  otro  vector es fila o columna. Para valores complejos de X e Y, se ignoran las partes  imaginaria.  plot(X,Y,S)  Gráfica  de  plot(X,Y)  con  las  opciones  definidas  en  S.  Usualmente,  S  se  compone  de  3  caracteres  entre  tildas,  el  primero  de  los  cuales  fija  el  color  de  la  línea del gráfico, el segundo fija la etiqueta o marca en el nodo y el último fija el  carácter a usar en el graficado.   plot(X1,Y1,S1,X2,Y2,S2,…,Xn,Yn,Sn) Gráfica de las n curvas superpuestas Y1 vs X1,  Y2  vs  X2,  …  ,  Yn  vs  Xn  con  las  opciones  definidas  en  S1,  S2,  …  ,  Sn  respectivamente.     Los caracteres son respectivamente, los siguientes:    Color  Etiqueta  Trazo  y  m  amarillo  magenta  .  o  puntos  círculos  -  :  sólido  a puntos    Matlab        44  c  r  g  b  w  k  cyan  rojo  verde  azul  blanco  negro  x  +  *  s   d   p  h  v  ^  <  >  x-marcas  signo más  estrellas  cuadrados   diamantes  estrella de 5 puntas  estrella de 6 puntas  triángulo V  triángulo A  triángulo   triángulo   -.  --    guiones y puntos  semisólidos      EJEMPLO  Graficar   2 ( ) 4 ( ) f x x x sen x =   +   en el intervalo [0, 5]    Solución  >> x=0:0.2:5;  >> y=sqrt(x)+4*x.^2.*sin(x);  >> plot(x,y)      EJEMPLO  Graficar    2 ( ) ( ) 2 x f x e xsen x =   ÷   +     en  el  intervalo  [  -  3    ,  3]    con  trazo  de  color  rojo  etiquetas cuadradas y línea punteada.  Solución  >> x=-3:0.4:3;  >> y=exp(x)-x.*sin(x.^2)+2;  >> plot(x,y,'rs:')            Matlab        45  COLOCACIÓN DE TÍTULOS Y TEXTOS    title(‘texto’)   Añade el texto como título del gráfico en la parte superior del mismo en  gráficos 2-D y 3-D  xlabel(‘texto’)     Sitúa el texto al lado del eje x en gráfico 2-D y 3-D  ylabel(‘texto’)     Sitúa el texto al lado del eje y en gráficos 2-D y 3-D  zlabel(‘texto’)     Sitúa el texto al lado de eje z en un gráfico 3-D  text(x,y,’texto’)   Sitúa el texto en el punto (x,y) dentro del gráfico 2-D  text(x,y,z,’texto’)  Sitúa el texto en el punto (x,y,z) en el gráfico 3-D  gtext(‘texto’)   Permite situar el texto en un punto seleccionado con el ratón dentro de un  gráfico 2-D    LEYENDAS    Colocación  legend(string1,string2,string3, ...) Crea las leyendas de los gráficos correspondientes.    Localización  legend(...,'location',loc)   Adiciona las leyendas en una ubicación específica con respecto a  los  ejes.    Esta  ubicación  loc  es  de  1x4  posiciones  y  combinaciones de acuerdo a:          'North'                  Dentro del cuadro grafico y arriba.          'South'                  Dentro y abajo.          'East'                    Dentro y a la derecha.          'West'                   Dentro y a la izquierda.          'NorthEast'            Dentro y arriba a la derecha (default)          'NorthWest           Dentro y arriba a la izquierda          'SouthEast'            Dentro y abajo a la derecha          'SouthWest'         Dentro y abajo a la izquierda          'NorthOutside'      Fuera del cuadro grafico y arriba          'SouthOutside'      Fuera y abajo          'EastOutside'         Fuera y a la derecha          'WestOutside'       Fuera y a la izquierda          'NorthEastOutside'     Fuera y arriba a la derecha          'NorthWestOutside'    Fuera y arriba a la izquierda          'SouthEastOutside'     Fuera y abajo a la derecha          'SouthWestOutside'    Fuera y abajo a la izquierda          'Best'                           Espacio no usado dentro del cuadro grafico          'BestOutside'               Espacio no usado fuera del cuadro grafico      EJEMPLO  Graficar en el intervalo [ - 3 , 3]   2 1 ( ) 2 y xsen x = ÷   + ,  2 4 ( ) y x sen x =   + , y3=x+0.3[x]  colocando titulo, descripción de ejes y leyendas.  Solución:    Matlab        46  >> x=-3:0.4:3;  >> y1=-x.*sin(x.^2)+2;  >> y2=abs(x)+4*sin(x);  >> y3=x+0.3*floor(x);  >> plot(x,y1,x,y2,x,y3);  >> title('Gráfico de tres funciones');  >> xlabel('eje x');ylabel('eje y');  >> legend('-x*sen(x)', '|x|+4*sen(x)',  'x+0.3[x]')      >> legend('-x*sen(x)', '|x|+4*sen(x)', 'x+0.3[x]','Location','North')      CONFIGURACIÓN DE EJES,  DOMINIO, MALLADO Y SUPERPOSICIÓN    Estos  comandos  permiten  manipular  los  ejes  de  un  gráfico,  la  colocación  del  mismo  dentro de la pantalla, su apariencia, su presentación desde distintos puntos de vista, etc.    axis([xmin xmax ymin ymax]) Sitúa los valores máximo y mínimo para los ejes X e Y en el  gráfico corriente.  axis (‘auto’)   Sitúa los ejes en la escala automática por defecto (la dada por xmin=min(x),  xmax=max(x) e y libre).  axis (axis)   Congela  el  escalado  de  ejes  en  los  límites  corrientes,  de  tal  forma  que  al  situar  otro gráfico sobre los mismo ejes (con hold en on), la escala no cambie.  V=axis     Da el vector V de 4 elementos, conteniendo la escala de gráfico corriente.  axis(‘ij’)     Sitúa coordenadas con el origen en la parte superior izquierda del gráfico.  axis(‘square’)   Convierte el rectángulo de graficado en un cuadrado, con lo que las  figuras se abomban.  axis(‘equal’)  Sitúa el mismo factor de escala para ambos ejes.  axis (‘normal’) Elimina las opciones square y equal.  axis(‘off’)   Elimina las etiquetas y marcas  de los ejes y las rejillas, manteniendo  el título del  gráfico y los textos situados en él con text y gtext.  axis(‘on’)   Coloca de nuevo las etiquetas, marcas y rejillas de los ejes.    Matlab        47  ginput(n)   Permite recuperar las coordenadas de n puntos de un grafico mediante ratón o  teclado.  grid   Sitúa  rejillas  en  los  ejes  de  un  gráfico  2-D  o  3-D.  La  opción  grid  on  coloca  las  rejillas y grid off las elimina. La opción grid permuta entre on y off  hold   Permite mantener el gráfico existente con todas sus propiedades, de modo que el  siguiente gráfico que se realice se sitúe sobre los mismos ejes y se superponga al  existente. La opción hold on activa la opción  y hold off la elimina. La opción  hold  permuta entre on y off. Válido para 2-D y 3-D    EJEMPLO  Graficar    2 ( ) ( ) =   + f x x x sen x     y  g(x)=senx+[x 2 ]  en  el  intervalo  [0,  5]  dentro  de  una  region rectangular  |   |   |   | 2, 7 30,30 ÷   ×  ÷   Solución  >> x=0:0.2:5;  >> y1=sqrt(x)+x.^2.*sin(x);  >> plot(x,y1)  >> hold on  %superposición  >> y2=sin(x)+floor(x.^2);  >> plot(x,y2)  >> axis([-2 7 -30 30])  >> grid  %mallado        SELECCIÓN DE LA VENTANA O SUBVENTANA DE EXHIBICIÓN    figure(n)    Crea la n-ésima ventana de figura.  subplot(m,n,p)   Divide la ventana gráfica en mxn subventanas y coloca el gráfico corriente  en la ventana p-ésima.     EJEMPLO  Para  crear  2x3  =  6  subventanas  y  colocar  el  puntero  en  la  posición  4,  se  procede  en  Matlab como:    >>subplot(2,3,4)        Matlab        48  >> x=0:pi/40:2*pi;plot(x,sin(x))    FUNCIÓN FPLOT    fplot('fun',limits)   Plotea 'fun'  entre limites [xmin xmax] o limites [xmin xmax ymin  ymax]. 'fun' es el nombre de una función M-file o una cadena con  variable x tal como 'sin(x)', 'diric(x,10)' o '[sin(x),cos(x),exp(x)]'.  fplot('fun',limits,S)  Plotea 'fun' con las opciones definidas en S.  fplot('fun',limits,tol) Plotea 'fun' con el error relativo con tolerancia tol (por defecto  es 2*10 -3 ).  fplot('fun',limits,tol,S) Plotea 'fun' con tolerancia tol y con las opciones def. en S.  fplot('fun',limits,n) Con  1 n > . Plotea 'fun' con un mínimo  1 n +  de puntos.  El máximo  tamaño de paso esta restringido por  xmax-xmin n  .  [X,Y] = fplot('fun',limits) Retorna las abscisas  y ordenadas para   'fun' en  X e  Y. No  hace la gráfica.    EJEMPLO  Graficar   ( ) ( ) 2 f x xsen x = ÷   +   en el intervalo [0, 5].  >> fplot('-x.*sin(x)+2',[0 5])      EJEMPLO  Graficar   2 ( ) ( ), ( ) cos , ( ) 3 2 f x xsen x g x x x h x x x = ÷   =   ÷   =   ÷   +   en el intervalo [0, 5].    Matlab        49  >> fplot('[-x*sin(x)+2,cos(x)-x,x^2-3*x+2]',[0 5])      2. GRÁFICOS LOGARÍTMICOS Y SEMILOGARÍTMICOS    Los comandos que habilita Matlab para representar gráfico con escalas logarítmicas son  los siguientes:  loglog(X,Y)   Realiza los mismos gráficos que plot(X,Y), pero con escala logarítmica en  los  dos  ejes.  El comando loglog  presenta  las  mismas  variantes  y  admite  las  mismas opciones que el comando plot.  semilogx(X,Y) Realiza los mismos gráficos que plot(X,Y) , pero con escala logarítmica  en el eje x, y escala normal en el eje y.  semilogy(X,Y) Realiza los mismos gráficos que plot(X,Y), pero con escala logarítmica  en el eje y, y escala normal en el eje x.    EJEMPLO  >> x=0:0.2:5;  >> semilogy(x,10.^x)      Matlab        50    3. GRÁFICOS EN COORDENADAS POLARES    Matlab  habilita  el  comando  específico  polar,  que  representa  funciones  en  coordenadas  polares. Su sintaxis es la siguiente:  polar (o,r)   Representa la curva en coordenadas polares r = r(o)  polar (o,r,S)   Idem con el estilo de línea dado por S (ver la instrucción plot)  EJEMPLO  Graficar el cardiode.  >> a=0:pi/40:2*pi;polar(a,1-sin(a))      EJEMPLO  Graficar   a)  La rosa de 4 pétalos horizontal.  >> a=0:pi/40:2*pi;  >> polar(a,3*cos(2*a))    b)  La función polar r = 1 – 2*cos(θ)  >> polar(a,1-2*cos(a))      EJEMPLO  Graficar la rosa de 7 pétalos horizontal.  >> b=0:pi/100:2*pi;  >> polar(b,3*cos(7*b))        Matlab        51  . GRÁFICOS ESTADÍSTICOS    HISTOGRAMAS  bar(Y)   Dibuja el gráfico de barras relativo al vector Y  bar(X,Y)   Dibuja  el  gráfico  de  barrar  relativo  al  vector  Y  cuyos  elementos  son  especificados a través del vector X  EJEMPLO  >> y=[2 7 4 6 19 2];  >> bar(y)        EJEMPLO  >> x=[2 5 7 8 9 12];  >> y=[2 7 4 6 19 2];  >> bar(x,y)        stairs(Y)   Dibuja el gráfico escalonado relativo al vector Y  stairs(X,Y)   Dibuja  el  gráfico  escalonado  relativo  al  vector  Y  cuyos  elementos  son  especificados a través del vector x.  hist(Y)   Dibuja  el  histograma  relativo  al  vector  Y  utilizando  10  rectángulos  verticales de igual base.  hist(Y,n)   Dibuja  el  histograma  relativo  al  vector  Y  utilizando  n  rectángulos  verticales de igual base.  hist(X,Y)   Dibuja el histograma relativo al vector Y utilizando rectángulos verticales  cuyas bases miden lo especificado en los elementos del vector X      Matlab        52  EJEMPLO  >> y=[2 1 3 2 1 2 3 1 2 3 2 1 2 3 4 5 5 3];  >> hist(y)      errorbar(x,y,e)  Realiza  el  gráfico  del  vector  x  contra  el  vector  y  con  los  errores  especificados en el vector e. Pasando por cada punto (xi,yi)  stem(Y)   Dibuja el gráfico de racimo relativo al vector Y. Cada punto del vector Y  es unido al eje x por una línea vertical  stem(X,Y)   Dibuja  el  gráfico  de  racimo  relativo  al  vector  Y  cuyos  elementos  son  especificados a través del vector X.  pie(X)     Realiza el gráfico de sectores relativo al vector de frecuencias X.  pie(X,Y)   Realiza el gráfico de sectores relativo al vector de frecuencias X  desplazando hacia fuera los sectores en los que Yi = 0        EJEMPLO  >> x=[1,4,0.5,2.5,2]; pie(x)      5. GRÁFICOS DE RELACIONES  ezplot(f)   Plotea f sobre el dominio por defecto  -2  < x < 2 t   t.  ezplot(f, [a,b])   Plotea f sobre a < x < b  ezplot(f, [xmin,xmax,ymin,ymax]) Plotea f sobre xmin< x <xmax,   ymin< y <ymax.  ezplot(x,y)   Plotea    en    coordenadas    paramétricas    la    curva    plana  x=  x(t),  y=  y(t)  sobre  el  dominio  por  defecto  -2  < x < 2 t   t.  ezplot(x,y, [tmin,tmax])   Plotea x = x(t) , y = y(t) over  tmin < t < tmax.  Donde f puede ser una función estandar f = f(x) ó una función implicita f = f(x,y) = 0.    Matlab        53  ezpolar(f)   Plotea  la  curva  polar    r  =  f(theta)  sobre  el  dominio  por  defecto  0 < theta < 2t.  ezpolar(f,[a,b])   Plotea  f  sobre a < theta < b.      EJEMPLOS    >> %funciones estandar  >> ezplot('cos(x)')  >> ezplot('cos(x)', [0, pi])        >> %funciones implicitas  >> ezplot('1/y-log(y)+log(-1+y)+x - 1')  >> ezplot('x^2 + y^2 - 1',[-1.25,1.25]); axis equal  >> ezplot('x^3 + 2*x^2 - 3*x + 5 - y^2')        >> %En coordenadas paramétricas   >> ezplot('sin(t)','cos(t)')  >> ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])  >> ezplot('sin(3*t)','cos(t)',[0,2*pi])    Matlab        54      EJEMPLOS  Gráficos con dominio por defecto  >>ezpolar('cos(5*t)')    >>ezpolar('1 + 2*sin(t/2)')    >>ezpolar('1 - 2*sin(3*t)')    Graficos con dominio indicado  >>ezpolar('sin(2*t)*cos(3*t)',[0,pi])    >>r = '100/(100+(t-1/2*pi)^8)*(2-sin(7*t)-1/2*cos(30*t))';  >>ezpolar(r,[-pi/2,3*pi/2])      Matlab        55  5. IMAGENES  F  =  imread(filename)  asigna  el  contenido  del archive  imagen  a  la  variable  matricial  F.  Soporta los archivos *.jpeg,  *.tiff, *.gif, *.png, *.hdf, *.ico, *.bmp, etc  image(F) visualiza la matriz C como una imagen en una ventana de figura.   >>F=imread('pcblack.bmp');image(F);  >>axis off  %desactiva los ejes     EJERCICIOS RESUELTOS  1.  Graficar el polinomio  3 1 p =2x x 7 ÷   +  en el intervalo [–10 , 10].  2.  Graficar la función xsen(x 2 ) en el intervalo [ - 2t , 2t].  3.  Graficar  las  funciones    3sen(tx)      y    e -0.2  x     sobre  un  mismo  gráfico,  para  x=0:0.1:4.    Usar  zoom  y  gtext  para  nombrar  uno  de  los  puntos  de  intersección de dichas funciones.  Solución:  1.  Graficar el polinomio  3 1 p =2x x 7 ÷   +  en el intervalo [–10 , 10].    >>p1=[2,0,-1,7]  >>x=-10:0.5:10;y=polyval(p1,x);  >>plot(x,y)    2.  Graficar la función xsen(x 2 ) en el intervalo [ - 2t , 2t].    >> fplot('x*sin(x^2)',[-2*pi  2*pi])      Matlab        56      Matlab        57    3.  Graficar  las  funciones    3sen(tx)      y    e -0.2  x     sobre  un  mismo  gráfico,  para  x=0:0.1:4.    Usar  zoom  y  gtext  para  nombrar  uno  de  los  puntos  de  intersección de dichas funciones.    >>x=0:0.1:4;  >>plot(x,3*sin(pi*x))  >>hold on  >>plot(x,exp(-0.2*x))      EJERCICIOS PROPUESTOS  1.  Crear el archivo tipo texto datos.txt con los datos               1.0  7.5  2.5      4.0  3.2   5.0  3.5  5.5  2.0  6.3  7.8   6.2  8.1     6.0  9.7   5.0  10.3   3.0  2.  Graficar usando este archivo la 1ra columna versus la 2da columna a través  de una poligonal lineal, use textread para leer los datos de este archivo.    3.  Grafique:  a.  2 2 x y 3 ÷   =   b.               = 10    4.  Grafique las funciones polares:  a)  1 2 (3 ), 0: / 20: 2 r sen =   u   u =   t   t  b)  2 5 , 0: / 20: 2 r  =   u   u =   t   t  c)  3 2 ( ), 0: / 20: 2 r sen =   ÷   u   u =   t   t    5.  Use subplot para dividir la ventana en 1x2 para luego graficar en ellas las  siguientes curvas paramétricas (R  R 2 ).  1 1 x sen(t) ,t [0,2 ] y sen(2t) = ¦ e   t ´   = ¹   1 1 x sen(t) ,t [0,2 ] y cos(t) = ¦ e   t ´   = ¹       x y +   Matlab        58  CAP 6.  GRÁFICOS TRIDIMENSIONALES (3-D)  El  Matlab  posee  muchos  recursos  para  visualización  de  datos  en  3D,  como  trazado  de  curvas,  trazado  de  superficies,  contornos  y  gráficos  de  densidad,  permite  el  control  de  colores,  sombreados  y  otras  características  de  los  gráficos,  también  soporta  gráficos  animados.    1. CURVAS 3D  plot3(X,Y,Z)   gráfica la terna X, Y, Z dándonos así una curva en el espacio.  plot3(X,Y,Z,S)   gráfica la terna X, Y, Z dándonos así una curva en el espacio con  las características S igual que plot.  ezplot3(x,y,z)    Gráfica  en  coordenadas  paramétricas  x  =  x(t),  y  =  y(t),  z  =  z(t)  sobre el dominio por defecto 0 < t < 2 t.  ezplot3(x,y,z ,[tmin,tmax]) Gráfica x=x(t), y=y(t), z=z(t) sobre tmin < t < tmax.    EJEMPLO  >> x=0:0.8:8,y=x.^2,z=sqrt(x)  x =           0    0.8000    1.6000    2.4000    3.2000    4.0000    4.8000    5.6000    6.4000    7.2000    8.0000  y =           0    0.6400    2.5600    5.7600   10.2400   16.0000   23.0400   31.3600   40.9600   51.8400   64.0000  z =           0    0.8944    1.2649    1.5492    1.7889    2.0000    2.1909    2.3664    2.5298    2.6833    2.8284  >> plot3(x,y,z)  >> grid      EJEMPLO  >> ezplot3('cos(t)', 't * sin(t)', 'sqrt(t)', [0,6*pi])    Matlab        59      2. GENERACIÓN DE MALLADOS EN EL PLANO  meshgrid   Dados dos vectores xa e ya, conteniendo las coordenadas de los ejes x e y, retorna x e y,  conteniendo la „Malla‟ de coordenadas del mallado en el plano en una región rectangular  correspondiente a x e y.  >>xa=1:3,ya=4:6  xa =       1     2     3  ya =       4     5     6    >>[x, y]=meshgrid(xa,ya)  x =       1     2     3       1     2     3       1     2     3  y =       4     4     4       5     5     5       6     6     6    Explicación:     Como  xa = [1 2 3], se tiene en el  eje  x   3 puntos y  como ya =[4 5 6] en el  eje  se  tienen    3  puntos,  lo  que  mediante  meshgrid  genera  un  mallado de nueve puntos los cuales se  encuentran  en  x  e  y  generados  por  meshgrid.              Matlab        60  EJEMPLO    Generar el mallado cuadrangular indicado, usando meshgrid.    Solución:  >> xa=0:0.5:2,ya=0:0.4:2  xa =           0    0.5000    1.0000    1.5000    2.0000  ya =           0    0.4000    0.8000    1.2000    1.6000    2.0000  >> [x,y]=meshgrid(xa,ya)  x =           0    0.5000    1.0000    1.5000    2.0000           0    0.5000    1.0000    1.5000    2.0000           0    0.5000    1.0000    1.5000    2.0000           0    0.5000    1.0000    1.5000    2.0000           0    0.5000    1.0000    1.5000    2.0000           0    0.5000    1.0000    1.5000    2.0000  y =           0             0             0             0            0      0.4000    0.4000    0.4000    0.4000    0.4000      0.8000    0.8000    0.8000    0.8000    0.8000      1.2000    1.2000    1.2000    1.2000    1.2000      1.6000    1.6000    1.6000    1.6000    1.6000      2.0000    2.0000    2.0000    2.0000    2.0000      Matlab        61  3. SUPERFICIES  Un  gráfico  de  malla  tridimensional  viene  definido  por  una  función  z  =  f(x,y),  de  tal  forma  que  los  puntos  de  la  superficie  se  representan  sobre  una  rejilla,  resultado  de  levantar  los  valores  de  z  dados  por  f(x,y)  sobre  los  correspondientes  puntos  del  plano  (x,y). El aspecto de un gráfico de malla es como una red de pesca, con los puntos de la  superficie  sobre  los  nudos  de  la  red.  Realmente,  es  un  gráfico  de  superficie  cuyo  grafo  tiene forma de red.     El  primer  paso  para  representar  una  función  de  dos  variables  z  =  f(x,y)  mediante  su  gráfico de superficie, es utilizar el comando meshgrid, que básicamente define la matriz  de  puntos  (X,Y)  sobre  los  cuales  se  evalúa  la  función  de  dos  variables  para  hacer  su  presentación gráfica.   Para  representar  un  gráfico  de  malla,  se  utiliza  el  comando  mesh  y  sus  variantes,  cuya  sintaxis es la siguiente:  mesh(X,Y,Z)   Representa el gráfico de malla de la función z=f(x,y), dibujando las líneas  de la rejilla que componen la malla.  meshz(X,Y,Z)   Representa  el gráfico de malla de la función z=f(x,y) con una especie de  cortina o telón en la parte inferior  waterfall(X,Y,Z)   Representa el gráfico de cascada de la función z=f(x,y).  surf(X,Y,Z)    Representa el gráfico de superficie de la función z=f(x,y)  surfl(X,Y,Z)   Representa el gráfico de superficie de la función z=f(x,y).    Los gráficos de contorno de curvas de nivel:  contour(Z)   Dibuja el gráfico de contorno (curvas de nivel) para la matriz Z. El número  de líneas de contorno a utilizar se elige automáticamente  contour(Z,n)   Dibuja el gráfico de contorno (curvas de nivel) para la matriz Z usando n  líneas de contorno  contour(x,y,z,n)   Dibuja el gráfico 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  de  contorno)  contour3(Z), contour3(Z,n), contour3(x,y,z,n) Dibujan los gráficos de contorno en 3  dimensiones  pcolor(X,Y,Z)   Dibuja  un  gráfico  de  contorno  (curvas  de  nivel)  para  la  matriz  (X,Y,Z)  utilizando  una  representación  basada  en  densidades  de  colores.  Suele  denominarse gráfico de densidad.    Combinaciones del gráfico de la superficie y las curvas de nivel:  meshc(X,Y,Z)   Representa  el  gráfico  de  malla  de  la  función  z=f(x,y)  junto  con  el  gráfico  de contorno correspondiente (curvas de nivel proyectadas sobre el plano  XY)  surfc(X,Y,Z)   Representa el gráfico de superficie de la función z=f(x,y) junto sus curvas  de nivel.    EJEMPLO  Graficar el paraboloide   2 2 z x y =   +  en el dominio [ -5, 5 ]x[ -5, 5 ]    Matlab        62  >> [x,y]=meshgrid(-5:0.25:5,-5:0.25:5);  >> z=x.^2+y.^2;  >> surf(x,y,z)      EJEMPLO  Graficar usando mesh, surf, contour y contour3   2 2 z x y =   ÷  en el dominio [-5, 5]x[-5, 5]  Solución:  >> [x,y]=meshgrid(-5:0.25:5,-5:0.25:5);  >> z=x.^2 – y.^2;   >> subplot(2,2,1);  >> mesh(x,y,z)  >> subplot(2,2,2);  >> surf(x,y,z)  >> subplot(2,2,3);  >> contour(x,y,z);  >> subplot(2,2,4);  >> contour3(x,y,z);        SOMBREADO Y COMBINACIONES DE COLOR  shading Diversos estilos de sombreado para  la superficie.      shading flat      shading interp       shading faceted      (por  defecto).  colormap  Combinación  de  colores  para  la  superficie (mapeo de colores).  Combinaciones        GRÁFICO DE LA FUNCIÓN PREDETERMINADA PEAKS      peaks  es  la  función  de  2  variables  de  presentación  del  Matlab,  para  graficarla  use  mesh,  surf,  pcolor, contour, etc.  z = peaks;  z = peaks(n);  z = peaks(v);  z = peaks(x,y);  [x,y,z] = peaks;  [x,y,z] = peaks(n);  [x,y,z] = peaks(v);    EJEMPLO    Matlab        63  >> z=peaks(25); surf(z); colormap(pink)    EJEMPLO  >> z=peaks(20); mesh(z); shading flat; colormap(hot)    4.  COORDENADAS CILÍNDRICAS  Graficar  el  paraboloide    2 2 z x y =   +   en  el  dominio  rectangular  [  -5,  5  ]x[  -5,  5  ]  es  una  situación  donde  no  están  tan  claras  las  propiedades  geométricas  del  paraboloide,  en  realidad en  este  caso  es  más  recomendable  graficar  usando  un  dominio  circular  que  por  ejemplo podría ser un circulo de radio 5 centrado en el origen de coordenadas.  Surge la  pregunta natural, ¿cómo hacemos un mallado en el dominio circular?, el cual nos servirá  para  levantar    el  paraboloide.    La  respuesta  es  sencilla:  Solo  hay  que  usar  el  cambio  de  coordenadas cilíndricas a cartesianas.    COORDENADAS CILÍNDRICAS          1 2 cos( ) ( ) , [ , ], [ , ] x r u y rsen u u r r r z z = ¦ ¦   =   e o |   e ´ ¦   = ¹     EJEMPLO  Graficar  el  paraboloide    2 2 z x y =   +   en  el  dominio  circular  de  radio  5  y  centrado  en  el  origen de coordenadas.    Matlab        64  >> [r,u]=meshgrid(0:0.25:5,0:pi/20:2*pi);  >> x=r.*cos(u);  >> y=r.*sin(u);  >> z=x.^2+y.^2;  >> surf(x,y,z)    5.  COORDENADAS ESFÉRICAS   COORDENADAS ESFÉRICAS          |   | 1 2 1 2 ( )cos( ) ( ) ( ), [ , ], , cos( ) x rsen v u y rsen v sen u u v z r v = ¦ ¦   =   e o   o   e  u   u ´ ¦   = ¹     EJEMPLO  Graficar parte del hemisferio superior  indicado con radio = 5.                >> [u,v]=meshgrid(pi/3:pi/20:7*pi/4,0:pi/20: pi/2);  >> x=5*sin(v).*cos(u);  >> y=5*sin(v).*sin(u);  >> z=5*cos(v);  >> mesh(x,y,z)        Matlab        65  6.   COORDENADAS PARAMÉTRICAS  COORDENADAS PARAMÉTRICAS EN SUPERFICIES          |   | 1 2 1 2 ( , ) ( , ), [ , ], , ( , ) x x u v y y u v u u u v v v z z u v = ¦ ¦   =   e   e ´ ¦   = ¹   COORDENADAS PARAMÉTRICAS EN CURVAS 3D          1 2 ( ) ( ), [ , ] ( ) x x t y y t t t t z z t = ¦ ¦   =   e ´ ¦   = ¹       7. CILINDROS, ESFERAS Y ELIPSOIDES    [x,y,z]= cylinder(R,N)    retorna  las  coordenadas  x,  y,  z  necesarias  para  la  generación  de  un  cilindro  con  altura  1,  radio  R  y  número  de  puntos  en  cada  circunferencia  de  N  (20  por default).   cylinder(R,N)  idem pero traza solo la grafica.  [x,y,z]= sphere(N)    retorna  las  coordenadas  x,  y,  z  necesarias  para  la  generación de una esfera con radio 1.  El número de  ternas es (N+1)x(N+1) (N=20 por default).   sphere(N)  idem pero traza solo la grafica.  [x,y,z]= ellipsoid(xc,yc,zc,xr,yr,zr,N)   retorna  las  coordenadas  x,  y,  z  necesarias  para  la  generación  de  una  elipsoide  centrada  en  (xc,yc,zc)  con  semiejes  xr,yr,zr.    El  número  de  ternas es (N+1)x(N+1) (N=20 por default).  ellipsoid(xc,yc,zc,xr,yr,zr,N)  idem pero traza solo la grafica.      Matlab        66  EJEMPLO  >> cylinder(3,50)    >> sphere    >>ellipsoid(0,0,0,10,5,2)               EJERCICIOS DESARROLLADOS  1.  Grafique usando mesh, surf, contour y contour3,  2 2 1 2 z x y =   ÷     >> [x,y]=meshgrid(-3:0.2:3,-3:0.2:3);  >> mesh(x,y,x.^2-2*y.^2)  >> surf(x,y,x.^2-2*y.^2)  >> contour(x,y,x.^2-2*y.^2)  >> contour3(x,y,x.^2-2*y.^2)    Matlab        67              2.  Grafique usando surf,      2 ( ) cos( ) z sen x y =   +     >> [x,y]=meshgrid(-3:0.2:3,-3:0.2:3);  >> z=floor(sin(x))+cos(y);  >> surf(x,y,z)      Matlab        68              Matlab        69     EJERCICIOS PROPUESTOS  1.  Grafique usando mesh, surf, contour y contour3    3 2 2 2xy z x y = + .  Para x = 0.25:0.25:5,  y= 0.25:0.25:5    2.  Grafique   2 ( ), 0: / 20: 2 x y z sen =   =   =   ÷   u   u =   t   t    3.  Use subplot para dividir la ventana en 1x2 para luego graficar en cada una de ellas las  siguientes curvas paramétricas (R  R 3 ).    i.  ( ) , [0, 2 ] (2 ) 2 x sen t t y sen t z t = ¦ ¦   e   t = ´ ¦   = ¹      b) ( ) , [0, 2 ] cos( ) cos( ) x sen t t y t z t = ¦ ¦   e   t = ´ ¦   = ¹     3.  Haga la grafica de la parte de la figura con radio = 5.        4.   Grafique el Toroide  |   | cos( )(4 cos( )) ( )(4 cos( )), [0, 2 ], 0, 2 ( ) x t v y sen t v t v z sen v =   ÷ ¦ ¦   =   ÷   e   t   e   t ´ ¦   = ¹             Matlab        70  CAP 7.  PROGRAMACIÓN EN MATLAB    1.  OPERADORES LÓGICOS Y RELACIONALES    Las condiciones se construyen con operadores relacionales y lógicos, los cuales son:     Símbolo  Operador Relacional  Símbolo  Operador Lógico  >  mayor que  ~A  Negación (NOT)  <  menor que  A&B  Conjunción (AND)  ==  igual que  A | B  Disyunción (OR)  ~=  diferente que  xor(A,B)  Disyunción exclusiva (XOR)  <=  menor o igual que      >=  mayor o igual que        Podemos  imponer  más  de  una  condición,  o  condiciones  complejas,  utilizando  los  operadores  relacionales  (condiciones  cuyo  resultado  es  cierto  o  falso)  combinados  con  operadores lógicos (sirven como nexo entre varios relacionales).      2.   PROGRAMAR EN MATLAB    Al igual que en los lenguajes de alto nivel, MATLAB permite crear programas utilizando  programación  estructurada.  Para  ello  cuenta  con  condicionales,  bucles  y  funciones.  Asimismo utiliza muchos de los recursos de la programación orientada a objetos.    ENTRAR EN EL ENTORNO DE EDICIÓN  -  MATLAB  tiene  integrado  su  propio  editor,  al  que  se  accede  desde  el  menú  “File”,  seleccionando  “New”,  si  vamos  a  crear  un  nuevo  archivo  debemos  elegir  la  opción  “m-file” u “Open” si vamos a un archivo creado previamente.     -  Pero MATLAB sólo puede ejecutar funciones (archivos- m) que estén en sus librerías  o  en  el  directorio actual;  por ello  es  necesario  cambiar  al  directorio  donde  salvamos  nuestro  archivo  antes  de  poder  ejecutarlo.  Para  ver  en  que  directorio  estamos  se  emplea  la  orden  “pwd”.      Mientras  que  para  cambiar  de  directorio  de  trabajo  se  usa  cd, por ejemplo para cambiar al directorio mio basta poner “cd C:\mio”. También es    Matlab        71  posible  realizar  el  cambio  mediante  la  opción  “Set  Path”  del  menú “File”,  pulsando  “Browser”.    SCRIPTS  Un  script  se  define  mediante  un  archivo-  m,  el  cual  esta  formado  por    un  conjunto  de  sentencias  pero  no  tiene  la  cualidad  de  ser  una  función  como  y  =  sin(x)  que  posee  argumentos de salida.    FUNCIONES  Una  función  se  define  mediante  un  archivo-  m,  cuyo  nombre  coincide  con  el  de  la  función. La primera línea ejecutable debe tener la palabra function. Su sintaxis es  function argumentos_salida= nombre_función (argumentos_entrada)  seguida  de  las  instrucciones  necesarias.  Cuando  hay  más  de  un  argumento  de  salida,  éstos deben ir entre corchetes y separados por comas.  Por ejemplo:      -  Comentarios  y  líneas  no  procesadas.    Los  comentarios  y  líneas  que  son  solo  explicatorios y que no desea el usuario que se procese se inician con '%', y anulan la  línea desde la posición del  '%' hasta el final de la línea para que no se procese.  -  Comando  return.  La  función  puede  finalizarse  en  cualquier  punto  utilizando  la  instrucción return.  -  Variables  locales.  Las  variables  definidas  en  la  función  (salvo  los  argumentos)  son  locales.   -  Variables globales (externas). Para que el valor de una variable sea compartido por  varias  funciones  de  forma  externa  se  emplea  la  instrucción  global,  cuya  sintaxis  es  global variable, y debe aparecer en todas las funciones que la compartan.    IMPLEMENTACIÓN DE UN PROGRAMA    Calcule el valor de la hipotenusa de un triángulo rectángulo a partir de sus dos catetos.   a)   Cree un Script.  b)   Cree una Función.  Solución:    a)  SCRIPT.  Crear el m-archivo  Desde  el  menú  “File”,  seleccionamos  “New”,  y  vamos  a  crear  un  nuevo  archivo  eligiendo la opción “m-file”, luego digitamos el programa como sigue:    Matlab        72    Con [Ctrl.]+[S] guardarlo como: hipot.m    Ejecución en la ventana de comandos   >> hipot  cateto a=2  cateto b=4  hip =      4.4721    b)  FUNCIÓN.  Crear el m-archivo    Con [Ctrl.]+[S] guardarlo como: hipotenusa.m    Nótese que este nombre del archivo es el mismo que de la función.    Matlab        73  Ejecución en la ventana de comandos  >>  h= hipotenusa(3,4)  h =  5    En resumen:                                                                              IMPLEMENTACIÓN DEL HELP PARA EL PROGRAMA    Para  implementar  la  ayuda  en  línea  se  usan  las  primeras  líneas  del  fichero  para  comentarios    (iniciándolas  con  '%'),  explicando  cómo  debe  usarse  la  función  y  sus  argumentos (tanto de entrada como de salida). Así, dicha definición será visible mediante  la instrucción help nomfuncion.    EJEMPLO    Construyo  el  programa  que  calcule  el  perímetro  del  triángulo,  implementando  también   su ayuda.  PROGRAMAS EN MATLAB   Script  Función  >> hipot  cateto a=2  cateto b=4  hip =      4.4721  >> h= hipotenusa(3,4)  h =  5  Ejecución en  la ventana de  comandos  Archivos  nombre.m     Matlab        74  .      Muestro la ayuda en línea de la función perimtri, digitando en la ventana de comandos:      Ejecuto la función perimtri cuando los lados son 2, 3 y 4.  >> perim = perimtri(2,3,4)  perim =       9    4.    ESTRUCTURAS DE CONTROL CONDICIONADAS    SENTENCIA if  Permite seleccionar entre dos conjuntos alternativos de instrucciones dependiendo de que  se  verifique  una  condición  lógica  (cuyo  resultado es  cierto  o  falso).  Su  sintaxis  es de  la  forma:      if condición  Instrucciones que deben ejecutarse si la condición es  verdadera  else  Instrucciones a ejecutar si la condición es falsa  end    Matlab        75      Cuando no hay instrucciones que ejecutar si la condición  no se cumple, la sintaxis anterior se reduce a      if condición  Instrucciones que deben ejecutarse  end    Al contrario, cuando se encadenan varios bloques alternativos, la sintaxis queda como:  if condición_1    Instrucciones a ejecutar cuando se verifica la condición 1  elseif condición_2    Instrucciones a ejecutar cuando no se verifica la condición 1 y sí la condición_2  elseif condición_3    Instrucciones a ejecutar cuando no se verifica la condición 1- condición 2  y sí la condición_3  …  else    Instrucciones a ejecutar cuando no se verifican las condiciones anteriores  end      INSTRUCCIONES PARA ARGUMENTOS DE ENTRADA Y SALIDA  Una función utiliza las siguientes instrucciones para verificar el número de argumentos:  nargin número de argumentos de entrada que el usuario ha pasado a la función.  nargout número de argumentos de salida que el usuario desea recibir de la función    LA FUNCIÓN error.  Muestra mensajes de error.  error('message')   Muestra un mensaje de error y finaliza el programa.  error('message',a1,a2, ...)  Muestra un mensaje de error conteniendo formatos similar  al printf del c++ o al fprintf del Matlab y finaliza el programa.    EJEMPLO    >> error('Valores Inconsistentes')  ??? Valores Inconsistentes      EJEMPLO    El  siguiente  programa  calcula  el  perímetro  de  un  triangulo  e  indica  error  en  la  función  perimtri(a,b,c) cuando no hay 3 argumentos (lados).       Matlab        76  Solución:    Creación de la función.      Grabar como: perimtri.m    Ejecución en la ventana de comandos  >> perim = perimtri(2,3,4)  perim =       9  >> perim = perimtri(2,3)  ??? Error using ==> perimtri  Número de argumentos incorrecto, debe introducir 3 argumentos    EJEMPLO  El  siguiente  programa  analiza  si  son  iguales  o  diferentes  las  matrices,  vectores  o  números.    Ejecución:  >> A=[1 2;3 4],B=[5 6;7 8]  A =       1     2       3     4  B =       5     6       7     8  >> compara(A,B)  ans =  distintas    Pero también se podría haber usado:   if A == B, 'iguales'  else, 'distintas'  end      EJEMPLO  El  siguiente  programa  analiza  el  tipo  de  triángulo  que  se  tiene,  dados  sus  tres  lados,  de  acuerdo con el siguiente algoritmo              a  b  c    Matlab        77  Entrada: coeficientes a, b y c (lados del triángulo)  Salida: tipo de triángulo  Paso 1: Verificar el número y coherencia de los argumentos  Paso 2: Ordenar los lados para comprobar si pueden formar un triángulo  Paso 3: SI la suma de dos de ellos es igual al tercero: Triángulo llano  Paso 4: SI los tres son iguales: Triángulo Equilátero  Paso 5: SI los dos son iguales: Triángulo Isósceles  Paso 6: SI los tres son distintos: Triángulo Escaleno  Paso 7: SI verifican el Teorema de Pitágoras: idem + rectángulo  Crear la función result=triangulo(a,b,c)  en el Matlab que realice esta acción.    Solución:    Creación de la función.   Desde  el  menú  “File”,  seleccionamos  “New”,  y  vamos  a  crear  un  nuevo  archivo  eligiendo la opción “m-file”, luego digitamos el programa como sigue:  function r=triangulo(a,b,c);  if nargin ~= 3      error('Número de argumentos incorrecto, debe ser 3 datos');  end  x=sort([a b c]);  if ~isempty(find(x<0))      error('Valores inconsistentes de algún lado');  end  if (x(3)>x(1)+x(2))      error('No forman un triangulo');  elseif (x(3)==x(1)+x(2))      r='Triangulo Llano';  else      if (x(1)==x(2) &  x(2)==x(3))          r='Triangulo Equilatero';          return;      elseif (x(1)==x(2) |  x(2)==x(3))          r='Triangulo Isosceles';      else          r='Triangulo Escaleno';      end      if (hipotenusa(x(1),x(2))==x(3))          r=[r,' rectangulo'];      end  end      Matlab        78    Grabarla como: triangulo.m    Ejecución en la ventana de comandos  >> result = triangulo(3,4,5)  result =  Triangulo Escaleno rectangulo  >> r=triangulo(sqrt(2), sqrt(2), 2)  r =  Triangulo Isosceles rectangulo  >> x=10*rand(1),y=10*rand(1),z=10*rand(1)  x =      6.0684  y =      4.8598  z =      8.9130  >> triangulo(x,y,z)  ans =  Triangulo Escaleno  >>  x=1.2105, y=4.5075, z=7.1588  x =      1.2105  y =      4.5075  z =      7.1588  >> r=triangulo(x, y, z)  ??? Error using ==> triangulo  No forman un triangulo    Si  queremos  verificar  la  cantidad  de  argumentos  de  entrada  y  salida  de  la  función  triangulo.m:  >> nargin('triangulo')  ans =       3  >> nargout('triangulo')  ans =       1    SENTENCIA switch    Matlab        79    Permite  seleccionar  entre  múltiples  posibilidades  dependiendo  de  que  la  expresión  se  encuentre dentro de los conjuntos definidos por case. Su sintaxis es de la forma:      switch expresion  % (escalar o cadena)      case conjunto1          sentencias   % se ejecutan si expresion e conjunto1       case conjunto2           sentencias   % se ejecutan si expresion e conjunto2     :      otherwise          sentencias % se ejecutan si expresion no esta en ningún conjunto  end    Nótese que los conjuntos se delimitan con llaves  y los elementos de este se separan por  comas tal como  {   } , , ,... a b c , si el conjunto solo tiene un elemento no necesita colocársele  llaves.    EJEMPLO    El siguiente programa determina la condición y tipo de estudiante según su promedio de  acuerdo a la siguiente tabla.    Promedio  Condición  Tipo  0..10  11..13  14..16  17..20  Desaprobado  Aprobado  Aprobado  Aprobado  Malo  Regular  Bueno  Excelente    Creando la función    Matlab        80    Ejecución en la ventana de comandos:  >> [cond,tipo]=reporte(14)  cond =  Aprobado  tipo =  Bueno    >> [cond,tipo]=reporte(7)  cond =  Desaprobado  tipo =  Malo    >> [cond,tipo]=reporte(10.7)  ??? Error using ==> reporte  Incorrecto, debe ser un numero entero  >> [cond,tipo]=reporte(24)  ??? Error using ==> reporte  Nota incorrecta, debe ser de 0 .. 20    NOTA  Una  variante  donde  es  posible  entrar  notas  decimales  y  que  el  programa  lo  redondee  y  por  ejemplo  si  Ud.  Introduce  10.5  daría  de  resultado  Aprobado  –  Regular,  seria  con  el  siguiente código:  function [cond,tipo] = reporte(n);  if nargin ~= 1, error('Numero de argumentos incorrecto') ,end  if (n<0 | n>20), error('Nota incorrecta, debe ser de 0 .. 20') ,end  cond='Aprobado';  tipo='Malo';  n=round(n);  %código que redondea la nota  switch n      case {0,1,2,3,4,5,6,7,8,9,10}          cond='Desaprobado';      case {11,12,13}          tipo='Regular';       case {14,15,16}          tipo='Bueno';         case {17,18,19,20}          tipo='Excelente';  end  Así si se ejecuta en la ventana de comandos, se tendrá:  >> [c,t]=reporte(10.5)  c =  Aprobado  t =  Regular  >>[c,t]=reporte(13.7)  c =  Aprobado  t =  Bueno    Matlab        81       SENTENCIA try … catch    La  sentencia  try  …  catch  …  end  permite  gestionar  los  errores  que  se  producen  en  tiempo de ejecución.  Su sintaxis es:    try     Instrucciones1  catch     Instrucciones2  end    En el caso de que durante la ejecución del bloque Instrucciones1 se produzca un error, el  control de la ejecución se transfiere al bloque Instrucciones2.  Si la ejecución del bloque  Instrucciones1 transcurriera normalmente, Instrucciones2 no se ejecutaría.    La  instrucción  lasterr  se  utiliza  para  ver  la  causa  del  último  error,  es  decir  lasterr  devuelve una cadena de caracteres con el mensaje correspondiente al último error que se  ha producido.      EJEMPLO  Programa que adivina la edad.      Ejecución en la ventana de comandos:  >> adivina  ¿Qué edad tengo?  Primera oportunidad  edad=15  ¡Felicitaciones! ... Adivinaste en la primera  >> adivina  ¿Qué edad tengo?  Primera oportunidad  edad=14  Segunda oportunidad  edad=15  ¡Felicitaciones! ... Adivinaste en la segunda  >> adivina  ¿Qué edad tengo?  >> lasterr  ans =    Matlab        82  Primera oportunidad  edad=14  Segunda oportunidad  edad=16  No adivinaste ... fue tu última oportunidad  Error using ==> adivina  je je  5.    APROXIMACIONES Y PRECISIÓN EN LOS CÁLCULOS    Matlab representa los resultados con exactitud, pero aunque internamente siempre trabaja  con cálculos exactos para no arrastrar errores de redondeo, pueden habilitarse diferentes  formatos  de  representación  aproximada,  que  en  ocasiones  facilitan  la  interpretación  de  los  resultados.  A  continuación  se  citan  los  comandos  que  permiten  aproximaciones  numéricas.    format long   Ofrece los resultados con 16 cifras decimales.  format short   Ofrece los resultados con 4 cifras decimales. Se trata del formato por defecto de Matlab.  format long e   Ofrece los resultados con 16 decimales más potencias de 10.  format short e   Ofrece los resultados con 4 decimales más potencias de 10.  format bank   Ofrece los resultados con 2 cifras decimales.  format rat   Ofrece los resultados en forma de número racional aproximado.  format +   Ofrece el signo de los resultados (+, - o 0).  format hex   Ofrece los resultados en el sistema hexadecimal.  vpa ‘operaciones’ n  Ofrece el resultado de las operaciones con n dígitos decimales exactos.  numeric(‘expr’)   Ofrece  el  valor  de  la  expresión  de  forma  numérica  aproximada  según  el  formato  actual  activo.  digits(n)   Ofrece los resultados con n dígitos exactos.      SISTEMAS DE NUMERACIÓN  Matlab  permite  trabajar  con  sistemas  de  numeración  de  base  cualquiera,  siempre  y  cuando  se  disponga  del  Toolbox  extendido  de  matemáticas  simbólica.  Además,  permite  expresar  los  números  en  las  diferentes  bases.  Las  funciones  de  trabajo  con  sistemas  de  numeración en diferentes bases que implementa Matlab son las siguientes:  dec2bin   Convierte en número decimal especificado a base 2 (binaria)  dec2hex   Convierte el número decimal especificado a base 16 (hexadecimal)  dec2base   Convierte el número decimal especificado a la base indicada  bin2dec   Convierte el número binario especificado a base decimal  hex2dec   Convierte el número hexadecimal especificado a base decimal  base2dec   Convierte el número de la base especificada a base decimal    EJEMPLO  FORMATO  REPRESENTACIÓN  "formato largo"  de  3   » sqrt(3);format long; ans  "formato racional" de  3   » format rat; ans  "con 10 cifras decimales" de  3   » vpa(ans,10)  "con 100 cifras decimales" de  t  » vpa 'pi' 100  "con 20 cifras decimales" de  t  » digits(20); vpa '173/13'   "Representación binaria" de 1234  » dec2bin(1234)  "Representación en base 10" de un valor en base 16  » base2dec(‟BF34A‟,16)    EJEMPLO    Matlab        83  Para ver el formato actual  usar get(0,'format')  >> format bank;22/3  ans =            7.33  >> get(0,'format')  ans =  bank    VARIABLES ESPECIALES  En Matlab existen variables de uso común, cuyo valor viene ya preasignado.  pi   3.1415926535897932385…   i ó j   Unidad imaginaria ( 1 ÷ )  inf   Infinito, por ejemplo 1/0  eps   Menor  valor  positivo  que  sumado  a  la  unidad  tiene  representación  diferente  a  1.  Indica  la  distancia  desde  1.0  al  siguiente  número  en  coma  flotante.  NaN   Indeterminación (Not a Number, por ejemplo 0/0)  realmin  El menor número real positivo utilizable  realmax El mayor número real positivo utilizable  ans   Variable  creada  automáticamente  para  representar  el  último  resultado  procesado  que  no  se  ha  asignado a ninguna variable.      De  igual  forma,  se  puede  interrogar  al  sistema  sobre  sus  características  o  las  características de las variables que estamos manejando  finite(x)  Devuelve 1 si x es finito, y cero en otro  caso   isnan(x)  Da  1  si  x  es  indeterminado  y  cero  en  otro caso  version   Devuelve la versión actual de Matlab  clock   Devuelve una  lista con  los 6 elementos  [año mes dia hora minutos segundos]  date   Devuelve la fecha del calendario actual  diary   Guarda  el  texto  de  la  sesión  actual  de  Matlab  ver   Da  información  sobre  el  programa  y  sus Toolbox  isinf(x)   Da 1 si x es infinito o – infinito, y cero  en otro caso  computer Devuelve el tipo de computador  why   Devuelve un mensaje sucinto  whatsnew Informa acerca de características nueva   de Matlab  lasterr   Devuelve el último mensaje de error   demo   Ejecuta demostraciones sobre Matlab  pack   Consolida  el  espacio  de  trabajo  en  memoria  info   Da información acerca de Matlab  hostid   Identifica el número del host servidor    6.    BUCLES          BUCLES SIMPLES: SENTENCIA for    Permite  repetir  un  número  determinado  de  veces  un  conjunto  de  instrucciones.  Su  sintaxis es la siguiente:      Matlab        84      for var = vector         Instrucciones que deben ejecutarse  end    El  argumento  vector  puede  ser  efectivamente  un  vector,  en  cuyo  caso  la  variable  va  tomando  los  valores  de  las  componentes  del  vector,  o  una  estructura  de  la  formainicio : incremento : fin, en cuyo caso la variable va tomando valores desde inicio  hasta fin con un determinado incremento. Si no se indica el valor del incremento, este se  toma  como  unidad.  El  número  de  veces  que  se  repite  el  bucle  viene  dado  por  la  dimensión del vector o por la expresión  1 fin inicio n incremento ÷ =   + .    EJEMPLO  Calcular con for la suma M =  1(4)(2) + 2(5)(4) + 3(6)(6) +  . . .+ 20(23)(40).  Solución:  Expresándolo a través del símbolo de sumatoria  20 1 ( 3)(2 ) k M k k k = =   + ¿   Creando el script.  Guardarlo como:suma1.m      Ejecución en la ventana de comandos:  >> suma1  s =        105420    También el for se puede usar con una matriz   for var = matriz         Instrucciones que deben ejecutarse  end  En este caso la variable va pasando columna por columna de la matriz.    EJEMPLO      Matlab        85  Hacer tres gráficos en tres ventanas de gráficos usando for.    Solución:    Creando el script.  Guardarlo como: ploteos.m    C:\matlab7\work\ploteos.m  x1=[0:0.1:5]';           % 51 elementos  x2=[-2.5:0.1:2.5]';    % 51 elementos  x3=[-pi:pi/25:pi]';     % 51 elementos  A=[x1 x2 x3];  f=1;  for k=A      figure(f);      plot(k,sin(k));      f=f+1;  end      Ejecución en la ventana de comandos:                  >> ploteos                    Matlab        86          BUCLES CONDICIONALES: SENTENCIA while  Permite repetir un conjunto de instrucciones, en tanto se satisfaga una condición lógica.   Su sintaxis es la siguiente:    while condición  Instrucciones que deben ejecutarse mientras la  condición sea cierta.  end    EJEMPLO  Implemente la función elevapol(p,n) la cual eleve el polinomio “p” al exponente “n”.      C:\matlab7\work\elevapol.m  function y=elevapol(p,n);  %función elevapol(p,n) la cual eleva el polinomio 'p' al exponente 'n'  pro=1;  i=1;  while i<=n      pro=conv(pro,p);      i=i+1;  end  y=pro;    Ejecución:  Si queremos elevar  1 x +  al exponente 4, ejecutamos en la ventana de comandos    Matlab        87  >> p=[1 1]  %definición del polinomio  p =       1     1  >> elevapol(p,4)  ans =       1     4     6     4     1  Si queremos elevar  2 2 x x i ÷   ÷  al exponente 3, ejecutamos en la ventana de comandos  >> q=[1,-2,-i]  %definición del polinomio  q =     1.0000            -2.0000                  0 - 1.0000i  >> elevapol(q,3)  ans =    Columns 1 through 4      1.0000                           -6.0000            12.0000 - 3.0000i             -8.0000 +12.0000i    Columns 5 through 7     -3.0000 -12.0000i            6.0000                  0 + 1.0000i      BREAK Y CONTINUE  La instrucción continue pasa el control a la iteración siguiente en el bucle for o while es  decir ignora las instrucciones que siguen al continue en el cuerpo del bucle.  La  instrucción  break  finaliza  la  ejecución  del  bucle  for  o  while  y  luego  el  programa  sigue  fuera  del  bucle.    Hay  muchos  usos  para  la  instrucción  break,  uno  de  los  bastante  usados es para salir de un bucle infinito, como por ejemplo    while (1)     …..     if (condicion)         break;     end     ……  end        while (condición)     …..     if (condicion)         continue;     end     ……  end        EJEMPLO  Crear una  matriz aleatoria de tamaño aleatorio y dar la suma de sus columnas.  Se crea la función de suma aleatoria [A,suma]=srandom. Se graba como: srandom.m  function [A,s]=srandom;  n=1;A=[ ];s=sum(A);  while (1)  Bucle  infinito  Salida del  bucle  Bucle  infinito  Hasta el  final    Matlab        88      if (s>4)             break;      end      A=rand(n);      s=sum(A);      n=n+1;  end      Ejecución en la ventana de comandos:  >> [A, s] = srandom  A =      0.8084    0.1506    0.1401    0.9466    0.1971    0.4071    0.4224      0.3179    0.7037    0.2376    0.8863    0.1945    0.8323    0.4557      0.3486    0.0738    0.8742    0.5377    0.5504    0.1927    0.6174      0.2536    0.0525    0.8607    0.8132    0.0184    0.6799    0.7427      0.9215    0.5236    0.6516    0.2425    0.1610    0.9183    0.9960      0.7035    0.6495    0.8741    0.3639    0.5352    0.0462    0.9279      0.7062    0.2334    0.9637    0.6775    0.4281    0.8809    0.0191  s =      4.0596    2.3872    4.6021    4.4677    2.0847    3.9574    4.1812        7.  SUBFUNCIONES    Las funciones definidas mediante m – archivos pueden contener código para más de una  función.    La  función  en  el  m  –  archivo  se  denomina  función  primaria,  que  es  precisamente  la  función  que  invoca  el  m  –  archivo.    Pero  adicionalmente  pueden  haber  subfunciones colgando de la función primaria y que sólo son visibles para dicha función  primaria  o  para  otra  subfunción  dentro  del  mismo  m  –  archivo.    Cada  subfunción  comienza con su propia línea de definición de función.     La estructura de un programa con subfunciones es como sigue:    function A=funprincipal(a,b,…);        function M1=subfun1(x1,y1,…);      function M2=subfun2(x2,y2,…);      .  :    function Mn=subfunn(xn,yn,…);            Matlab        89    EJEMPLO  Implementación  del  programa  que  calcula  el  promedio  de  una  colección  de  datos,  es  decir:             [1] Media Aritmética  [2] Media Geométrica  [3] Media Armónica          C:\MATLAB7\WORK\medias.m  function r=medias(x);  n=length(x);  %tamaño del vector  if ~isempty(find(x<0))  %validación de datos       error('No puede haber datos negativos');  end  disp('  PROMEDIOS ');  disp(' ========== ');  disp('[1] Media Aritmética ');  disp('[2] Media Geométrica ');  disp('[3] Media Armónica ');  disp('[4] Salir ');  op = input('Ingrese opcion ==> ');  switch (op)      case 1          disp('La Media Aritmética es:');          r=ma(x,n);    case 2          disp('La Media Geométrica es:');          r=mg(x,n);      case 3          disp('La Media Armónica es:');          r=mh(x,n);      case 4          r='Fin';return;  end    function rr=ma(x,n);  rr=sum(x)/n;    function rr=mg(x,n);  rr=prod(x)^(1/n);    function rr=mh(x,n);  rr=n/sum(1./x);    Ejecución:  >> x=[4,7,10,13]  >> x=[2 -1 3 4]    Matlab        90  x =       4     7    10    13  >> medias(x)    PROMEDIOS      =========    [1] Media Aritmética  [2] Media Geométrica  [3] Media Armónica  [4] Salir  Ingrese opcion:2  La Media Geométrica es:  ans =      7.7674  x =       2    -1     3     4  >> medias(x)  ??? Error using ==> medias  No puede haber datos negativos      MANEJO DE FORMATOS DE SALIDA    USO DE fprintf PARA SALIDAS EN LA VENTANA DE COMANDOS    Las  salidas  de  información  en  la  ventana  de  comandos  se  pueden  hacer  mediante  el  comando  disp(dato),  sin  embargo  este  comando  no  tiene  mucha  versatilidad  en  el  manejo  de  formatos  de  salida  especialmente  con  información  numérica.    Es  por  esto  que  podemos  emplear  el  comando  fprintf(‘formato’,arg1,arg2,arg3,....)  para  sacar  una  presentación  más  adecuada  en  la  ventana  de  comandos.  La ventaja es que dentro del ‘formato’ se pueden incluir los caracteres especiales del lenguaje  de programación C++    Caracteres especiales del C++ y el Matlab:  ‘%c’  para caracter  ‘%d’  para número entero  ‘%f’  para número real  ‘%s’  para cadena  ‘%u’  para número entero positivo  ‘%x’  para salida hexadecimal  ‘%o’  para salida octal  ‘\n’  para salto de línea  ‘\t’  para tabulación  ‘\b’  para retroceso (backspace)  ‘\\’  para imprimir ‘\’  ‘%%’  para imprimir ‘%’    EJEMPLO  >> N=14;nom='Carola';fprintf('El promedio de %s es de %d',nom,N)  El promedio de Carola es de 14  >> N=14;fprintf('%d en el sistema octal es %o',N,N)  14 en el sistema octal es 16  >> ape='Hermenegildo';nom='Bush';fprintf('mi apellido es %s\nmi nombre es %s',ape,nom)  mi apellido es Hermenegildo  mi nombre es Bush  >> fprintf('La tercera parte de 22 es %0.2f',22/3)  La tercera parte de 22 es 7.33  >> fprintf('La tercera parte de 22 es %10.2f',22/3)    Matlab        91  La tercera parte de 22 es       7.33    EJEMPLO  Imprimir 10 números aleatorios y sus cuadrados.        Ejecución en la ventana de comandos  >> cuadra    k  x  x^2  -----------------------------    1  1.365187  1.863737    2  0.117567  0.013822    3  8.938980 79.905357    4  1.991381  3.965597    5  2.987230  8.923544    6  6.614426 43.750628    7  2.844086  8.088825    8  4.692243 22.017143    9  0.647811  0.419659   10  9.883349 97.680595    Matlab        92    EJERCICIOS    SCRIPTS,  FUNCIONES,  PROGRAMACIÓN,  M-FILES    1.  Sea A una matriz de mxn y B una matriz de pxq.  Implemente la función bloque(A,B)  la cual genere la matriz bloque diagonal (m+p)x(n+q).  2.  Crear la función (programa) r = mmedad(n) que al ingresar la edad de la persona „n‟,  determine si es 1=„mayor de edad‟ o 0=„menor de edad‟ sin usar el comando if. Por  ejemplo cuando ejecute en la ventana de comandos:  >>r = mmedad(17)  debe dar:  r =      0    3.  Escribir una función (programa) para calcular el mayor y menor lado de un triángulo  sin usar la sentencia if.   4.  Implemente la función polysum(p,q) la cual sume los dos polinomios.  5.  Implemente  la  función  antidiag(A)  la  cual  extraiga  la  antidiagonal  de  la  matriz  A.   Dicha  función  deberá  mostrar  un  mensaje  de  error  en  caso  que  la  matriz  A    no  sea  cuadrada.  6.  Implemente la función  sgeo(x, n) para calcular la suma de los primeros n términos de  la  serie  2 3 1 1 ... 1 x x x x  =   +   +   +   + ÷ .    Validar  para  que  solo  acepte  valores  de  x  tal  que  1 x <  .  7.  Implemente una función aitken(n) que genere n términos de la sucesión definida por  2 1 2 1 ( ) 2 n n n n n n n x x y x x x x + +   + ÷ =   ÷ ÷   +   Siendo  1 1 ( ), ( ) 2 , 0.5 x n n x g x g x x ÷ ÷ =   =   =