Matlab Para Ingenieros y Cientificos

440

Transcript of Matlab Para Ingenieros y Cientificos

Page 1: Matlab Para Ingenieros y Cientificos
Page 2: Matlab Para Ingenieros y Cientificos

MATLAB

Para Ingenieros y Científicos

MARÍA PÉREZ MARQUÉS

Page 3: Matlab Para Ingenieros y Cientificos

ÍNDICE

NÚMEROS REALES Y COMPLEJOS. FUNCIONES DE VARIABLE REAL Y COMPLEJA

VARIABLES Y FICHEROS

OPERADORES Y FUNCIONES

EXPRESIONES ALGEBRÁICAS, POLINOMIOS E INTERPOLACIÓN

GRÁFICOS

ÁLGEBRA MATRICIAL

ESPACIOS VECTORIALES Y APLICACIONES LINEALES. ECUACIONES Y SISTEMAS

LÍMITES DE SUCESIONES Y FUNCIONES, CONTINUIDAD. UNA Y VARIAS VARIABLES

SERIES NUMÉRICAS Y SERIES DE POTENCIAS

DERIVABILIDAD Y APLICACIONES

DERIVABILIDAD EN VARIAS VARIABLES. APLICACIONES

CALCULO DIFERENCIAL VECTORIAL Y TEOREMAS EN VARIAS VARIABLES

INTEGRACIÓN Y APLICACIONES

TIPOS ESPECIALES DE INTEGRALES

INTEGRACIÓN EN VARIAS VARIABLES Y APLICACIONES

ECUACIONES DIFERENCIALES

PROGRAMACIÓN

Page 4: Matlab Para Ingenieros y Cientificos

Capítulo 1

NÚMEROS REALES Y COMPLEJOS. FUNCIONES DE VARIABLE REAL Y COMPLEJA

NÚMEROS REALES El conjunto de los números reales es la unión disjunta del conjunto de losnúmeros racionales y del conjunto de los números irracionales. Como a su vez el conjuntode los números racionales contiene al conjunto de los números enteros, todas lasfunciones aplicables a números reales, serán válidas a su vez para números irracionales,racionales y enteros. FUNCIONES MÁS COMUNES CON ARGUMENTO REAL Matlab dispone de una gama muy completa de funciones predefinidas, la mayoríade las cuales se estudian en capítulos sucesivos de este libro. Dentro del grupo defunciones con argumento real que ofrece Matlab, las más importantes son las siguientes: Funciones trigonométricas Función Inversa --------------------------------------------- sin(x) asin(x) cos(x) acos(x) tan(x) atan(x) csc(x) acsc(x) sec(x) asec(x) cot(x) acot(x) atan2(x) (inversa de la tangente en el cuarto cuadrante) Funciones hiperbólicas

Page 5: Matlab Para Ingenieros y Cientificos

Función Inversa ----------------------------------------------- sinh(x) asinh(x) cosh(x) acosh(x) tanh(x) atanh(x) csch(x) acsch(x) sech(x) asech(x) coth(x) acoth(x) Funciones exponenciales y logarítmicas Función Significado ------------------------------------------------------------------------- exp(x) Función exponencial en base e (e^x) log(x) Función logaritmo en base e de x log10(x) Función logaritmo en base 10 de x sqrt(x) Función raíz cuadrada de x Funciones específicas de variable numérica. Función Significado ------------------------------------------------------------------------------------- abs(x) Valor absoluto del real x floor(x) El mayor entero menor o igual que el real x ceil(x) El menor entero mayor o igual que el real x round(x) El entero más próximo al real x fix(x) Elimina la parte decimal del real x rem(a,b) Da el resto de la división entre los reales a y b sign(x) Signo del real x (1 si x>0 , -1 si x<0)

Veamos algunos ejemplos: En primer lugar vemos como la función “round” realiza el redondeo de cualquiernúmero real. » round(2.574) ans = 3 » round(2.4)

Page 6: Matlab Para Ingenieros y Cientificos

ans = 2 » round(sqrt(17)) ans = 4 El significado de la función “ceil” se ilustra en los dos siguientes casos. » ceil(4.2) ans = 5 » ceil(4.8) ans = 5 El significado de la función “floor” lo vemos en los dos siguientes ejemplos. » floor(4.2) ans = 4 » floor(4.8) ans = 4 La función “fix” se limita a eliminar la parte decimal de un número real. » fix(5.789) ans =

Page 7: Matlab Para Ingenieros y Cientificos

5 NÚMEROS COMPLEJOS Matlab también trata el campo de los números complejos. Siguiendo laconvención de que todas las funciones incorporadas en Matlab empiezan con minúscula,una ”i” o una “j” minúsculas representan el número imaginario Ö-1, que es el valor claveen todo el análisis de variable compleja. Sobre los números complejos pueden ser aplicados los operadores habitualesademás de algunas funciones específicas. Tanto la parte real como la parte imaginaria delos números complejos pueden ser constantes simbólicas o cualquier número real y lasoperaciones con ellos se realizan siempre en modo exacto, a no ser que en algunaintervenga una aproximación decimal, en cuyo caso se devuelve una aproximación delresultado. Como la unidad imaginaria se representa mediante el símbolo "i" o “j”, losnúmeros complejos se expresan en la forma "a+bi" o "a+bj". Es notorio el hecho de nonecesitar el símbolo del producto (el asterisco) antes de la unidad imaginaria. » (2-3i)*(1-i)/(-1+2i) ans = -1.8000 + 1.4000i » format rat» (2-3i)*(1-i)/(-1+2i) ans = -9/5 + 7/5i FUNCIONES COMUNES CON ARGUMENTO COMPLEJO Matlab realiza las operaciones usuales con números complejos, pero además hayvarias funciones incorporadas en el programa para trabajar con números complejos. La función real(Z) devuelve la parte real del complejo Z. » real(3+4i) ans = 3

Page 8: Matlab Para Ingenieros y Cientificos

La función imag(Z) devuelve la parte imaginaria de Z. » imag(3+4i) ans = 4 La función conj(Z) devuelve el conjugado de Z. » conj(3+4i) ans = 3 - 4i La función abs(Z) devuelve el módulo de Z. » abs(3+4i) ans = 5 La función angle(Z) devuelve el argumento de Z » angle(3+4i) ans = 0.9273 Además de estas funciones específicas de la variable compleja, existen muchasotras funciones que pueden ser aplicadas a los números complejos. Por ejemplo, la función round(Z) redondea tanto la parte real como laimaginaria de Z. » round(2.7-8.4i) ans = 3.0000 - 8.0000i

Page 9: Matlab Para Ingenieros y Cientificos

Hay muchas más funciones en Matlab que trabajan con números complejos,incluyendo Sin, Cos, Ex y Log, etc. Algunas de las más importantes se presentan en lasiguiente tabla: Funciones trigonométricas Función Inversa --------------------------------------------- sin(Z) asin(Z) cos(Z) acos(Z) tan(Z) atan(Z) csc(Z) acsc(Z) sec(Z) asec(Z) cot(Z) acot(Z) atan2(Z) (inversa de la tangente en el cuarto cuadrante) Funciones hiperbólicas Función Inversa ----------------------------------------------- sinh(Z) asinh(Z) cosh(Z) acosh(Z) tanh(Z) atanh(Z) csch(Z) acsch(Z) sech(Z) asech(Z) coth(Z) acoth(Z) Funciones exponenciales y logarítmicas Función Significado ------------------------------------------------------------------------- exp(Z) Función exponencial en base e (e^Z) log(Z) Función logaritmo en base e de Z log10(Z) Función logaritmo en base 10 de Z sqrt(Z) Función raíz cuadrada de Z Funciones específicas para las partes real e imaginaria. Función Significado -------------------------------------------------------------------------------------

Page 10: Matlab Para Ingenieros y Cientificos

floor(Z) Aplica la función “floor” a real(Z) y a imag(Z) ceil(Z) Aplica la función “ceil” a real(Z) y a imag(Z) round(Z) Aplica la función “round” a real(Z) y a imag(Z) fix(Z) Aplica la función “fix” a real(Z) y a imag(Z) Funciones específicas de variable compleja. Función Significado -------------------------------------------------------------------------- abs(Z) o maple(‘abs(Z)’) Módulo angle(Z) o maple(‘argument(Z)’) Argumento conj(Z) o maple(‘conjugate(Z)’) Conjugado real(Z) o maple(‘Re(Z)’) Parte real imag(Z) 0 maple(‘Im(Z) Parte imaginaria Hay que destacar que, como los números reales son un caso particular de loscomplejos (parte imaginaria nula), todas las funciones definidas anteriormente tambiénson válidas para variable real. Ejercicio 1-8. Dados los números complejos: X=3+2i , Y=1-2i y Z=i^307, calcular X+Y+Z, X*Y*Z, X/Y e Y/Z » 3+2*i + 1-2*i - i^307 ans = 6.0000 + 1.0000i » (3+2*i)*(1-2*i)*i^307 ans = 0.0000 -13.0000i » (3+2*i)/(1-2*i) ans = 0.3846 + 0.9231i » (1-2*i)/i^307 ans =

Page 11: Matlab Para Ingenieros y Cientificos

2.0000 + 3.0000i Ejercicio 1-9. Dados los números complejos X=2+2i eY=-1-3Sqrt[3] i , calcular Y^3 y X^2/Y^90 » (-1-3*sqrt(3)*i)^3 ans = 2.1600e+002+ 5.2903e-014i » (2+2*i)^2/(-1-3*sqrt(3)*i)^90 ans = 1.6008e-083+ 7.4042e-070i Ejercicio 1-10. Calcular el valor de : i^8 - i^(-8) ------------- + i 2i-1 » (i^8-i^(-8))/(1-4*i) + 1 ans = 1.0000 - 0.0000i Ejercicio 1-11. Calcular el módulo y el argumento de los complejos: i i 3+i i 1-ii , i , i y (1+Ö3 i) » abs(i^i) ans = 0.2079

Page 12: Matlab Para Ingenieros y Cientificos

» angle(i^i) ans = 0 » abs(i^(3+i)) ans = 0.2079 » angle(i^(3+i)) ans = -1.5708 » abs((i^i)^i) ans = 1 » angle((i^i)^i) ans = -1.5708 Ejercicio 1-13. Resolver las siguientes ecuaciones: a) 1+x+x2 +x3 +x4 +x5 = 0b) x2 +(6-i)x+8-4i = 0 a) » solve('1+x+x^2+x^3+x^4+x^5 = 0') ans = [ -1]

Page 13: Matlab Para Ingenieros y Cientificos

[-1/2+1/2*i*3^(1/2)][-1/2-1/2*i*3^(1/2)][ 1/2+1/2*i*3^(1/2)][ 1/2-1/2*i*3^(1/2)] b) » solve('x^2+(6-i)*x+8-4*i = 0') ans = [-3+1/2*i+1/2*(3+4*i)^(1/2)][-3+1/2*i-1/2*(3+4*i)^(1/2)] Ejercicio 1-14. Realizar las siguientes operaciones: b) (2+Ln(i)) 1/i

c) (1+i) i d) i Ln(1+i)

e) (1+i*sqrt(3)) 1-i

b) El resultado aproximado lo podemos hallar en este caso planteando la operacióndirectamente a Matlab (ya que no contiene expresiones trigonométricas complejas). » (2+log(i))^(1/i) ans = 1.1581 - 1.5639i c) » (1+i)^i ans = 0.4288 + 0.1549i

Page 14: Matlab Para Ingenieros y Cientificos

d) » i^log(1+i) ans = 0.2491 + 0.1508i » (1+i*sqrt(3))^(1-i) ans = 5.3458 + 1.9759i Ejercicio 1-15. Realizar las siguientes operaciones: a) raíces cuartas de -1 y de 1b) raíces quintas de 2+2i y de -1+iÖ3c) parte real de Tan(iLn((a+ib)/(a-ib)))d) parte imaginaria de Z= (2+i) Cos(4-i)

a) » solve('x^4+1=0') ans = [ 1/2*2^(1/2)+1/2*i*2^(1/2)][-1/2*2^(1/2)+1/2*i*2^(1/2)][ 1/2*2^(1/2)-1/2*i*2^(1/2)][-1/2*2^(1/2)-1/2*i*2^(1/2)]

El resultado aproximado lo podemos obtener fácilmente. » numeric(solve('x^4+1=0')) ans = 0.7071 + 0.7071i -0.7071 + 0.7071i 0.7071 - 0.7071i -0.7071 - 0.7071i

Page 15: Matlab Para Ingenieros y Cientificos

» solve('x^4-1=0') ans = [ 1][-1][ i][-i] b) » solve('x^5-2-2*i=0') ans = [ (2+2*i)^(1/5)][ (1/4*5^(1/2)-1/4+1/4*i*2^(1/2)*(5+5^(1/2))^(1/2))*(2+2*i)^(1/5)][(-1/4*5^(1/2)-1/4+1/4*i*2^(1/2)*(5-5^(1/2))^(1/2))*(2+2*i)^(1/5)][(-1/4*5^(1/2)-1/4-1/4*i*2^(1/2)*(5-5^(1/2))^(1/2))*(2+2*i)^(1/5)][ (1/4*5^(1/2)-1/4-1/4*i*2^(1/2)*(5+5^(1/2))^(1/2))*(2+2*i)^(1/5)] Ahora hallamos el resultado aproximado. » numeric(solve('x^5-2-2*i=0')) ans = 1.2160 + 0.1926i 0.1926 + 1.2160i -1.0970 + 0.5589i -0.8706 - 0.8706i 0.5589 - 1.0970i c) » solve('x^5+1-sqrt(3)*i=0') ans = [ (-1+i*3^(1/2))^(1/5)][ (1/4*5^(1/2)-1/4+1/4*i*2^(1/2)*(5+5^(1/2))^(1/2))*(-1+i*3^(1/2))^(1/5)][(-1/4*5^(1/2)-1/4+1/4*i*2^(1/2)*(5-5^(1/2))^(1/2))*(-1+i*3^(1/2))^(1/5)][(-1/4*5^(1/2)-1/4-1/4*i*2^(1/2)*(5-5^(1/2))^(1/2))*(-1+i*3^(1/2))^(1/5)][ (1/4*5^(1/2)-1/4-1/4*i*2^(1/2)*(5+5^(1/2))^(1/2))*(-1+i*3^(1/2))^(1/5)]

Page 16: Matlab Para Ingenieros y Cientificos

El resultado aproximado es de obtención inmediata. » numeric(solve('x^5+1-sqrt(3)*i=0')) ans = 1.0494 + 0.4672i -0.1201 + 1.1424i -1.1236 + 0.2388i -0.5743 - 0.9948i 0.7686 - 0.8536i e) » numeric(maple('evalc(Im((2+i)^cos(4-i)))')) ans = -0.6211 APROXIMACIONES Y PRECISIÓN EN LOS CÁLCULOS La exactitud de la salida de los resultados de las operaciones con Matlab puederelajarse utilizando técnicas especiales de aproximación al resultado exacto con undeterminado grado de precisión. Matlab representa los resultados con exactitud, pero aunque internamentesiempre trabaja con cálculos exactos para no arrastrar errores de redondeo, puedenhabilitarse diferentes formatos de representación aproximada, que en ocasiones facilitanla interpretación de los resultados. A continuación se citan los comandos que permiteaproximaciones 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

Page 17: Matlab Para Ingenieros y Cientificos

format bank Ofrece los resultados con 2 cifras decimales format rat Ofrece los resultados en forma de número racional aproximadoformat + Ofrece el signo de los resultados (+, - ó 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 maple(‘evalf(expr)’) Evalúa numéricamente la expresión con el número de dígitos exactos especificados con “digits” maple(‘evalhf(expr)’) Evalúa numéricamente la expresión con doble precisión y el número de dígitos exactos especificados con “digits” maple(‘evala(expr)’) Evalúa algebráicamente la expresión maple(‘evalc(expr)’) Evalúa con doble precisión la expresión compleja maple(‘evalr(expr)’) Evalúa una expresión que contiene rangos de variables o desigualdades o símbolos lógicos Veamos algunos ejemplos. Mediante “format”, obtenemos una aproximación numérica de Ö17 de la maneraespecificada en el formato. » sqrt(17) ans = 4.1231 » format long;sqrt(17)

Page 18: Matlab Para Ingenieros y Cientificos

ans = 4.12310562561766 » format long e;sqrt(17) ans = 4.123105625617660e+000 » format short e;sqrt(17) ans = 4.1231e+000 » format bank;sqrt(17) ans = 4.12 » format hex;sqrt(17) ans = 40107e0f66afed07 Ahora vamos a ver ejemplos del cálculo del valor de sqrt(17) con las cifrasdecimales de precisión que nos apetezcan. » vpa 'sqrt(17)' 10 ans = 4.123105626 » digits(15);maple('evalf(sqrt(17))') ans = 4.12310562561766

Page 19: Matlab Para Ingenieros y Cientificos

» digits(15);maple('evalhf(sqrt(17))') ans = 4.123105625617661 » digits(15);maple('evala(sqrt(17))') ans = 17^(1/2) Aproximación decimal de la raíz de dos con 100 cifras de precisión. » vpa 'pi' 100 ans = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 » digits(100);maple('evalf(pi)') ans = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 NÚMEROS ALEATORIOS La generación automática de números aleatorios es un problema perfectamentetratado en Matlab. Matlab proporciona la función “rand” para generar números aleatorios distribuidosuniformemente, y la función “randn” para generar números aleatorios normales. Lasfunciones generan números aleatorios de coma flotante. rand Devuelve un número decimal aleatorio distribuido uniformemente en el intervalo [0,1] rand(n) Devuelve una matriz de dimensión nxn cuyos elementos son números decimales aleatorios distribuidos uniformemente en el intervalo [0,1] rand(m,n) Devuelve una matriz de dimensión mxn cuyos elementos son números decimales aleatorios distribuidos

Page 20: Matlab Para Ingenieros y Cientificos

uniformemente en el intervalo [0,1] rand(size(A)) Devuelve una matriz del mismo tamaño que la matriz A y cuyos elementos son números decimales aleatorios distribuidos uniformemente en el intervalo [0,1] rand(‘seed’) Devuelve el valor actual de la semilla generadora de los números aleatorios uniformes rand(‘seed’,n) Coloca en la cantidad n el valor actual de la semilla generadora de los números aleatorios uniformes randn Devuelve un número decimal aleatorio distribuido según una normal de media 0 y varianza 1 randn(n) Devuelve una matriz de dimensión nxn cuyos elementos son números decimales aleatorios distribuidos según una normal de media 0 y varianza 1 randn(m,n) Devuelve una matriz de dimensión mxn cuyos elementos son números decimales aleatorios distribuidos según una normal de media 0 y varianza 1 randn(size(A)) Devuelve una matriz del mismo tamaño que la matriz A y cuyos elementos son números decimales aleatorios distribuidos según una normal de media 0 y varianza 1 randn(‘seed’) Devuelve el valor actual de la semilla generadora de los números aleatorios normales randn(‘seed’,n) Coloca en la cantidad n el valor actual de la semilla generadora de los números aleatorios uniformes Veamos algunos ejemplos. » [rand, rand(1), randn, randn(1)] ans =

Page 21: Matlab Para Ingenieros y Cientificos

0.8310 0.0346 1.1650 0.6268 » [rand(2), randn(2)] ans = 0.0535 0.6711 0.0751 -0.6965 0.5297 0.0077 0.3516 1.6961 » [rand(4,3), randn(4,3)] ans = 0.6326 0.2470 0.6515 -0.0562 0.4005 0.7286 0.7564 0.9826 0.0727 0.5135 -1.3414 -2.3775 0.9910 0.7227 0.6316 0.3967 0.3750 -0.2738 0.3653 0.7534 0.8847 0.7562 1.1252 -0.3229

Page 22: Matlab Para Ingenieros y Cientificos

Capítulo 2

VARIABLES Y FICHEROS

VARIABLES El concepto de variable, lo mismo que el concepto de función, es fundamental ala hora de trabajar con un software matemático. Evidentemente, el concepto teórico devariable matemática es fijo e independiente del paquete de software. Pero la forma deimplementar y manejar las variables es muy característico de cada programa enparticular. Matlab permite definir y manejar las variables, así como almacenarlas enficheros, de modo muy simple. Cuando se realizan cálculos extensos es conveniente dar nombres a resultadosintermedios. Estos resultados intermedios, se asignan a variables para hacer más fácil suuso. Por ejemplo, podemos definir la variable x y asignarle el valor 5 de la siguienteforma: » x=5 x = 5 A partir de este momento, siempre que aparezca la variable x, será sustituida porel valor 5, hasta que no se cambie su valor mediante una nueva redefinición. » x^2 ans = 25

Page 23: Matlab Para Ingenieros y Cientificos

La variable x no cambia de valor hasta que no le asignemos expresamente otrocualquiera. » x=7+4 x = 11 A partir de este momento la variable x pasa a tomar el valor 11. Es muy importante remarcar que el valor asignado a una variable, es permanentehasta que no se cambie expresamente, o hasta que no se salga de la presente sesión deMatlab. Es típico olvidar las definiciones dadas a las variables durante una sesión deMatlab, lo que provoca errores despistantes en posteriores usos de las variables. Por estarazón es muy conveniente eliminar la asignación de valor a una variable cuando ya no seprevea usarla. Esta operación se realiza mediante el comando clear. También esinteresante recordar las variables que tenemos definidas en el momento actual de unasesión, lo que se realiza con el comando who. · La expresión “x = value”, asigna el valor "value" a la variable x. · El comando “clear” , elimina el valor asignado a todas las variables · El comando “clear x”, elimina el valor asignado a la variable x · El comando “clear x y”, elimina el valor asignado a las variables x e y · El comando “who”, da los nombres de todas las variables actualmente en

memoria (variables en el espacio de trabajo “Workspace”) · El comando “whos”, da los nombres, tamaños, número de elementos, bytes

ocupados y tipo de todas las variables actualmente en memoria Veamos algunos ejemplos sobre los comandos de manejo de variables definidospreviamente. » x=7,y=4+i,z=sqrt(3) x = 7 y =

Page 24: Matlab Para Ingenieros y Cientificos

4.0000 + 1.0000i z = 1.7321 » p=x+y+z p = 12.7321 + 1.0000i » who Your variables are: ans p x y z » whos Name Size Elements Bytes Density Complex ans 1 by 1 1 8 Full No p 1 by 1 1 16 Full Yes x 1 by 1 1 8 Full No y 1 by 1 1 16 Full Yes z 1 by 1 1 8 Full No Grand total is 5 elements using 56 bytes

Ahora vamos a cambiar el valor a la variable y, y a borrar la variable x. » y=pi y = 3.1416 » clear x;» whos Name Size Elements Bytes Density Complex ans 1 by 1 1 8 Full No p 1 by 1 1 16 Full Yes

Page 25: Matlab Para Ingenieros y Cientificos

y 1 by 1 1 8 Full No z 1 by 1 1 8 Full No Grand total is 4 elements using 40 bytes Vemos que la variable x ha desaparecido y que la variable y tiene el nuevo valorasignado, pero la variable p no ha cambiado, a pesar de haber cambiado dos de suscomponentes. Para que una expresión que contiene una variable cuya valor secambia, actualice su valor, es necesario volver a ejecutarla. » p=y+z p = 4.8736 » whos Name Size Elements Bytes Density Complex ans 1 by 1 1 8 Full No p 1 by 1 1 8 Full No y 1 by 1 1 8 Full No z 1 by 1 1 8 Full No Grand total is 4 elements using 32 bytes Ahora ya está actualizado también el valor de p. En cuanto a los nombres a dar a las variables, la única restricción es que nopueden empezar por un número ni contener caracteres de puntuación que tengan unsignificado especial en Matlab. También es conveniente nombrar las variables conpalabras que empiecen por letra minúscula, y en general con palabras completamente enminúsculas. Con ello se evitan colisiones con objetos propios de Matlab, que comienzancon letra mayúscula. No olvidemos que Matlab distingue las letras mayúsculas de lasminúsculas. El número de caracteres del nombre de una variable puede ser cualquiera,pero Matlab solo maneja los 19 primeros. VARIABLES ESPECIALES En muchas clases de cálculos se necesita trabajar con variables y constantesespeciales, que el propio programa habilita. Veamos algunos ejemplos: pi 3.1415926535897...

Page 26: Matlab Para Ingenieros y Cientificos

i ó j Unidad imaginaria (raíz cuadrada de -1) inf Infinito, por ejemplo 1/0 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 VARIABLES SIMBÓLICAS Ya sabemos que Matlab considera como simbólica cualquier expresión que seintroduzca entre comillas simples. Las variables de estas expresiones son variablessimbólicas. Existen varios comandos para el trabajo con variables simbólicas, algunos delos cuales se explican a continuación. symvar(expr) Devuelve las variables simbólicas de una expresión sym(x) Convierte la variable numérica x a simbólica con representación racional exacta numeric(x) Convierte la variable simbólica x a numérica symrat(x) Ofrece la representación racional exacta de x sym2poly(poli) Convierte el polinomio simbólico ‘poli’ en un vector cuyas componentes son sus coeficientes poly2sym(vector) Convierte el vector en un polinomio cuyos coeficientes son las componentes del vector digits(d) Sitúa la precisión de las variables simbólicas en d dígitos decimales exactos digits Da la precisión actual para variables simbólicas svdvpa(x) Ofrece el valor de la variable simbólica x con los dígitos de precisión definidos con digits vpa(‘expr’, n) Ofrece el resultado de la expresión con n dígitos decimales de precisión

Page 27: Matlab Para Ingenieros y Cientificos

pretty(‘expr’) Devuelve la expresión utilizando la escritura matemática habitual Ejercicio 2-3. Resolver la ecuación ax^2 +bx +c=0 suponiendo que la variable es x. Resolverlatambién cuando las variables son a, b o c respectivamente. En primer lugar comprobamos que Matlab asume por defecto (mientras no se leespecifique otra cosa) que la variable es x. » symvar('a*x^2+b*x+c') ans = x Luego podemos resolver la ecuación de forma directa para la variable x sinnecesidad de especificarla como variable simbólica en el comando “solve”. » solve('a*x^2+b*x+c=0') ans = [1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))] Para resolver la ecuación respecto de las variables a, b o c respectivamente, esnecesario especificarlas como variables simbólicas dentro del comando “solve”. » solve('a*x^2+b*x+c=0','a') ans = -(b*x+c)/x^2 » solve('a*x^2+b*x+c=0','b') ans = -(a*x^2+c)/x » solve('a*x^2+b*x+c=0','c') ans =

Page 28: Matlab Para Ingenieros y Cientificos

-a*x^2-b*x Ejercicio 2-4. Hallar las raíces del polinomio x^2-8x^2+16=0 obteniendo el resultadoalternativamente de forma exacta, de forma aproximada con la precisión por defecto y con 20cifras decimales exactas. Obtener también el vector de coeficientes asociado al polinomio. » p=solve('x^2-8*x^2-16')p = [ 2*(2^(1/2)+1)^(1/2)][-2*(2^(1/2)+1)^(1/2)][ 2*(1-2^(1/2))^(1/2)][-2*(1-2^(1/2))^(1/2)] » numeric(p) ans = 3.1075 -3.1075 0 + 1.2872i 0 - 1.2872i » vpa(p,20) ans = [ 3.1075479480600746146][ -3.1075479480600746146][ 1.2871885058111652495*i][-1.2871885058111652495*i] » sym2poly('x^2-8*x^2-16') ans = 1 0 -8 0 -16 Ejercicio 2-5. Hallar el valor numérico con la precisión por defecto de la abcisa del punto decorte en el primer cuadrante de las curvas y=sen(x) e y=cos(x). Pasar este resultado a formaexacta. Hallar dicha abcisa con 12 cifras decimales exactas y expresarla también mediante surepresentación racional exacta. » p=numeric(solve('sin(x)=cos(x)'))

Page 29: Matlab Para Ingenieros y Cientificos

p = 0.7854 » q=sym(p) q = pi/4 » digits(12);r=svdvpa(solve('sin(x)=cos(x)')) r = .785398163398 » s=symrat(solve('sin(x)=cos(x)')) s = 1/4*pi VARIABLES VECTORIALES Una variable que representa a un vector de longitud n se puede definir en Matlabde las siguientes formas: variable = [e1, e2, e3, .......,en] variable = [e1 e2 e3 ....... en] Por lo tanto para definir una variable vectorial basta introducir entre corchetes loselementos del vector separados por comas o por espacios en blanco. Al aplicar la mayoría de los comandos y funciones de Matlab sobre una variablevectorial, el resultado que se obtiene es la aplicación del comando o función sobre cadaelemento del vector. » vector1=[1,3,5,2.3,1/2] vector1 =

Page 30: Matlab Para Ingenieros y Cientificos

1.0000 3.0000 5.0000 2.3000 0.5000 » sin(vector1) ans = 0.8415 0.1411 -0.9589 0.7457 0.4794 » exp(vector1) ans = 2.7183 20.0855 148.4132 9.9742 1.6487 » log(vector1) ans = 0 1.0986 1.6094 0.8329 -0.6931 Existen diferentes formas de definir una variable vectorial sin necesidad deexplicitar entre corchetes todos sus elementos separados por comas o espacios enblanco. variable=[primer_elemento:último_elemento] Define el vector cuyos primer y último elementos 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 elementos son los especificados y los elementos intermedios se diferencian en la cantidad especificada por el incremento variable=linspace(primer_elemento,último_elemento,n) Define el vector cuyos primer y último elementos son los especificados y que tiene en total n elementos uniformemente espaciados entre sí variable=logspace(primer_elemento,último_elemento,n)

Page 31: Matlab Para Ingenieros y Cientificos

Define el vector cuyos primer y último elementos son los especificados y que tiene en total n elementos en escala logarítmica uniformemente espaciados entre sí

Veamos algunos ejemplos. » vector2=[0:5:20] vector2 = 0 5 10 15 20 Hemos obtenido los números entre 0 y 20 separados por 5 unidades. » vector3=[0:20] vector3 = Columns 1 through 12 0 1 2 3 4 5 6 7 8 9 10 11 Columns 13 through 21 12 13 14 15 16 17 18 19 20 Hemos obtenido los números entre 0 y 20 separados una unidad. » vector4=[0:10] vector4 = 0 1 2 3 4 5 6 7 8 9 10 Hemos obtenido los números entre 0 y 10 separados una unidad. » vector5=linspace(0,20,6) vector5 = 0 4 8 12 16 20 Hemos obtenido 6 números entre 0 y 20 igualmente espaciados.

Page 32: Matlab Para Ingenieros y Cientificos

» vector6=logspace(0,2,6) vector6 = 1.0000 2.5119 6.3096 15.8489 39.8107 100.0000 Hemos obtenido 6 números entre antilogaritmo decimal de 0 y antilogaritmodecimal de 2, con una separación logarítmica uniforme. En Matlab también existe la posibilidad de considerar vectores fila y vectorescolumna. Un vector columna se obtiene separando sus elementos por punto y coma, otambién trasponiendo un vector fila mediante una comilla simple situada al final de sudefinición. » a=[1;2;3;4] a = 1 2 3 4 » a=(1:4);b=a' b = 1 2 3 4» c=(a')' c = 1 2 3 4 También podemos seleccionar un elemento de un vector o un subconjunto deelementos. x(n) Devuelve el enésimo elemento del vector x x(a:b) Devuelve los elementos del vector x situados entre el

Page 33: Matlab Para Ingenieros y Cientificos

a-ésimo y el b-ésimo, ambos inclusive x(a:p:b) Devuelve los elementos del vector x situados entre el a-ésimo y el b-ésimo ambos inclusive, pero separados de p en p unidades (a>b) x(b:-p:a) Devuelve los elementos del vector x situados entre el b-ésimo y el a-ésimo ambos inclusive, pero separados de p en p unidades y empezando por el b-ésimo (b>a) Veamos algunos ejemplos. » x=(1:10) x = 1 2 3 4 5 6 7 8 9 10 » x(6) ans = 6 Hemos obtenido el sexto elemento del vector x » x(4:7) ans = 4 5 6 7 Hemos obtenido los elementos del vector x situados entre el cuarto y el séptimo,ambos inclusive. » x(2:3:9) ans = 2 5 8 Hemos obtenido los elementos del vector x situados entre el segundo y elnoveno, ambos inclusive, pero separados de tres en tres unidades.

Page 34: Matlab Para Ingenieros y Cientificos

» x(9:-3:2) ans = 9 6 3 Hemos obtenido los elementos del vector x situados entre el noveno y elsegundo, ambos inclusive, pero separados de tres en tres unidades y empezando por elnoveno. Las operaciones matemáticas simples entre escalares y vectores aplican elescalar a todos los elementos del vector según la operación definida y las operacionessimples entre vectores se realizan elemento a elemento. A continuación se presenta un resumen de estas operaciones: a = {a1, a2, ...., an}, b = {b1, b2, ...., bn} c = escalar a + c = [ a1+c a2+c ...., an+c] Suma de un escalar y un vector a * c = [ a1*c a2*c .... an*c] Producto de un escalar por unvector a + b = [ a1+b1 a2+b2 .... an+bn] Suma de dos vectores a. * b = [ a1*b1 a2*b2 .... an*bn] Producto de dos vectores a. / b = [ a1/b1 a2/b2 .... an/bn] Cociente a la derecha de dos vectores a. \ b = [ a1\b1 a2\b2 .... an\bn] Cociente a la izquierda de dos vectores a.^c = [a1^c a2^c .... an^c] Vector elevado a escalar c.^a = [c^a1 c^a2 .... c^an] Escalar elevado a vector a.^b = [a1^b1 a2^b2 .... an^bn] Vector elevado a vector Hay que tener presente que los vectores han de ser de la misma longitud y queen el producto, cociente y potencia el primer operando va seguido de un punto. Por otra parte, también se pueden definir las variables vectoriales simbólicas,encerrándolas entre comillas simples y usando el comando “sym”.

Page 35: Matlab Para Ingenieros y Cientificos

» A=sym('[sin(t),cos(t)]') A = [sin(t),cos(t)] Ejercicio 2-6. Dadas las variables vectoriales a=[p,2p,3p,4p,5p] y b=[e,2e,3e,4e,5e] calcular c=Sen(a)+b, d=Cos( a), e=Ln(b), f=c*d, g=c/d, h=d^2, i=d^2-e^2 y j=3d^3-2e^2 . » a=[pi,2*pi,3*pi,4*pi,5*pi],b=[ e x p ( 1 ) , 2 * e x p ( 1 ) , 3 * e x p ( 1 ) , 4 * e x p ( 1 ) , 5 * e x p ( 1 ) ] , c=sin(a)+b,d=cos(a),e=log(b),f=c.*d,g=c./d,h=d.^2,i=d.^2-e.^2, j=3*d.^3-2*e.^2 a = 3.1416 6.2832 9.4248 12.5664 15.7080 b = 2.7183 5.4366 8.1548 10.8731 13.5914 c = 2.7183 5.4366 8.1548 10.8731 13.5914 d = -1 1 -1 1 -1 e = 1.0000 1.6931 2.0986 2.3863 2.6094 f = -2.7183 5.4366 -8.1548 10.8731 -13.5914 g = -2.7183 5.4366 -8.1548 10.8731 -13.5914 h =

Page 36: Matlab Para Ingenieros y Cientificos

1 1 1 1 1 i = 0 -1.8667 -3.4042 -4.6944 -5.8092 j = -5.0000 -2.7335 -11.8083 -8.3888 -16.6183 VARIABLES MATRICIALES Para definir una matriz en Matlab basta introducir entre corchetes todos susvectores fila separados por punto y coma. Los vectores se pueden introducir separandosus componentes por espacios en blanco o por comas, tal y como ya sabemos. Porejemplo una variable matricial de dimensión 3x3 se puede introducir de las dos siguientesformas: matriz = [a11 a12 a13;a21 a22 a23;a31 a32 a33] matriz = [a11 ,a12 ,a13;a21 ,a22 ,a23;a31 ,a32 ,a33] De forma semejante se definiría una variable matricial de dimensión mxn. Unavez que una variable matricial ha sido definida, Matlab habilita muchos caminos parainsertar, extraer, renumerar y manipular en general sus elementos. A(m,n) Define el elemento (m,n) de la matriz A (fila m y columnan) A(a:b,c:d) Define la submatriz de A formada por las filas que hay entre la a-ésima y la b-ésima, y por las columnas que hay entre la c-ésima y la d-ésima A(a:p:b,c:q:d) Define la submatriz de A formada por las filas que hay entre la a-ésima y la b-ésima tomándolas de p en p, y por las columnas que hay entre la c-ésima y la d-ésima tomándolas de q en q A([a b],[c d]) Define la submatriz de A formada por la intersección de las filas a-ésima y b-ésima y las columnas c-ésima y d-ésima

Page 37: Matlab Para Ingenieros y Cientificos

A([a b c ...],[e f g ..]) Define la submatriz de A formada por la intersección de las filas a, b, c, ... y las columnas e, f, g, ... A(:,c:d) Define la submatriz de A formada por todas las filas de A y por las columnas que hay entre la c-ésima y la d-ésima A(:,[c d e ..]) Define la submatriz de A formada por todas las filas de A y por las columnas c, d, e, ... A(a:b,:) Define la submatriz de A formada por todas las columnas de A y por las filas que hay entre la a-ésima y la b-ésima A([a b c ..],:) Define la submatriz de A formada por todas las columnasde A y por las filas a, b, c, ... A(a,:) Define la fila a-ésima de la matriz A A(:,b) Define la columna b-ésima de la matriz A A(:) Define un vector columna cuyos elementos son las columnas de A situadas por orden una debajo de otra A(:,:) Equivale a toda la matriz A [A,B,C,...] Define la matriz formada por las submatrices A, B, C, ... SA = [ ] Borra la submatriz de la matriz A, SA , y devuelve el resto diag(v) Crea una matriz diagonal con el vector v en la diagonal diag(A) Extrae la diagonal de la matriz A como vector columna eye(n) Crea la matriz identidad de orden n eye(m,n) Crea la matriz de orden mxn con unos en la diagonal principal y ceros en el resto zeros(m,n) Crea la matriz nula de orden mxn ones(m,n) Crea la matriz de orden mxn con todos sus elementos 1

Page 38: Matlab Para Ingenieros y Cientificos

rand(m,n) Crea una matriz aleatoria uniforme de orden mxn randn(m,n) Crea una matriz aleatoria normal orden mxn flipud(A) Devuelve la matriz cuyas filas están colocadas en orden inverso (de arriba abajo) a las filas de A fliplr(A) Devuelve la matriz cuyas columnas están colocadas en orden inverso (de izquierda a derecha) a las de A rot90(A) Rota 90 grados la matriz A reshape(A,m,n) Devuelve la matriz de orden mxn extraída de la matriz A tomando elementos consecutivos de A por columnas size(A) Devuelve el orden (tamaño) de la matriz A find(condA) Devuelve los elementos de A que cumplen la condición length(v) Devuelve la longitud del vector v tril(A) Devuelve la parte triangular inferior de la matriz A triu(A) Devuelve la parte triangular superior de la matriz AA’ Devuelve la matriz transpuesta de A inv(A) Devuelve la matriz inversa de A Veamos algunos ejemplos. Consideramos en primer lugar la matriz 2x3 cuyas filas son los 6 primerosimpares consecutivos. » A=[1 3 5;7 9 11] A = 1 3 5 7 9 11 Ahora vamos a anular el elemennto (2,3), o sea, su último elemento.

Page 39: Matlab Para Ingenieros y Cientificos

» A(2,3)=0 A = 1 3 5 7 9 0 A continuación consideramos la matriz B transpuesta de A. » B=A' B = 1 7 3 9 5 0 Ahora construimos una matriz C formada por la matriz B y la matriz identidad deorden 3 adosada a su derecha. » C=[B eye(3)] C = 1 7 1 0 0 3 9 0 1 0 5 0 0 0 1 Vamos a construir una matriz D extrayendo las columnas impares de la matriz C,una matriz E formada por la intersección de las dos primeras filas de C y sus columnastercera y quinta, y una matriz F formada por la intersección de las dos primeras filas y lastres últimas columnas de la matriz C. » D=C(:,1:2:5) D = 1 1 0 3 0 0 5 0 1 » E=C([1 2],[3 5])

Page 40: Matlab Para Ingenieros y Cientificos

E = 1 0 0 0 » F=C([1 2],3:5)F = 1 0 0 0 1 0 Ahora construímos la matriz diagonal G tal que los elementos de su diagonalprincipal son los mismos que los de la diagonal principal de D. » G=diag(diag(D)) G = 1 0 0 0 0 0 0 0 1 A continuación construímos la matriz H formada por la intersección de la primeray tercera filas de C y sus segunda, tercera y quinta columnas. » H=C([1 3],[2 3 5]) H = 7 1 0 0 0 1 Ahora construímos una matriz I formada por la matriz identidad de orden 5x4 ylas matrices nula y unidad del mismo orden adosadas a su derecha. A continuaciónextraemos la primera fila de I y por último formamos la matriz J con las filas impares ylas columnas pares de Y y calculamos su orden (tamaño). » I = [eye(5,4) zeros(5,4) ones(5,4)] ans = 1 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 1 1 1

Page 41: Matlab Para Ingenieros y Cientificos

0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 » I(1,:) ans = 1 0 0 0 0 0 0 0 1 1 1 1 » J=I(1:2:5,2:2:12) J = 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 » size(J) ans = 3 6 A continuación construímos una matriz aleatoria K de orden 3x4 e invertimosprimero el orden de sus filas, después el orden de sus columnas y después el orden desus filas y columnas a la vez. Por último hallamos la matriz L de orden 4x3 cuyascolumnas resultan de tomar los elementos de las columnas de K consecutivamente. » K=rand(3,4) K = 0.5269 0.4160 0.7622 0.7361 0.0920 0.7012 0.2625 0.3282 0.6539 0.9103 0.0475 0.6326 » K(3:-1:1,:) ans = 0.6539 0.9103 0.0475 0.6326 0.0920 0.7012 0.2625 0.3282 0.5269 0.4160 0.7622 0.7361 » K(:,4:-1:1)

Page 42: Matlab Para Ingenieros y Cientificos

ans = 0.7361 0.7622 0.4160 0.5269 0.3282 0.2625 0.7012 0.0920 0.6326 0.0475 0.9103 0.6539 » K(3:-1:1,4:-1:1) ans = 0.6326 0.0475 0.9103 0.6539 0.3282 0.2625 0.7012 0.0920 0.7361 0.7622 0.4160 0.5269 » L=reshape(K,4,3) L = 0.5269 0.7012 0.0475 0.0920 0.9103 0.7361 0.6539 0.7622 0.3282 0.4160 0.2625 0.6326 Ejercicio 2-7. Dada la matriz cuadrada de orden 3 cuyas filas son los 9 primeros númerosnaturales, obtener su inversa, su transpuesta y su diagonal. Trasformarla en una matriztriangular inferior y en otra superior y rotarla 90 grados. Obtener la suma de los elementos dela primera fila y la suma de los elementos de la diagonal. Extraer la submatriz cuya diagonalson los elementos a11 y a22 y extraer también la submatriz cuyos elementos de la diagonal sona11 y a33. » M=[1,2,3;4,5,6;7,8,9] M = 1 2 3 4 5 6 7 8 9 » A=inv(M) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.937385e-018

Page 43: Matlab Para Ingenieros y Cientificos

A = 1.0e+016 * 0.3152 -0.6304 0.3152 -0.6304 1.2609 -0.6304 0.3152 -0.6304 0.3152 » B=M' B = 1 4 7 2 5 8 3 6 9 » V=diag(M) V = 1 5 9 » TI=tril(M) TI = 1 0 0 4 5 0 7 8 9 » TS=triu(M) TS = 1 2 3 0 5 6 0 0 9 » TR=rot90(M) TR =

Page 44: Matlab Para Ingenieros y Cientificos

3 6 9 2 5 8 1 4 7 » s=M(1,1)+M(1,2)+M(1,3) s = 6 » sd=M(1,1)+M(2,2)+M(3,3) sd = 15 » SM=M(1:2,1:2) SM = 1 2 4 5 » SM1=M([1 3],[1 3]) SM1 = 1 3 7 9 En cuanto a las operaciones con variables matriciales las más importantes seresumen a continuación. A+B, A-B, A*B Suma, resta y producto de matrices A\B Si A es cuadrada A\B=inv(A)*B. Si A no es cuadrada A\B es la solución en el sentido de mínimos cuadrados del sistema AX=B B/A Coincide con (A’ \ B’ )’ An Coincide con A*A*A*......*A n veces (n escalar)

Page 45: Matlab Para Ingenieros y Cientificos

pA Realiza el cálculo solo si p es un escalar Veamos algunos ejemplos. » A=[1 3 5; pi exp(1) sin(pi); i 2*i 1+i] A = 1.0000 3.0000 5.0000 3.1416 2.7183 0.0000 0 + 1.0000i 0 + 2.0000i 1.0000 + 1.0000i Hemos definido una matriz compleja y a continuación vamos a calcular suinversa, su cuadrado y su raíz cuadrada. » B=inv(A) B = 0.0711 - 0.2874i 0.5810 - 0.0806i 0.5407 + 0.8963i -0.0822 + 0.3322i -0.3036 + 0.0932i -0.6249 - 1.0359i 0.2351 - 0.1418i 0.0659 - 0.0398i 0.2668 + 0.4423i » C=A^2 C = 10.4248 + 5.0000i 11.1548 +10.0000i 10.0000 + 5.0000i 11.6813 + 0.0000i 16.8138 + 0.0000i 15.7080 + 0.0000i -1.0000 + 8.2832i -2.0000 +10.4366i 0 + 7.0000i » A^(1/2) ans = 0.7181 + 0.3784i 0.6691 - 0.6583i 2.0360 - 1.1395i 1.2547 - 0.3193i 1.6690 + 0.3804i -0.5550 + 0.8311i -0.1046 + 0.1852i 0.1152 + 0.5870i 1.2790 + 0.2869i Ahora comprobamos que el producto de la matriz A por su inversa es la matrizidentidad de orden 3.» A*B

Page 46: Matlab Para Ingenieros y Cientificos

ans = 1.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 - 0.0000i 1.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i 1.0000 Ahora hallamos las exponenciales de A de bases 2 y -2. » 2^A ans = 7.6891 +12.0133i 8.3341 +16.9867i 11.4946 +12.7529i 14.0012 + 7.7070i 17.8650 +11.4152i 15.1221 + 7.9107i -5.7149 + 8.3478i -8.3427 +10.7943i -3.9348 + 9.5659i » (-2)^A ans = 9.3715 +17.6364i 12.5580 + 9.3749i -42.3089 +19.7204i -25.4089 -14.9020i -22.9366 - 2.3169i 37.0791 -57.8395i 19.1917 + 6.3699i 15.8124 - 1.7299i -16.8200 +43.8783i Hasta aquí hemos trabajado siempre con matrices numéricas. Para trabajar conmatrices simbólicas basta con introducirlas entre comillas simples y anteponer elcomando “sym”. » A=sym('[sin(t),cos(t);tan(t),exp(t)]') A = [sin(t),cos(t)][tan(t),exp(t)] MANEJANDO VARIABLES Y FICHEROS, IMPORTACIÓN Y EXPORTACIÓN DE DATOS Cuando se sale de una sesión de Matlab con los comandos “exit” o “quit”, seborran todas las variables que hay en el espacio de trabajo (“workspace”). Por lo tanto,antes de dejar Matlab, es necesario guardar en fichero todas las variables que se deseendel espacio de trabajo, para su posible uso en sesiones posteriores. Por otra parte,también será necesario utilizar variables que provienen de ficheros generados por otrosprogramas (importación de variables y ficheros) y exportar variables generadas conMatlab para el uso con otros programas (exportación de variables y ficheros). Entre los

Page 47: Matlab Para Ingenieros y Cientificos

comandos más importantes al efecto tenemos los siguientes: save Salva en fichero de disco variables del espacio de trabajo con el formato propio de los ficheros Matlab load Recupera de disco variables que han sido previamente salvadas con el comando “save” Salvando datos a ficheros de formato Matlab y ASCII El comando “save” es el instrumento esencial para salvar datos a ficheros tipoMatlab (solo legibles por el programa Matlab) y a ficheros tipo ASCII (legibles porcualquier aplicación). Las distintas modalidades de uso de este comando se presentan acontinuación. s a v e Almacena todas las variables del espacio de trabajo en el fichero de formato Matlab binario “matlab.mat” save fichero Almacena todas las variables del espacio de trabajo en el fichero Matlab binario “fichero.mat” save fichero X Y Z Almacena las variables X,Y, Z del espacio de trabajo en el fichero Matlab binario “fichero.mat” save fichero X Y Z -ascii Almacena las variables X,Y, Z del espacio de trabajo en el fichero de formato ASCII de 8 dígitos cuyo nombre es “fichero” save fichero X Y Z -ascii -double Almacena las variables X,Y, Z del espacio de trabajo en el fichero de formato ASCII de 16 dígitos cuyo nombre es “fichero” save fichero X Y Z -ascii -tabs Almacena las variables X,Y, Z del espacio de trabajo en el fichero de formato ASCII de 8 dígitos con nombre “fichero”, cuyos datos están delimitados por tabuladores

Page 48: Matlab Para Ingenieros y Cientificos

save fichero X Y Z -ascii -double -tabs Almacena las variables X,Y, Z del espacio de trabajo en el fichero de formato ASCII de 16 dígitos con nombre “fichero”, cuyos datos están delimitados por tabuladores Como ejemplos ilustrativos vamos a considerar una variable A equivalente a lainversa de una matriz cuadrada aleatoria de orden 4 y una variable B equivalente a lainversa de 2 veces la matriz de unos de orden 4 menos la matriz identidad de orden 4. » A=inv(rand(4)) A = -0.9618 6.3842 8.5617 -7.2163 1.3011 -1.2531 -1.7389 1.4052 0.1081 -7.4732 -7.6003 8.0782 -1.1984 4.1202 1.7486 -1.6465 » B=inv(2*ones(4)-eye(4)) B = -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 Ahora vamos a salvar las variables A y B a un fichero ASCII con 8 dígitos deprecisión y de nombre “matrand.asc”. » save matrand.asc A B -ascii Para comprobar que el fichero ASCII se ha generado usamos la orden “dir”, yvemos que nuestro fichero existe. » dir . basename.exe fmex.bat matlab.exe ml_dos.pif .. binpatch.m is_ext.exe matlab.hlp spr.exe a cmex.bak magic5 matrand.asc x basefnam.exe cmex.bat magic5.bin ml_bang.pif x.mat

Page 49: Matlab Para Ingenieros y Cientificos

Para comprobar el contenido de nuestro fichero usamos la orden “type”, y vemosque efectivamente el contenido son los elementos de las dos matrices con 8 dígitos deprecisión, situadas una a continuación de la otra » type matrand.asc -9.6179294e-001 6.3842197e+000 8.5616932e+000 -7.2162626e+000 1.3010506e+000 -1.2530715e+000 -1.7389280e+000 1.4052336e+000 1.0806899e-001 -7.4732043e+000 -7.6003021e+000 8.0781942e+000 -1.1984017e+000 4.1201815e+000 1.7485606e+000 -1.6465086e+000 -7.1428571e-001 2.8571429e-001 2.8571429e-001 2.8571429e-001 2.8571429e-001 -7.1428571e-001 2.8571429e-001 2.8571429e-001 2.8571429e-001 2.8571429e-001 -7.1428571e-001 2.8571429e-001 2.8571429e-001 2.8571429e-001 2.8571429e-001 -7.1428571e-001 Los ficheros generados con el comando “save” se almacenan por defecto (si no seespecifica otra cosa) en el subdirectorio \MATLAB\BIN\ . Salvar todas las variables del “workspace” con el comando “save” a un ficherobinario con formato Matlab es equivalente a utilizar la subopción “Save Workspace As..”de la opción “Archivo” del menú general de Matlab. Leyendo datos a ficheros de formato Matlab y ASCII El comando “load” se utiliza para leer variables de disco. Se puede utilizar paraleer ficheros con formato binario Matlab que han sido salvados con el comando “save”.También se puede utilizar para leer ficheros con formato ASCII que pueden haber sidogenerados con otras aplicaciones o con el propio Matlab. La sintaxis se presenta acontinuación. load Lee todas las variables salvadas con el comando “save” en el fichero de nombre “matlab.mat” load fichero Lee las variables del fichero binario “fichero.mat” load fichero.xyz Lee el fichero ASCII de nombre “fichero.xyz” como una única variable de nombre “fichero” Como ejemplo vamos a leer el fichero ASCII “matrand.asc” salvadoanteriormente. » load matrand.asc

Page 50: Matlab Para Ingenieros y Cientificos

» Matlab lee todo el fichero ASCII como una única variable de nombre el nombredel fichero. Podemos comprobarlo con el comando “whos”. » whos Name Size Elements Bytes Density Complex matrand 8 by 4 32 256 Full No Grand total is 32 elements using 256 bytes A continuación vemos cómo ha leído Matlab los datos del fichero. » matrand matrand = -0.9618 6.3842 8.5617 -7.2163 1.3011 -1.2531 -1.7389 1.4052 0.1081 -7.4732 -7.6003 8.0782 -1.1984 4.1202 1.7486 -1.6465 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 Matlab ha leído los datos con la misma estructura matricial 8x4 con que los habíaguardado. Las cuatro primeras filas correspondían a la variable A y las cuatro últimas a lavariable B. Ahora utilizamos los comandos de manejo de variables matriciales para volvera definir las variables A y B a partir de la variable “matrand”. » A=matrand(1:4,1:4) A = -0.9618 6.3842 8.5617 -7.2163 1.3011 -1.2531 -1.7389 1.4052 0.1081 -7.4732 -7.6003 8.0782 -1.1984 4.1202 1.7486 -1.6465 » B=matrand(5:8,1:4) B =

Page 51: Matlab Para Ingenieros y Cientificos

-0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 0.2857 0.2857 0.2857 0.2857 -0.7143 De la misma forma podemos definir múltiples variables a partir de la variablematricial “matrand” (cuyo contenido es todo el fichero ASCII) utilizando los comandos demanejo de variables vectoriales y matriciales.

Page 52: Matlab Para Ingenieros y Cientificos

Capítulo 3

OPERADORES Y FUNCIONES

OPERADORES Matlab ofrece símbolos para denotar las operaciones aritméticas, lógicas,relacionales, condicionales y de estructura. Estos símbolos representan los diferentesoperadores a utilizar en los cálculos. Operadores aritméticos Existen en Matlab dos tipos de operaciones aritméticas: Las operacionesaritméticas matriciales que se rigen por las reglas del álgebra lineal, y las operacionesaritméticas con vectores que se realizan elemento a elemento. En el capítulo anterior yase definieron todas estas operaciones. Operador Función que desempeña--------------------------------------------------------------------------------------------------------+ Suma de escalares, vectores o matrices - Resta de escalares, vectores o matrices * Producto de escalares o de matrices .* Producto de escalares o de vectores \ A\B = inv(A)*B, siendo A y B matrices .\ A.\B = [B(i,j)/A(i,j)], siendo A y B vectores (dim(A)=dim(B))

Page 53: Matlab Para Ingenieros y Cientificos

/ Cociente escalar o B/A = B*inv(A), siendo A y B matrices ./ A./B = [A(i,j)/B(i,j)], siendo A y B vectores (dim(A)=dim(B)) ^ Potencia de escalares o potencia escalar de matriz (Mp) .^ Potencia de vectores (A.^B = [A(i,j)B(i,j)], A y B vectores) Ejercicio 3-1. Siendo X=[1 2 3] e Y=[4 5 6], calcular X+Y, X-Y, X*Y, X’*Y, X*Y’, X.*Y, X.’*Y,X.*Y’, 2*X, 2.*X, X/Y, Y\X, X./Y, Y.\X, 2/X, 2./X, 2\Y, 2.\Y, X^Y, X.^Y, X^2, X.^2, 2^X y 2.^X. »X=[1,2,3]; Y=[4,5,6]; a=X+Y, b=X-Y, c=X.*Y, d=2.*X, e=2./X, f=2.\Y,g=X./Y, h=Y.\X, i=X.^2, j=2.^X, k=X.^Y a = 5 7 9 b = -3 -3 -3 c = 4 10 18 d = 2 4 6 e = 2.0000 1.0000 0.6667 f = 2.0000 2.5000 3.0000 g = 0.2500 0.4000 0.5000 h =

Page 54: Matlab Para Ingenieros y Cientificos

0.2500 0.4000 0.5000 i = 1 4 9 j = 2 4 8 k = 1 32 729 Las operaciones anteriores tienen todas sentido, ya que las variables operandosson vectores de la misma dimensión en todos los casos, con lo que las operaciones serealizarán elemento a elemento (para la suma y la diferencia no hay distinción entrevectores y matrices, pues son operaciones idénticas en los dos casos). » X=[1,2,3]; Y=[4,5,6]; l=X'*Y, m=X*Y', n=2*X, o=X/Y, p=Y\X l = 4 5 6 8 10 12 12 15 18m = 32 n = 2 4 6 o = 0.4156 p = 0 0 0 0 0 0 0.1667 0.3333 0.5000

Page 55: Matlab Para Ingenieros y Cientificos

Todas las operaciones anteriores están definidas de forma matricial con ladimensión adecuada. No olvidemos que un vector es un caso particular de matriz, peropara operar con él de forma matricial (no elemento a elemento) es necesario respetar lasreglas de dimensionalidad para operaciones matriciales. Las operaciones vectoriales X.’*Y y X.*Y’ no tienen sentido, ya que se estánoperando vectores de distinta dimensión. Las operaciones matriciales X*Y, 2/X, 2\Y, X^2, 2^X y X^Y no tienen sentido,ya que se cometen errores de dimensionalidad con las matrices. Operadores relacionales También Matlab ofrece símbolos para denotar las operaciones relacionales. Losoperadores relacionales ejecutan comparaciones elemento a elemento entre dos matricesy devuelven una matriz del mismo tamaño cuyos elementos son ceros si lacorrespondiente relación es cierta, o unos si la correspondiente relación es falsa. Losoperadores relacionales también permiten comparar escalares con vectores o matrices,en cuyo caso se compara el escalar con todos los elementtos de la matriz. Operador Función que desempeña--------------------------------------------------------------------------------------------------------< Menor (para complejos solo afecta a partes reales) <= Menor o igual (solo afecta a partes reales) > Mayor (solo afecta a partes reales) >= Mayor o igual (solo afecta a partes reales) x == y Igualdad (afecta a los números complejos) x ~= y Desigualdad (afecta a los números complejos) Veamos algún ejemplo. » X=5*ones(3,3); X>= [1 2 3; 4 5 6; 7 8 9] ans =

Page 56: Matlab Para Ingenieros y Cientificos

1 1 1 1 1 0 0 0 0 Los elementos de la matriz X que son mayores o iguales que los de la matriz [1 23; 4 5 6; 7 8 9] se corresponden con un 1 en la matriz respuesta. El resto de loselementos se corresponden con un 0 (el resultado de la operación sería el mismo sicomparamos el escalar 5 con la matriz [1 2 3; 4 5 6; 7 8 9], mediante la expresión »X=5; X>= [1 2 3; 4 5 6; 7 8 9]). A continuación vemos otro ejemplo que combina una operación aritmética conuna operación relacional. » A=1:9,B=9-A,Y=A>4,Z=B-(A>2) A = 1 2 3 4 5 6 7 8 9 B = 8 7 6 5 4 3 2 1 0 Y = 0 0 0 0 1 1 1 1 1 Z = 8 7 5 4 3 2 1 0 -1 Los valores de Y iguales a 1 se corresponden con los elementos de A mayoresque 4. Los valores de Z resultan de restar a los correspondientes elementos de B lacantidad 1 si el correspondiente elemento de A es mayor que 2, o la cantidad 0 si elcorrespondiente elemento de A es menor o igual que 2. Operadores lógicos También Matlab ofrece símbolos para denotar las operaciones lógicas. Losoperadores lógicos ofrecen un camino para combinar o negar expresiones relacionales. Operador Función que desempeña

Page 57: Matlab Para Ingenieros y Cientificos

---------------------------------------------------------------------------------------------------------~A Negación lógica (NOT) o complementario de A A & B Conjunción lógica (AND) o intersección de A y B A | B Disyunción lógica (OR) o unión de A y B xor(A,B) OR exclusivo (XOR) o diferencia simétrica de A y B (vale 1 si A o B, pero no ambos, son 1)

Veamos algunos ejemplos. » A=1:9;P=(A>2)&(A<6) P = 0 0 1 1 1 0 0 0 0 Devuelve 1 cuando A es mayor que 2 y menor que 6, y devuelve 0 en casocontrario. » A=[1 1 2 2 3 4 5 6 7 8 9],P=(A>=1)&(A<6),xor(A,P) A = 1 1 2 2 3 4 5 6 7 8 9 P = 1 1 1 1 1 1 1 0 0 0 0 ans = 0 0 0 0 0 0 0 1 1 1 1 Devuelve 1 cuando A o P, pero no ambos, valen1. FUNCIONES El concepto de función, lo mismo que el concepto de variable, es fundamental ala hora de trabajar con un software matemático. Evidentemente, el concepto teórico defunción matemática es fijo e independiente del paquete de software. Pero la forma de

Page 58: Matlab Para Ingenieros y Cientificos

implementar y manejar las funciones es muy característica de cada programa enparticular. Matlab permite definir y manejar las funciones de modo muy simple. A su vezMatlab incorpora un conjunto extenso de funciones, que es más amplio en caso dedisponer de “Toolbox” adicionales. FUNCIONES MATEMÁTICAS PREDEFINIDAS Aparte de los comandos generales de Matlab, que a veces también se denominanfunciones, el programa implementa diversos tipos de funciones estrictamentematemáticas. Algunas de ellas ya fueron estudiadas en el capítulo 5 y las restantes serántratadas en capítulos posteriores. Para pedir ayuda al programa sobre el uso decualquiera de las funciones basta teclear “help nombre_de_función” en la ventana decomandos de Matlab. También se puede usar la ayuda general del programa (opciónHelp del menú general de la ventana de comandos) para obtener el índice general defunciones del programa, así como el contenido de cada una de ellas. Entre las funciones matemáticas de Matlab destacan las siguientes: Funciones matemáticas elementales que admiten como argumento una matriz compleja Z · Trigonométricas sin(Z) Función Seno sinh(Z) Función Seno hiperbólico asin(Z) Función Arcoseno asinh(Z) Función Arcoseno hiperbólico cos(Z) Función Coseno cosh(Z) Función Coseno hiperbólico acos(Z) Función Arcocoseno acosh(Z) Función Arcocoseno hiperbólico tan(Z) Función Tangente tanh(Z) Función Tangente hiperbólica atan(Z) Función Arcotangente atan2(Z) Función Arcotangente en el cuarto cuadrante atanh(Z) Función Arcotangente hiperbólica sec(Z) Función Secante sech(Z) Función Secante hiperbólica asec(Z) Función Arcosecante

Page 59: Matlab Para Ingenieros y Cientificos

asech(Z) Función Arcosecante hiperbólica csc(Z) Función Cosecante csch(Z) Función Cosecante hiperbólica acsc(Z) Función Arcocosecante acsch(Z) Función Arcocosecante hiperbólica cot(Z) Función Cotangente coth(Z) Función Cotangente hiperbólica acot(Z) Función Arcocotangente acoth(Z) Función Arcocotangente hiperbólica · Exponenciales exp(Z) Función Exponencial de base e log(Z) Función Logaritmo neperiano log10(Z) Función Logaritmo decimal sqrt(Z) Función Raíz cuadrada · Complejas abs(Z) Módulo o valor absoluto angle(Z) Argumento conj(Z) Complejo conjugado imag(Z) Parte imaginaria real(Z) Parte real · Numéricas fix(Z) Elimina las partes decimales floor(Z) Redondea los decimales al menor entero más cercano ceil(Z) Redondea los decimales al mayor entero más cercano round(Z) Efectúa el redondeo común de decimales rem(Z1, Z2) Resto de la división de los términos de Z1 y Z2 sign(Z) Función signo· Matriciales expm(Z) Función exponencial matricial por defecto expm1(Z) Función exponencial matricial en M-fichero expm2(Z) Función exponencial matricial vía series de Taylor expm3(Z) Función exponencial matricial vía autovalores logm(Z) Función logarítmica matricial sqrtm(Z) Función raíz cuadrada matricial funm(Z,‘función’) Aplica la función a la matriz Z

Page 60: Matlab Para Ingenieros y Cientificos

Veamos algunos ejemplos. » A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 » sin(A) ans = 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 0.4121 » B=[1+i 2+i;3+i,4+i] B = 1.0000 + 1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i 4.0000 + 1.0000i » sin(B) ans = 1.2985 + 0.6350i 1.4031 - 0.4891i 0.2178 - 1.1634i -1.1678 - 0.7682i » exp(A) ans = 1.0e+003 * 0.0027 0.0074 0.0201 0.0546 0.1484 0.4034 1.0966 2.9810 8.1031 » exp(B)

Page 61: Matlab Para Ingenieros y Cientificos

ans = 1.4687 + 2.2874i 3.9923 + 6.2177i 10.8523 +16.9014i 29.4995 +45.9428i » log(B) ans = 0.3466 + 0.7854i 0.8047 + 0.4636i 1.1513 + 0.3218i 1.4166 + 0.2450i » sqrt(B) ans = 1.0987 + 0.4551i 1.4553 + 0.3436i 1.7553 + 0.2848i 2.0153 + 0.2481i Las funciones exponencial, raíz cuadrada y logaritmo usadas anteriormente seaplican elemento a elemento a la matriz, y no tienen nada que ver con las funcionesmatriciales exponenciales y logarítmicas que se usan a continuación. » expm(B) ans = 1.0e+002 * -0.3071 + 0.4625i -0.3583 + 0.6939i -0.3629 + 1.0431i -0.3207 + 1.5102i » logm(A) ans = -5.6588 + 2.7896i 12.5041 - 0.4325i -5.6325 - 0.5129i 12.8139 - 0.7970i -23.3307 + 2.1623i 13.1237 - 1.1616i -5.0129 - 1.2421i 13.4334 - 1.5262i -4.4196 + 1.3313i » abs(B) ans =

Page 62: Matlab Para Ingenieros y Cientificos

1.4142 2.2361 3.1623 4.1231 » imag(B) ans = 1 1 1 1 » fix(sin(B)) ans = 1.0000 1.0000 0 - 1.0000i - 1.0000 » ceil(log(A)) ans = 0 1 2 2 2 2 2 3 3 » sign(B) ans = 0.7071 + 0.7071i 0.8944 + 0.4472i 0.9487 + 0.3162i 0.9701 + 0.2425i » rem(A,3*ones(3)) ans = 1 2 0 1 2 0 1 2 0 » funm(B,'sinh') ans =

Page 63: Matlab Para Ingenieros y Cientificos

-15.8616 +23.2384i -17.6536 +34.7072i -17.7736 +52.1208i -16.2216 +75.4791i El resultado de la última función es equivalente a sinh(B), pero el algoritmo decálculo es distinto. Funciones matemáticas elementales que admiten como argumento un vector complejo V max(V) Mayor componente (para complejos se calcula max(abs(V)))min(V) Menor componente (para complejos se calcula min(abs(V)))mean(V) Media de las componentes de Vmedian(V) Mediana de las componentes de Vstd(V) Desviación típica de las componentes de Vsort(V) Ordena de forma ascendente las componentes de V. Para complejos hace la ordenación según los valores absolutos sum(V) Suma las componentes de Vprod(V) Multiplica los elementos de V, con lo que n! = prod(1:n)cumsum(V) Da el vector de sumas acumuladas de Vcumprod(V) Da el vector de productos acumulados de Vdiff(V) Da el vector de primeras diferencias de V (Vt - Vt-1)gradient(V) Aproxima el gradiente de Vdel2(V) Laplaciano de V (discreto de 5 puntos)fft(V) Transformada discreta de Fourier de Vfft2(V) Transformada discreta bidimensional de Fourier de Vifft(V) Inversa de la transformada discreta de Fourier de Vifft2(V) Inversa de la transformada 2-D discreta de Fourier de V Estas funciones también admiten como argumento una matriz compleja, en cuyocaso el resultado es un vector fila cuyas componentes son los resultados de aplicar lafunción a cada columna de la matriz. Veamos algunos ejemplos. » V=1:5, W=[1-i 2i 2+3i] V = 1 2 3 4 5 W = 1.0000 - 1.0000i 0 + 2.0000i 2.0000 + 3.0000y

Page 64: Matlab Para Ingenieros y Cientificos

» diff(V) ans = 1 1 1 1 » diff(W) ans = -1.0000 + 3.0000i 2.0000 + 1.0000y » cumprod(V) ans = 1 2 6 24 120 » cumsum(W) ans = 1.0000 - 1.0000i 1.0000 + 1.0000i 3.0000 + 4.0000i » mean(W) ans = 1.0000 + 1.3333i » std(V) ans = 1.5811 » sort(W) ans = 1.0000 - 1.0000i 0 + 2.0000i 2.0000 + 3.0000i » sum(W)

Page 65: Matlab Para Ingenieros y Cientificos

ans = 3.0000 + 4.0000i » prod(V) ans = 120 » gradient(W) ans = -1.0000 + 3.0000i 0.5000 + 2.0000i 2.0000 + 1.0000i » del2(W) ans = 0 1.5000 - 1.0000i 0 » fft(W) ans = 3.0000 + 4.0000i -0.8660 - 1.7679i 0.8660 - 5.2321i » ifft(W)ans = 1.0000 + 1.3333i 0.2887 - 1.7440i -0.2887 - 0.5893i » fft2(W) ans = 3.0000 + 4.0000i -0.8660 - 1.7679i 0.8660 - 5.2321i Funciones matemáticas especializadas de argumento real Se trata de un grupo de funciones que se usan para operaciones especiales

Page 66: Matlab Para Ingenieros y Cientificos

relacionadas con la integración numérica, la resolución de ecuaciones diferenciales yotros temas del cálculo numérico avanzado. Serán ampliadas en capítulos posteriores. besselj(V,X) Función de Bessel de primera clase (V y X vectores)bessely(V,X) Función de Bessel de segunda clase (V y X vectores)besseli(V,X) Función de Bessel modificada de primera clase (V y X vectores)besselk(V,X) Función de Bessel modificada de segunda clase (V y X vectores)beta(x,y) Función Betabetainc(X,A,B) Función Beta incompleta (X vector y A y B matrices)betaln(x,y) Logaritmo de la función Betaellipj(A,B) Función elíptica de Jacobi (A y B matrices)ellipke(A) Integral elíptica completa (A matriz)erf(x) Función errorerfc(x) Complementario de la función de errorerfcx(x) Complementario a escala de la función de errorerfinv(x) Inversa de la función de errorexpint(X) Función integral exponencial (X vector)gamma(X) Función Gamma (X vector)gammainc(X,Y) Función Gamma incompleta (X e Y vectores)gammaln(X) Logaritmo de la función Gamma (X vector)gcd(x,y) Máximo común divisor (x e y números enteros)lcm(x,y) Mínimo común múltiplo (x e y números enteros) legendre(n,X) Función asociada de Legendre (n entero y X vector)log2(x) Logaritmo en base 2 de x pow2(x) Potencia de base 2 de x Veamos algunos ejemplos. » gamma([6 2 3 5]) ans = 120 1 2 24 » ellipke([(1:3);(4:6)]) ans = Inf 1.5708 - 1.5708i 1.0472 - 1.4810i 0.7854 - 1.3603i 0.6283 - 1.2566i 0.5236 - 1.1708i

Page 67: Matlab Para Ingenieros y Cientificos

» erf(2) ans = 0.9953 » legendre(2,(6:8)) ans = 1.0e+002 * 0.5350 0.7300 0.9550 0 - 1.0649i 0 - 1.4549i 0 - 1.9049i -1.0500 -1.4400 -1.8900 Funciones lógicas Matlab dispone de un grupo de funciones cuya salida es del tipo verdadero (valor1) o falso (valor 0). Entre ellas tenemos las siguientes: exist(A) Chequea si la variable o función A existe (devuelve 0 si A no existe, y un número entre 1 y 5, según el tipo, si existe)any(V) Devuelve 0 si todos los elementos del vector V son nulos y devuelve 1 si algún elemento de V es no nuloall(V) Devuelve 1 si todos los elementos del vector V son no nulos y devuelve 1 si algún elemento de V es no nulofind(V) Devuelve los lugares (o índices) que ocupan los elementos no nulos del vector Visnan(V) Devuelve 1 para los elementos de V que son indeterminados, y devuelve 0 para los que no lo sonisinf(V) Devuelve 1 para los elementos de V que son infinitos, y devuelve 0 para los que no lo sonfinite(V) Devuelve 1 para los elementos de V que son finitos, y devuelve 0 para los que no lo sonisempty(A) Devuelve 1 si A es una matriz vacía y devuelve 0 en otro caso (una matriz vacía es la que tiene una de sus dimensiones 0)issparse(A) Devuelve 1 si A es una matriz por cajas y devuelve 0 en otro casoisreal(V) Devuelve 1 si todos los elementos de V son reales y 0 en otro casoishold Devuelve 1 si retienen las propiedades del gráfico actual para el siguiente y solo se añaden las nuevas, y 0 en caso contrario

Page 68: Matlab Para Ingenieros y Cientificos

isieee Devuelve 1 para computadores IEEEisstr(S) Devuelve 1 si S es una cadena y 0 en caso contrarioisglobal(A) Devuelve 1 si A es una variable global y 0 en otro casoisletter(S) Devuelve 1 si S es una letra del alfabeto, y 0 en otro caso Veamos algunos ejemplos. » isinf([pi NaN Inf -Inf]) ans = 0 0 1 1 » any([pi NaN Inf -Inf])ans = 1FUNCIONES DE MATEMÁTICA SIMBÓLICA Si se dispone del “Toolbox” de matemática simbólica, Matlab amplía su campo defunciones matemáticas avanzadas. Para acceder a estas funciones es necesario utilizar elcomando “mfun”, cuya sintaxis es la siguiente: mfun('función',p1,p2,p3,p4) Evalúa la función especificada para los argumentos especificados A continuación se especifican las funciones de matemática simbólica evaluablescon “mfun” (x e y son argumentos reales; z, z1 y z2 son complejos y m y n son enteros). Función Significado--------------------------------------------------------------------------------------------------------binomial(x,y) Número combinatorio x sobre y: x! / (y!(x-y)! ) bernouilli(n) Enésimo número de Bernouilli Bn: text/(et - 1) = S Bn(x) tn/n! n=0...¥ euler(n) Enésimo número de Euler En: 2/(et + e-t) = S En(x) tn/n! n=0...¥ ¥GAMMA(z) Función Gamma (g): G(z) = ò tz-1 e-t dt 0 ¥

Page 69: Matlab Para Ingenieros y Cientificos

GAMMA(z1,z2) Función Gamma incompleta: G(a,z)=ò ta-1e-t dt 0lnGAMMA(z) Logaritmo de Gamma: ln G(z) = ln(G(z)) Beta(z1,z2) Función Beta: B(z1,z2)= G(z1) G(z2) / G(z1+z2) z

erf(z) Función error: 2/Öp ò e-t^2 dt 0 ¥

erfc(z) Complemento error: 2/Öp ò e-t^2 dt = 1 - erf(z) z ¥

erfc(n, z) erfc(n,z) = ò erfc(n-1,t) dt, erfc(-1,x) = 2/Öp e-x^2

z x

dawson(x) Integral de Dawson: e-x^2 ò e-t^2 dt 0 zSi(z) Seno integral: ò sin(t) / t dt 0Ssi(z) Seno integral desviado = Si(z) - p/2 zCi(z) Coseno integral: g +ln(iz)-ip/2+ò (cos(t)-1)/t dt 0 zShi(z) Seno hiperbólico integral: ò sinh(t) / t dt 0 zChi(z) Cos. hip. integral: g+ln(iz)-ip/2+ò (cosh(t)-1)/tdt 0 x

S(z) Seno integral de Fresnel: ò sin(p/2 t2 ) dt 0 x

C(z) Coseno integral de Fresnel: ò cos(p/2 t2 ) dt 0 x

Ei(z) Integral exponencial: ò e-t/t dt (valor principal) -¥

¥

Ei(n,z) Integral exponencial ampliada: ò e-zt/tn dt 1 x

Li(x) = Ei(ln(x)) Logaritmo integral: ò dt/ln(t) (valor principal)

Page 70: Matlab Para Ingenieros y Cientificos

0 xdilog(x) Integral dilogarítmica: ò ln(t)/(1-t) dt x>1 1Psi(z) Función Digamma: y (z) = G´(z)/ G(z) Psi(n,z) Función Poligamma: y (n)(z) = dn /dzn (y (z)) nharmonic(n) Función armónica: S 1/k = y (n+1) + g k=1 ¥

Zeta(s) Zeta de Riemann: S 1/ks = z(s) k=1 ¥

Zeta(n,s,q) = S 1/(k+q)s

k=1

Zeta(n,s) = dn /dsn (z(s) ¥ j m

hipergeom(n,d,z) = S ( P(G(ni+k)/G(ni))zk / P(G(di+k)/G(di))k!) k=0 i=1 i=1

n = [n1, n2, ...,nj] d = [d1, d2, ..., dm] (Función hipergeométrica generalizada) Veamos algunos ejemplos. » mfun('binomial',5,2) ans = 10 » mfun('Beta',i,2i) ans = -2.8913 - 1.0405i » mfun('FresnelC',0:5) ans = 0 0.7799 0.4883 0.6057 0.4984 0.5636 » mfun('hypergeom',(1:3),(2:5),3)

Page 71: Matlab Para Ingenieros y Cientificos

ans = 1.1661 DEFINICIÓN DE FUNCIONES Ya hemos visto que Matlab incorpora múltiples funciones para usar en el trabajocotidiano con el programa. Pero además el programa ofrece la posibilidad de definirfunciones a medida. El primer camino para definir una función a medida es escribir su definición en unfichero texto, denominado M-fichero, que será permanente, y que por lo tanto permitiráel uso posterior de la función siempre que se requiera. El segundo camino para definir una función a medida es utilizar la relación entreMatlab y Maple, en caso de disponer del “Toolbox” de Matemática Simbólica. En estecaso también se pueden definir funciones de una variable directamente. FUNCIONES Y FICHEROS. M-FICHEROS Matlab es habitualmente utilizado en modo comando (o interactivo), en cuyocaso se submite un comando que se escribe en una única línea sobre la ventana decomandos, y se procesa de inmediato. Pero Matlab también permite la ejecución de conjuntos de comandos en modobatch, en cuyo caso se submiten secuencialmente un conjunto de comandos escritospreviamente en un fichero. Este fichero (M-fichero) ha de ser almacenado en disco con laextensión “.m” en el camino de subdirectorios de Matlab, utilizando cualquier editor ASCIIo la subopción M-file de la opción New del menú File de la barra superior de menús, lacual nos lleva a un editor de texto que permitirá escribir las líneas de comandos yguardar el fichero con un determinado nombre. La opción Open M-File del menú File dela barra superior de menús permite editar cualquier M-fichero preexistente. Para ejecutar un M-fichero, basta teclear su nombre (sin extensión) en modointeractivo sobre la ventana de comandos y pulsar Enter. Matlab interpretasecuencialmente todos los comandos o sentencias incluídos en las diferentes líneas delM-fichero y los ejecuta. Normalmente no aparecen en pantalla los literales de loscomandos que Matlab va interpretando, salvo que se active el comando “echo on”, ysolo se van viendo los resultados de las ejecuciones sucesivas de los comandosinterpretados. Normalmente el trabajo en modo batch es útil cuando se procesan conjuntos muy

Page 72: Matlab Para Ingenieros y Cientificos

largos de comandos de escritura tediosa y con propensión a cometer errores, pero lamayor utilidad se presenta en la automatización de procesos. Además, en las líneas deun M-fichero se pueden introducir textos explicativos y comentarios, empezando cadalínea al efecto por el símbolo %. Con el comando Help se accede al texto explicativo deun M-fichero. Matlab ofrece ciertos comandos de procedimiento que se utilizan muy a menudoen la escritura de M-ficheros. Entre ellos tenemos los siguientes: echo on Permite ver en pantalla los literales de los comandos de las líneas de un M-fichero echo off No presenta en pantalla los literales de los comandos de las líneas de un M-fichero (opción por defecto) pause Causa la interrupción de la ejecución de un M-fichero hasta que el usuario pulse una tecla para continuar keyboard Causa la interrupción de la ejecución de un M-fichero y pasa el control al teclado, para que el usuario realice otras tareas. Se vuelve a la ejecución del M-fichero tecleando sobre la ventana de comandos el comando “return” y pulsando Enter. return Nos devuelve a la ejecución de un M-fichero después de una interrupción break Causa la interrupción de un bucle prematuramente clc Limpia la ventana de comandos home Oculta el cursor more on Habilita la paginación de la salida de Matlab en la ventana de comandos more off Desactiva la paginación de la salida de Matlab en la ventana de comandos more(N) Sitúa el tamaño de página en N líneas menu Permite elegir entre varios tipos de menú para el input del usuario

Page 73: Matlab Para Ingenieros y Cientificos

Cuando se define una función mediante un M-fichero, pueden utilizarse loscomandos anteriores, si se considera necesario. Una de la aplicaciones más útiles de los M-ficheros se presenta en la definición defunciones a medida, a través del comando function, cuya sintasis es la siguiente: function parámetros_salida = nombre_función(parámetros_entrada)cuerpo de la función Una vez que la función ha sido definida se salva en un M-fichero para su usoposterior. Es útil también introducir algún texto explicativo en la sintaxis de la función(entre %), al cual se accederá con el comando de ayuda Help. Cuando los parámetros de salida son más de uno se sitúan entre corchetes yseparados por comas. Si los parámetros de entrada son más de uno se separan porcomas. El cuerpo de la función es la sintaxis que la define, y debe incluir comandos oinstrucciones que asignen valores a los parámetros de salida. Cada comando o instruccióndel cuerpo suele ir en una línea que finaliza con una coma, o con un punto y coma encaso de que se definan variables (para evitar repeticiones en las salidas al ejecutar lafunción). La función se guarda en el M-fichero de nombre nombre_función.m A continuación vamos a definir la función fun1(x)=x^3-2x+cosx, creando elcorrespondiente M-fichero de nombre fun1.m function p=fun1(x)%Definición de una función simplep=x^3-2*x+cos(x); Ahora hallamos el valor de la función en p, ejecutando el M-fichero. » fun1(pi) ans = 23.7231 También podemos pedir ayuda sobre la función fun1 usando el comando help, yaque hemos introducido un comentario en el M-fichero. » help fun1 Definición de una función simple

Page 74: Matlab Para Ingenieros y Cientificos

En el siguiente ejemplo se ilustra la definición de una función con más de unparámetro de entrada y más de un parámetro de salida. function [x1,x2]=rootquad(a,b,c)% Esta función resuelve la ecuación de segundo grado ax^2+bx+c=0% cuyos coeficientes son a, b y c (parámetros de entrada)% y cuyas soluciones son x1 y x2 (parámetros de salida)d=b^2-4*a*c;x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a); Guardamos el M-fichero con el nombre rootquad.m y resolveremos la ecuaciónx^2-6x+2=0 de la siguiente forma: » [p,q]=rootquad(1,-6,2) p = 5.6458 q = 0.3542 Podemos también pedir ayuda sobre la función rootquad. » help rootquad Esta función resuelve la ecuación de segundo grado ax^2+bx+c=0 cuyos coeficientes son a, b y c (parámetros de entrada) y cuyas soluciones son x1 y x2 (parámetros de salida) También se puede evaluar una función definida en un M-fichero mediante elcomando feval, cuya sintaxis es la siguiente: feval( ‘F’,arg1,arg1,..,argn) Evalúa la función F (M-fichero F.m) en los argumentos especificados arg1, arg2, ...,argn Veamos como ejemplos la evaluación de algunas funciones ya definidaspreviamente, pero ahora utilizando el comando feval. » [r1,r2]=feval('rootquad',1,-6,2)

Page 75: Matlab Para Ingenieros y Cientificos

r1 = 5.6458 r2 = 0.3542 » feval('fun1',pi) ans = 23.7231 FUNCIONES Y CONTROL DE FLUJO. BUCLES En matemáticas es común utilizar funciones recursivas, condicionales y definidasa trozos. Para la definición de este tipo de funciones es necesario utilizar las típicassentencias al efecto, así como el manejo de bucles. Como es natural, la definición de lasfunciones se hará a través de M-ficheros, o a través de la relación con Maple en caso dedisponer del “Toolbox” de matemática simbólica. El bucle FOR Matlab dispone de su propia versión de la sentencia DO o FOR definida en lasintaxis de la mayoría de los lenguajes de programación. Esta sentencia permite ejecutarde forma repetitiva un comando o grupo de comandos un número determinado de veces.Por ejemplo: » for i=1:3, x(i)=0, end x = 0 x = 0 0

Page 76: Matlab Para Ingenieros y Cientificos

x = 0 0 0 La forma general de un bucle FOR es la siguiente: for variable = expresión comandosend Como vemos, el bucle siempre empieza con la cláusula for y termina con lacláusula end, e incluye en su interior todo un conjunto de comandos que se separan porcomas. Si algún comando define una variable se finaliza con punto y coma para evitarrepeticiones en la salida. Normalmente los bucles se utilizan en la sintaxis de M-ficheros.Veamos un ejemplo: for i=1:m, for j=1:n, A(i,j)=1/(i+j-1); endend En este bucle hemos definido la matriz de Hilbert de orden (m,n). Si salvamos sucontenido como un M-fichero de nombre “for1.m”, podremos construir cualquier matriz deHilbert ejecutando el M-fichero y especificando los valores para las variables m y n. » m=3;n=4;for1;A A = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667El bucle WHILE También Matlab dispone de su propia versión de la sentencia WHILE definida enla sintaxis de la mayoría de los lenguajes de programación. Esta sentencia permiteejecutar de forma repetitiva un comando o grupo de comandos un número determinadode veces mientras se cumple una condición lógica especificada. La sintaxis general deeste bucle es la siguiente: while condición comandosend

Page 77: Matlab Para Ingenieros y Cientificos

El bucle siempre empieza con la cláusula while seguida de una condición, ytermina con la cláusula end, e incluye en su interior todo un conjunto de comandos quese separan por comas y que se ejecutan mientras se cumple la condición. Si algúncomando define una variable, se finaliza con punto y coma para evitar repeticiones en lasalida. Como ejemplo escribimos un M-fichero que se salva con el nombre “while1.m”,cuya ejecución permite calcular el mayor número cuyo factorial no excede a 10^100. n=1;while prod(1:n) < 1.e100, n=n+1;end,n Ahora ejecutamos el M-fichero. » while1 n = 70El bucle IF ELSEIF ELSE END Matlab, al igual que la mayoría de los lenguajes de programación estructurada,incorpora la estructura IF-ELSEIF-ELSE-END. Mediante esta estructura se pueden ejecutarsecuencias de comandos si se cumplen determinadas condiciones. La sintaxis del buclees la siguiente: if condición comandosend En este caso se ejecutan los comandos si la condición es cierta. Pero la sintaxisde este bucle puede ser más general.if condición comandos1else comandos2end En este caso se ejecutan los comandos1 si la condición es cierta, y se ejecutanlos comandos 2 si la condición es falsa. Las sentencias IF, al igual que las sentencias FOR, pueden ser anidadas. Cuandose anidan varias sentencias IF, se utiliza la sentencia ELSEIF, cuya sintaxis general es la

Page 78: Matlab Para Ingenieros y Cientificos

siguiente: if condición1 comandos1elseif condición2 comandos2elseif condición3 comandos3..elseend En este caso se ejecutan los comandos1 si condición1 es cierta, se ejecutan loscomandos 2 si condición1 es falsa y condición2 es cierta, se ejecutan los camandos3 sicondición1 y condición2 son falsas y condición3 es cierta, y así sucesivamente. La sintaxis anidada anterior es equivalente, pero más rápida de ejecución, a lasintaxis sin anidar siguiente: if condición1 comandos1else if condición2 comandos2 else if condición3 comandos3 else.. end endend Veamos como ejemplo el M-fichero de nombre “else1.m” siguiente: if n<0, A = 'n es negativo'elseif rem(n,2) ==0 A = 'n es par'else A = 'n es impar'end

Page 79: Matlab Para Ingenieros y Cientificos

Al ejecutarlo, obtendremos el tipo de número (negativo, par o impar) para unvalor de n especificado. » n=8;else1 A = n es par » n=7;else1 A = n es impar » n=-2;else1 A = n es negativo Funciones recursivas Una de las aplicaciones de los bucles es la creación de funciones recursivas vía M-ficheros. Por ejemplo, aunque la función factorial se puede definir en Matlab comon!=prod(1:n), se puede también definir como función recursiva de la manera siguiente: function y=factori(x)if x==0 y=1;endif x==1 y=1;endif x>1 y=x*feval('factori',x-1);end Si ahora queremos calcular 40! lo haremos de la forma siguiente:

Page 80: Matlab Para Ingenieros y Cientificos

» factori(40) ans = 8.1592e+047 Ejercicio 3-2. La sucesión {an} de Fibonacci se define mediante la ley de recurrencia dada pora1 = 1, a2 = 1, an = a(n-1) + a(n-2). Representar esta sucesión por una función recurrente ycalcular a2 y a5. Vamos definir la función mediante el M-fichero “fib.m” siguiente: function y=fibo(x)if x<=1 y=1;else y=feval('fibo',x-1)+feval('fibo',x-2);end » fibo(2) ans = 2 » fibo(5) ans = 8Funciones condicionales En la teoría matemática han jugado siempre un papel muy importante lasfunciones definidas a trozos. Dichas funciones suelen estar definidas de formas distintapara los distintos intervalos de variación de la variable independiente. Matlab posibilita eltrabajo correcto con este tipo de funciones, que suelen definirse mediante M-ficheros, enla mayoría de los casos, apoyándose en los bucles FOR, WHILE, IF-ELSEIF-IF-END, etc. Ejercicio 3-3. Definir la función delta(x) que vale 1 si x=0 y vale =0 si x es distinto de cero.Definir también la función delta1(x) que vale 0 si x=0, 1 si x>0 y -1 si x<0 y representarlagráficamente. Para definir delta(x) creamos el M-fichero “delta.m” siguiente:

Page 81: Matlab Para Ingenieros y Cientificos

function y=delta(x)if x==0 y=1;else y=0;end Para definir delta1(x) creamos el M-fichero “delta1.m” siguiente: function y=delta1(x)if x==0 y=0;elseif x>0 y=1;elseif x<0 y=-1;end Para representar una función se utiliza el comando fplot, cuya sintaxis es lasiguiente: fplot(‘función’, [xmin xmax ymin ymax]) Representa la función para las variaciones de x e y dadas Ahora representamos la función delta1(x). Ver figura 7-1 » fplot('delta1(x)', [-10 10 -2 2])

Figura 3-1

Ejercicio 3-4. Definir una función stat(v) que devuelva la media y la desviación típica de loselementos de un vector dado v. Como aplicación hallar la media y desviación típica de losnúmeros 1, 5 , 6, 7 y 9. Para definir stat(v) creamos el M-fichero “stat.m” siguiente: function [media, destip] = stat(v)[m,n]=size(v);if m==1

Page 82: Matlab Para Ingenieros y Cientificos

m=n;endmedia=sum(v)/m;destip=sqrt(sum(v.^2)/m-media.^2); Ahora hallamos la media y desviación típica de los números 1 5 6 7 y 9 » [a,s]=stat([1 5 6 7 9]) a = 5.6000 s = 2.6533 Ejercicio 3-5. Definir y representar gráficamente la función a trozos que vale 0 si x<=-3, valex^3 si -3<x<-2, vale x^2 si -2<=x<=2, vale x si 2<x<3 y vale 0 si 3<=x. Creamos la función mediante un M-fichero de nombre “trozos1.m”. function y=trozos1(x)if x<=-3 y=0;elseif -3<x & x<-2 y=x^3;elseif -2<=x & x<=2 y=x^2;elseif 2<x & x<3 y=xelseif x>=3 y=0;end Ahora representamos la función. Ver figura 7-2 » fplot('trozos1', [-5 5])

Page 83: Matlab Para Ingenieros y Cientificos

Figura 3-2

DEFINICIÓN DIRECTA DE FUNCIONES A MEDIDA Ya sabemos que un camino para definir una función a medida es utilizar larelación entre Matlab y Maple, en caso de disponer del “Toolbox” de MatemáticaSimbólica. En este caso también se pueden definir funciones de una variabledirectamente, y de varias variables usando el comando maple. La ventaja de esta forma de definir funciones es que no es necesario escribirficheros en disco. Funciones de una variable Las funciones de una variable se definen de la forma f = ‘función’ Para hallar el valor de la función f en un punto se utiliza el comando subs, cuyasintaxis es la siguiente: subs(f, a) Aplica la función f en el punto asubs(f,a,b) Sustituye en f el valor b por el valor a Veamos cómo definir la función f(x)=x^2. » f='x^2' f = x^2 Ahora calculamos los valores f(4), f(a+1) y f(3x+x^2).

Page 84: Matlab Para Ingenieros y Cientificos

» A=subs(f,4),B=subs(f,'a+1'),C=subs(f,'3*x+x^2') A = 16 B = (a+1)^2 C = (3*x+x^2)^2 Funciones de varias variables Las funciones de varias variables se definen a través del comando maple de lasiguiente forma: maple( ‘f:=(x,y,z...)->f(x,y,z....)’) Define la función f(x,y,z,..) maple( ‘f:=(x,y,z...)->(f1(x,y..),f2(x,y..),..)’) Define la función vectorial (f1(x,y,..), f2(x,y,..),...) Para hallar el valor de la función (x,y,z)->f(x,y,z...) en el punto (a,b,c,...) seutiliza la expresión maple(‘f(a,b,c,...)’) Se halla el valor de la función vectorial f:=(x,y,..)-> (f1(x,y,..), f2(x,y,..),..) en elpunto (a,b,..) mediante la expresión maple(‘f(a,b,..)’) Se define la función f(x,y)=2x+y de la siguiente forma: » maple('f:=(x,y)->2*x+y'); Se calculan f(2,3) y f(a,b) de la siguiente forma: » maple('f(2,3)') ans = 7 » maple('f(a,b)')

Page 85: Matlab Para Ingenieros y Cientificos

ans = 2*a+b Ejercicio 3-6. Definir las funciones f(x)=x^2, g(x)=x^(1/2) y h(x)=x+Sin(x). Calcular f(2), g(4)yh(a-b^2) » f='x^2',g='x^(1/2)',h='x+sin(x)' f = x^2 g = x^(1/2) h = x+sin(x) » a=subs(f,2),b=subs(g,4),c=subs(h,'a-b^2') a = 4 b = 4^(1/2) c = a-b^2+sin(a-b^2) Ejercicio 3-7. Dada la función h definida por: h(x,y)= (cos(x^2-y^2), sin(x^2-y^2))Calcular h(1,2), h(-Pi,Pi) y h(cos(a^2), cos(1-a^2)) Como se trata de una función vectorial de dos variables, utilizamos el comandomaple. » maple('h:=(x,y)->(cos(x^2-y^2), sin(x^2-y^2))'); » maple('A=h(1,2), B=h(-pi,pi), C=h(cos(a^2),cos(1-a^2))')

Page 86: Matlab Para Ingenieros y Cientificos

ans = A = (cos(3), -sin(3)), B = (1, 0),C = (cos(cos(a^2)^2-cos(-1+a^2)^2), sin(cos(a^2)^2-cos(-1+a^2)^2)) También podríamos definir esta función vectorial de dos variables usando el M-fichero de nombre “vector1.m” siguiente: function [z,t]=vector1(x,y)z=cos(x^2-y^2);t=sin(x^2-y^2); El M-fichero puede construirse también con la siguiente sintaxis: function h=vector1(x,y)z=cos(x^2-y^2);t=sin(x^2-y^2);h=[z,t]; Calcularíamos los valores de la función en (1,2) y (-pi,pi) como sigue: » A=vector1(1,2), B=vector1(-pi,pi) A = -0.9900 -0.1411 B = 1 0 Ejercicio 3-8. Dada la función f definida por: f(x,y)= 3(1-x)2 e -(y+1)^2-x^2 -10(x/3-x 3-y/5)e -x^2-y^2-1/3e -(x+1)^2-y^2

Hallar f(0,0) y representarla gráficamente En primer lugar podemos definirla a través del comando maple. » maple('f:=(x,y)->3*(1-x)^2*exp(-(y+1)^2-x^2)-10*(x/3-x^3-y^5)*exp(-x^2-y^2)-1/3*exp(-(x+1)^2-y^2)');

Page 87: Matlab Para Ingenieros y Cientificos

Ahora calculamos el valor de f en (0,0) » maple('f(0,0)') ans = 8/3*exp(-1) También podemos crear el M-fichero de nombre “func2.m” como sigue: function h=func2(x,y)h=3*(1-x)^2*exp(-(y+1)^2-x^2)-10*(x/3-x^3-y^5)*exp(-x^2-y^2)- 1/3*exp(-(x+1)^2-y^2); Ahora calculamos el valor de h en (0,0)» func2(0,0) ans = 0.9810 Para hacer la gráfica de la función utilizamos el comando “meshgrid” paradefinir la malla de representación (en un entorno del origen), y el comando “surf” pararealizar el gráfico de superficie. » [x,y]=meshgrid(-0.1:.005:0.1,-0.1:.005:0.1);» z=func2(x,y);» surf(x,y,z) Y se obtiene la gráfica de la figura 3-3

Figura 3-3 Se obtendría la misma figura utilizando el comando “maple(‘plot3d(f)’)”, siendo fla sintaxis de la función definida con el comando maple.

Page 88: Matlab Para Ingenieros y Cientificos

» maple('plot3d(f(x,y), x=-0.1..0.1, y=-0.1..0.1)'); OPERACIONES FUNCIONALES Normalmente, las funciones definidas en Matlab operan sobre sus argumentos.Sin embargo, también existen operadores funcionales que operan sobre otras funciones,(los argumentos de los operadores funcionales son funciones), como por ejemplo eloperador función inversa. A su vez Matlab también permite las operaciones clásicas entrefunciones (suma, producto,...). Entre los operadores funcionales y operaciones típicas clásicas entre funcionesque habilita Matlab podemos resaltar las siguientes: symadd(f,g) Suma las funciones f y g (f+g) symop(f, ’+’,g, ’+’,h,’+’,.....) Realiza la suma f+g+h+....maple(‘f+g+h+...’) Realiza la suma f+g+h+.... symsub(f,g) Realiza la diferencia de f y g (f-g) symop(f, ’-’,g, ’-’,h,’-’,.....) Realiza la diferencia f-g-h-.... maple(‘f-g-h-...’) Realiza la diferencia f-g-h-.... symmul(f,g) Realiza el producto de f y g (f*g) symop(f, ’*’,g, ’*’,h,’*’,.....) Realiza el producto f*g*h*.... maple(‘f*g *h*,....’) Realiza el producto f*g*h*.... symdiv(f,g) Realiza el cociente entre f y g (f/g) symop(f, ’/’,g, ’/’,h,’/’,.....) Realiza el cociente f/g/h/.... maple(‘f/g/h/....’) Realiza el cociente f/g/h/.... sympow(f,k) Eleva f a la potencia k (k es un escalar) symop(f,’^’,g) Eleva una función a otra función (fg) maple(‘f^g’) Eleva una función a otra función (fg)

Page 89: Matlab Para Ingenieros y Cientificos

compose(f,g) Función compuesta de f y g (f°g(x) = f(g(x))) compose(f,g,’u’) Función compuesta de f y g, tomando la expresión u como dominio de f y g maple(‘f @g @h @...’) Función compuesta de f, g, h, ... finverse(f) Función inversa de f Ejercicio 3-9. Sean f(x)= x^2+x, g(x)=x^3+1 y h(x)=Sinx+Cosx. Calcular: f(g(x)), g(f(x-1)), f(h(Pi/3)) y f(g(h(Sinx))). » f='x^2';g='x^3+1';h='sin(x)+cos(x)';u=compose(f,g) u = (x^3+1)^2 » v=subs(compose(g,f),'x-1') v = (x-1)^6+1 » w=subs(compose(f,h),'pi/3') w = (sin(1/3*pi)+cos(1/3*pi))^2 » r=subs(compose(f,compose(g,h)),'sin(x)') r = ((sin(sin(x))+cos(sin(x)))^3+1)^2 Este último apartado puede resolverse también de la siguiente forma: » maple('f:=x->x^2;g:=x->x^3+1;h:=x->sin(x)+cos(x)');» maple('(f@(g@h))(sin(x))')

Page 90: Matlab Para Ingenieros y Cientificos

ans = ((sin(sin(x))+cos(sin(x)))^3+1)^2 Ejercicio 3-10. Sean las funciones f y g, definidas por f(x,y)=(x^2,y^2) y g(x,y)=(sen(x),sen(y)).Calcular f(f(f(x,y))) y g(f(p,p)) » maple('f:=(x,y)->(x^2,y^2);g:(x,y)->(sin(x),cos(y))'); » a=maple('(f@(f@(f)))(x,y)') a = x^8, y^8 » [c,d]=maple('(g@(f))(pi,pi)') c = pi^6+1 d = 0 Ejercicio 3-11. Calcular las funciones inversas de f(x)=sin(cos(x^(1/2))) y deg(x)=sqrt(tan(x^2)) » finverse('sin(cos(x^(1/2)))') ans = acos(asin(x))^2 » g='sqrt(tan(x^2))'; » finverse(g) Warning: finverse(sqrt(tan(x^2))) is not unique ans = -atan(x^2)^(1/2)

Page 91: Matlab Para Ingenieros y Cientificos

En este último caso el programa nos avisa de la no unicidad de la función inversa. Ejercicio 3-12. Calcular la inversa h(x) de la función f(x)= Ln[x+ex]]. Calcular también f(h(x))y h(f(x)). » f='ln(x+exp(x))'; » g=finverse(f) g = -lambertw(exp(exp(x)))+exp(x) » compose(f,g) ans = log(-lambertw(exp(exp(x)))+exp(x)+exp(-lambertw(exp(exp(x)))+exp(x))) » simplify(compose(f,g)) ans = x Evidentemente, el resultado de la composición es la función identidad.

Page 92: Matlab Para Ingenieros y Cientificos

Capítulo 4

EXPRESIONES ALGEBRÁICAS, POLINOMIOS E INTERPOLACIÓN

EXPRESIONES ALGEBRAICAS Matlab maneja con maestría todos los cálculos con expresiones algebraicassimples, racionales y complejas. Realiza rápida y eficientemente todas las operaciones desimplificación, factorización, agrupación y expansión de expresiones algebraicascomplicadas, incluyendo expresiones trigonométricas y expresiones en variable compleja,siempre y cuando se disponga del “Toolbox” de matemática simbólica.. A continuación se presenta una relación de los comandos para transformacionesalgebraicas, más comúnmente utilizados en el trabajo con Matlab. e x p a n d ( ‘ e x p r ’ ) Expande lo más posible una expresión algebraica, realizando totalmente los productos y potencias, hasta presentar el resultado como una suma de términos. Aplica reglas de ángulos múltiples para expresiones trigonométricas y aplica formalmente las propiedades de las funciones logarítmicas y exponenciales. También descompone fracciones algebraicas de numerador polinómico en sumas de fracciones factor(‘expr’) Escribe una expresión algebraica expandida como producto de factores (inversa de la anterior). La factorización se realiza por defecto en el cuerpo definido por los coeficientes de la expresión. Para fracciones algebraicas, factoriza numerador y denominador y simplifica factores comunes factor(‘expr,a’) Factoriza la expresión algebraica polinómica en la

Page 93: Matlab Para Ingenieros y Cientificos

extensión algebraica del cuerpo de sus coeficientes definida por a (a suele ser unradical simple o compuesto, o una expresión RootOff) simplify(‘expr’) Simplifica lo más posible una expresión algebraica, realizando sumas finales.Ejecuta sumas de fracciones algebraicas, pero nolas simplifica totalmente simplify(‘expr, regla1, regla2, ... reglan’) Simplifica la expresión teniendo en cuenta las reglas especificadas. Los valores posibles de las reglas son: Ei, GAMMA, atsign, hypergeom, ln, polar, power, radical, sqrt y trig, y permiten simplificaciones de expresiones quecontienen: Integrales exponenciales, funcionesgamma, operadores funcionales, funciones hipergeométricas, logaritmos, funcionespolares, radicales, raíces cuadradas y funciones trigonométricas respectivamente simplify(‘expr, assume=propiedad’) Simplifica la expresión teniendo en cuenta la propidad especificada simplify(‘expr, symbolic’) Simplifica la expresión considerando positivas todas las subexpresiones afectadas por radicales collect(‘expr’, ‘x’) Agrupa la expresión algebraica polinómica en potencias ordenadas de la variable x. Si no se especifica la variable, toma por defecto la variable simbólica principal (la definida por el comando symvar) collect(‘expr’, ‘[x,y])’) Agrupa la expresión algebraica polinómica en potencias ordenadas de las variables x e y

Page 94: Matlab Para Ingenieros y Cientificos

collect(‘expr’,‘f(x)’) Agrupa la expresión algebraica en potencias ordenadas de una función f(x) contenida en la expresión R=simple(‘expr’) Halla la forma más simplificada posible de la expresión algebraica. Es el comando más eficiente para simplificar totalmente una fracción algebraica [R, HOW] = simple(‘expr’) Halla la forma más simplificada posible R de la expresión algebraica y devuelve una lista HOW con el camino seguido (comandos utilizados) Veamos a continuación varios ejemplos relativos a los comandos con expresionesalgebraicas que se acaban de definir. Comenzamos con ejemplos ilustrativos delcomando expand. » pretty(expand('(x+1)*(x+2)')) 2 x + 3 x + 2 » pretty(expand('(x+1)/(x+2)')) x 1 ------ + ------- x + 2 x + 2» pretty(expand(‘sin(x+y)’)) sin(x) cos(y) + cos(x) sin(y) » pretty(expand(‘cos(2*x)’)) 2 2 cos(x) - 1 » pretty(expand(‘exp(a+ln(b))’)) exp(a) b » pretty(expand(‘ln(x/(1-x)^2)’))

Page 95: Matlab Para Ingenieros y Cientificos

ln(x) - 2 ln(1 - x) » pretty(expand(‘(x+1)*(y+z)’)) x y + x z + y + z » pretty(expand(‘BesselJ(2,t)’)) BesselJ(1, t) 2 ------------------ - BesselJ(0, t) t A continuación se presentan varios ejemplos relativos al comando factor, que aprimera vista sería una especie de comando inverso a expand. » pretty(factor('6*x^2+18*x-24')) 6 (x + 4) (x - 1) En el siguiente ejemplo se factoriza numerador y denominador y se simplificanfactores comunes. » pretty(factor('(x^3-y^3)/(x^4-y^4)')) 2 2 x + y x + y --------------------- 2 2 (x + y) (x + y ) En los siguientes ejemplos se realiza la factorización en la extensión algebraicadel cuerpo de los coeficientes definida por el segundo argumento. » pretty(factor('x^3+5, 5^(1/3)')) 2 1/3 2/3 1/3 (x - 5 x + 5 ) (x + 5 ) » pretty(factor('x^3+5, {5^(1/3),(-3)^(1/2)}')) 1/3 1/2 1/3 1/3 1/2 1/3 1/3 1/4 (2 x - 5 - (-3) 5 ) (2 x - 5 + (-3) 5 )(x + 5 )

Page 96: Matlab Para Ingenieros y Cientificos

» pretty(factor('y^4-2,sqrt(2)')) 2 1/2 2 1/2 (y + 2 ) (y - 2 ) » pretty(factor('y^4-2,RootOf(x^2-2)')) 2 2 2 2 (y + RootOf(_Z - 2)) (y - RootOf(_Z - 2)) En el siguiente ejemplo se pone de manifiesto la diferencia entre factorizar en elcuerpo de los coeficientes del polinomio o en una extensión suya dada por (-3) (̂1/2). » pretty(factor('x^3+y^3')) 2 2 (x + y) (x - x y + y ) » pretty(factor('x^3+y^3,(-3)^(1/2)')) 1/2 1/2 1/4 (2 x - y - (-3) y) (2 x - y + (-3) y) (x +y) A continuación se presentan varios ejemplos relativos al comando simplify. » simplify('sin(x)^2 + cos(x)^2') ans = 1» simplify('exp(a+ln(b*exp(c)))') ans = b*exp(a+c) » pretty(simplify('(x^a)^b+4^(1/2), power')) (a b) 1/2 x + 4 » pretty(simplify('sin(x)^4 + 2*cos(x)^2 - 2*sin(x)^2 - cos(2*x), trig'))

Page 97: Matlab Para Ingenieros y Cientificos

4 cos(x) » pretty(simplify('-1/3*x^5*y+x^4*y^2+1/3*x*y^3+1, {x^3=x*y, y^2=x+1}')) 5 4 2 3 1 + y + y - y + y - 2 y » pretty(simplify('((x-1)^2)^(3/2)*sqrt(a^2),assume(x-1>0)')) 3 (x~ - 1) a El signo que aparece en la parte superior derecha de la variable x, indica que se haasumido alguna condición que envuelve a x. Veamos ahora algunos ejemplos relativos al comando collect. » pretty(collect( '(x+1)*(x+2)' )) 2 x + 3 x + 2 » pretty(collect( 'y*(sin(x)+1)+sin(x)', 'sin(x)' )) (y + 1) sin(x) + y » pretty(collect( 'x^3*y+x^2*y^3+x+3', 'y' )) 3 2 3 x y + x y + x + 3 » p = 'x*y+z*x*y+y*x^2-z*y*x^2+x+z*x';» pretty(collect( p, '[x,y]' )) 2 2 x y + z x y + y x - z y x + x + z x Vamos a ver ahora ejemplos de cómo trabaja simple » pretty(simple('cos(3*acos(x))'))

Page 98: Matlab Para Ingenieros y Cientificos

3 4 x - 3 x » [R,HOW]=simple('cos(3*acos(x))') R = 4*x^3-3*x HOW = expand En este segundo caso el comando que provocó la simplificación fina fue expand. » pretty(simple('cos(x)+(-sin(x)^2)^(1/2)')) cos(x) + i sin(x) » pretty(simple( '(x^2-y^2)/(x-y)^3' )) x + y ---------- 2 (x - y) » pretty(simple( '(f(x)^2-1)/(f(x)-1)' )) f(x) + 1 Se presentan ahora ejemplos sobre el comando maple(normal). » maple('normal( sin(x*(x+1)-x) )') ans = sin(x^2) Ejercicio 4-1. Realizar las siguientes operaciones algebraicas, simplificando al máximo elresultado: 2 2 3 3 x y 2 x y 1 + a 1 - b a - b[----- - ----- + -------] [------ + ------ - --- ----]x + y x - y 2 2 b a a b

Page 99: Matlab Para Ingenieros y Cientificos

x - y Al tratarse de operaciones algebraicas en las que aparecen sumas de fracciones, elcomando más eficiente es simple, pero también se pueden utilizar los comandos factory simplify. » pretty(simple('x/(x+y)-y/(x-y)+2*x*y/(x^2-y^2)')) 1 » pretty(factor('x/(x+y)-y/(x-y)+2*x*y/(x^2-y^2)')) 1 » pretty(simplify('x/(x+y)-y/(x-y)+2*x*y/(x^2-y^2)')) 1 » pretty(simple('(1+a^2)/b + (1-b^2)/a - (a^3-b^3)/(a*b)')) 1/b + 1/a » pretty(factor('(1+a^2)/b + (1-b^2)/a - (a^3-b^3)/(a*b)')) a + b ------ a b» pretty(simplify('(1+a^2)/b + (1-b^2)/a - (a^3-b^3)/(a*b)')) a + b ------ a b Ejercicio 4-2. Simplificar lo más posible las siguientes fracciones algebraicas: 3 2 2 2 2 2 a - a b + a c - b c (x - 9) (x - 2 x + 1) (x - 3) [-----------------------] [-------------------------------] 3 2 2 2 2 2 a + a c + a b + b c (x - 6 x + 9) (x - 1) (x - 1) Como se trata de fracciones algebraicas simples, utilizaremos los comandossimple, factor o simplify.

Page 100: Matlab Para Ingenieros y Cientificos

» pretty(simple('(a^3-a^2*b+a*c^2-b*c^2)/(a^3+a*c^2+a^2*b+b*c^2)')) a - b ------- a + b » pretty(factor('(a^3-a^2*b+a*c^2-b*c^2)/(a^3+a*c^2+a^2*b+b*c^2)')) a - b ------- a + b » pretty(simplify('(a^3-a^2*b+a*c^2-b*c^2)/(a^3+a*c^2+a^2*b+b*c^2)')) a - b ------- a + b » pretty(simple('((x^2-9)*(x^2-2*x+1)*(x-3))/((x^2-6*x+9)*(x^2-1)*(x-1))')) x + 3 -------- x + 1» pretty(factor('((x^2-9)*(x^2-2*x+1)*(x-3))/((x^2-6*x+9)*(x^2-1)*(x-1))')) x + 3 ------- x + 1 » pretty(simplify('((x^2-9)*(x^2-2*x+1)*(x-3))/((x^2-6*x+9)*(x^2-1)*(x-1))')) x + 3 ------ x + 1 Ejercicio 4-3. realizar las siguientes operaciones algebraicas, simplificando al máximo elresultado.

Page 101: Matlab Para Ingenieros y Cientificos

a) 2 3 x - 1 5 - x 4 x 2 2 4 [(------- - ----- - ------) * (x (x + 1) - (x + 4))) / (4 + 5x)] x + 2 x - 2 2 x - 4 b) 2 x 2 (---------------------------) 4 x (x - y) --------------- 2 2 x + 2 x y + y[--------------------------] y 1 + - x 4 (--------) y 1 - - x En este tipo de operaciones combinadas, donde aparecen sumas y diferencias,así como cocientes productos y potencias de expresiones algebraicas, son aplicables loscomandos simple, factor o simplify. » pretty(simple('((3*x-1)/(x+2)-(5-x)/(x-2)-4*x^2/(x^2-4))*((x^2*(x^2+1)-(x^4+4))/(4+5*x))')) -2 » pretty(simple('((2*x/(x-y))/(4*x/(x^2+2*x*y+y^2)))^2/((1+y/x)/(1-y/x))^4')) 2 1/4 (x - y) 3 2 (x + 2x - x - 2)Ejercicio 4-5. Dada la fracción racional ---------------------- 3 2 x + x - 4x - 4

Page 102: Matlab Para Ingenieros y Cientificos

Hallar su verdadero valor en x= -3 y x=4. » r = '(x^3+2*x^2-x-2)/(x^3+x^2-4*x-4)'; » A=subs(simplify(r), -3), B=subs(simplify(r), 4)A = 4/5 B = 3/2 Si hubiéramos hecho la sustitución sin simplificar, el resultado sería el mismo. » A=subs(r, -3), B=subs(r, 4) A = 4/5 B = 3/2 Ejercicio 4-6. Desarrollar y simplificar todo lo posible las siguientes expresionestrigonométricas: a) Sin[3x]Cos[5x]b) [(Cot[a])2 +(Sec[a]) 2 -(Csc[a]) 2

c) Sin[a]/(1+Cot[a] 2 )-Sin[a] 3

» pretty(maple('combine(sin(3*x)*cos(5*x), trig)')) 1/2 sin(8 x) - 1/2 sin(2 x) » pretty(simple('(cot(a))^2+(sec(a))^2-(csc(a))^2,trig')) 2 cos(a) - 1 - -------------- 2 cos(a)

Page 103: Matlab Para Ingenieros y Cientificos

» pretty(simplify('sin(a)/(1+cot(a)^2)-sin(a)^3,trig')) 0 Ejercicio 4-7. Simplificar al máximo las siguientes expresiones trigonométricas. a) Sin[3 Pi/2 +a]Cot[3 Pi/2-a]/Cot[3 Pi/2+a] + Tan[3 Pi/2-a] Cot[Pi/2+a] /Sin[3 Pi/2+a]Cot[-a] b) (a2-b2)Cot[Pi-a]/Tan[Pi/2-a]-(a2 +b2)Tan[Pi/2-a]/Cot[Pi-a] c) (Cot[a]+Tan[a])/(Cot[a]-Tan[a]) - Sec[2 a] » pretty(simplify('sin(3*pi/2+a)*cot(3*pi/2-a)/cot(3*pi/2+a)+ tan(3*pi/2-a)*cot(pi/2+a)/sin(3*pi/2+a)*cot(-a),trig')) cos(a) sin(a) - 1 ---------------------- sin(a) » pretty(simple('(a^2-b^2)*cot(pi-a)/tan(pi/2-a)- (a^2+b^2)*tan(pi/2-a)/cot(Pi-a),trig')) 2 2 b » pretty(simplify('(cot(a)+tan(a))/(cot(a)-tan(a))-sec(2*a), trig')) 0 POLINOMIOS Matlab permite el trabajo ágil con polinomios. El programa habilita varios comandospara el manejo algebraico de las expresiones polinómicas. Estas expresiones puedentratarse también como expresiones algebraicas en general, pero Matlab particulariza elestudio para las expresiones algebraicas polinómicas incluyendo comandos específicospara el caso. Veamos algunos de estos comandos. c o n v ( a , b ) Da el vector con los coeficientes del polinomio producto de los polinomios cuyos coeficientes son los elementos de los vectores a y b [q,r]=deconv(a,b) Da el vector q con los coeficientes del polinomio

Page 104: Matlab Para Ingenieros y Cientificos

cociente de los polinomios cuyos coeficientes son los elementos de los vectores a y b, y el vector r, que es polinomio resto de la división poly2sym(a) Escribe el polinomio cuyos coeficientes son los especificados en el vector a sym2poly(polinom) Escribe el vector de coeficientes del polinomio especificado (operación inversa a la anterior) roots(a) Da las raíces del polinomio cuyos coeficientes son el vector a poly(v) Da el polinomio cuyas raíces son las componentes del vector v poly(A) Da el polinomio característico de la matriz A polyder(a) Da el vector cuyos coeficientes son los del polinomio primera derivada del polinomio a polyder(a,b) Da el vector cuyos coeficientes son los del polinomio derivada del producto de a y b [q,d]=polyder(a,b) Da la derivada del polinomio cociente a/b polyval(p, S) Evalúa el polinomio p en S polyvalm(p, S) Evalúa matricialmente el polinomio p en S [r,p,k]=residue(a,b) Da los vectores columna r, p y k tales que: b(s)/a(s)=r1/(s-p1)+r2/(s-p2)+...+rn/(s-pn) +k(s) [b,a]=residue(r,p,k) Realiza la operación inversa de la anterior Veamos a continuación algunos ejemplos sobre los comandos recientementedefinidos. Vamos a descomponer la fracción (-x^2+2x+1)/(x^2-1) en suma de fraccionessimples. » [r,p,k]=residue([-1,2,1],[1,0,-1])r =

Page 105: Matlab Para Ingenieros y Cientificos

1.0000 1.0000 p = -1.0000 1.0000 k = -1 Con lo que la descomposición será: (-x^2+2x+1)/(x^2-1) = 1/(-1+x)+1/(x+1) - 1 A continuación vamos a evaluar el polinomio x^4-6*x^3-x^2+10*x-11 sobre elpunto x=5 y sobre la matriz de unos de orden 4. » polyval([1,-6,-1,10,-11],5) ans = -111 » polyvalm([1,-6,-1,10,-11],ones(4)) ans = -37 -26 -26 -26 -26 -37 -26 -26 -26 -26 -37 -26 -26 -26 -26 -37 Ahora consideramos los polinomios de coeficientes a=[2,-4,5,8,0,0,1] y b=[-7,15, 0,12,0] y vamos a calcular los coeficientes de los polinomios producto y cociente de ay b, calculando también los coeficientes de la derivada de a y de los polinomios derivadadel producto y cociente de a y b. » a=[2,-4,5,8,0,0,1]; b=[-7, 15, 0,12,0]; » conv(a,b)

Page 106: Matlab Para Ingenieros y Cientificos

ans = -14 58 -95 43 72 60 89 15 0 12 0 » [q,r]=deconv(a,b) q = -0.2857 -0.0408 -0.8017 r = 0 0 0 23.4548 0.4898 9.6210 1.0000 » polyder(a) ans = 12 -20 20 24 0 0 » polyder(a,b) ans = -140 522 -760 301 432 300 356 45 0 12 » [q,d]=polyder(a,b) q = -28 118 -120 251 -192 180 220 -45 0 -12 d = 49 -210 225 -168 360 0 144 0 0 En todos los ejemplos anteriores se pueden transformar los vectores decoeficientes en los polinomios equivalentes con el comando poly2sym, para obterner asílos resultados en forma polinómica. Ahora vamos a hallar las raíces del polinomio x^3-x, así como susmultiplicidades, realizando los cálculos también en módulo 6 y en la extensión algebraicadefinida por sqrt(2).

Page 107: Matlab Para Ingenieros y Cientificos

» roots([1,0,-1,0]) ans = 0 -1.0000 1.0000 Ahora resolvemos la ecuación -x^5+2*x^4+x^3+x^2=0 » roots([-1,2,1,1,0,0]) ans = 0 0 2.5468 -0.2734 + 0.5638i -0.2734 - 0.5638i Ejercicio 4-8. Realizar las siguientes operaciones con expresiones polinómicas. 3 2 2 3 3a) (5 x y z - 4 x y z ) 4 2 2 4b) (x + y) (x + x y + y ) (x - y)] » pretty(expand('(5*x^3*y^2*z-4*x*y^2*z^3)^3')) 9 6 3 7 6 5 5 6 7 3 6 9 125 x y z - 300 x y z + 240 x y z - 64 x y z » pretty(expand('(x+y)*(x^4+x^2*y^2+y^4)*(x-y)')) 6 6 x - y Ejercicio 4-9. Factorizar lo más posible las siguientes expresiones polinómicas. 2 2 2 4 2 2

Page 108: Matlab Para Ingenieros y Cientificos

a) 4 x + y t + z - 4 x y t + 4 x z - 2 y t z 4 2 2 2 2 3 2b) x - x y + 2 x y + x - 2 x - y c) a m x + a m y - b m x - b m y + b n x - a n x - a n y + b n y » pretty(factor('4*x^2+y^2*t^2+z^4-4*x*y*t+4*x*z^2-2*y*t*z^2')) 2 2 (2 x - y t + z ) » pretty(factor('x^4- x^2*y^2+2*x*y^2+x^2-2*x^3-y^2')) 2 (x - 1) (x - y) (x + y) » pretty(factor('a*m*x+a*m*y-b*m*x-b*m*y+b*n*x-a*n*x-a*n*y+b*n*y')) - (x + y) (n - m) (- b + a) En expresiones polinómicas, el comando expand realiza operaciones y simplificael resultado, y el comando factor factoriza al máximo. INTERPOLACIÓN Y AJUSTE POLINÓMICOS Matlab ofrece varios comandos de interpolación y ajuste polinómicos, queestudiaremos a continuación. polyfit(x,y,n) Da el vector de coeficientes del polinomio en x, p(x) de grado n, que mejor ajusta los datos (xi,yi) en el sentido de mínimos cuadrados (p(xi)=yi) Yi=interp1(X,Y,Xi, ‘método’) Da el vector Yi tal que (Xi,Yi) es el conjunto total de puntos hallados por interpolación entre el conjunto de puntos dados (X,Y). La opción ‘método’ puede tomar los valores ‘linear’, ‘spline’ o ‘cubic’, según que la interpolación sea lineal (opción por defecto),

Page 109: Matlab Para Ingenieros y Cientificos

escalonada o cúbica (puntos xi uniformemnte separados). Interpolación en una dimensión Zi=interp2(X,Y,Z,Xi,Yi, ‘método’) Da el vector Zi tal que (Xi,Yi,Zi) es el conjunto total de puntos hallados por interpolación entre el conjunto de puntos dados (X,Y,Z). La opción método puede tomar los valores ‘linear’ o ‘cubic’, según que la interpolación sea lineal (opción por defecto o cúbica (puntos xi uniformemente separados). Interpolación en 2 dimensiones Zi=griddata(X,Y,Z,Xi,Yi) Da el vector Zi, que determina los puntos de interpolación (Xi,Yi,Zi) entre los puntos dados (X,Y,Z). Se utiliza un método de la distancia inversa para interpolar. Y=interpft(X,n) Da el vector Y que contiene los valores de la función periódica X muestreada en n puntos igualmente espaciados. El vector original x es transformado al dominio de frecuencias de Fourier utilizando la transformada rápida de Fourier (algoritmo FFT). Ha de cumplirse que n³length(X) Ejercicio 4-11. Calcular el polinomio interpolador de segundo grado que pasa por los puntos (-1,4), (0,2), y (1,6) en el sentido de mínimos cuadrados » x=[-1,0,1];y=[4,2,6];p=poly2sym(polyfit(x,y,2)) p = 3*x^2+x+2 Y así obtenemos el polinomio cuadrático de interpolación pedido para los puntosespecificados. Ejercicio 4-12. Representar 200 puntos de interpolación cúbica, entre los puntos (x,y) dados porlos valores que toma la función exponencial e^x para 20 valores de x igualmente espaciadosentre 0 y 2. Representar también la diferencia entre la función e^x y su aproximación porinterpolación. Utilizar interpolación cúbica

Page 110: Matlab Para Ingenieros y Cientificos

En primer lugar definimos los 20 puntos dados (x,y), igualmente espaciados entre0 y 2. » x=0:0.1:2;» y=exp(x); Ahora hallamos los 200 puntos de interpolación cúbica (xi,yi), igualmenteespaciados entre 0 y 2, y se representan en una gráfica, junto con los 20 puntos (x,y)iniciales (con asteriscos). Ver figura 4-1. » xi=0:0.01:2;» yi=interp1(x,y,xi,'cubic');» plot(x,y,'*',xi,yi)

Figura 4-1 Ahora se representa la diferencia entre los valores exactos del grafo de y=e^x enlos 200 puntos de interpolación y los propios puntos (xi,yi) de interpolación hallados. Asíse tiene una idea gráfica del error que se comete al usar los puntos de interpolación envez de los puntos exactos. El error sería nulo si la gráfica se reduce al eje x. Ver figura 4-2. » zi=(exp(xi))'» di=yi-zi» plot(xi,di’)

Figura 4-2 Ejercicio 4-13. Obtener 25 puntos de aproximación por interpolación de la funciónparamétrica X=Cos(t) Y=Sen(t), Z=Tan(t) para valores de t entre 0 y Pi/6, sobre el conjunto depuntos definido para valores de t en el intervalo (i Pi/6) con 0<=i<=6.

Page 111: Matlab Para Ingenieros y Cientificos

En primer lugar definimos los 7 puntos dados (x,y,z), igualmente espaciadosentre 0 y pi/6. » t=0:pi/36:pi/6;» x=cos(t);y=sin(t);z=tan(t)) Ahora hallamos los 25 puntos de interpolación (xi,yi,zi), para valores delparámetro t igualmente espaciados entre 0 y pi/6. » xi=cos(t);yi=sin(t);» zi=griddata(x,y,z,xi,yi)» puntos=[xi',yi',zi'] puntos = 1.0000 0 0.0000 0.9998 0.0209 0.0161 0.9991 0.0419 0.0367 0.9980 0.0628 0.0598 0.9965 0.0837 0.0836 0.9945 0.1045 0.1057 0.9921 0.1253 0.1269 0.9893 0.1461 0.1480 0.9860 0.1668 0.1692 0.9823 0.1874 0.1907 0.9781 0.2079 0.2124 0.9736 0.2284 0.2344 0.9686 0.2487 0.2567 0.9632 0.2689 0.2792 0.9573 0.2890 0.3019 0.9511 0.3090 0.3249 0.9444 0.3289 0.3483 0.9373 0.3486 0.3719 0.9298 0.3681 0.3959 0.9219 0.3875 0.4203 0.9135 0.4067 0.4452 0.9048 0.4258 0.4706 0.8957 0.4446 0.4969 0.8862 0.4633 0.5236 0.8763 0.4818 0.5505 0.8660 0.5000 0.5774 Ejercicio 4-14. Obtener 30 puntos (xi,yi) de aproximación a la función periódica y=Sen(x) paravalores de x igualmente espaciados , interpolándolos entre 20 valores de (x,y) dados por

Page 112: Matlab Para Ingenieros y Cientificos

y=Sen(x) para valores de x uniformemente espaciados en el intervalo (0,2Pi), y utilizando elmétodo de interpolación basado en la transformada rápida de Fourier (FFT). En primer lugar definimos los 20 valores de x igualmente espaciados entre 0 y2*pi. » x=(0:pi/10:2*pi); Ahora hallamos los 30 puntos de interpolación (x,y) pedidos. » y=interpft(sin(x),30);» puntos=[y',(asin(y))'] puntos = 0.0000 0.0000 0.1878 0.1890 0.4499 0.4667 0.6070 0.6522 0.7614 0.8654 0.9042 1.1295 0.9618 1.2935 0.9963 1.4848 0.9913 1.4388 0.9106 1.1448 0.8090 0.9425 0.6678 0.7312 0.4744 0.4943 0.2813 0.2852 0.0672 0.0673 -0.1640 -0.1647 -0.3636 -0.3722 -0.5597 -0.5940 -0.7367 -0.8282 -0.8538 -1.0233 -0.9511 -1.2566 -1.0035 -1.5708 - 0.0837i -0.9818 -1.3799 -0.9446 -1.2365 -0.8526 -1.0210 -0.6902 -0.7617 -0.5484 -0.5805 -0.3478 -0.3553 -0.0807 -0.0808 0.0086 0.0086

Page 113: Matlab Para Ingenieros y Cientificos

Ejercicio 4-15. Hallar el polinomio de grado 3 que mejor ajusta la nube de puntos (i, i^2) par1<=i<=7, en el sentido de mínimos cuadrados. Hallar su valor para x=10 y representargráficamente la curva de ajuste. » x=(1:7);y=[1,4,9,16,25,36,49];p=poly2sym(polyfit(x,y,2)) p = 4503599627370495/4503599627370496*x^2+310800181380337/79228162514264337593543950336*x-3598276744230861/316912650057057350374175801344 Ahora calculamos el valor numérico del polinomio p en x=10 » numeric(subs(p,10)) ans = 100 Podemos aproximar los coeficientes del polinomio p a 5 cifras. » vpa(p,5) ans = 1.00000*x^2+3.9228e-15*x-1.1354e-14 En la figura 4-3 se representa la gráfica de ajuste. » ezplot(p,[-5,5])

Figura 4-3

Page 114: Matlab Para Ingenieros y Cientificos

Capítulo 5

GRÁFICOS

INTRODUCCIÓN

Matlab realiza gráficos de curvas planas (bidimensionales) y superficies(tridimensionales) y puede agruparlos y superponerlos. Posibilita la representación decualquier función matemática, incluso si está definida a trozos o tiene saltos al infinito ensu campo de definición. Puede combinar colores, rejillas, marcos, etc. en los gráficos.Permite las representaciones en coordenadas implícitas, explícitas y paramétricas, y essin duda el software matemático con mayores prestaciones gráficas. Esta es una de susgrandes diferencias con el resto de paquetes de cálculo simbólico. A partir de estosgráficos pueden generarse animaciones, sin más que combinar diferentes gráficosconsecutivos con pequeñas variaciones de unos a otros, de forma que, al mostrarlosrápidamente en sucesión, dan la impresión de movimiento. Por otra parte, también permite realizar los típicos gráficos de barras, líneas,estrellas e histogramas. También ofrece posibilidades especiales de representación depoliedros, e incluso de mapas geográficos. En el manejo de gráficos es muy importante tener presente la disponibilidad dememoria en el ordenador. El dibujo de gráficos consume mucha memoria y exige unaresolución de pantalla alta. GRÁFICOS BIDIMENSIONALES (2-D) Los comandos básicos que utiliza Matlab para dibujar la gráfica de una función deuna variable son los siguientes:

Page 115: Matlab Para Ingenieros y Cientificos

plot(X,Y) Dibuja el conjunto de puntos (X,Y), donde X e Y son vectores fila. Para graficar una función y=f(x), es necesario conocer un conjunto de puntos (X,f(X)), para lo que hay que definir inicialmente un intervalo de variación vectorial X para la variable x. X e Y pueden ser matrices de la misma dimensión, encuyo caso se hace una gráfica por cada par de filas y sobre losmismos ejes. Para valores complejos de X e Y, se ignoran las partesimaginarias. plot(Y) Grafica los elementos del vector Y contra sus índices, es decir, da la gráfica del conjunto de puntos (t,yt) t=1,2,...n (n=length(Y)). Es útil para graficar series temporales, Si Y es una matriz, plot(Y) realiza un gráfico para cada columna de Y,presentándolos todos sobre los mismos ejes. Si los componentes del vector Y son complejos, plot(Y) es equivalente a plot(real(Y),imag(Y)). plot(X,Y,S) Gráfica de plot(X,Y) con las opciones definidas en S. Usualmente S se compone de dos dígitos entre comillas simples, el primero de los cuales fija el color de la línea del gráfico, y el segundo fija el carácter a usar en el graficado. Los valoresposibles de colores y caracteres son respectivamentelos siguientes: y amarillo . puntos m magenta o círculos c cyan x x-marcas r rojo + signos más g verde - sólido b azul * estrellas w blanco : dos puntos k negro -. guiones y puntos -- semisólido plot(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) Combina, sobre los mismos ejes, los gráficos definidos para las tripletas (Xi,Yi,Si). Se trata de una forma de representar varias funciones sobre el mismo gráfico. fplot(‘función’,[xmin, xmax]) Grafica la función en el intervalo de variación de x dado

Page 116: Matlab Para Ingenieros y Cientificos

fplot(‘función’,[xmin, xmax, ymin, ymax], S) Grafica la función en los intervalos de variación de x e y dados, con las opciones de color y caracteres dadas por S fplot(‘[f1, f2, ...fn]’,[xmin, xmax, ymin, ymax], S) Grafica las funciones f1,f2,..fn sobre los mismos ejes en los intervalos de variación de x e y especificados, y con las opciones de color y caracteres definidas en S ezplot(‘función’, [xmin xmax]) Grafica la función en el intervalo de variación de x dado

Vamos a ver algunos ejemplos de gráficos en 2 dimensiones. Comenzaremosrepresentando la función f(x)=(sen(x))^2+2xcos(x) en (-2p, 2p). » x=(-2*pi:0.1:2*pi);» y=sin(x).^2+2*x.*cos(x);» plot(x,y)

Figura 5-1

Matlab devolverá la gráfica que se muestra en la figura 5-1. Es notorio que ladefinición de la función se ha hecho en forma vectorial, utilizando las notaciones al efectopara variables vectoriales (ya estudiadas anteriormente). La misma representación puede obtenerse usando el comando fplot con lasiguiente sintaxis: » fplot('sin(x)^2+2*x*cos(x)',[-2*pi,2*pi]) Y también la misma representación puede obtenerse usando el comando ezplotcon la siguiente sintaxis:

Page 117: Matlab Para Ingenieros y Cientificos

» ezplot('sin(x)^2+2*x*cos(x)',[-2*pi,2*pi]) Se observa que en los dos últimos casos la función se expresa de formasimbólica, y no de forma vectorial, como en el primer caso. Matlab no sólo dibuja funciones acotadas, sino que representa también funcionesque tienen asíntotas y singularidades. Por ejemplo, la figura 5-2 muestra el gráfico de lafunción y=x^3/(x^2-4) en el intervalo de variación de x dado por (-8,8), mediante elcomando: » ezplot('x^3/(x^2-4)',[-8,8])

Figura 5-2 Ejercicio 5-1. Representar sobre los mismos ejes las gráficas de las funciones Sen(x), Sen(2x) ySen(3x) , para x variando en el intervalo (0,2p). En la figura 5-3 se representa la gráfica, generada por la entrada: fplot('[sin(x),sin(2*x),sin(3*x)]',[0 2*pi])

Figura 5-3 Puede ser interesante distinguir las curvas entre sí por sus trazos. Para ellovamos a representar en la figura 5-4 la primera función, sen(x), con línea negra, la

Page 118: Matlab Para Ingenieros y Cientificos

segunda, sen(2x), con estrellas azules, y la tercera, sin(3x), con círculos rojos. Usamos lasiguiente sintaxis: » x=(0:0.05:2*pi);» y1=sin(x);y2=sin(2*x);y3=sin(3*x);» plot(x,y1,'k-',x,y2,'b*',x,y3,'ro')

Figura 5-4 TÍTULOS, ETIQUETAS, MALLAS Y TEXTOS Los comandos disponibles en Matlab al efecto son los siguientes: 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áficos 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 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 greed off las elimina. La opción grid permuta entre on y off

Page 119: Matlab Para Ingenieros y Cientificos

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 activala opción y hold off la elimina. La opción hold permuta entre on y off. Válido para 2-D y 3-D Ejercicio 5-2. Representar sobre los mismos ejes las gráficas de la funciones y=sen(x^2) e y=log(sqrt(x)). Colocar el texto de cada ecuación adecuadamente dentro del gráfico y titular elgráfico y los dos ejes. Obtenemos el gráfico de la figura 5-5 planteando a Matlab la entrada: » x=linspace(0,2,30);» y=sin(x.^2);» plot(x,y)» text(1,0.8, 'y=sin(x^2)')» hold on» z=log(sqrt(x));» plot(x,z)» text(1,-0.1, 'y=log(sqrt(x))')» xlabel('Eje X');» ylabel('Eje Y');» title('Gráfico senoidal y logarítmico');

Figura 5-5 MANIPULANDO GRÁFICOS A continuación se presentan comandos que permiten manipular los ejes de ungráfico, la colocación del mismo dentro de la pantalla, su apariencia, su presentacióndesde distintos puntos de vista, etc.

Page 120: Matlab Para Ingenieros y Cientificos

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 mismos ejes (con hold en on), la escala no cambie V=axis Da el vector V de 4 elementos, conteniendo laescala del gráfico corriente axis(‘xy’) Sitúa coordenadas cartesianas, con el origen en la parte inferior izquierda del gráfico 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 lostextos situados en él con text y gtext axis(‘on’) Coloca de nuevo las etiquetas, marcas y rejillas de los ejes subplot(m,n,p) Divide la ventana gráfica en mxn subventanas y coloca el gráfico corriente en la ventana p-esima, empezando a contar por la parte superior izquierda y de izquierda a derecha hasta acabar la línea para pasar a la siguiente

Page 121: Matlab Para Ingenieros y Cientificos

Ejercicio 5-3. Presentar en el mismo gráfico, las gráficas de las funciones Sen(x) y Cos(x),colocadas horizontalmente una al lado de la otra con sus nombres, y con el eje x tomandovalores entre 0 y 2*pi y el eje y tomando valores entre -1 y 1. Conseguir también larepresentación vertical, una debajo de la otra y con rejillas en los ejes. Planteamos a Matlab la siguiente entrada: » x=(0:.1:4*pi);» y=sin(x);» z=cos(x);» subplot(1,2,1);» plot(x,y), axis([0 2*pi -1 1]), title('sin(x)')» subplot(1,2,2);» plot(x,z), axis([0 2*pi -1 1]), title('cos(x)') El resultado se presenta en la figura 5-6

Figura 5-6 Ahora planteamos a Matlab la siguiente entrada: » x=(0:.1:4*pi);» y=sin(x);» z=cos(x);» subplot(2,1,1);» plot(x,y), axis([0 2*pi -1 1]), title('sin(x)'), grid» subplot(2,1,2);» plot(x,z), axis([0 2*pi -1 1]), title('cos(x)'), grid El resultado se presenta en la figura 5-7

Page 122: Matlab Para Ingenieros y Cientificos

Figura 5-7

Ejercicio 5-4. Presentar en el mismo gráfico las gráficas de las funciones Sen(x), Cos(x),Cosec(x) y Sec (x),colocadas en una matriz de cuatro gráficos, de forma que debajo de cadafunción esté su inversa para x variando en [-2p, 2p]. Utilizamos el comando subplot para dibujar las cuatro funciones, en el ordenadecuado de modo que debajo de Sen(x) se coloque Cosec(x), y debajo de Cos(x) secoloque Sec(x). La sintaxis será la siguiente: » subplot(2,2,1);» ezplot('sin(x)',[-2*pi 2*pi])» subplot(2,2,2);» ezplot('cos(x)',[-2*pi 2*pi])» subplot(2,2,3);» ezplot('csc(x)',[-2*pi 2*pi])» subplot(2,2,4);» ezplot('sec(x)',[-2*pi 2*pi]) Matlab ofrece como resultado la gráfica de la figura 5-8

Figura 5-8

GRÁFICOS LOGARÍTMICOS Y SEMILOGARÍTMICOS Los comandos que habilita Matlab para representar gráficos con escalaslogarítmicas son los siguientes:

Page 123: Matlab Para Ingenieros y Cientificos

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 varientes 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 (escala semilogarítmica) 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 (escala semilogarítmica) Ejercicio 5-5. Presentar sobre el mismo gráfico la funcion y = abs(e-1/2 x Sen(5x)) representadaen escala normal, en escala logarítmica y en escalas semilogarítmicas. La sintaxis que se presenta a continuación nos lleva a la figura 5-9, en la que secompara la gráfica de la misma función para las distintas escalas. Se representará en laparte superior de la figura las escalas normal y logarítmica, y en la parte inferior lasescalas semilogarítmicas. » x=0:0.01:3;» y=abs(exp(-0.5*x).*sin(5*x));» subplot(2,2,1)» plot(x,y)» title('normal')» hold on» subplot(2,2,2)» loglog(x,y)» title('logarítmica')» subplot(2,2,3)» semilogx(x,y)» title('semilogarítmica en eje X')» subplot(2,2,4)» semilogy(x,y)» title('semilogarítmica en eje Y')

Page 124: Matlab Para Ingenieros y Cientificos

Figura 5-9POLÍGONOS Matlab también permite dibujar polígonos en dos dimensiones. Para ello utilizalos siguientes comandos: fill(X,Y,C) Dibuja el polígono compacto cuyos vértices son los pares de componentes (Xi,Yi) de los vectores columna X e Y. C es un vector de la misma dimensión de X e Y, que contiene los colores Ci de cada punto (Xi,Yi). Los valores de Ci pueden ser: 'r','g','b', 'c','m','y','w','k', cuyos significados ya conocemos. Si C es un solo carácter, se pintarán todos los puntos del polígono del color correspondiente al carácter. Si X e Y sonmatrices de la misma dimensión, se representarán simultáneamente varios polígonoscorrespondientes a cada par de vectores columna (X.j,Y.j). Eneste caso C puede ser un vector fila cuyos elementosCj determinan el color único de cada polígono correspondiente al par de vectores columna (X.j,Y.j). C puede ser también una matriz de la misma dimensión que X e Y, en cuyo caso sus elementos determinan los colores de cada punto (Xij,Yij) del conjunto de polígonos. fill(X1,Y1,C1,X2,Y2,C2,...) Dibuja el polígono compacto cuyos vértices vienen dados por los puntos (Xi, Yi, Ci), cuyo significado ya conocemos Ejercicio 5-6. Representar un octógono regular (recinto cuadrado), cuyos vértices están

Page 125: Matlab Para Ingenieros y Cientificos

definidos por los pares de valores (Sen(t), Cos(t)), para valores de t variando entre p/8 y 15p/8separados entre sí 2p/8. Utilizar solamente el color verde y situar en el punto (-1/4,0) delinterior de la figura el texto ‘octógono’. En la figura 5-10 se presenta el octógono pedido, producto de la sintaxissiguiente: » t=(pi/8:2*pi/8:15*pi/8)';» x=sin(t); y=cos(t);» fill(x,y,'g')» axis('square')» text(-0.25,0,'OCTÓGONO')

Figura 5-10

GRÁFICOS EN COORDENADAS PARAMÉTRICAS 2-D Siguiendo en la línea de potencia gráfica de Matlab, vamos a ver ahora cómo elprograma dibuja curvas en coordenadas paramétricas en el plano. Se analizará de quéforma se pueden conseguir gráficos de funciones en las que la variable x e y dependen asu vez de un parámetro t. El comando a utilizar es Plot y todas sus variantes, definiendo convenientementelos intervalos de variación del parámetro, y no de la variable independiente como sehacía hasta ahora. Ejercicio 5-7. Representar la curva (Epicicloide) de cordenadas paramétricas x=4Cos[t]-Cos[4t] y=4Sen[t]-Sen[4t], para t variando entre 0 y 2p. La sintaxis será la siguiente:

Page 126: Matlab Para Ingenieros y Cientificos

» t=0:.01:2*pi;» x=4*cos(t)-cos(4*t);» y=4*sin(t)-sin(4*t);» plot(x,y) El gráfico obtenido se presenta en la figura 5-11, y representa a la Epicicloide.

Figura 5-11 Ejercicio 5-8. Representar la gráfica de la Cicloide, cuyas ecuaciones paramétricas son: x= t-2Sen(t), y= 1-2Cos(t), para t variando entre -3p. y 3p. Utilizaremos la siguiente sintaxis: » t= -3*pi:0.001:3*pi;» plot(t-2*sin(t), 1-2*cos(t)) Se obtiene el gráfico de la figura 5-12

Figura 5-12

GRÁFICOS EN COORDENADAS POLARES Matlab habilita el comando específico polar que representa funciones encoordenadas polares. Su sintaxis es la siguiente:

Page 127: Matlab Para Ingenieros y Cientificos

polar(a,r) Representa la curva en coordenadas polares r=r(a) polar(a, r , S ) Representa la curva en coordenadas polares r=r(a) con el estilo de línea dado por S, cuyos posibles valores ya fueron especificados en el comando plot Ejercicio 5-9. Representar la gráfica de la curva cuya ecuación en coordenadas polares es lasiguiente: r=Sen(2a)Cos(2a) para a entre 0 y 2p. La siguiente sintaxis nos lleva al gráfico de la figura 5-13. » a=0:.01:2*pi;» r=sin(2*a).*cos(2*a);» polar(a,r)

Figura 5-13

Ejercicio 5-10. Representar la gráfica de la curva cuya ecuación en coordenadas polares es lasiguiente: r=4(1+Cos(a) para a entre 0 y 2p., denominada Cardioide. Se obtiene la gráfica de la figura 5-14, que representa la Cardioide, utilizando lasiguiente sintaxis: » a=0:.01:2*pi;» r=4*(1+cos(a));» polar(a,r)» title('CARDIOIDE')

Page 128: Matlab Para Ingenieros y Cientificos

Figura 5-14

Ejercicio 5-11. Representar la gráfica de la Lemniscata de Bernoulli cuya ecuación esr=4(cos(2a)^(1/2)) para a entre 0 y 2p, y la gráfica de la Espiral de Arquímedes cuya ecuaciónes r=3a , para a entre -4p y 4p. La primera curva se representa en la figura 5-15, y se obtiene a través de lasiguiente sintaxis: » a=0:.01:2*pi;» r=4*(cos(2*a).^(1/2));» polar(a,r)» title('LEMNISCATA DE BERNOUILLI')

Figura 5-15

La segunda curva se representa en la figura 5-16, y se obtiene a través de lasiguiente sintaxis: » a=-4*pi:0.01:4*pi;» r=3*a;» polar(a,r)» title(‘ESPIRAL DE ARQUÍMEDES’)

Figura 5-16

GRÁFICOS DE BARRAS E HISTOGRAMAS Matlab construye gráficos de barras e histogramas de frecuencias a través de los

Page 129: Matlab Para Ingenieros y Cientificos

siguientes comandos: bar(Y) Dibuja el gráfico de barras relativo al vector Y bar(X,Y) Dibuja el gráfico de barras relativo al vector Y cuyos elementos son especificados a través del vector X 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 Veamos algunos ejemplos. » bar([1, -3, 4, 5, 2, 3]) Se obtiene el gráfico de la figura 5-17

Figura 5-17

A continuación se realiza un gráfico de barras para 20 valores de una normalsituados entre -3 y 3. » x=-3:0.3:3;

Page 130: Matlab Para Ingenieros y Cientificos

» bar(x,exp(-x.^2)) Se obtiene el gráfico de la figura 5-18

Figura 5-18 Ahora se representa el gráfico escalonado correspondiente al gráfico de barrasanterior. » x=-3:0.3:3;» stairs(x,exp(-x.^2)) Se obtiene el gráfico de la figura 5-19

Figura 5-19 A continuación se presenta el histograma correspondiente a un vector de 10000valores aleatorios normales (0,1), para 30 valores de x entre -3 y 3. » x=-3:0.1:3;» y=randn(10000,1);» hist(y,x) Se obtiene el gráfico de la figura 5-20

Page 131: Matlab Para Ingenieros y Cientificos

Figura 5-20 GRÁFICOS DE ERRORES Y FLECHAS Existen comandos en Matlab que permiten realizar gráficos de errores sobre unafunción, así como determinados tipos de gráficos de flechas que se analizarán ahora.Algunos de estos comandos se describen a continuación: errorbar(x,y,e) Realiza el gráfico del vector x contra el vector ycon los errores especificados en el vector e. Pasando por cada punto (xi,yi) se dibuja una línea vertical de longitud 2ei cuyo centro es el 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 rose(Y) Dibuja el histograma angular relativo al vector Y de ángulos en radianes, utilizando 20 radios iguales rose(Y,n) Dibuja el histograma angular relativo al vector Y, utilizando n radios iguales rose(X,Y) Dibuja el histograma angular relativo al vector Y utilizando radios que miden lo especificado en los elementos del vector X compas(Z) Realiza un diagrama de flechas que salen del origen y cuya magnitud y dirección vienen determinadas por el módulo y el argumento de los números

Page 132: Matlab Para Ingenieros y Cientificos

complejos componentes del vector Z. La flecha relatiiva al complejo Zi une el origen con el afijo deZi compas(X,Y) Equivale a compas(X+i*Y) compas(Z,S) o compas(X,Y,S) Especifica en S el tipo de línea a usar en las flechas feather(Z) o feather(X,Y) o feather(Z,S) o feather(X,Y,S) Es igual que compas, con la única diferencia de que el origen de las flechas no está en el origen de coordenadas, sino que salen de puntos igualmente espaciados de una línea horizontal legend(‘leyenda1’, ‘leyenda2’, ..., ‘leyendan’) Sitúa las leyendas dadas en n gráficos consecutivos Veamos a continuación algunos ejemplos. En primer lugar vamos a representar (figura 5-21) un gráfico de errores para lafunción de densidad de una distribución normal (0,1), con la variable definida en 40puntos entre -4 y 4, siendo definidos los errores por 40 valores aleatorios uniformes(0,10). » x = -4:.2:4;» y=(1/sqrt(2*pi))*exp(-(x.^2)/2);» e=rand(size(x))/10;» errorbar(x,y,e)

Figura 5-21

Ahora vamos a representar un gráfico de racimo correspondiente a cincuenta

Page 133: Matlab Para Ingenieros y Cientificos

números aleatorios normales (0,1). Ver figura 5-22. » y=randn(50,1);stem(y)

Figura 5-22 En la figura 5-23 se presenta un histograma angular para 1000 ángulos múltiplosde p según una razón de multiplicidad aleatoria normal (0,1), obtenido a partir de lasiguiente sintaxis:

Figura 5-23 Ahora se presenta un gráfico de flechas con centro en el origen, correspondientea los autovalores de una matriz cuadrada aleatoria normal (0,1) de tamaño 20x20 (verfigura 5-24). La sintaxis es la siguiente: » z=eig(randn(20,20));compass(z)

Figura 5-24

Page 134: Matlab Para Ingenieros y Cientificos

En la figura 5-25 se va a representar el gráfico de flechas del ejemplo anterior,pero con el origen de las flechas en una recta horizontal. La sintaxis es:z=eig(randn(20,20));fearher(z)

Figura 5-25 Por último, vamos a graficar sobre los mismos ejes (figura 5-26) las funcionesbessel(1,x), bessel(2,x) y bessel(3,x), para valores de x entre 0 y 12, separadosuniformemente entre sí dos décimas. La finalidad del gráfico es colocar tres leyendas ytres tipos de trazo diferentes (normal, asteriscos y círculos respectivamente) para las tresfunciones. La sintaxis será la siguiente: » x = 0:.2:12;» plot(x,bessel(1,x),x,bessel(2,x),'*',x,bessel(3,x),'o');» legend('Bessel(1,x)','Bessel(2,x)','Bessel(3,x)');

Figura 5-26 GRÁFICOS TRIDIMENSIONALES (3-D) Los comandos básicos que utiliza Matlab para dibujar gráficos que generan unalínea en tres dimensiones son los siguientes: plot3(X,Y,Z) Dibuja el conjunto de puntos (X,Y,Z), donde X, Y y Z son vectores fila. X, Y y Z pueden ser matrices de la misma

Page 135: Matlab Para Ingenieros y Cientificos

dimensión, en cuyo caso se hace una gráfica por cada tripleta de filas y sobre los mismos ejes. Para valores complejos de X, Y y Z se ignoran las partes imaginarias. plot3(X,Y,Z,S) Gráfica de plot(X,Y,Z) con las opciones definidas en S. Usualmente S se compone de dos dígitos entre comillas simples, el primero de los cuales fija el color de la línea del gráfico, y el segundo fija el carácter a usar en el graficado. Los valores posibles de colores y caracteres se han descrito ya al explicar el comando plot plot3(X1,Y1,Z1,S1,X2,Y2,Z2,S2,X3,Y3,Z3,S3,...) Combina, sobre los mismos ejes, los gráficos definidos para las tripletas (Xi,Yi,Zi,Si). Se trata de una forma de representar varias funciones sobre el mismo gráfico. Veamos un ejemplo. » x=0:pi/50:10*pi;» y=sin(x);» z=cos(x);» plot(x,y,z) Se obtiene el gráfico de la figura 8.17

Figura 5-27POLÍGONOS EN TRES DIMENSIONES Matlab también permite dibujar polígonos en tres dimensiones. Para ello utilizalos siguientes comandos: fill3(X,Y,Z,C) Dibuja el polígono compacto cuyos vértices son las tripletas de componentes (Xi,Yi,Zi) de los vectores columna X, Y y Z. C es un vector de la misma dimensión de X, Y y Z, que contiene los colores Ci de cada punto (Xi,Yi,Zi). Los valores de Ci pueden

Page 136: Matlab Para Ingenieros y Cientificos

ser: 'r','g','b', 'c','m','y','w','k', cuyos significados ya conocemos. Si C es un solo carácter, se pintarán todos los puntos del polígono del color correspondiente al carácter. Si X, Y y Z sonmatrices de la misma dimensión, se representarán simultáneamente varios polígonoscorrespondientes a cada tripla de vectores columna (X.j,Y.j,Z.j).En este caso C puede ser un vector fila cuyos elementosCj determinan el color único de cada polígono correspondiente a la tripla de vectores columna (X.j,Y.j,Z.j). C puede ser también una matriz de la misma dimensión que X, Y y Z, en cuyo caso sus elementos determinan los colores de cada punto (Xijk,Yijk,Zijk) del conjunto de polígonos. fill3(X1,Y1,Z1,C1,X2,Y2, Z2, C2,...) Dibuja el polígono compacto cuyos vértices vienen dados por los puntos (Xi, Yi, Zi, Ci), cuyo significado ya conocemos Veamos un ejemplo. » x=cos(0:0.01:8*pi);» y=sin(0:0.01:8*pi);» z=0:0.01:8*pi;» fill3(x,y,z,'r') Se obtiene el gráfico de la figura 5-28

Figura 5-28 GRÁFICOS EN COORDENADAS PARAMÉTRICAS 3-D

Page 137: Matlab Para Ingenieros y Cientificos

Vamos a ver en este epígrafe cómo Matlab dibuja curvas en coordenadasparamétricas en el espacio, también denominadas curvas alabeadas. El problemafundamental es conseguir gráficos de funciones tridimensionales en las que las variablesx, y y z dependen a su vez de un parámetro t. El comando a utilizar es plot3 y todas sus variantes, definiendoconvenientemente los intervalos de variación del parámetro, y no de la variableindependiente como se hacía hasta ahora. Este tipo de gráficos es muy útil en determinadas materias, como por ejemplo, lageometría diferencial. Veamos un ejemplo. » t=-4*pi:0.01:4*pi;» x=cos(t).^2;» y=sin(t).*cos(t);» z=sin(t);» plot3(x,y,z) Se obtiene el gráfico de la figura 5-29

Figura 5-29 GRÁFICOS DE SUPERFICIE, MALLA Y CONTORNO Hasta ahora hemos visto los gráficos tridimensionales basados en una línea quese desplaza en tres dimensiones para formar una curva alabeada. Ahora vamos a vercomo se obtienen gráficos tridimensionales correspondientes a superficies en susdiferentes variantes. Gráficos de superficies Los gráficos de superficie permiten obtener representaciones densas de figurastridimesionales, y en especial de funciones de dos variables.

Page 138: Matlab Para Ingenieros y Cientificos

El primer paso para representar una función de dos variables z=f(x,y) mediantesu gráfico de superficie, es utilizar el comando meshgrid, que básicamente define lamatriz de puntos (X,Y) sobre los cuales se evalúa la función de dos variables para hacersu representación gráfica. Su sintaxis es la siguiente: [X,Y] = meshgrid(x,y) Transforma el campo de definición dado de las variables x e y de la función a representar z=f(x,y),en argumentos matriciales utilizables por el comando mesh para obtener el gráfico de malla El segundo paso es utilizar los comandos disponibles al efecto, que son lossiguientes: surf(X,Y,Z,C) Representa el gráfico de superficie de la función z=f(x,y), realizando el dibujo con los colores especificados en C. El argumento C se puede ignorar surfc(X,Y,Z,C) Representa el gráfico de superficie de la función z=f(x,y) junto con el gráfico de contorno correspondiente (curvas de nivelproyectadas sobre el plano XY) surfl(X,Y,Z) Representa el gráfico de superficie de la función z=f(x,y), realizando el dibujo con sombreado. Ejercicio 5-12. Representar la gráfica de superficie para la función: z= Sen(sqrt(x2 + y2))/(sqrt(x2 + y2) -14/2<x,y<14/2 Representar también la superficie con sus curvas de nivel » [X,Y]=meshgrid(-7.5:.5:7.5);» Z=sin(sqrt(X.^2+Y.^2))./sqrt(X.^2+Y.^2);» surf(X,Y,Z) Se obtiene la gráfica de la figura 5-30

Page 139: Matlab Para Ingenieros y Cientificos

Figura 5-30 En la figura 5-31 se presenta la superficie con su gráfico de contorno (curvas denivel). Se usa la siguiente sintaxis: » [X,Y]=meshgrid(-7.5:.5:7.5);» Z=sin(sqrt(X.^2+Y.^2))./sqrt(X.^2+Y.^2);» surfc(X,Y,Z)

Figura 5-31 En la figura 5-32 se presenta la gráfica sombreada, usando la sintaxis: » [X,Y]=meshgrid(-7.5:.5:7.5);» Z=sin(sqrt(X.^2+Y.^2))./sqrt(X.^2+Y.^2);» surfc(X,Y,Z)

Figura 5-32

Gráficos de malla

Page 140: Matlab Para Ingenieros y Cientificos

Un gráfico tridimensional de malla viene definido por una función z=f(x,y), de talforma que los puntos de la superficie se representan sobre una rejilla, resultado delevantar 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 lasuperficie sobre los nudos de la red. Realmente es un gráfico de superficie cuyo grafotiene forma de red. Para representar un gráfico de malla se utiliza el comando mesh y sus variantes,cuya sintaxis es la siguiente: mesh(X,Y,Z,C) 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, con los colores especificados en C. El argumento C se puede ignorar meshz(X,Y,Z,C) 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 meshc(X,Y,Z,C) 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) Ejercicio 5-13. Representar la gráfica de malla para la superficie de ecuación: z= x e (-x^2-y^2) -2<x,y<2 Realizar también la representación con sus curvas de nivel (gráfico de contorno) y larepresentación con cortina. La sintaxis que se presenta a continuación da como resultado el gráfico de lafigura 5-33. » [X,Y]=meshgrid(-2:.2:2,-2:.2:2);» Z=X.*exp(-X.^2 - Y.^2);» mesh(X,Y,Z)

Page 141: Matlab Para Ingenieros y Cientificos

Figura 5-33 En la figura 5-34 se presenta el gráfico de malla junto con las curvas de nivel (ográfico de contorno). La sintaxis es la siguiente: » [X,Y]=meshgrid(-2:.2:2,-2:.2:2);» Z=X.*exp(-X.^2 - Y.^2);» meshc(X,Y,Z)

Figura 5-34 Por último, en la figura 5-35, representamos el gráfico de malla con la opción decortina o telón inferior. La sintaxis es la siguiente: » [X,Y]=meshgrid(-2:.2:2,-2:.2:2);» Z=X.*exp(-X.^2 - Y.^2);» meshz(X,Y,Z)

Figura 5-35

Page 142: Matlab Para Ingenieros y Cientificos

Gráficos de contorno (curvas de nivel) Otra opción de visualizado de una función de dos variables consiste en utilizar lasllamadas curvas de nivel o el sistema de planos acotados. Estas curvas se caracterizanporque son puntos (x, y) sobre las cuales el valor de f(x,y) es constante. Así, por ejemplo,en los mapas del tiempo, las curvas de nivel que representan puntos de la mismatemperatura se llaman isotermas y las curvas de nivel de igual presión, isobaras.Mediante las curvas de nivel, que representen alturas (valores de f(x,y)) iguales, sepueden describir superficies en el espacio. Así, dibujando diferentes curvas de nivelcorrespondientes a alturas constantes, se puede describir un mapa de líneas de nivel dela superficie, que Matlab denomina como gráfico de contorno. Los gráficos de contornopueden representarse en dos y tres dimensiones. Un mapa que muestre regiones de la superficie terrestre, cuyas curvas de nivelrepresenten la altura sobre el nivel del mar, se llama mapa topográfico. En estos mapasse observa, por tanto, la variación de z= f(x,y) con respecto a x y a y. Cuando el espacioentre las curvas de nivel es grande, significa que la variación de la variable z es lento,mientras que un espacio pequeño indica un cambio rápido de z. Los comandos que utiliza Matlab para la representación de gráficos de contorno(curvas de nivel) son los siguientes: c o n t o u r ( 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) y 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 Ejercicio 5-14. Dada la superficie de ecuación:

Page 143: Matlab Para Ingenieros y Cientificos

z= Sen(x)Sen(y)) -2<x,y<2

Representarla con sus curvas de nivel. Representar su gráfico de contorno bidimensional con20 líneas y su gráficio de contorno tridimensional con 50 líneas. Dibujar también el gráfico dedensidad correspondiente. En la figura 5-36 se presenta la gráfica de la superficie con sus curvas de nivel. Lasintaxis es la siguiente: » [X,Y]=meshgrid(-2:0.1:2);» Z=sin(X).*sin(Y);» surfc(X,Y,Z)

Figura 5-36 En la figura 5-37 se representa el gráfico de contorno (curvas de nivel)bidimensional para 20 líneas. La sintaxis es la siguiente: » [X,Y]=meshgrid(-2:0.1:2);» Z=sin(X).*sin(Y);» contour(Z,20)

Figura 5-37 En la figura 5-38 se representa el gráfico de contorno (curvas de nivel)tridimensional para 50 líneas. La sintaxis es la siguiente: » [X,Y]=meshgrid(-2:0.1:2);» Z=sin(X).*sin(Y);

Page 144: Matlab Para Ingenieros y Cientificos

» contour3(Z,50)

Figura 5-38 Por último, en la figura 5-39 se representa el gráfico de densidad (curvas de nivelsombreadas según distintas intensidades de color). La sintaxis es la siguiente: » [X,Y]=meshgrid(-2:0.1:2);» Z=sin(X).*sin(Y);» pcolor(X,Y,Z)

Figura 5-39 MANIPULANDO GRÁFICOS TRIDIMENSIONALES Existen comandos en Matlab que permiten cambiar la apariencia de un mismográfico, bien sea por su sombreado, la escala de sus ejes, los colores, las líneas ocultas,el punto de vista desde el que se observa, etc. A continuación se presentan algunos deestos comandos: axis([xmin xmax ymin ymax zmin zmax]) Sitúa los intervalos de variación de los ejes en las valores indicados. También acepta las opciones ‘ij’, ‘square’, ‘equal’, etc, idénticas a las ya vistas para

Page 145: Matlab Para Ingenieros y Cientificos

dos dimensiones view([x,y,z]) Sitúa el punto de vista de la figura en el punto de coordenadas cartesianas (x,y,z) view([az, el]) Sitúa el ángulo de vista de la figura en el punto de azimut (rotación horizontal) ‘az’ y elevación (elevación vertical) ‘el’ hidden Controla la presencia de las líneas ocultas en el gráfico. Dichas líneas aparecen con hidden on y desaparecen con hidden off s h a d i n g Controla el tipo de sombreado de una superficie creada con los comandos surf, mesh, pcolor, fill y fill3. La opción shading flat sitúa un sombreado suave, la opción shading interp sitúa un sombreado denso, y la opción shading faceted (opción por defecto) sitúa un sombreado normal colormap(M) Sitúa la matriz M como el mapa corriente de colores. M debe de tener tres columnas y contener valores solo entre 0 y 1. También puede ser una matriz cuyas filas sean vectores RGB del tipo [r g b]. Existen en Matlab matrices M ya definidas, que son las siguientes: bone(p), contrast(p), cool(p), copper(p), flag(p), gray(p), hsv(p), hot(p), jet(p), pink(p), prism(p) y white(p). Todas las matrices tienen 3 columnas y p filas. Por ejemplo: La sintaxis colormap(hot(8)) sitúa la matriz hot(8) como el mapa corriente de colores (sistema completo de colores de la figura actual)brighten(p) Ajusta la iluminación de la figura. Si 0<p<1 la figura será brillante, y si -1<p<0 la figura será oscura. La variación de p es el intervalo (-1,1), y a medida que los valores de p se acercan a -1 la figura se oscurece, mientras que a medida que los valores de p se acercan a 1 la figura se ilumina image(A) Produce una imagen bidimensional con brillos proporcionales a los elementos de la matriz A, y se utiliza para mostrar fotografías y dibujos adaptados a los brillos especificados en la matriz A. Cada elemento (m,n) de la matriz A afecta a una celda

Page 146: Matlab Para Ingenieros y Cientificos

del dibujo p c o l o r ( A ) Produce una figura bidimensional con colores proporcionales a los elementos de la matriz A, y se utiliza para mostrar objetos matemáticos abstractos con colores variados. Cada elemento (m,n) de la matriz A afecta a una rejilla de la figura caxis([cmin cmax]) Sitúa el mínimo y el máximo valores de la escala de colores (definida por colormap e intrínsecamente relacionada con las divisiones que se hacen en los ejes, vía las rejillas) para un gráfico. Por lo tanto, permite utilizar solo un subconjunto de colores del definido por colormap para la figura. Ejercicio 5-15. Dada la superficie de ecuación: z= x2 - y2) -2<x,y<2 Representarla con una iluminación fuerte, un sombreado denso y colores grisáceos.Representar sobre los mismos ejes la curva enfocada desde cuatro puntos de vista distintos ycon el sombreado por defecto » [X,Y]=meshgrid(-2:0.05:2);» Z=X.^2-Y.^2;» surf(X,Y,Z),shading interp,brighten(0.75),colormap(gray(5)) Se obtiene la gráfica de la figura 5-40

Figura 5-40 Vamos ahora a presentar en la figura 5-41 la superficie enfocada desde cuatropuntos de vista diferentes. La sintaxis será la siguiente: » [X,Y]=meshgrid(-2:0.05:2);» Z=X.^2-Y.^2;

Page 147: Matlab Para Ingenieros y Cientificos

» subplot(2,2,1)» surf(X,Y,Z)» subplot(2,2,2)» surf(X,Y,Z),view(-90,0)» subplot(2,2,3)» surf(X,Y,Z),view(60,30)» subplot(2,2,4)» surf(X,Y,Z),view(-10,30)

Figura 5-41SUPERFICIES PARAMÉTRICAS Matlab permite representar superficies cuyas componentes dependen deparámetros de variación especificada. Para ello se pueden utilizar los comandos surf ymesh, definiendo adecuadamente las variables x ,y y z. Las superficies en coordenadas implícitas, cilíndricas y esféricas sonrepresentables en Matlab parametrizándolas previamente. En cuanto a las superficies de revolución, son siempre parametrizables, lo quepermite también su representación gráfica con Matlab. Ejercicio 5-16. Dibujar la superficie cuyas coordenadas paramétricas son las siguientes: x= 4Cos(r)Sec(t) y= 2Sen(r)Sec(t) z= tan(t) -2p<r<2p, -p<r<p » r=(-2*pi:0.1:2*pi)';» t=(-pi:0.1:pi);» X=4*cos(r)*sec(t);» Y=2*sin(r)*sec(t);» Z=ones(1,size(r))'*tan(t);» surf(X,Y,Z),shading interp

Page 148: Matlab Para Ingenieros y Cientificos

Se obtiene la gráfica de la figura 5-42

Figura 5-42 Ejercicio 5-17. Obtener la gráfica de la superficie de revolución que resulta al girar la funciónSen(x) alrededor del eje Z. Obtener también la gráfica de la superficie de revolución al hacergirar la función e^x alrededor del eje Y. Para obtener la ecuación de la superficie, en el supuesto que el giro seaalrededor del eje Z, hay que considerar la gráfica de la curva generatriz y = r(z) en elplano YZ. Al girar esta gráfica alrededor del eje Z se forma una superficie de revolución.Las secciones por planos z = z0 son circunferencias cuyo radio es r(z0) y de ecuaciónx^2 + y^2 = [r(z0)]^2. Esto significa que la ecuación x^2 + y^2 = [r(z)]^2 describe lospuntos de la superficie de revolución. En el caso de nuestro problema, se tiene r(z) =sen(z), y la curva a representar es x^2 + y^2 = Sen[z]^2, que se grafica enparamétricas, mediante la entrada de Matlab: » r=(0:0.1:2*pi)';» t=(-pi:0.1:2*pi);» X=cos(r)*sin(t);» Y=sin(r)*sin(t);» Z=ones(1,size(r))'*t;» surf(X,Y,Z), shading interp Se obtiene la gráfica de la figura 5-43

Page 149: Matlab Para Ingenieros y Cientificos

Figura 5-43 Si planteamos a Matlab la entrada: » r=(0:0.1:2*pi)';» t=(-2:0.1:2);» X=cos(r)*exp(t);» Y=ones(1,size(r))'*t;» Z=sin(r)*exp(t);» surf(X,Y,Z), shading interp Se obtiene la gráfica de la figura 5-44, que se ha hallado de la misma forma quela anterior, pero girando ahora la función exponencial alrededor del eje Y (la curvageneratriz es ahora la función e^x).

Figura 5-44

Ejercicio 5-18. Representar el cilindro {t, Sen[t], u}, con {t,0,2Pi} y {u,0,4} y el toro derevolución {Cos[t](3+Cos[u]), Sin[t](3+Cos[u]),Sin[u]}, con {t,0,2 Pi} y {u,0,2Pi}

» t=(0:0.1:2*pi)';» r=(0:0.1:4);» X=sin(t)*ones(size(r));» Y=cos(t)*ones(size(r));» Z=ones(1,size(t))'*r;» surf(X,Y,Z), shading interp Se obtiene la gráfica de la figura 5-45

Page 150: Matlab Para Ingenieros y Cientificos

Figura 5-45 Para representar el toro de revolución usamos la siguiente sintaxis: » r=(0:0.1:2*pi)';» t=(0:0.1:2*pi);» X=(3+cos(r))*cos(t);» Y=(3+cos(r))*sin(t);» Z=sin(r)*ones(size(t));» surf(X,Y,Z), shading interp Se obtienen la gráfica de la figura 5-46

Figura 5-46

FORMAS GEOMÉTRICAS ESPECIALES Matlab habilita comandos que permiten generar cilindros y esferas. Se datallan acontinuación. [X,Y,Z]=cylinder(r,n) Grafica el cilindro generado por la curva r quetiene n puntos en la circunferencia sección horizontal y que está alineado con el eje Z (n=20 por defecto) [X,Y,Z]=sphere(n) Grafica una esfera (por defecto n=20) : Como ejemplo, vamos a representar el cilindro generado por la curva 4Cos(t),

Page 151: Matlab Para Ingenieros y Cientificos

cuando t varía entre 0 y 2p. La sintaxis será la siguiente: » t=0:pi/10:2*pi;» [X,Y,Z]=cylinder(4*cos(t));» surf(x,y,z) Se obtiene la gráfica de la figura 5-47

Figura 5-47 OTRAS OPCIONES DE MANEJO DE GRÁFICOS Las características gráficas tratadas hasta ahora pertenecen al interface gráficode alto nivel de Matlab. Sin embargo, también existen un conjunto de comandos de bajonivel (Handle Graphics), que permiten crear y manipular figuras, ejes, líneas,superficies, imágenes, texto, menús y otros objetos gráficos. Entre los comandos paracrear objetos gráficos están los siguientes: figure(h) o h=figure Crea la figura como un objeto de nombre h, y la sitúa como figura corriente. Se utiliza el comando gcf(h) para referir cualquier propiedad a la figura h. El comando close(h) cierra la figura h. El comando whitebg(h) cambia el color del fondo de la figura h.El comando clf cierra la figura corriente. El comando graymon sitúa la escala de grises. El comando newplot determina los ejes para hacer una nueva figura. El comando refresh redibuja de nuevo la figura actual. axes(e) o e=axes Crea los ejes como un objeto de nombre e, en la figura corriente. Se utiliza el comando gca(e) para referir cualquier propiedad a los ejes e. Se utiliza el comando cla para borrar todos los objetos referentes a los ejes corrientes.

Page 152: Matlab Para Ingenieros y Cientificos

l=line(x,y) o l=line(x,y,z) Crea, como un objeto de nombre l, la línea que une los puntos (X,Y) en el plano, o (X,Y,Z) en el espacio p=patch(X,Y,C) o patch(X,Y,Z,C) Crea un área poligonal opaca que está definida por el conjunto de puntos (X,Y) en el plano, o (X,Y,Z) en el espacio, y cuyo color está dado por C, como un objeto de nombre p s=surface(X,Y,Z,C) Crea la superficie paramétrica definida por X, Y y Z y cuyo color está dado por C, como un objeto de nombre s i=image(C) Crea la imagen definida por los colores dados en la matriz C, como un objeto de nombre i, t=text(x,y,’cadena’) o t=text(x,y,z,’cadena’) Crea el texto definido por la cadena, localizado en el punto (x,y) del plano o en el punto (x,y,z) del espacio Cada objeto tiene un nivel de jerarquía. Los padres de un objeto son los quetienen jerarquía superior a él, y los hijos son los objetos de jerarquía inferior. El objeto demayor jerarquía es el creado con figure, a continuación se encuentra el creado por axes,y por último, y al mismo nivel, se encuentran los creados por image, patch, surface,text y line. Esto quiere decir, que si por ejemplo se quiere crear una superficie, primeroha de crearse la figura en la que se va a graficar, después los ejes y por último la propiasuperficie. Hasta ahora hemos visto los comandos que permiten crear objetos, pero ademástodos estos objetos pueden dotarse de determinadas propiedades, como estilo de línea,color, etc. Las lista de propiedades posibles para cada objeto es muy larga, y suconocimiento completo requiere la consulta detallada del manual “MATLAB ReferenceManual”. Como norma general, el nombre de una propiedad de un objeto es una palabracompuesta cuyas componentes empiezan por letra mayúscula. Por ejemplo, la propiedadestilo de línea tiene de nombre LineStyle. Los nombres de las propiedades a asignar pordefecto a un objeto comienzan por Default, como por ejemplo DefaultFigureColor, queasigna el color por defecto a una figura.

Page 153: Matlab Para Ingenieros y Cientificos

A continuación se presentan algunas de las propiedades más típicas a situar enlos diferentes objetos. Objeto Propiedades Posibles valores----------------------------------------------------------------------------------------------------------------------Figure Color (color de fondo) ‘y’, ‘m’, ‘c’, ‘r’, ‘g’, ‘b’, ‘w’, ‘k’ ColorMap (color de mapa) hot(p), gray(p), pink(p), .... Position (posición en pantalla) [left, botton, width, height] Name (nombre) cadena con el nombre MinColorMap (nº mín. de colo.) nº mínimo de colores para el mapa NextPlot (modo del gráf. siguien.) new, add, replace NumberTitle (nº en la figura) on, off Units (unidades de medida) pixels, inches, centimeters, points Resize(tamaño figura con ratón) on (se puede cambiar), off (no) Axes Box (caja para el gráfico) on, of Color(color de los ejes) ‘y’, ‘m’, ‘c’, ‘r’, ‘g’, ‘b’, ‘w’, ‘k’ GridLineStyle (línea para malla) ‘-’, ‘--’, ‘:’, ‘-.’ Position (posición en pantalla) [left, botton, width, height] TickLength (long. entre marcas) un valor numérico TickDir (dirección de las marcas) in, out Units (unidades de medida) pixels, inches, centimeters, points View (punto de vista) [azimut, elevación] FontAngle (ángulo de fuente) normal, italic, oblique FontName (nombre de fuente) texto con el nombre de la fuente FontSize (tamaño de fuente) valor numérico FontWeight (peso de la fuente) light, normal, demi, bold DrawMode (modo de dibujo) normal, fast (rápido) Xcolor, Ycolor, Zcolor (color ejes) [min , max] XDir,YDir, ZDir (dirección ejes) normal (crecen de izq. a der.), reverse XGrid,YGrid, Zgrid (rejillas) on, off XLabel,YLabel, Zlabel (etiquetas) cadena con el texto de lasetiquetas XLim,YLim,Zlim (valores límites) [min, max] (intervalo de variación) XScale,YScale,ZScale (escalas) linear (lineal), log(logarítmica) XTick,YTick,ZTick (marcas) [m1,m2,....] (situación marcas en eje) Line Color(color de la línea) ‘y’, ‘m’, ‘c’, ‘r’, ‘g’, ‘b’, ‘w’, ‘k’ LineStyle (estilo de línea) ‘-’, ‘--’, ‘:’, ‘-.’, ‘+’, ‘*’, ‘.’, ‘x’ LineWidth (anchura de línea) valor numérico Visible (línea visible o no en pant.) on, off Xdata,Ydata,Zdata (coordenad.) conjunto de coordenadas de la línea

Page 154: Matlab Para Ingenieros y Cientificos

Text Color(color de texto) ‘y’, ‘m’, ‘c’, ‘r’, ‘g’, ‘b’, ‘w’, ‘k’ FontAngle (ángulo de fuente) normal, italic, oblique FontName (nombre de fuente) texto con el nombre de la fuente FontSize (tamaño de fuente) valor numérico FontWeight (peso de la fuente) light, normal, demi, bold HorizontalAlignment (ajuste hor.) left, center, right VerticalAlignment (ajuste vert.) top, cap, middle, baseline, bottom Position (posición en pantalla) [x, y, z] (punto de situación) Rotation (orientación del texto) 0, ±90, ±180, ±270 Units (unidades de medida) pixels, inches, centimeters, points String (cadena de texto a situar) cadena con el texto Surface Cdata (color de cada punto) matriz de colores Edgecolor (color de rejillas) ‘y’,‘m’,......., none, flat, interp Facecolor (color de las caras) ‘y’,‘m’,......., none, flat, interp LineStyle (estilo de línea) ‘-’, ‘--’, ‘:’, ‘-.’, ‘+’, ‘*’, ‘.’, ‘x’ LineWidth (anchura de línea) valor numérico MeshStyle (líneas en filas y col.) row, colum, both Visible (línea visible o no en pant.) on, off Xdata,Ydata,Zdata (coordenad.) conjunto de coordenadas de la superf. Patch Cdata (color de cada punto) matriz de colores Edgecolor (color de los ejes) ‘y’,‘m’,......., none, flat, interp Facecolor (color de las caras) ‘y’,‘m’,......., none, flat, interp LineWidth (anchura de línea) valor numérico Visible (línea visible o no en pant.) on, off Xdata,Ydata,Zdata (coordenad.) conjunto de coordenadas de la superf. Image Cdata (color de cada punto) matriz de colores Xdata,Ydata (coordenadas) conjunto de coordenadas de la imágen Entre los comandos que permiten realizar operaciones con los objetos gráficos yacreados tenemos los siguientes: set(h, ‘propiedad1’, ‘propiedad2’,...) Sitúa las propiedades especificadas en el objeto h get(h, ‘propiedad’) Devuelve el valor corriente de la propiedad especificada para el objeto h object=gco Devuelve el objeto actual de la figura actual

Page 155: Matlab Para Ingenieros y Cientificos

rotate(h, [a, e], a, [p,q,r]) Rota el objeto h un ángulo a, según los ejes de azimut a y elevación e, siendo el origen el punto (p,q,r)reset(h) Actualiza todas las propiedades asignadas al objeto h y coloca sus propiedades por defecto delete(h) Borra el objeto h

Veamos algunos ejemplos. La siguiente sintaxis sitúa los límites de variación de los ejes X, Y y Z corrientesen los valores especificados. » set(gca, ‘Xlim’, [0,10], ‘Ylim’, [-25, 25], ‘Zlim’ [-8,10]) La siguiente sintaxis sitúa el color del fondo de la figura corriente en blanco. » set(gcf, ‘Color’, ‘w’) La sintaxis siguiente devuelve las propiedades vigentes para una superficiepreviamente creada con nombre “surfh”. » get(surfh) La siguiente sintaxis devuelve el estilo de línea de la superficie “surfh”. » get(surfh, ‘LineStyle’) La siguiente sintaxis borra la superficie “surfh”. » delete(surfh) Ejercicio 5-19. Representar la superficie de coordenadas paramétricas siguientes: x(t) = 4Cos(r)Cos(t) y(t) = 2Sen(r)Cos(t) z(t) = Sen(t) -p<r<p, -p/2<t<p/2 de tal forma que se presente en una figura con título “Superficie Paramétrica” y cuyo color defondo sea blanco, siendo sus ejes de color negro. Por otra parte, la superficie ha de presentarsus rejillas con colores amarillos y ha de estar encerrada en un cubo.

Page 156: Matlab Para Ingenieros y Cientificos

» r=(-pi:0.1:pi)';» t=(-pi/2:0.1:pi/2);» x=4*cos(r)*cos(t);» y=2*sin(r)*cos(t);» z=ones(1,size(r))'*sin(t);» surface=surf(x,y,z);» set(surface,'EdgeColor','interp')» set(gcf, 'Color', 'w', 'Name', 'Superficie Paramétrica');» set(gca,'XColor', 'k', 'YColor', 'k', 'ZColor', 'k', 'Box', 'on');

Figura 5-48

Page 157: Matlab Para Ingenieros y Cientificos

Capítulo 6

ÁLGEBRA MATRICIAL

OPERACIONES CON MATRICES Ya hemos visto en el capítulo 6, al estudiar las variables vectoriales y matriciales,cómo se definen vectores y matrices en Matlab. A su vez, se definieron en el capítulocitado las operaciones más sencillas con variables vectoriales y matriciales. En estecapítulo vamos a ampliar los conceptos de álgebra matricial introduciendo varioscomandos que permiten el trabajo con matrices. La matriz: ┌a11 a12 a13 .... a1n┐ │a21 a22 a23 .... a2n│A = (aij)= │a31 a32 a33 .... a3n│ i=1,..,m j=1,..,n │ │ └am1 am2 am3 .... amn┘ se introduce en Matlab de las siguientes formas: A=[a11,a12,...,a1n ; a21,a22,...,a2n ; ... ; am1,am2,...,amn] A=[a11 a12 ... a1n ; a21 a22 ... a2n ; ... ; am1 am2 ... amn] Operaciones con matrices numéricas A continuación se presentan comandos de Matlab que permiten las operacionescon matrices numéricas. A + B Suma de las matrices A y B

Page 158: Matlab Para Ingenieros y Cientificos

A - B Diferencia de la matrices A y B (A menos B) c*M Producto del escalar c por la matriz M A * B Producto de las matrices A y B (A por B) A^p Matriz A elevada a la potencia escalar p p^A Escalar p elevado a la matriz A expm(A) eA calculada a través de autovalores expm1(A) eA calculada a través de aproximantes de Padé expm2(A) eA calculada a través de series de Taylor expm3(A) eA calculada a través de la condición de la matriz de autovectores logm(A) Logaritmo neperiano de la matriz A sqrtm(A) Raíz cuadrada de la matriz cuadrada A funm(A, ‘función’) Aplica la función a la matriz cuadrada A transpose(A) o A’ Matriz transpuesta de A -1inv(A) Matriz inversa de la matriz cuadrada A ( A ) det(A) Determinante de la matriz cuadrada A rank(A) Rango de la matriz A trace(A) Suma de los elementos de la diagonal de A svd(A) Da el vector V de valores singulares de A. Los valores singulares de A son las raíces cuadradas de los autovalores de la matriz simétrica A’A [U,S,V]=svd(A) Da la matriz diagonal S de valores singulares de A (ordenados de mayor a menor), y las matrices U y

Page 159: Matlab Para Ingenieros y Cientificos

V tales que A=U*S*V’ cond(A) Da la condición de la matriz A (cociente entre el mayor y el menor valor singular de A) rcond(A) Recíproco de la condición de la matriz A norm(A) Norma de A (mayor valor singular de la matriz A) norm(A,1) 1-norma de A (mayor suma de las columnas de A) norm(A,inf) Norma infinita de A (mayor suma de las filas de A) norm(A,’fro’) F-norma de A, definida por sqrt(sum(diag(A'A))) Z=null(A) Da una base ortonormal del núcleo de A (Z’Z=I). El número de columnas de Z es la nulidad de A Q=orth(A) Da una base ortonormal para el rango de A (Q’Q=I). Las columnas de Q generan el mismo espacio que las columnas de A, y el número de columnas de Q es el rango de A subspace(A,B) Da el ángulo entre los subespacios especificados por las columnas de A y de B. Si A y B son vectores, da el ángulo formado por ambos rref(A) Da la matriz reducida escalonada por filas de A. El número de filas no nulas de rref(A) es el rango de la matriz A Veamos algunos ejemplos: Consideramos la matriz M=[1/3,1/4,1/5; 1/4,1/5,1/6;1/5,1/6,1/7], y vamos ahallar su transpuesta, su inversa, su determinante, su rango, su traza, sus valoressingulares, su condición, su norma, M3, eA, log(A), y sqrt(A). » M=[1/3,1/4,1/5; 1/4,1/5,1/6;1/5,1/6,1/7] M = 0.3333 0.2500 0.2000

Page 160: Matlab Para Ingenieros y Cientificos

0.2500 0.2000 0.1667 0.2000 0.1667 0.1429 » tanspuesta=M' tanspuesta = 0.3333 0.2500 0.2000 0.2500 0.2000 0.1667 0.2000 0.1667 0.1429 » inversa=inv(M) inversa = 1.0e+003 * 0.3000 -0.9000 0.6300 -0.9000 2.8800 -2.1000 0.6300 -2.1000 1.5750 Para comprobar que la inversa está bien calculada, la multiplicamos por M y elresultado ha de ser la matriz identidad de orden 3. » M*inv(M) ans = 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 » determinante=det(M) determinante = 2.6455e-006 » rango=rank(M) rango = 3

Page 161: Matlab Para Ingenieros y Cientificos

» traza=trace(M) traza = 0.6762 » vsingulares=svd(M)vsingulares = 0.6571 0.0189 0.0002 » condicion=cond(M) condicion = 3.0886e+003 Para el cálculo de la norma hallamos la norma, la 1-norma, la norma infinita y laF-norma. » norm(M) ans = 0.6571 » norm(M,1) ans = 0.7833 » norm(M,inf) ans = 0.7833 » norm(M,'fro') ans =

Page 162: Matlab Para Ingenieros y Cientificos

0.6573 » M^3 ans = 0.1403 0.1096 0.0901 0.1096 0.0856 0.0704 0.0901 0.0704 0.0578 » logm(M) ans = -2.4766 2.2200 0.5021 2.2200 -5.6421 2.8954 0.5021 2.8954 -4.7240 » sqrtm(M) ans = 0.4631 0.2832 0.1966 0.2832 0.2654 0.2221 0.1966 0.2221 0.2342 Para calcular eM se usarán las variantes mediante autovalores, aproximantes dePadé, desarrollos de Taylor y condición de la matriz M. » expm(M) ans = 1.4679 0.3550 0.2863 0.3550 1.2821 0.2342 0.2863 0.2342 1.1984 » expm1(M) ans = 1.4679 0.3550 0.2863 0.3550 1.2821 0.2342 0.2863 0.2342 1.1984

Page 163: Matlab Para Ingenieros y Cientificos

» expm2(M) ans = 1.4679 0.3550 0.2863 0.3550 1.2821 0.2342 0.2863 0.2342 1.1984 » expm3(M) ans = 1.4679 0.3550 0.2863 0.3550 1.2821 0.2342 0.2863 0.2342 1.1984 Como vemos, la matriz exponencial coincide para todos los métodos utilizados. Ejercicio 6-1. Dadas las matrices:

A = B = C = Calcular: AB - BA , A2 + B2 + C2, ABC, sqrt(A)+ sqrt(B) - sqrt(C), eA (eB+ eC)y hallar el rango, la inversa, la traza, el determinante, la condición y los valores singulares deA, B y C. » A=[1 1 0;0 1 1;0 0 1]; B=[i 1-i 2+i;0 -1 3-i;0 0 -i]; C=[1 1 1; 0 sqrt(2)*i -sqrt(2)*i;1 -1 -1]; » M1=A*B-B*A M1 = 0 -1.0000 - 1.0000i 2.0000 0 0 1.0000 - 1.0000i 0 0 0 » M2=A^2+B^2+C^2

Page 164: Matlab Para Ingenieros y Cientificos

M2 = 2.0000 2.0000 + 3.4142i 3.0000 - 5.4142i 0 - 1.4142i 0.0000 + 1.4142i 0.0000 - 0.5858i 0 2.0000 - 1.4142i 2.0000 + 1.4142i » M3=A*B*C M3 = 5.0000 + 1.0000i -3.5858 + 1.0000i -6.4142 + 1.0000i 3.0000 - 2.0000i -3.0000 + 0.5858i -3.0000 + 3.4142i 0 - 1.0000i 0 + 1.0000i 0 + 1.0000i » M4=sqrtm(A)+sqrtm(B)-sqrtm(C) M4 = 0.6356 + 0.8361i -0.3250 - 0.8204i 3.0734 + 1.2896i 0.1582 - 0.1521i 0.0896 + 0.5702i 3.3029 - 1.8025i -0.3740 - 0.2654i 0.7472 + 0.3370i 1.2255 + 0.1048i » M5=expm(A)*(expm(B)+expm(C)) M5 = 14.1906 - 0.0822i 5.4400 + 4.2724i 17.9169 - 9.5842i 4.5854 - 1.4972i 0.6830 + 2.1575i 8.5597 - 7.6573i 3.5528 + 0.3560i 0.1008 - 0.7488i 3.2433 - 1.8406i » rangos=[rank(A) rank(B) rank(C)] rangos = 3 3 3 » vsingulares=[svd(A),svd(B),svd(C)] vsingulares = 1.8019 4.2130 2.0000 1.2470 1.4917 2.0000 0.4450 0.1591 1.4142

Page 165: Matlab Para Ingenieros y Cientificos

» trazas=[trace(A) trace(B) trace(C)] trazas = 3.0000 -1.0000 0 + 1.4142i » inv(A) ans = 1 -1 1 0 1 -1 0 0 1 » inv(B) ans = 0 - 1.0000i -1.0000 - 1.0000i -4.0000 + 3.0000i 0 -1.0000 1.0000 + 3.0000i 0 0 0 + 1.0000i » inv(C) ans = 0.5000 0 0.5000 0.2500 0 - 0.3536i -0.2500 0.2500 0 + 0.3536i -0.2500 » determinantes=[det(A) det(B) det(C)] determinantes = 1.0000 -1.0000 0 - 5.6569i » condiciones=[cond(A) cond(B) cond(C)] condiciones = 4.0489 26.4765 1.4142

Page 166: Matlab Para Ingenieros y Cientificos

Operaciones con matrices simbólicas A continuación se presentan comandos de Matlab que permiten las operacionescon matrices simbólicas. symadd(A,B) o maple(‘add(A,B)’) Suma de las matrices A y B (A más B) symsub(A,B) Diferencia de la matrices A y B (A menos B) maple(‘escalarmul(A,k)’) Calcula k*A (escalar por matriz) maple(‘add(A,B,k,r)’) Calcula k*A + r*B (combinación lineal de A y B) symmul(A,B) o maple(‘multiply(A,B)’) Producto de las matrices A y B (A por B) sympow(A,p) Matriz A elevada a la potencia escalar p transpose(A) Matriz transpuesta de A (A’) -1inverse(A) Matriz inversa de la matriz cuadrada A ( A ) maple(‘adjoint(A)’) Matriz adjunta de A (adjoint(A)=inverse(A)*det(A)) maple(‘minor(A,i,j)’) Da el menor complementario del elemento (i,j) determ(A) Determinante de la matriz cuadrada A svdvpa(A) o singvals(A) Da el vector V de valores singulares de A. Los valores singulares de A son las raíces cuadradas de los autovalores de la matriz simétrica A’A

Page 167: Matlab Para Ingenieros y Cientificos

[U,S,V] = singvals(A) o [U,S,V] = svdvpa(A) Devuelve las matrices ortogonales U y V y la matriz diagonal S, con los valores singulares de A en la diagonal, tales que A=USV’ symop(A, ‘operación1’, B, ‘operación2’, C, .......) Realiza las operaciones indicadas entre las matrices simbólicas dadas y en el orden especificado. Este comando permite mezclartodo tipo de operaciones entre matrices simbólicas A continuación se ven algunos ejemplos. Consideramos la matriz siguiente:

A = Vamos a calcular A’, A-1, determinante(A), traza(A), rango(A) y A2

» A=sym('[a,b,c; 3*c,a-3*c,b; 3*b,-3*b+3*c,a-3*c]') A = [ a, b, c][ 3*c, a-3*c, b][ 3*b,-3*b+3*c,a-3*c] » transpose(A) ans = [a, 3*c, 3*b][b, a-3*c, -3*b+3*c][c, b, a-3*c] » pretty(inverse(A)) 2 2 2 2

Page 168: Matlab Para Ingenieros y Cientificos

2 2 [ a - 6 a c + 9 c + 3 b - 3 b c a b - 3 c - b +a c - 3 c ] [ ------------------------------- - ----------- - -----------------] [ %1 %1 %1 ] [ ] [ 2 2 2 2 ] [ - b + a c - 3 c a - 3 a c - 3 b c a b- 3 c ] [ - 3 ----------------- ------------------ - ---------- ] [ %1 %1 %1 ] [ ] [ 2 2 2 ] [ a b - 3 c a b - a c + b a - 3 ac - 3 b c] [ - 3 ---------- 3 --------------- ------------------] [ %1 %1 %1 ] 3 2 2 2 3 3 2%1 := a - 6 c a + 9 c a + 3 a b - 9 a b c + 9 c + 3 b + 9 bc » pretty(determ(A)) 3 2 2 2 3 3 2 a - 6 c a + 9 c a + 3 a b - 9 a b c + 9 c + 3 b + 9b c » rank(A)

Page 169: Matlab Para Ingenieros y Cientificos

ans = 3 » pretty(sympow(A,2)) 2 2 2 2 [a + 6 b c, 2 a b - 6 b c + 3 c , 2 a c + b - 3 c ] 2 2 2 2 2 2 [6 a c - 9 c + 3 b , 6 b c + a - 6 a c + 9 c - 3 b , 2 a b - 6b c + 3 c ] 2 2 2 [6 a b - 18 b c + 9 c , 3 b - 6 a b + 18 b c + 6 a c - 18c , 2 2 2 6 b c + a - 6 a c + 9 c - 3 b ] Consideramos ahora la matriz:

M = Se trata de hallar su transpuesta, su inversa, su determinante, su rango, su traza,sus valores singulares, su condición, su norma y M3, considerando la matriz comosimbólica. » M=sym('[1/3,1/4,1/5;1/4,1/5,1/6;1/5,1/6,1/7]') M = [1/3,1/4,1/5][1/4,1/5,1/6][1/5,1/6,1/7] » transpuesta=transpose(M) transpuesta =

Page 170: Matlab Para Ingenieros y Cientificos

[1/3, 1/4, 1/5][1/4, 1/5, 1/6][1/5, 1/6, 1/7] La matriz M ha resultado ser simétrica. » inversa=inverse(M) inversa = [ 300, -900, 630][-900, 2880, -2100][ 630, -2100, 1575] » determinante=determ(M) determinante = 1/378000 » rango=rank(M) rango = 2 » rango=maple('rank([[1/3,1/4,1/5],[1/4,1/5,1/6],[1/5,1/6,1/7]])') rango = 3 » traza=maple('trace([[1/3,1/4,1/5],[1/4,1/5,1/6],[1/5,1/6,1/7]])') traza = 71/105 » svdvpa(M) ans = [ 0.6570514282975797 ][1.892631097407098e-2]

Page 171: Matlab Para Ingenieros y Cientificos

[2.127369188260411e-4] » sympow(M,3) ans = [10603/75600, 1227/11200, 26477/294000][1227/11200, 10783/126000, 74461/1058400][26477/294000, 74461/1058400, 8927/154350] Ejercicio 6-2. Dadas las matrices A y B siguientes:

A = B = Calcular M1=A2+B2, M2=A2-B2 , An, Bn, eA, eB

» A=sym('[cosh(a),sinh(a);sinh(a),cosh(a)]');» B=sym('[sinh(a),cosh(a);cosh(a),sinh(a)]');» M1=symadd(sympow(A,2),sympow(B,2)) M1 = [2*cosh(a)^2+2*sinh(a)^2, 4*cosh(a)*sinh(a)][ 4*cosh(a)*sinh(a), 2*cosh(a)^2+2*sinh(a)^2] Este resultado simbólico se puede simplificar al máximo con simple. » S1=simple(M1) S1 = [2*cosh(2*a), 2*sinh(2*a)][2*sinh(2*a), 2*cosh(2*a)] » M2=symsub(sympow(A,2),sympow(B,2)) M2 = [0, 0][0, 0] Para calcular An y Bn, hallamos sus potencias sucesivas para intentar ver la ley de

Page 172: Matlab Para Ingenieros y Cientificos

formación. » [simple(sympow(A,2)),simple(sympow(A,3)),simple(sympow(A,4))] ans = [cosh(2*a), sinh(2*a)][cosh(3*a), sinh(3*a)][cosh(4*a), sinh(4*a)][sinh(2*a), cosh(2*a)][sinh(3*a), cosh(3*a)][sinh(4*a), cosh(4*a)] » [simple(sympow(B,2)),simple(sympow(B,3)),simple(sympow(B,4))] ans = [cosh(2*a), sinh(2*a)] [sinh(3*a), cosh(3*a)] [cosh(4*a), sinh(4*a)][sinh(2*a), cosh(2*a)] [cosh(3*a), sinh(3*a)] [sinh(4*a), cosh(4*a)] La ley de formación de las potencias enésimas es evidente, con lo que yapodemos escribir:

An = Bn = Ahora vamos a calcular las exponenciales eA y eB

» expA=simple(maple('exponential(array([[cosh(a),sinh(a)], [sinh(a),cosh(a)]]))')) expA = [ 1/2*exp(exp(a))+1/2*exp(1/exp(a)), -1/2*exp(1/exp(a))+1/2*exp(exp(a))][-1/2*exp(1/exp(a))+1/2*exp(exp(a)), 1/2*exp(exp(a))+1/2*exp(1/exp(a))] » expB=simple(maple('exponential(array([[sinh(a),cosh(a)], [cosh(a),sinh(a)]]))')) expB = [ 1/2*exp(exp(a))+1/2*exp(-1/exp(a)), -1/2*exp(-1/exp(a))+1/2*exp(exp(a))][-1/2*exp(-1/exp(a))+1/2*exp(exp(a)), 1/2*exp(exp(a))+1/2*exp(-1/exp(a))]

Page 173: Matlab Para Ingenieros y Cientificos

» inversas=[simple(inverse(A)),simple(inverse(B))] inversas = [ cosh(a), -sinh(a)] [-sinh(a), cosh(a)][-sinh(a), cosh(a)] [ cosh(a), -sinh(a)] » determinantes=[simple(determ(A)),simple(determ(B))] determinantes = 1 -1 » vsingulares=[simple(singvals(A)),simple(singvals(B))] vsingulares = [cosh(a)+sinh(a)] [cosh(a)+sinh(a)][sinh(a) -cosh(a)] [sinh(a) -cosh(a)]AUTOVALORES Y AUTOVECTORES Matlab habilita comandos que permiten trabajar con autovalores y autovectoresde una matriz cuadrada. Para matrices numéricas tenemos los siguientes: eig(A) Calcula los autovalores de la matriz cuadrada A [V,D] = eig(A) Calcula la matriz diagonal D de autovalores de A y una matriz V cuyas columnas son los autovectores correspondientes, cumpliéndose que A*V=V*D eig(A,B) Da un vector que contiene los autovalores generalizados de las matrices cuadradas A y B. Los autovalores generalizados de A y B son las raíces del polinomio en l , det( l*C - A) [V,D] = eig(A,B) Calcula la matriz diagonal D de autovalores generalizados de A y B, y una matriz V cuyas columnas son los autovectores correspondientes, cumpliéndose que A*V=B*V*D [AA, BB, Q, Z, V] = qz(A,B) Calcula las matrices triangulares superiores AA y

Page 174: Matlab Para Ingenieros y Cientificos

BB y las matrices Q y Z tales que Q*A*Z = AA y Q*B*Z = BB, y da la matriz V de autovectores generalizados de A y B. Los autovalores generalizados son los elementos de ladiagonal de AA y BB, de tal modo que se tiene la igualdad: A*V*diag(BB) = B*V*diag(AA) [T,B] = balance(A) Encuentra una matriz de transformación T tal que B = T\A*T tiene autovalores aproximados a los de A. La matriz B se llama matriz balanceada de la matriz A balance(A) Calcula la matriz B, balanceada de la matriz A. Su uso esencial es aproximar los autovalores de A cuando son difíciles de calcular. Se tiene que eig(A)=eig(balance(A)) [V,D] = cdf2rdf(V,D) Transforma la salida compleja [V,D] del comando eig a forma real. Cada autovalor complejo en la diagonal de D, origina una submatriz 2x2 en la forma real de la matriz D [U,T] = schur(A) Da una matriz T y una matriz unitaria U tales que A = U*T*U' and U'*U = eye(U). Si A es compleja, T es una matriz triangular superior con los autovalores de A en la diagonal. Si A es real,la matriz T tiene los autovalores de A en la diagonal, y los correspondientes autovalores complejos se corresponden con los bloques diagonales 2x2 de la matriz T schur(A) Devuelve la matriz T solamente [U,T] = rsf2csf(U,T) Convierte a real la salida [U,T] del comando schur [P,H] = hess(A) Devuelve la matriz unitaria P y la matriz de Hessenberg H, tales que A = P*H*P' y P'*P = eye(size(P)) hess(A) Devuelve la matriz de Hessenberg H poly(A) Devuelve el polinomio característico de la matriz A

Page 175: Matlab Para Ingenieros y Cientificos

poly(V) Devuelve un vector cuyas componentes son los coeficientes del polinomio cuyas raíces son los elementos del vector V vander(C) Devuelve la matriz de Vandermonde A tal que su jésima columna es A(:,j) = C^(n-j) Veamos algunos ejemplos.

Sea M = Calcularemos sus autovalores y autovectores, su matriz balanceada y susautovalores, y su polinomio característico. » A=[1,-1,3;-1,i,-1-2i;i,1,i-2];» [V,D] = eig(A) V = 0.9129 0.1826 + 0.5477i -0.1826 + 0.3651i -0.2739 - 0.0913i 0.5477 - 0.1826i 0.3651 - 0.7303i -0.0913 + 0.2739i -0.1826 - 0.5477i 0.1826 - 0.3651i D = 1.0000 + 1.0000i 0 0 0 -2.0000 + 1.0000i 0 0 0 0 Vemos que los autovalores de A son 1+i, -2+i y 0, y los autovectores son lascolumnas de la matriz V. Ahora calculamos la matriz balanceada de A y veremos que susautovalores coinciden con los de A. » balance(A) ans = 1.0000 -1.0000 1.5000 -1.0000 0 + 1.0000i -0.5000 - 1.0000i 0 + 2.0000i 2.0000 -2.0000 + 1.0000i » eig(balance(A))

Page 176: Matlab Para Ingenieros y Cientificos

ans = 1.0000 + 1.0000i-2.0000 + 1.0000i 0 Calculamos ahora el polinomio característico de A. » p=poly(A) p = 1.0000 1.0000 - 2.0000i -3.0000 - 1.0000i 0 » vpa(poly2sym(p)) ans = x^3+.9999999999999998*x^2-2.*i*x^2-3.*x-.9999999999999993*i*x Luego podemos aproximar el resultado al polinomio: x3 + x2 -2ix2 - 3x - ix Para el trabajo con autovalores y autovectores de matrices simbólicas existenentre otros los siguientes comandos: eigensys(A) o maple(‘eigenvals(A)’) Devuelve los autovalores de la matriz A [V,E] = eigensys(A) Devuelve el vector E conteniendo los autovalores de A y la matriz V que contiene sus autovectores charpoly(A, ‘l ’ ) o maple(‘charpoly(A,l)’) Devuelve el polinomio característico de A en función de l , cuyo valor es det( l*I - A) jordan(A) Devuelve la forma canónica de Jordan, J, de la matriz A (numérica o simbólica). J tiene los autovalores de A en la diagonal

Page 177: Matlab Para Ingenieros y Cientificos

[V,J] = jordan(A) Devuelve la forma canónica de Jordan, J, de la matriz A, y la matriz de paso V cuyas columnas son los autovectores de A, cumpliéndose que V-1 *A*V = J Ejercicio 6-3. Dada la matrices siguiente:

A = Calcular sus autovalores, su polinomio característico y su forma canónica de Jordán. Comenzamos definiendo la matriz A como una matriz simbólica. » A=sym('[1 0 0; 0 cos(a) -sin(a); 0 sin(a) cos(a)]') A = [ 1, 0, 0][ 0,cos(a),-sin(a)][ 0,sin(a), cos(a)] » eigensys(A) ans = [ 1][cos(a)+1/2*(-4*sin(a)^2)^(1/2)][cos(a)-1/2*(-4*sin(a)^2)^(1/2)] » pretty(simple(charpoly(A))) 3 2 2 x - 2 x cos(a) + x - x + 2 x cos(a) - 1 » jordan(A) ans = [1, 0, 0][0, cos(a)+1/2*(-4*sin(a)^2)^(1/2),

Page 178: Matlab Para Ingenieros y Cientificos

0][0, 0, cos(a)-1/2*(-4*sin(a)^2)^(1/2)] Ejercicio 6-4. Consideremos la matriz simbólica cuadrada de orden 5 cuyo elemento de lugar(i,j) viene definido por Aij = 1/(i+j-1/2). Calcular sus autovalores, autovectores y polinomiocaracterístico. Matlab permite definir este tipo de matrices simbólicas de la siguiente formageneral: » A=sym(5,5,'1/(i+j-1/2)') A = [ 2/3, 2/5, 2/7, 2/9, 2/11][ 2/5, 2/7, 2/9, 2/11, 2/13][ 2/7, 2/9, 2/11, 2/13, 2/15][ 2/9, 2/11, 2/13, 2/15, 2/17][2/11, 2/13, 2/15, 2/17, 2/19] » [V,E] = eigensys(vpa(A)) V = [1.023841216286165e-2, 6.974440230551550e-2, .2755629140771480, -.6522519293551042,.7026118375755458][ -.1430160309647285, -.4814555486326150, -.7052062751010997, .1593483772250365,.4743829400513291][ .5396248519107941, .6251345397721099, -.2064384852776228, .3790489355696895,.3629282058809032][ -.7526291879624701, .2921524755894326, .2522522551334383, .4441948832168457,.2953911676709145][ .3489927140080225, -.5359011207571706, .5661282023709101, .4562765888096290,.2496489682034643] E = [1.456325178825534e-6][1.451327909655618e-4][5.922901897559384e-3][ .1243786569576800][ 1.242347477455824]

Page 179: Matlab Para Ingenieros y Cientificos

» charpoly(A,'x') ans = x^5-10042/7315*x^4+362807509088/2228304933855*x^3-268537284608/285965799844725*x^2+22809860374528/169975437532179654375*x-34359738368/177624332221127738821875 Podemos aproximar el resultado anterior como sigue: » pretty(vpa(charpoly(A,'x'))) 5 4 3 2 x - 1.372795625427204 x + .1628177111560480 x - .0009390538475363543 x -6 -12 + .1341950384461264*10 x - .1934404928555900*10 DESCOMPOSICIÓN DE MATRICES Matlab habilita comandos que permiten la descomposición de matrices enproducto de vectores ortogonales y matrices diagonales. Ya hemos visto cómo el comando [U,S,V]=svd(A) da la matriz diagonal S devalores singulares de A (ordenados de mayor a menor), y las matrices ortogonales U y Vtales que A=U*S*V’. También hemos visto que se puede conseguir la descomposición de Jordan deuna matriz cuadrada A, a través del comando [V,J] = jordan(A), que devuelve la formacanónica de Jordan J de A con los valores propios de A en la diagonal, y la matriz de pasoV cuyas columnas son los autovectores de A, cumpliéndose que V-1 *A*V = J Por otra parte, también hemos visto que se puede conseguir la descomposiciónde Schur de una matriz cuadrada A, a través del comando [U,T] = schur(A), quedevuelve una matriz T y una matriz ortogonal U tales que A = U*T*U' y U'*U = eye(U). SiA es compleja, T es una matriz triangular superior con los autovalores de A en ladiagonal. Si A es real, la matriz T tiene los autovalores de A en la diagonal, y loscorrespondientes autovalores complejos se corresponden con los bloques diagonales 2x2de la matriz T. A su vez, también hemos visto que se puede conseguir la descomposición deHessenberg de una matriz A, a través del comando [P,H] = hess(A), que da la matrizortogonal P y la matriz de Hessenberg H, tales que A = P*H*P' y P'*P =eye(size(P)).

Page 180: Matlab Para Ingenieros y Cientificos

Además, Matlab dispone de otros comandos que también realizan ladescomposición de matrices. Destacan los siguientes: [L,U] = lu(A) Descompone la matriz A en el producto A=L*U (descomposición LU de A), siendo U una matriz triangular superior y L una matriz pseudotriangular inferior (triangularizable mediante permutación). [L,U,P] = lu(A) Devuelve una matriz triangular inferior L, una matriz triangular superior U, y una matriz de permutación P tales que P*A=L*U 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. Si A no es definida positiva devuelve un error [Q,R] = qr(A) Devuelve la matriz triangular superior R de la misma dimensión que A, y la matriz ortogonal Q tales que A=Q*R (descomposición QR de A). Esta descomposición puede aplicarse a matrices no cuadradas [Q,R,E] = qr(A) Devuelve la matriz triangular superior R de la misma dimensión que A, la matriz permutación E, y la matriz ortogonal Q tales que A*E=Q*R X = pinv(A) Devuelve la matriz X (pseudoinversa de A), de la misma dimensión que A’, tal que A*X*A=A y X*A*X=X, siendo A*X y X*A matrices hermitianas Ejercicio 6-5. Consideramos la matriz cuadrada 3x3 cuyas filas son los vectores (1,5,-2) (-7,3,1)y (2,2,-2). Realizar las descomposiciones de Schur, LU, QR, Cholesky, Hessenberg y valoressingulares. Probar que los resultados son correctos. Hallar también la matriz pseudoinversa deA. En primer lugar hallamos la descomposición de Schur, comprobando que elresultado es correcto. » A=[1,5,-2;-7,3,1;2,2,-2];» [U,T] = schur(A)

Page 181: Matlab Para Ingenieros y Cientificos

U = -0.0530 -0.8892 -0.4544 -0.9910 -0.0093 0.1337 0.1231 -0.4573 0.8807 T = 2.4475 -5.7952 -4.6361 5.7628 0.3689 2.4332 0 0 -0.8163 Ahora comprobamos que U*T*U’=A y que U*U’=eye(3). » [U*T*U', U*U'] ans = 1.0000 5.0000 -2.0000 1.0000 0.0000 0.0000 -7.0000 3.0000 1.0000 0.0000 1.0000 0.0000 2.0000 2.0000 -2.0000 0.0000 0.0000 1.0000 Ahora hallamos las descomposiciones LU, QR, Cholesky, Hesenberg y valoressingulares, comprobando los resultados para cada caso. » [L,U,P] = lu(A) L = 1.0000 0 0 -0.1429 1.0000 0 Matriz triangular inferior -0.2857 0.5263 1.0000 U = -7.0000 3.0000 1.0000 0 5.4286 -1.8571 Matriz triangular superior 0 0 -0.7368 P =

Page 182: Matlab Para Ingenieros y Cientificos

0 1 0 1 0 0 0 0 1 » [P*A, L*U] ans = -7 3 1 -7 3 1 1 5 -2 1 5 -2 2 2 -2 2 2 -2

Tenemos que P*A=L*U » [Q,R,E] = qr(A) Q = -0.1361 -0.8785 -0.4579 0.9526 -0.2430 0.1831 -0.2722 -0.4112 0.8700 R = -7.3485 1.6330 1.7691 0 -5.9442 2.3366 Matriz triangular superior 0 0 -0.6410 E = 1 0 0 0 1 0 0 0 1 » [A*E,Q*R] ans = 1.0000 5.0000 -2.0000 1.0000 5.0000 -2.0000 -7.0000 3.0000 1.0000 -7.0000 3.0000 1.0000 2.0000 2.0000 -2.0000 2.0000 2.0000 -2.0000 Luego A*E=Q*R

Page 183: Matlab Para Ingenieros y Cientificos

» R = chol(A) ??? Error using ==> cholMatrix must be positive definite. Se obtiene mensaje de error porque la matriz no es definida positiva. » [P,H] = hess(A) P = 1.0000 0 0 0 -0.9615 0.2747 0 0.2747 0.9615 H = 1.0000 -5.3571 -0.5494 7.2801 1.8302 -2.0943 0 -3.0943 -0.8302 » [P*H*P', P'*P] ans = 1.0000 5.0000 -2.0000 1.0000 0 0 -7.0000 3.0000 1.0000 0 1.0000 0 2.0000 2.0000 -2.0000 0 0 1.0000 Luego PHP’=A y P’P=I » [U,S,V]=svd(A) U = -0.1034 -0.8623 0.4957 -0.9808 0.0056 -0.1949 0.1653 -0.5064 -0.8463 S = 7.8306 0 0 0 6.2735 0 Matriz diagonal 0 0 0.5700

Page 184: Matlab Para Ingenieros y Cientificos

V = 0.9058 -0.3051 0.2940 -0.3996 -0.8460 0.3530 -0.1411 0.4372 0.8882 » U*S*V' ans = 1.0000 5.0000 -2.0000 -7.0000 3.0000 1.0000 Vemos que USV’=A 2.0000 2.0000 -2.0000

Ahora calculamos la matriz pseudoinversa de A » X = pinv(A) X = 0.2857 -0.2143 -0.3929 0.4286 -0.0714 -0.4643 0.7143 -0.2857 -1.3571 » [A*X*A, X*A*X] ans = 1.0000 5.0000 -2.0000 0.2857 -0.2143 -0.3929 -7.0000 3.0000 1.0000 0.4286 -0.0714 -0.4643 2.0000 2.0000 -2.0000 0.7143 -0.2857 -1.3571 Luego se cumple que AXA=A y XAX=X MATRICES SEMEJANTES Y DIAGONALIZACIÓN Se dice que dos matrices A y B de dimensiones mxn son equivalentes, si existendos matrices regulares U y V, tales que A=UBV.El comando de Matlab [U,S,V]=svd(A)calcula una matriz diagonal S que es equivalente a A.

Page 185: Matlab Para Ingenieros y Cientificos

Se dice que dos matrices cuadradas de orden n, A y B son congruentes si existeuna matriz regular P tal que A=PBPt o A=PtBP. El comando de Matlab [U,T] = schur(A) calcula una matriz T que escongruente con A. La congruencia implica la equivalencia y dos matrices congruentes han de tenersiempre el mismo rango. Se dice que dos matrices cuadradas de orden n, A y B son semejantes si existeuna matriz invertible P, llamada matriz de paso, tal que: -1 A=PBP Se tiene que dos matrices semejantes son equivalentes. Una matriz A se dice diagonalizable si es semejante a una matriz diagonal D,esto es, si existe una matriz de paso P regular, tal que: -1A = PDP El proceso de cálculo de la matriz diagonal D y de paso P se denominadiagonalización de A. Dada una matriz A cuadrada de orden n de números reales, si todos los valorespropios (autovalores de A) son reales y distintos entonces A es diagonalizable. La matrizD tendrá como elementos de la diagonal los valores propios de A. La matriz de paso Ptiene por columnas los vectores propios de A correspondientes a sus valores propios. Si la matriz A tiene valores propios r con multiplicidad mayor que 1, serádiagonalizable si y solo si el núcleo de la matriz A - r*In tiene dimensión igual al grado demultiplicidad del valor propio r. El comando de Matlab [V,J] = jordan(A), diagonaliza la matriz A, calculando lamatriz de paso V. Ejercicio 6-6. Diagonalizar la matriz simétrica, cuyas filas son los vectores: (3,-1,0), (-1,2,-1), (0,-1,3) Hallar la matriz de paso V, comprobar el resultado y ver que los valores propios de la matrizinicial son los elementos de la diagonal de la matriz semejante a la dada.

Page 186: Matlab Para Ingenieros y Cientificos

Calculamos la matriz diagonal, J, semejante a A, que tendrá los valores propiosde A en la diagonal, y la matriz de paso V. Para ello usamos el comando[V,J]=jordan(A) » A=[3,-1,0; -1,2,-1; 0,-1,3] A = 3 -1 0 -1 2 -1 0 -1 3 » [V,J]=jordan(A) V = [1/6, 1/2, 1/3][1/3, 0, -1/3][1/6, -1/2, 1/3] J = [1, 0, 0][0, 3, 0][0, 0, 4] Ahora comprobamos que la matriz diagonal, J, semejante a A, tiene los valorespropios de A en la diagonal.» eigensys(A) ans = [1][3][4] Las matrices A y J resultan ser semejantes, ya que existe la matriz de paso V quecumple la relación V-1 *A*V = J » symmul(symmul(inverse(V),A),V) ans = [1, 0, 0]

Page 187: Matlab Para Ingenieros y Cientificos

[0, 3, 0][0, 0, 4] Ejercicio 6-7. Hallar una matriz diagonal semejante a cada una de las siguientes matrices:

A= B= C = Hallar las matrices de paso y comprobar los resultados. Hallar el polinomio característico y elpolinomio mínimo para las tres matrices. » A=sym('[0,-r,q;r,0,-p;-q,p,0]');» [V,J]=jordan(A) V = [1/(q^2+r^2+p^2)*p^2,1/2/(q^2+r^2+p^2)*(q^2+r^2),1/2/(q^2+r^2+p^2)*(q^2+r^2)][1/(q^2+r^2+p^2)*q*p, 1/2*i*(i*p*(q^2+r^2+p^2)^(1/2)*q+r*p^2+r*q^2+r^3)/(q^2+r^2+p^2)^(3/2), 1/2*i*(i*p*(q^2+r^2+p^2)^(1/2)*q-r*p^2-r*q^2-r^3)/(q^2+r^2+p^2)^(3/2) ][1/(q^2+r^2+p^2)*r*p,1/2*i*(i*p*(q^2+r^2+p^2)^(1/2)*r-p^2*q-q^3-q*r^2)/(q^2+r^2+p^2)^(3/2), 1/2*i*(i*p*(q^2+r^2+p^2)^(1/2)*r+p^2*q+q^3+q*r^2)/(q^2+r^2+p^2)^(3/2) ] J = [0, 0, 0][0, -(-q^2-r^2-p^2)^(1/2), 0][0, 0, (-q^2-r^2-p^2)^(1/2)] Ya tenemos la matriz diagonal J semejante a la matriz A y la matriz de paso V.Ahora analizamos la matriz B. » B=sym('[0,1,-sin(a);-1,0,cos(a);-sin(a),cos(a),0]')

Page 188: Matlab Para Ingenieros y Cientificos

» J=simple(jordan(B)) J = [0, 0, 0][0, 0, 0][0, 0, 0] Se observa que la matriz B tiene como único valor propio el cero, y es demultiplicidad 3. Además el núcleo de B - 0*eye(3) =B tiene dimensión menor que tres, yaque el determinante de B es nulo. Concretamente tiene dimensión uno (se ve calculandouna base con el comando nullspace(B)). Como la multiplicidad y la dimensión delnúcleo difieren, se concluye que la matriz B no es diagonalizable. » nullspace(B) ans = [cos(a)][sin(a)][ 1] Hemos calculado una base del núcleo de B, que está formada por un únicovector, luego la dimensión del núcleo de B es 1. » determ(M) ans = 0 Analizamos ahora la matriz C. » C=sym('[cos(a),-sin(a);sin(a),cos(a)]'); » [V,J]=jordan(C) V = [1/2, 1/2 ][-1/2*4^(1/2)/abs(sin(a))/(-1-signum(-sin(a)^2)-i+i*signum(-sin(a)^2))*sin(a),1/2*4^(1/2)/abs(sin(a))/(-1-signum(-sin(a)^2)-i+i*signum(-sin(a)^2))*sin(a) ]

Page 189: Matlab Para Ingenieros y Cientificos

J = [cos(a)+1/2*(-4*sin(a)^2)^(1/2), 0][ 0, cos(a)-1/2*(-4*sin(a)^2)^(1/2)] Podemos intentar simplificar la expresión de la matriz de Jordán J. » simple(J) ans = [exp(i*a), 0][ 0, 1/exp(i*a)] Ya tenemos la matriz diagonal J semejante a la matriz C y la matriz de paso V. Calculamos ahora los polinomios característico y mínimo de las tres matrices. » pretty(charpoly(A)) 3 2 2 2 x + x p + r x + q x » pretty(simple(charpoly(B))) 3 x » pretty(simple(charpoly(C))) 2 x - 2 x cos(a) + 1 MATRICES DISPERSAS Una matriz se denomina dispersa si tiene los suficientes elementos nulos comopara poder obtenerse ventaja de ello. Los algoritmos de matrices dispersas no almacenanen memoria la mayoría de los elementos nulos, con lo que se gana tiempo y eficiencia enel procesamiento matricial. Pero para definir y manejar matrices dispersas es necesarioutilizar determinados comandos al efecto. A continuación se presentan algunos de éllos. S = sparse(i,j,s,m,n,nzmax) i=vector, j=vector, s=vector

Page 190: Matlab Para Ingenieros y Cientificos

Crea una matriz dispersa S de dimensión mxn con espacio para nzmax elementos no nulos. El vector i contiene las componentes iésimas de los elementos no nulos y el vector j contiene sus correspondientes componentes jésimas S=sparse(i,j,s,m,n) Crea la matriz dispersa S usando nzmax=length(s) S=sparse(i,j,s) Crea la matriz dispersa S con m=max(i) y n=max(j) S=sparse(A) Convierte la matriz completa A a la dispersa S A=full(S) Convierte la matriz dispersa S en la completa A S=spconvert(D) Convierte un fichero ASCII exterior leído con nombre D, a la matriz dispersa S (i,j)=find(A) Devuelve los índices de filas y columnas no cero de la matriz A B=spdiags(A,d) Construye la matriz dispersa deducida de a, cuya diagonal son de los elementos del vector d S=speye(m,n) Construye la matriz dispersa identidad mxn S=speye(n) Construye la matriz dispersa identidad cuadrada de orden n R=sprandn(S) Genera una matriz dispersa aleatoria de valores normales (0,1) con la misma estructura de lamatriz dispersa S R=sprandsym(S) Genera una matriz simétrica aleatoria de valores normales (0,1) cuyo triángulo inferior y diagonal tienen la misma estructura que en S r=sprank(S) Da el rango estructural de la matriz dispersa S n=nnz(S) Da el número de elementos no nulos de la matriz dispersa S k=nzmax(S) Da la cantidad de almacenamiento ocupada por

Page 191: Matlab Para Ingenieros y Cientificos

los elementos no nulos de la matriz dispersa S. Se tiene que nzmax(S)=prod(size(S)) s=spalloc(m,n, nzmax) Crea espacio en memoria para una matriz dispersa de dimensión mxn R=spones(S) Reemplaza los elementos no nulos de la matriz dispersa S con unos. n=condest(S) Devuelve la 1-norma de la matriz dispersa S m=normest(S) Devuelve la 2-norma de la matriz dispersa S issparse(A) Devuelve 1 si la matriz A es dispersa, y 0 en otro caso Veamos algunos ejemplos. » sparse([1,1,2,2,3,4],[4,2,3,1,2,3],[-7,12,25,1,-6,8],4,4,10) ans = (2,1) 1 (1,2) 12 (3,2) -6 (2,3) 25 (4,3) 8 (1,4) -7 Ahora pasamos esta matriz dispersa a forma completa. » full(ans) ans = 0 12 0 -7 1 0 25 0 0 -6 0 0 0 0 8 0 Ahora definimos una matriz dispersa cuya forma completa es una matrizdiagonal.

Page 192: Matlab Para Ingenieros y Cientificos

sparse(1:5,1:5,-6) ans = (1,1) -6 (2,2) -6 (3,3) -6 (4,4) -6 (5,5) -6 » full(ans) ans = -6 0 0 0 0 0 -6 0 0 0 0 0 -6 0 0 0 0 0 -6 0 0 0 0 0 -6MATRICES ESPECIALES Matlab ofrece comandos para definir determinados tipos especiales de matrices.Entre ellos destacan los siguientes: H=hadamard(n) Matriz con valores 1 ó -1 tal que H'*H = n*eye(n) hankel(V) Matriz cuya primera columna es el vector V y cuyos elementos son cero por debajo de la primera antidiagonal. La matriz hankel(C,R) tiene como primera columna el vector C y como última fila el vector R hilb(n) Matriz de Hilbert de orden n, tal que Aij=1/(i+j-1) invhilb(n) Inversa de la matriz de Hilbert de orden n magic(n) Matriz mágica de orden n. Sus elementos son los enteros desde 1 hasta n2 con iguales sumas de filas y columnas pascal(n) Matriz de Pascal de orden n (simétrica, definida positiva y basada en el triángulo de Pascal)

Page 193: Matlab Para Ingenieros y Cientificos

rosser Matriz 8x8 con un autovalor doble, otro nulo, tres casi iguales, otro muy pequeño y dos opuestos toeplitz(C,R) Matriz de Toeplitz (no simétrica con el vector Cde primera columna y el vector R como primera fila) vander(C) Matriz de Vandermonde cuya penúltima columna es el vector C. Además A(:,j) = C^(n-j) wilkinson(n) Matriz de Wilkinson (simétrica tridiagonal con pares de autovalores cercanos pero no iguales) compan(P) Matriz del polinomio de coeficientes P Ejercicio 6-8. Hallar los autovalores de la matriz de Wilkinson de orden 8, de la matriz mágicade orden 8 y de la matriz de Rosser. » [eig(wilkinson(8)), eig(rosser), eig(magic(8))] ans = 1.0e+003 * 0.0042 1.0000 0.2600 0.0043 1.0000 0.0518 0.0028 1.0200 -0.0518 0.0026 1.0200 0.0000 0.0017 1.0199 0.0000 + 0.0000i 0.0011 0.0001 0.0000 - 0.0000i 0.0002 0.0000 0.0000 + 0.0000i -0.0010 -1.0200 0.0000 - 0.0000i Se observa que la matriz de Wilkinson tiene pares de autovalores cercanos, perono iguales. La matriz de Rosser tiene un autovalor doble, otro nulo, tres casi iguales, otromuy pequeño y dos opuestos.

Page 194: Matlab Para Ingenieros y Cientificos

Capítulo 7

ESPACIOS VECTORIALES Y APLICACIONES LINEALES. ECUACIONES Y SISTEMAS

INTRODUCCIÓN El álgebra matricial tiene un fuerte campo de aplicación en la teoría de espaciosvectoriales, así como en todo tipo de transformaciones lineales entre espaciosvectoriales, como son las aplicaciones lineales, las formas lineales, las formas bilineales,las formas cuadráticas, etc. También es de fuerte aplicación el álgebra matricial en elestudio de los sistemas de ecuaciones lineales. Se presentan ejemplos, referentes a los campos antes citados, en los que lasolución envuelve comandos matriciales ya conocidos de Matlab, así como otroscomandos específicos que se relacionan a continuación. nullspace(A) o maple(‘nullspace(A)’) o maple(‘kernel(A)’) Devuelve una base para el núcleo de A N= null(A) Genera una base ortonormal para el núcleo de A, y el número de columnas de N es la dimensión del núcleo de A (nulidad de A) Q = o r t h ( A ) Genera una base ortonormal para el rango de A, es decir, que las columnas de Q generan el mismo espacio que las columnas de A, y el número de columnas de Q es el rango de A colspace(A) o maple(‘colspace(A)’) Devuelve una base para las columnas de A

Page 195: Matlab Para Ingenieros y Cientificos

dot(A,B) o maple(‘dotprod(A,B)’) Da el producto escalar de los vectores A y B cross(A,B) o maple(‘crossprod(A,B)’) Da el producto vectorial de los vectores A y B subspace(A,B) o maple(‘angle(A,B)’) Da el ángulo formado por los vectores A y B INDEPENDENCIA LINEAL, BASES Y CAMBIO DE BASE Ejercicio 7-1. Estudiar cuáles de los siguientes conjuntos de vectores son linealmenteindependientes: {{2,3,-1},{0,0,1},{2,1,0}} {{1,2,-3,4},{3,-1,2,1},{1,-5,8,-7},{2,3,1,-1}} {{1,2,2,1},{3,4,4,3},{1,0,0,1}} » A=[2,3,-1;0,0,1;2,1,0] A = 2 3 -1 0 0 1 2 1 0 » det(A) ans = 4 Al ser el determinante distinto de cero, los vectores son linealmenteindependientes » B=[1,2,-3,4;3,-1,2,1;1,-5,8,-7;2,3,1,-1]

Page 196: Matlab Para Ingenieros y Cientificos

B = 1 2 -3 4 3 -1 2 1 1 -5 8 -7 2 3 1 -1 » det(B) ans = 0 Al ser el determinante cero, los vectores son linealmente dependientes. » C=[1,2,2,1;3,4,4,3;1,0,0,1] C = 1 2 2 1 3 4 4 3 1 0 0 1» rank(C) ans = 2 Al tratarse de 3 vectores de un espacio de dimensión 4, no se puede aplicar eldeterminante, pero serán linealmente independientes si el rango de la matriz que formanes 3. Como el rango se ha visto que es 2, los vectores son linealmente dependientes. Ejercicio 7-2. Dado el conjunto de vectores: {{2,3,4,-1,1},{3,4,7,-2,-1},{1,3,-1,1,8},{0,5,5,-1,4}} Obtener la dimensión de la variedad lineal engendrada por ellos y una base de dicha variedadlineal. La dimensión de la variedad lineal engendrada por un conjunto de vectores seráel rango de la matriz formada con los vectores. » A=[2,3,4,-1,1;3,4,7,-2,-1;1,3,-1,1,8;0,5,5,-1,4]

Page 197: Matlab Para Ingenieros y Cientificos

A = 2 3 4 -1 1 3 4 7 -2 -1 1 3 -1 1 8 0 5 5 -1 4 » rank(A) ans = 3 El rango de la matriz es 3, luego la dimensión pedida es 3 Para hallar una base se considera cualquier menor de orden 3 distinto de cero dela matriz. Los vectores que tengan componentes incluídas en ese menor formarán unabase. » det([2,3,4;3,4,7;0,5,5]) ans = -15 Luego una base de la variedad lineal generada será el conjunto de vectores {{2,3,4,-1,1},{3,4,7,-2,-1},{0,5,5,-1,4}} Ejercicio 7-3. Dado el conjunto de vectores: {{2,3,-1},{0,0,1},{2,1,0}} 3Estudiar si forman una base de R, y en caso positivo, obtener las componentes del vector x=(3,5,1) en dicha base. » det([2,3,-1;0,0,1;2,1,0]) ans = 4 Como tenemos tres vectores de un espacio de dimensión 3, formarán una base sisu determinante es distinto de cero (linealmente independientes). Luego realmente

Page 198: Matlab Para Ingenieros y Cientificos

forman una base. Las componentes del vector (3,5,1) en esa base se hallan planteando: » inv([2,0,2;3,0,1;-1,1,0])*[3,5,1]' ans = 1.7500 2.7500 -0.2500 Ejercicio 7-4. Consideremos las bases B y B’ del espacio vectorial real tridimensional: B={{1,0,0},{-1,1,0},{0,1,-1}}B1={{1,0,-1},{2,1,0},{-1,1,1}} Hallar la matriz del cambio de base de B a B1 y calcular las componentes del vector {2,1,3} enbase B, en la base B1. » B=[1,0,0;-1,1,0;0,1,-1]; » B1=[1,0,-1;2,1,0;-1,1,1]; » A=inv(B1')*B' A = -0.5000 1.5000 2.5000 0.5000 -0.5000 -0.5000 -0.5000 1.5000 1.5000 » sym(A) ans = [-1/2, 3/2, 5/2][ 1/2, -1/2, -1/2][-1/2, 3/2, 3/2] Ya tenemos la matriz del cambio de base. Ahora hallamos las componentes delvector [2,3,1] en la base B1.

Page 199: Matlab Para Ingenieros y Cientificos

» sym(inv(B1')*B'*[2,1,3]') ans = [ 8][-1][ 5] GEOMETRÍA VECTORIAL EN 2 Y 3 DIMENSIONES Ejercicio 7-6. Dados los vectores: x1={1,1,-1}; x2={1, 1, 1} Ver si son ortogonales y hallar su producto vectorial. Los vectores serán ortogonales si su producto escalar es cero » dot([1,1,-1],[1,1,1]) ans = 1 Luego los vectores no son ortogonales. Se calcula ahora el producto vectorial. » cross([1,1,-1],[1,1,1]) ans = 2 -2 0 Luego el producto vectorial es el vector (2,-2,0) Ejercicio 7-7. Dados los vectores: {{1,1,2},{0,1,0},{0,1,1}}] Hallar su producto mixto. » dot([1,1,2],cross([0,1,0],[0,1,1]))

Page 200: Matlab Para Ingenieros y Cientificos

ans = 1 El producto mixto se ha calculado a partir del producto escalar y del productovectorial. Ejercicio 7-9. Hallar el área del triángulo cuyos vértices son los vectores:(0,0), (5,1) y (3,7) » (1/2)*det([0,0,1;5,1,1;3,7,1]) ans = 16 Se ha aplicado la conocida fórmula del área de un triángulo en función de lascoordenadas de sus vértices. APLICACIONES LINEALES Ejercicio 7-11. Dada la aplicación lineal cuya matriz está formada por el conjunto de vectores: {{0,-3,-1,-3,-1},{-3,3,-3,-3,-1},{2,2,-1,1,2}} Encontrar una base de su nucleo. » A=[0,-3,-1,-3,-1;-3,3,-3,-3,-1;2,2,-1,1,2] A = 0 -3 -1 -3 -1 -3 3 -3 -3 -1 2 2 -1 1 2 » null(A) ans = -0.5540 0 -0.3380 0.2236 -0.1828 0.6708 0.1584 -0.5814

Page 201: Matlab Para Ingenieros y Cientificos

0.7213 0.4025 Ya tenemos una base del núcleo de T formada por las dos columnas de la salidaanterior, con lo que la dimensión del núcleo será 2 Ejercicio 7-12. Consideramos la aplicación lineal f entre dos subespacios vectoriales U y V, detal forma que f(e1)=v1-v2, f(e2)=v2-v3 y f(e3)=v3-v4, siendo: B={e1,e2,e3} una base de U (subespacio de R3 ) B’={v1,v2,v3,v4} una base de V (subespacio de R4 ) Hallar la matriz asociada a la aplicación f. La matriz asociada a f es evidente, sin más que observar la definición de f (paralos elementos de ambas bases).» A=[1,0,0;-1,1,0;0,-1,1;0,0,1] A = 1 0 0 -1 1 0 0 -1 1 0 0 1 » maple('T1:=x->multiply(array([[1,0,0],[-1,1,0],[0,-1,1],[0,0,1]]),x)');» maple('T1([1,1,2])') ans = [1, 0, 1, 2] Ejercicio 7-13. Consideramos la aplicación lineal f entre dos subespacios vectoriales U y V delespacio real tridimensional, de tal forma que f(a,b,c)=(a+b,b+c,a+c) siendo (a,b,c) cualquierpunto de U. Hallar la matriz asociada a las aplicaciones f , (f)^5, y e^f. La matriz A es la matriz de la aplicación lineal f. » A=[1,1,0;0,1,1;1,0,1] A =

Page 202: Matlab Para Ingenieros y Cientificos

1 1 0 0 1 1 1 0 1 La matriz asociada a f^5 será A^5. » A^5 ans = 11 10 11 11 11 10 10 11 11 La matriz asociada a e^f será e^A. » expm(A) ans = 3.1751 2.8321 1.3819 1.3819 3.1751 2.8321 2.8321 1.3819 3.1751 Ejercicio 7-14. Consideramos la aplicación lineal f entre dos subespacios vectoriales U(contenido en R^3) y V (contenido en R^4), de tal forma que f(a,b,c)=(a,0,c,0) siendo (a,b,c)cualquier punto de U. Hallar la matriz asociada a la aplicación f, su núcleo y las dimensiones del núcleo y la imágende f. La matriz A es la matriz de la aplicación lineal f. A = [1, 0, 0][0, 0, 0][0, 0, 1][0, 0, 0] El núcleo es el conjunto de vectores de U con imágen nula en V » nullspace(A)

Page 203: Matlab Para Ingenieros y Cientificos

ans = [0][1][0] Con lo que el núcleo será el conjunto de vectores {0,b,0} con b variando en U.Además, evidentemente el núcleo tiene de dimensión 1, ya que hemos visto que unabase es el vector {0,1,0}. La dimensión de la imágen de f será 2, ya que la suma de las dimensiones delnúcleo y la imágen ha de ser la dimensión de U (que es 3, por ser un subespacio deR^3). Por otra parte la dimensión de la imagen de f ha de coincidir con el rango de lamatriz de la aplicación lineal, que es 2. Los dos vectores columna que contienen a loselementos del menor no nulo que define el rango de la matriz formarán una base de laimágen de f » det([1,0;0,1]) ans = 1 Luego una base de la imágen de f será {{1,0,0,0},{0,0,1,0}}Ejercicio 7-15. Consideramos la forma bilineal f:UxV -> R, siendo U y V dos subespaciosvectoriales del espacio real tridimensional, de tal forma que: f[{{x1,x2,x3},{y1,y2,y3}}]=x1 y1-2 x1 y2+4 x2 y3- x3 y1-3 x3 y3 Hallar la matriz asociada a la forma bilineal f y clasificarla. » A=sym('[1,-2,0;0,0,4;-1,0,-3]') A = [ 1,-2, 0][ 0, 0, 4][-1, 0,-3] » pretty(symmul(symmul('[x1,x2,x3]',A),transpose('[y1,y2,y3]'))) y1 x1 - y1 x3 - 2 x1 y2 + 4 y3 x2 - 3 y3 x3

Page 204: Matlab Para Ingenieros y Cientificos

Luego la matriz de f es {{1,-2,0},{0,0,4},{-1,0,-3}} » determ(A) ans = 8 Como el determinante de la matriz de f es no nulo, la forma bilineal es regular nodegenerada. FORMAS CUADRÁTICAS Ejercicio 7-16. Consideramos la forma cuadrática f:U -> R, siendo U subespacio vectorial delespacio real tridimensional, de tal forma que: f[{x,y,z}]=x2 - 2 x y + y2 + 6 x z - 3 y z + 4 z2

Hallar la matriz asociada a f y clasificarla. » A=sym('[1,-1,3;-1,1,-3/2;3,-3/2,4]') A = [ 1, -1, 3][-1, 1,-3/2][ 3,-3/2, 4] » pretty(symmul(symmul('[x,y,z]',A),transpose('[x,y,z]'))) 2 2 2 x - 2 y x + 6 x z + y - 3 y z + 4 z Luego la matriz de f es la matriz A. Para clasificarla, hallamos los determinantes correspondientes. » determ(A) ans = -9/4

Page 205: Matlab Para Ingenieros y Cientificos

» det([1,-1;-1,1]) ans = 0 La forma cuadrática es semidefinida negativa. Pero la clasificación también puede hacerse a través de los autovalores de lamatriz de la forma cuadrática. Una forma cuadrática es definida positiva si y sólo si todos sus autovalores sonpositivos estrictamente. Una forma cuadrática es definida negativa si y sólo si todos susautovalores son negativos estrictamente. Una forma cuadrática es semidefinida positiva si y sólo si todos sus autovaloresson no negativos. Una forma cuadrática es semidefinida negativa si y sólo si todos susautovalores son no positivos. Una forma cuadrática es indefinida si existen autovalores positivos y negativos » vpa(eigensys(A)) ans = [ 6.449804664906925+1.0e-16*i][-.8569061561202400+8.0e-16*i][ .4071014912133140-1.0e-15*i] » eigensys(vpa(A)) ans = [-.8569061561202390][ .4071014912133140][ 6.449804664906924] Hay autovalores positivos y negativos, con lo que la forma cuadrática esindefinida. Ejercicio 7-17. Consideramos la forma cuadrática f:U -> R, siendo U subespacio vectorial delespacio real tridimensional, de tal forma que:

Page 206: Matlab Para Ingenieros y Cientificos

f[{x,y,z}]=x2 + 2 y2 + 4 y z + 2 z2

Hallar la matriz asociada a f y clasificarla. Hallar su ecuación reducida, su rango y susignatura. » A=sym('[1,0,0;0,2,2;0,2,2]') A = [1,0,0][0,2,2][0,2,2] » pretty(symmul(symmul('[x,y,z]',A),transpose('[x,y,z]'))) 2 2 2 x + 2 y + 4 y z + 2 z Luego la matriz de la forma cuadrática es la matriz A. » determ(A) ans = 0 » det([1,0;0,2]) ans = 2 La forma cuadrática es degenerada, semidefinida positiva. Para hallar la ecuación reducida, diagonalizamos su matriz, y hallamos laexpresión utilizando la matriz diagonal » jordan(A) ans = [1, 0, 0][0, 0, 0][0, 0, 4]

Page 207: Matlab Para Ingenieros y Cientificos

» pretty(symmul(symmul('[a,b,c]',jordan(A)),transpose('[a,b,c]'))) 2 2 a + 4 c f(a,b,c) = a2 + 4 c2 es la ecuación reducida de la forma cuadrática. » maple('rank(jordan(matrix(3,3,[1,0,0,0,2,2,0,2,2])))') ans = 2 El rango de la forma cuadrática es 2, ya que el rango de su matriz es 2. Lasignatura también es 2, ya que el número de términos positivos en la diagonal de lamatriz diagonalizada es 2. RESOLUCIÓN DE ECUACIONES Y SISTEMAS Matlab ofrece determinados comandos que permiten resolver ecuaciones ysistemas. Entre ellos tenemos los siguientes: solve(‘ecuación’,’x’) Resuelve la ecuación en la variable x solve(‘ec1, ec2, ..., ecn’, ‘x1, x2, ...,xn’) Resuelve n ecuaciones simnultáneas ec1,..., ecn en las variables x1,..,xn (sistema de ecuaciones) X = linsolve(A,B) Resuelve A*X=B, para una matriz cuadrada A, siendo B y X matrices x = nnls(A,b) Resuelve A*x=b en el sentido de mínimos cuadrados, siendo x un vector (x³0) x = lscov(A,b,V) Da x (vector) que minimiza (A*x-b)'*inv(V)*(A*x-b) roots(V) Da las raíces del polinomio cuyos coeficientes son las componentes del vector VX = A\B Resuelve el sistema A*X=B

Page 208: Matlab Para Ingenieros y Cientificos

X = A/B Resuelve el sistema X*A=B Ejercicio 7-18. Hallar soluciones para las siguientes ecuaciones: Sen(x)Cos(x)=0, Sen(x)=aCos(x), ax^2+bx+c=0 y Sen(x)+Cos(x)=sqrt(3)/2 » solve('sin(x)*cos(x)=0') ans = [ 0][1/2*pi]» solve('sin(x)=a*cos(x)','x') ans = atan(a) » solve('a*x^2+b*x+c=0','x') ans = [1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))] » solve('sen(x)+cos(x)=sqrt(3)/2') ans = [1/2*3^(1/2)][1/2*3^(1/2)] Ejercicio 7-19. Hallar al menos dos soluciones para cada una de las dos ecuacionestrigonométrica y exponencial siguientes: xSen(x)=1/2 y 2x^3 =4( 23x ) Inicialmente utilizamos el comando solve. » solve('x*sin(x)=1/2') ans =

Page 209: Matlab Para Ingenieros y Cientificos

2.972585490382360 » solve('2^(x^3)=4*2^(3*x)') ans = 2 Para ambas ecuaciones obtenemos una sola solución. Para obtener mássoluciones, realizamos una representación gráfica de las funciones para ver de formaaproximada los intervalos dónde caen las posibles soluciones. Ver la figura 7-1. » fplot('[x*sin(x)-1/2,0]',[0,4*pi])

Figura 7-1

Se observa que hay una solución entre 0 y 2, otra entre 2 y 4, otra entre 4 y 8, yasí sucesivamente. Repetimos el proceso para la segunda ecuación, comenzando con larepresentación gráfica (figura 7-2). » subplot(2,1,1)» fplot('[2^(x^3),4*2^(3*x)]',[-3,1,-1/4,3/2])» subplot(2,1,2)» fplot('[2^(x^3),4*2^(3*x)]',[1,3,100,400])

Page 210: Matlab Para Ingenieros y Cientificos

Figura 7-2 Se han representado en el mismo gráfico dos trozos en los que hayintersecciones, para distintos valores de las variables x e y. Se observan posiblessoluciones entre -4 y 0, y entre 0 y 3. Ejercicio 7-20. Resolver cada una de las dos ecuaciones logarítmica e irracional siguientes: x3/2 log(x) = x log(x3/2), sqrt[1-x]+sqrt[1+x] = a A continuación realizamos la representación gráfica correspondiente (figura 7-3),para poder intuir los intervalos en los que se encuentran las posibles soluciones. Secomprueba que x=1 es la única solución real.

Figura 7-3 Ahora vamos a resolver la ecuación irracional. » solve('sqrt(1-x)+sqrt(1+x)=a','x') ans = -1+RootOf(-2+2*_Z^2-2*_Z*a+a^2)^2-2*RootOf(-2+2*_Z^2-2*_Z*a+a^2)*a+a^2 Hemos obtenido el resultado en función de una expresión RootOf, en cuyo casodebemos simplificarla como sigue: » simple(allvalues(solve('sqrt(1-x)+sqrt(1+x)=a','x')))ans = [-1/2*a*(-a^2+4)^(1/2)][ 3/2*a*(-a^2+4)^(1/2)][-3/2*a*(-a^2+4)^(1/2)][ 1/2*a*(-a^2+4)^(1/2)] Ejercicio 7-21. Resolver las dos ecuaciones siguientes: x5 +16x4+7x3+17x2+11x+5= 0 y x4 - 1 = 0

Page 211: Matlab Para Ingenieros y Cientificos

Resolver además la primera ecuación en módulo 19 y la segunda en módulo 5 » s1=solve('x^5 +16*x^4+7*x^3+17*x^2+11*x+5=0') s1 = RootOf(_Z^5+16*_Z^4+7*_Z^3+17*_Z^2+11*_Z+5) Ahora simplificamos esta expresión RootOf. » S1=simple(allvalues(s1)) S1 = [ -15.61870451719182][-.3867059805744952-.3977796861292117*i][-.3867059805744952+.3977796861292117*i][ .1960582391704047-1.000858165543796*i][ .1960582391704047+1.000858165543796*i] » s2=solve('x^4-1=0') s2 = [ 1][-1][ i][-i] También existe la alternativa de resolver las dos ecuaciones con el comandoroots, ya que se trata de dos ecuaciones polinómicas. Veamos: » roots([5,11,17,7,16,5]) ans = -1.2183 + 1.3164i -1.2183 - 1.3164i 0.2827 + 0.9302i 0.2827 - 0.9302i -0.3289 » roots([-1,0,0,0,1]) ans =

Page 212: Matlab Para Ingenieros y Cientificos

-1.0000 0.0000 + 1.0000i 0.0000 - 1.0000i 1.0000 Ejercicio 7-22. Resolver el sistema de dos ecuaciones siguiente: cos(x/12)/exp(x2/16)=y-5/4 +y = sen(x3/2) » [x,y]=solve('cos(x/12)/exp(x^2/16)=y','-5/4+y=sin(x^(3/2))') x = 2.412335896593778 y = .6810946557469383 Ejercicio 7-23. Hallar la intersección de las hipérbolas de ecuaciones x2-y2=r2 y a2x2-b2y2=a2b2 con la parábola z2 = 2px »[x,y,z]=solve('a^2*x^2-b^2*y^2=a^2*b^2','x^2-y^2=r^2','z^2=2*p*x','x,y,z') x = [1/2*RootOf((a^2-b^2)*_Z^4+4*b^2*r^2*p^2-4*a^2*b^2*p^2)^2/p][1/2*RootOf((a^2-b^2)*_Z^4+4*b^2*r^2*p^2-4*a^2*b^2*p^2)^2/p] y = [1/2*(RootOf((a^2-b^2)*_Z^4+4*b^2*r^2*p^2-4*a^2*b^2*p^2)^4-4*r^2*p^2)^(1/2)/p][-1/2*(RootOf((a^2-b^2)*_Z^4+4*b^2*r^2*p^2-4*a^2*b^2*p^2)^4-4*r^2*p^2)^(1/2)/p] z = [RootOf((a^2-b^2)*_Z^4+4*b^2*r^2*p^2-4*a^2*b^2*p^2)][RootOf((a^2-b^2)*_Z^4+4*b^2*r^2*p^2-4*a^2*b^2*p^2)]

Page 213: Matlab Para Ingenieros y Cientificos

Ahora simplificamos las expresiones RootOff, para obtener las triplas desoluciones del sistema. » [simple(allvalues(x)),simple(allvalues(y)),simple(allvalues(z))] ans = [ b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [ a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [ 2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][ b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [ a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [ -2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][-b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [ a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [i*2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][-b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [ a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [-i*2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][ b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [-a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [ 2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][ b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [-a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [ -2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][-b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [-a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [i*2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)][-b*(-r^2+a^2)^(1/2)/(a^2-b^2)^(1/2)] [-a*(b^2-r^2)^(1/2)/(a^2-b^2)^(1/2)] [-i*2^(1/2)*b^(1/2)*p^(1/2)*(-r^2+a^2)^(1/4)/(a^2-b^2)^(1/4)] Cada línea de esta salida (tripla de valores) es una solución del sistema, o sea, unpunto de intersección de las tres curvas. SISTEMAS DE ECUACIONES LINEALES Los sistemas de ecuaciones lineales pueden convertirse a forma matricial yresolverse utilizando el cálculo con matrices. Un sistema puede escribirse en la forma M .X = B, siendo X el vector de variables, B el vector de términos independientes y M lamatriz de coeficientes del sistema. Si M es una matriz cuadrada y el determinante de la matriz M es no nulo, M esinvertible, y la solución única del sistema puede escribirse en la forma: -1X= M . B En este caso los comandos solve, linsolve, nnls o M\B, ya descritos

Page 214: Matlab Para Ingenieros y Cientificos

anteriormente, ofrecen la solución. Si el determinante de M es nulo, el sistema tiene infinitas soluciones, con lo quehay filas o columnas en M que son linealmente dependientes. En este caso se calculará elnúmero de ecuaciones redundantes para saber cuántas variables tenemos que fijar paradar las infinitas soluciones. Si la matriz M es rectangular (no cuadrada), puede que el sistema seaindeterminado (número de ecuaciones menor que número de variables),sobredeterminado (número de ecuaciones mayor que el número de variables) o nosingular (número de ecuaciones igual a número de variables y determinante de M nonulo). Un sistema indeterminado puede ter infinitas soluciones o ninguna, y lo mismo lepasa a un sistema sobredeterminado. Si no existe solución para un sistema, se llamainconsistente (incompatible), y si al menos una solución existe, se llama consistente(compatible). El sistema M . X = B se llama homogéneo cuando el vector B es el vector nulo. Elsistema quedará de la forma M . X = 0. Si el determinante de M es no nulo, la únicasolución del sistema es el vector nulo (se obtiene con el comando linsolve). Si eldeterminante de M es nulo, el sistema tiene infinitas soluciones (es compatibleindeterminado). Las soluciones se hallarán mediante los comandos solve, linsolve omaple(‘leastsqrs’). Cuando la función solve ofrece la solución de un sistema lineal, estacoincide con la solución ofrecida por linsolve y por maple(‘leastsqrs’). Cuando el comandoleastsqrs se aplica a un sistema lineal con infinitas soluciones, ofrece sólo una de éllas. Posteriormente al considerar el teorema de Rouche-Froebenius, se organizarántodos estos conceptos sobre la forma y las distintas clases de soluciones de los sistemasde ecuaciones lineales. A continuación se presenta un ejemplo de un sistema con infinitas soluciones(x+3y+4z=1, 2x+3y+3z=1). En este caso Matlab ofrece las infinitas soluciones,dependiendo de parámetros. » solve('x+3*y+4*z=1', '2*x+3*y+3*z=1','x,y,z') ans = y = -5/3*z+1/3, x = z, z = z Al dar al parámetro z infinitos valores, se obtienen las soluciones.

Page 215: Matlab Para Ingenieros y Cientificos

EL TEOREMA DE ROUCHÉ-FROBENIUS Un sistema de m ecuaciones con n incógnitas tiene alguna solución si y sólo si elrango de la matriz de los coeficientes coincide con el rango de la matriz ampliada con elvector columna de los términos independientes del sistema. Si los dos rangos son igualese iguales al número de incógnitas, el sistema tiene solución única. Si los dos rangos soniguales pero menores que el número de incógnitas, el sistema tiene infinitas soluciones.Si son distintos el sistema no tiene solución. Sea A la matriz de coeficientes del sistema y B la matriz ampliada con el vectorde términos independientes. Si rango(A)¹rango(B), el sistema es incompatible (sin solución). Si rango(A)=rango(B) < n, el sistema es compatible indeterminado (tieneinfinitas soluciones). Si rango(A)=rango(B) = n, el sistema es compatible determinado (tiene soluciónúnica). Este teorema permite analizar las soluciones de un sistema de ecuaciones antesde resolverlo. Ejercicio 7-24. Estudiar y resolver el sistema: 2 x1 + x2 + x3 + x4 = 1 x1 + 2 x2 + x3 + x4 = 1 x1 + x2 +2 x3 + x4 = 1 x1 + x2 + x3 +2 x4 = 1 » A=[2,1,1,1;1,2,1,1;1,1,2,1;1,1,1,2] A = 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 » B=[2,1,1,1,1;1,2,1,1,1;1,1,2,1,1;1,1,1,2,1] B =

Page 216: Matlab Para Ingenieros y Cientificos

2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 » [rank(A), rank(B)] ans = 4 4 Vemos que las matrices A y B (ampliada), tienen de rango 4, que ademáscoincide con el número de incógnitas. Luego el sistema tiene solución única (escompatible determinado). Para calcular su solución se utiliza, por ejemplo, el comandolinsolve b=[1,1,1,1]'; » linsolve(A,b) ans = [1/5][1/5][1/5][1/5] Ejercicio 7-25. Estudiar y resolver el sistema: x1 - x2 + x3 = 14 x1 + 5 x2 - 5 x3 = 42 x1 + x2 - x3 = 2 x1 + 2 x2 - 2 x3 = 1 » A=[1,-1,1;4,5,-5;2,1,-1;1,2,-2] A = 1 -1 1 4 5 -5 2 1 -1 1 2 -2

Page 217: Matlab Para Ingenieros y Cientificos

» B=[1,-1,1,1;4,5,-5,4;2,1,-1,2;1,2,-2,1] B = 1 -1 1 1 4 5 -5 4 2 1 -1 2 1 2 -2 1 » [rank(A), rank(B)] ans = 2 2 Vemos que el rango de A y el de B coinciden y su valor es 2, que es menor que elnúmero de incógnitas del sistema (3). Por lo tanto el sistema tendrá infinitas soluciones(compatible indeterminado). Intentamos resolverlo con el comando solve. » solve('x1-x2+x3=1','4*x1+5*x2-5*x3=4','2*x1+x2-x3=2','x1+2*x2-2*x3=1', 'x1,x2,x3') ans = x1 = 1, x3 = x2, x2 = x2 Las infinitas soluciones se obtienen al dar al parámetro x2 los infinitos valoresreales ( {1,x2,x2} "x2ÎR ). Notar que la solución trivial {1,0,0} se obtiene para el valordel parámetro igual a la unidad. Ejercicio 7-26. Estudiar y resolver el sistema: x + 2 y + 3 z = 6 x + 3 y + 8 z = 192 x + 3 y + z = -15 x + 6 y + 4 z = 5 » A=[1,2,3;1,3,8;2,3,1;5,6,4] A = 1 2 3 1 3 8

Page 218: Matlab Para Ingenieros y Cientificos

2 3 1 5 6 4 » B=[1,2,3,6;1,3,8,19;2,3,1,-1;5,6,4,5] B = 1 2 3 6 1 3 8 19 2 3 1 -1 5 6 4 5 » [rank(A), rank(B)] ans = 3 3 Vemos que el rango de A y el de B coinciden y su valor es 3, que es igual alnúmero de incógnitas del sistema (3). Por lo tanto el sistema tendrá solución única(compatible determinado). Con el comando linsolve se obtiene la única solución. »solve('x+2*y+3*z=6','x+3*y+8*z=19','2*x+3*y+z=-1','5*x+6*y+4*z=5', 'x,y,z') ans = y = -2, x = 1, z = 3 Ejercicio 7-27. Estudiar y resolver el sistema: x + 2 y + 3 z + t = 6 x + 3 y + 8 z + t =19 » A=[1,2,3,1;1,3,8,1] A = 1 2 3 1 1 3 8 1 » B=[1,2,3,1,6;1,3,8,1,19] B =

Page 219: Matlab Para Ingenieros y Cientificos

1 2 3 1 6 1 3 8 1 19 » [rank(A), rank(B)] ans = 2 2 Vemos que el rango de A y el de B coinciden y su valor es 2, que es menor que elnúmero de incógnitas del sistema (4). Por lo tanto el sistema tendrá infinitas soluciones(compatible indeterminado). Intentamos resolverlo » solve('x+2*y+3*z+t=6','x+3*y+8*z+t=19','x,y,z,t') ans = z = z, y = -5*z+13, x = 7*z-20-t, t = t Esta vez la solución depende de dos parámetros. Al hacer variar z y t en losnúmeros reales se obtienen las infinitas soluciones del sistema. Dichas soluciones formanun subespacio vectorial de dimensión dos del espacio vectorial real bidimensional. Ejercicio 7-28. Estudiar y resolver el sistema: x1 + 2 x2 - x3 = 102 x1 + 4 x2 - 2 x3 = 5 x1 + x2 + x3 = 6 » A=[1,2,-1;2,4,-2;1,1,1] A = 1 2 -1 2 4 -2 1 1 1 » B=[1,2,-1,10;2,4,-2,5;1,1,1,6] B = 1 2 -1 10 2 4 -2 5

Page 220: Matlab Para Ingenieros y Cientificos

1 1 1 6 » [rank(A), rank(B)] ans = 2 3 El rango de A es 2 y el de B es 3, por lo tanto el sistema no tiene solución(incompatible). SISTEMAS HOMOGÉNEOS El sistema A.X=B se dice homogéneo si el vector de términos independientes Bes nulo, con lo que todo sistema homogéneo será de la forma: A.X=0. En un sistema homogéneo, el rango de la matriz de los coeficientes y el rango dela matriz ampliada con la columna de los términos independientes siempre coinciden. Siaplicamos el teorema de Rouché-Frobenius, un sistema homogéneo tendrá una únicasolución cuando el determinante de la matriz A sea distinto de cero. Esa solución única esel vector nulo, ya que la solución nula siempre la tienen los sistemas homogéneos. Unsistema homogéneo tendrá infinitas soluciones cuando el determinante de la matriz A escero. En este caso las infinitas soluciones se calculan igual que en los sistemas generales(comando solve), o también utilizando la función nullspace(A) Ejercicio 7-29. Estudiar y resolver el sistema: x1 + 2 x2 - x3 = 02 x1 - x2 +x3 = 03 x1 + x2 = 0 » A=[1,2,-1;2,-1,1;3,1,0] A = 1 2 -1 2 -1 1 3 1 0 » det(A) ans =

Page 221: Matlab Para Ingenieros y Cientificos

0 El sistema es homogéneo y el determinante de la matriz de los coeficientes esnulo, con lo que tendrá infinitas soluciones. » solve('x1+2*x2-x3=0','2*x1-x2+x3=0','3*x1+x2=0','x1,x2,x3') ans = x2 = -3*x1, x3 = -5*x1, x1 = x1 Luego las infinitas soluciones se obtienen cuando x1 varía en los números reales. Si aplicamos el comando nullspace, obtenemos una base del núcleo de la matrizdel sistema, es decir, una base del conjunto de soluciones del sistema A.X=0, que esprecisamente el sistema homogéneo que queremos resolver. Por lo tanto, con la funciónnullspace se obtiene una solución no trivial del sistema homogéneo. » nullspace(A) ans = [ 1][-3][-5] Se obtiene precisamente la solución particular que corresponde al valor delparámeto x1=1. El conjunto de soluciones serán las combinaciones lineales de los elementos dela base. Pero como en este caso la base está formada por un solo vector, la solucióngeneral será el producto de una constante genérica a por el vector, con lo que elresultado coincide con el hallado por el método general. Ejercicio 7-30. Estudiar y resolver el sistema: 3 x1 + x2 + x3 - x4 = 02 x1 + x2 - x3 + x4 = 0 x1 +2 x2 + 4 x3 + 2 x4 = 02 x1 + x2 - 2 x3 - x4 = 0 » det([3,1,1,-1;2,1,-1,1;1,2,4,2;2,1,-2,-1])

Page 222: Matlab Para Ingenieros y Cientificos

ans = -30 Como el determinante de la matriz de los coeficientes es no nulo, el sistema sólotiene la solución trivial. » solve('3*x1+x2+x3-x4=0','2*x1+x2-x3+x4=0','x1+2*x2-4*x3-2*x4=0', 'x1-x2-3*x3-5*x4=0','x1,x2,x3,x4') ans = x4 = 0, x2 = 0, x3 = 0, x1 = 0

Page 223: Matlab Para Ingenieros y Cientificos

Capítulo 8

LÍMITES DE SUCESIONES Y FUNCIONES, CONTINUIDAD. UNA Y VARIAS VARIABLES

INTRODUCCIÓN Matlab ofrece comandos que permiten calcular prácticamente todo tipo de límites.Las mismas funciones se aplican para calcular límites de sucesiones que para calcularlímites de funciones. El análisis para una y varias variables es semejante. En este capítulo se presentarán múltiples ejemplos, que vienen a ilustrar lacapacidad de Matlab para desenvolverse en este campo. La sintaxis de los comandos que resuelven límites se presenta a continuación: maple(‘limit(sucesión, n=infinity)’) Calcula el límite de la sucesión, indicada por su término general, cuando n tiende a infinito. maple(‘limit(función, x=a)’) Calcula el límite de la función de variable x, indicada por su expresión analítica, cuando la variable xtiende hacia el valor a. maple(‘limit(función,x=a,right)’) Calcula el límite de la función de variable x, indicada por su expresión analítica, cuando la variable xtiende al valor a por la derecha. maple(‘limit(función, x=a, left)’) Calcula el límite de la función de variable x, indicada por su expresión

Page 224: Matlab Para Ingenieros y Cientificos

analítica, cuando la variable xtiende al valor a por la derecha. LÍMITES DE SUCESIONES Se presentan a continuación ejercicios sobre el cálculo de límites. Ejercicio 8-1. Calcular los siguientes límites: 4 2 3 (-3 + 2 n) 1 + 7 n + 3 nLimit[-----------] Limit[---------------]n-> ¥ 4 n-> ¥ 3 (-7 + 3 n) 5 - 8 n + 4 n En ambos límites estamos ante la típica indeterminación dada por el cociente¥/¥ » maple('limit(((2*n-3)/(3*n-7))^4, n=infinity)') ans = 16/81 » maple('limit((3*n^3+7*n^2+1)/(4*n^3-8*n+5), n=infinity)') ans = 3/4 Ejercicio 8-2. Calcular los siguientes límites: 4 1 + n 1 + n 1 + n 1/nLimit (-----) . (------) Limit[(-----)]n-> ¥ 2 5 n-> ¥ 2 n n 0 Tenemos una indeterminación del tipo ¥.0 y otra del tipo ¥ » maple('limit(((n+1)/2)*((n^4+1)/n^5), n=infinity)')

Page 225: Matlab Para Ingenieros y Cientificos

ans = 1/2 » maple('limit(((n+1)/n^2)^(1/n), n=infinity)') ans = 1 Ejercicio 8-3. Calcular los siguientes límites: 3 + n n 2 nLimit[(------)] Limit[(1 - -----)]n-> ¥ -1 + n n-> ¥ 3 + n ¥ Estamos ante dos indeterminaciones del tipo 1 » maple('limit(((n+3)/(n-1))^n, n=infinity)') ans = exp(4) » maple('limit((1-2/(n+3))^n, n=infinity)') ans = exp(-2) Ejercicio 8-4. Calcular los siguientes límites: 1/3 1/3 1 1/n -n + (1 + n)Limit[(--)] Limit[------------------------]n-> ¥ n n-> ¥ -Sqrt[n] + Sqrt[1 + n] 0 Estamos ante límites de las formas ¥ y (¥-¥)/¥ » maple('limit((1/n)^(1/n), n=infinity)')

Page 226: Matlab Para Ingenieros y Cientificos

ans = 1 » maple('limit(((n+1)^(1/3)-n^(1/3))/((n+1)^(1/2)-n^(1/2)), n=infinity)') ans = 0 Ejercicio 8-5. Calcular los siguientes límites: 2 1 + n n!Limit[------] Limit[---]n-> ¥ n n-> ¥ n 5 n n Estos dos límites son de la forma ¥/¥ » maple('limit((n^2+1)/(n*5^n), n=infinity)') ans = 0» maple('limit(n!/n^n, n=infinity)') ans = 0 LÍMITES DE FUNCIONES. LÍMITES LATERALES El cálculo de los límites de funciones se realiza utilizando los mismos comandosde Matlab que para las sucesiones. Al considerar las funciones, Matlab permite calcular ellímite en un punto (si existe), el límite por la derecha y el límite por la izquierda. Para que una función tenga límite en un punto, es necesario que el límite por laizquierda y el límite por la derecha en ese punto coincidan. De no coincidir, el límite de lafunción en ese punto no existe. A continuación se presentan varios ejercicios relativos al cálculo de límites defunciones, algunos de los cuales se ilustrarán con las correspondientes gráficas. El uso de

Page 227: Matlab Para Ingenieros y Cientificos

los gráficos es aconsejable siempre que surjan dudas a cerca de los resultados.Ejercicio 8-6. Calcular los siguientes límites: -1 + x x - Sqrt[2 + x]Limit[------------] Limit[------------------]x->1 -1 + Sqrt[x] x->2 -3 + Sqrt[1 + 4 x] Tenemos dos indeterminaciones de la forma 0/0 » maple('limit((x-1)/(x^(1/2)-1),x=1)') ans = 2 » maple('limit((x-(x+2)^(1/2))/((4*x+1)^(1/2)-3),x=2)') ans = 9/8 Ejercicio 8-7. Calcular los siguientes límites: 2 1/x Sin[4 x] Sin[a x]Limit[(1 + x) ] Limit[--------] Limit[---------]x->0 x->0 2 x x->0 2 x ¥ Tenemos dos indeterminaciones del tipo 0/0 y una de la forma 1» maple('limit((1+x)^(1/x),x=0)') ans = exp(1) » maple('limit(sin(4*x)/(2*x),x=0)') ans = 2 » maple('limit(sin(a*x)^2/x^2,x=0)')

Page 228: Matlab Para Ingenieros y Cientificos

ans = a^2 Ejercicio 8-8. Calcular los siguientes límites: x Sin[x] -1 + E (-1 + E ) Tan[x]Limit[----------] Limit[---------------------]x->0 Log[1 + x] x->0 x 1 - Cos[-] 5 Se trata de indeterminaciones del tipo 0/0 » maple('limit((e^x-1)/log(1+x),x=0)') ans = log(e) » maple('limit((e^(sin(x))-1)*tan(x)/(1-cos(x/5)),x=0)') ans = 50*log(e) Ejercicio 8-9. Calcular el límite de la función: f(x) = |x|/Sen(x) cuando x->0 » maple('limit(abs(x)/sin(x),x=0)') ans = undefined » maple('limit(abs(x)/sin(x),x=0,left)') ans = -1

Page 229: Matlab Para Ingenieros y Cientificos

» maple('limit(abs(x)/sin(x),x=0,right)') ans = 1 Como los límites laterales no son iguales, la función no tiene límite en x=0. Si representamos la función (figura 8-1), tenemos una idea de cuál es el límite » fplot('abs(x)/sin(x)',[-1,1])

Figura 8-1 Por simple observación se ve que el límite por la derecha es 1 y el límite por laizquierda es -1. Ejercicio 8-10. Calcular el límite de la función: 1/x f(x) = E cuando x->0 » maple('limit(e^(1/x),x=0)') ans = limit(e^(1/x),x = 0) » maple('limit(e^(1/x),x=0,left)') ans = limit(e^(1/x),x = 0,left) » maple('limit(e^(1/x),x=0,right)')

Page 230: Matlab Para Ingenieros y Cientificos

ans = limit(e^(1/x),x = 0,right) Hemos visto que los límites no tienen porqué poderse calcular siempre conMatlab. La alternativa es la representación gráfica (figura 8-2). » fplot('exp(1/x)',[-10,10,0,3])

Figura 8-2 Se observa que el límite por la derecha es infinito, y el límite por la izquierda escero. Como ambos límites son distintos, se concluye que la función no tiene límite enx=0. En este ejemplo se ve que la única salida posible para el cálculo del límite es larepresentación gráfica. Ejercicio 8-11. Calcular los siguientes límites: x - 1Limit |x^2 - x- 7| Limit[---------]x->3 x->1 n x - 1 » maple('limit(abs(x^2-x-7),x=3)') ans = 1 » maple('limit((x-1)/(x^n-1),x=1)') ans = 1/n

Page 231: Matlab Para Ingenieros y Cientificos

CONTINUIDAD Una función f se dice continua en el punto x=a, si se verifica: Limit f (x) = f(a)x-> a En otro caso, se dice discontinua en el punto. Es decir, que para que una funciónsea continua en x=a, la función f ha de estar definida, ha de existir el límite (finito) de fen el punto x=a y el valor del límite ha de coincidir con el valor de la función en el punto. Si existe el límite de f(x) cuando x->a, pero es distinto de f(a) (ó f(a) no estádefinida), f es discontinua en x=a, y se dice que f presenta una discontinuidad evitable enx=a. La forma de evitar la discontinuidad es redifinir f(a) convenientemente. Si existen los dos límites laterales de f en x=a (finitos o infinitos), pero sondistintos, entonces la discontinuidad de f en x=a se denomina de primera especie. Ladiferencia entre los valores de los dos límites laterales distintos se llama salto. Si ladiferencia es finita, se dice que la discontinuidad es de primera especie con salto finito. Sila diferencia es infinita, se dice que la discontinuidad es de primera especie de saltoinfinito. Si alguno de los límites laterales no existe, se dice que la función es discontinuade segunda especie. A continuación se ilustran estos conceptos con varios ejercicios Ejercicio 8-12. Estudiar la continuidad de la función de variable real: Sen(x)f(x) = ------- x » maple('limit(sin(x)/x,x=a)')

Page 232: Matlab Para Ingenieros y Cientificos

ans = sin(a)/a La función es continua en cualquier punto x=a distinto de cero, ya que Limit f(x)= f(a) x->a El problema se presenta en el punto x=0, en el que la función f no está definida.Por lo tanto la función es discontinua en x=0. Esta discontinuidad se evitaría definiendo lafunción en x=0 con un valor igual a Limit f(x) x->0 » maple('limit(sin(x)/x,x=0)') ans = 1 Podemos concluir que la función f(x)=Sen(x)/x presenta una discontinuidadevitable en x=0, que se evita definiendo f(0)=1. En el resto de los puntos reales lafunción es continua. Ejercicio 8-13. Estudiar la continuidad de la función de variable real: f(x) = Sen(1/x) La función es continua en cualquier punto x=a distinto de cero, ya que Limit f(x)= f(a). x->a » maple('limit(sin(1/x),x=a)') ans = sin(1/a) El problema se presenta en el punto x=0, en el que la función f no está definida.Por lo tanto la función es discontinua en x=0. Para intentar evitar la discontinuidad,calculamos Limit f(x): x->0» maple('limit(sin(1/x),x=0)')

Page 233: Matlab Para Ingenieros y Cientificos

ans = -1 .. 1 » maple('limit(sin(1/x),x=0,left)') ans = -1 .. 1 » maple('limit(sin(1/x),x=0,right)') ans = -1 .. 1 Vemos que en x=0 no existe el límite (el límite ha de ser único y aquí elresultado son todos los puntos del intervalo [-1,1]), ni existe el límite por la izquierda, niexiste el límite por la derecha. Luego la función presenta una discontinuidad de segundaespecie en x=0. Matlab responde al cálculo de los límites con la expresión “-1..1”. Ello es debido aque la gráfica de f(x) presenta infinitas oscilaciones entre -1 y 1 en cualquier entorno delorigen. La figura 8-3 ilustra esta afirmación. » fplot('sin(1/x)',[-1,1])

Figura 8-3 Ejercicio 8-14. Estudiar la continuidad de la función de variable real: 1f(x) = -------- si x ¹ 0 y f(x) = 1 si x = 0 1/x 1 + E

Page 234: Matlab Para Ingenieros y Cientificos

El único punto problemático es x=0. Ahora la función si existe en x=0 (vale 1).Vamos a intentar hallar los límites laterales cuando x->0 » maple('limit(1/(1+exp(1/x)),x=0,right)') ans = 0 » maple('limit(1/(1+exp(1/x)),x=0,left)') ans = 1 Como los límites laterales son distintos, el límite de la función en x->0 no existe.Pero como los límites laterales son finitos, la discontinuidad de primera especie en x=0es de salto finito. Se ilustra este resultado con la representación de la figura 10.4 Ejercicio 8-15. Estudiar la continuidad de la función de variable real: 1/xf(x) = E si x ¹ 0 y f(x) = 1 si x = 0 El único punto problemático es x=0. La función sí está definida en x=0 (vale 1). Vamos a intentar hallar los límite laterales cuando x->0 » maple('limit((exp(1/x)),x=0,right)') ans = inf » maple('limit((exp(1/x)),x=0,left)') ans = 0 Como los límites laterales son distintos, el límite de la función en x->0 no existe.Pero como un límite lateral es infinito, la discontinuidad de primera especie en x=0 es desalto infinito.

Page 235: Matlab Para Ingenieros y Cientificos

Ejercicio 8-16. Estudiar la continuidad de la función de variable real: x 2 E x + 1f(x) = -------- si x £ 0 y f(x)= ------- si x > 0 x 2 1 + E El único punto problemático que presenta esta función es x=0. En el resto de lospuntos reales la función es continua. La función en x=0 está perfectamente definida y vale 1/2. Ahora calculamos loslímites laterales cuando x->0 » maple('limit(e^x/(e^x+1),x=0,left)') ans = 1/2 » maple('limit(e^x/(e^x+1),x=0,right)') ans = ½ Vemos que los límites por la derecha y por la izquierda de la función cuando x->0coinciden, y además su valor es el valor de la función en x=0. Con ello se concluye que lafunción es continua en todo el campo real. VARIAS VARIABLES: LÍMITES Y CONTINUIDAD. Teoremas de Caracterización La sucesión de puntos m-dimensionales {(a1n, a2n,...,amn)} con n recorriendolos números naturales, tiene por límite el punto m-dimensional (a1, a2, ..., am) si y solosi: Limit[{a1n}] = a1n->¥ Limit[{a2n}] = a2n->¥

Page 236: Matlab Para Ingenieros y Cientificos

....................................Limit[{amn}] = amn->¥ Este teorema de caracterización permite calcular límites de sucesiones de puntosm-dimensionales. Ejercicio 8-17. Calcular el límite de la siguiente sucesión tridimensional: 1 + n 1 2n nLimit([-----],[(1 + -)], [--------])n->¥ n n -1 + 2 n » maple('vector([limit((n+1)/n,n=infinity),limit((1+1/n)^(2*n),n=infinity), limit(n/(2*n-1),n=infinity)])') ans = [1, exp(2), 1/2] Ejercicio 8-18. Calcular el límite, cuando n->¥, de la siguiente sucesión de cuatrodimensiones: 2 n 1/n 1 1/n 1/n 1/n 1 + n((------) , (-) , 5 n , ------) 2 n 2 1 + n n » maple('vector([limit((n/(n^2+1))^(1/n),n=infinity),limit((1/n)^(1/n), n=infinity),limit((5*n)^(1/n) ,n=infinity),limit((n^2+1)/n^2,n=infinity)])')ans = [1, 1, 1, 1] Existe otro teorema semejante al anterior, para la caracterización de los límitesde funciones entre espacios de más de una dimensión. Este teorema se utilizará paraposibilitar el cálculo de límites de funciones multivariables. n m Sea f:R -----> R una función, cuyas m componentes son (f1,f2,...fm). Entonces secumple que: Limit (f1(x1,x2,..,xm),f2(x1,x2,...,xm),....,fn(x1,x2,...,xm))=(l1,l2,..,lm)

Page 237: Matlab Para Ingenieros y Cientificos

x1->a1x2->a2..........xm->am si y sólo si:Limit (f1(x1,x2,....,xm)) = l1x1->a1x2->a2..........xm->am Limit (f2(x1,x2,....,xm)) = l2x1->a1x2->a2..........xm->am .............................................. Limit (fm(x1,x2,....,xm)) = lmx1->a1x2->a2..........xm->am Ejercicio 8-19. Sea f:R -----> R2 una función definida por: Sen(x) 1/x f(x)=(----------, (1+x) ) x Hallar Limit f(x) x-> 0 » maple('vector([limit(sin(x)/x,x=0),limit((1+x)^(1/x),x=0)])')ans = [1, exp(1)] Ejercicio 8-20. Sea f:R2 -----> R2 una función definida por: 2 (1 - Cos[y]) Sin[x] 1/x Tan[y]

Page 238: Matlab Para Ingenieros y Cientificos

f(x,y) = (-------------- + ------, (1 + x) - ------ ) 2 x y y Hallar Limit f(x,y) (x,y)->(0,0) » maple('f:=(x,y)->sin(x)/x+2(1-cos(y))/y^2'); » maple('g:=(x,y)->(1+x)^(1/x)-tan(y)/y');» maple('vector([limit(limit(f(x,y),x=0),y=0),limit(limit(g(x,y),x=0),y=0)])') ans = [inf, exp(1)-1]Límites Iterados y Direccionales Dada la función f:Rn --->R, se llama límite iterado de f(x1,x2,..,xn) en el punto(a1, a2,...,an), al valor del límite, si existe: Limit ( Limit ( .......( Limit f(x1,x2,.......,xn))...))x1->a1 x2->a2 xn->an o a cualquier otra ordenación de los límites en xi con i=1,2,....,n. Se llama límite direccional de f en el punto (a1,a2,...,an), según la dirección de lacurva h(t)=(h1(t),h2(t),....,hn(t)), tal que h(t0)=(a1,a2,...,an), al valor: Limit (f(h(t))) = Limit f(x1,x2,......,xn)t->t0 (x1,x2,..,xn)->(a1,a2,..an) Una condición necesaria para que una función de varias variables tenga límite enun punto, es que todos los límites iterados tengan el mismo valor (el valor del límite de lafunción, si este existe). También puede ocurrir que la función tenga límite direccional según la direcciónde varias curvas, que dicho límite sea distinto para distintas curvas, o que no exista paraalguna de ellas. Otra condición necesaria para que una función de varias variables tenga límite enun punto, es que todos los límites direccionales, según las direcciones de todas lascurvas, tengan el mismo valor (el valor del límite de la función, si este existe).

Page 239: Matlab Para Ingenieros y Cientificos

Por lo tanto, para demostrar que una función no tiene límite basta ver que loslímites iterados no existen, o si existen, no son iguales. Tampoco la función tendrá límitesi algún límite direccional no existe o si existen límites distintos para direccionesdistintas. Un procedimiento práctico para calcular el límite de una función de variasvariables consiste en cambiar las variables cartesianas por variables polares, para facilitarasí las operaciones. Ejercicio 8-21. Sea f:R2 -----> R una función definida por: x yf(x,y) = ------- 2 2 x + y Hallar Limit f(x,y) (x,y)->(0,0) » maple('limit(limit((x*y)/(x^2+y^2),x=0),y=0)') ans = 0 » maple('limit(limit((x*y)/(x^2+y^2),y=0),x=0)') ans = 0 Hemos visto que los límites iterados son iguales. A continuación calculamos loslímites direccionales según la familia de rectas y=mx. » maple('limit((m*x^2)/(x^2+(m^2)*(x^2)),x=0)') ans = m/(1+m^2) Los límites direccionales dependen del parámetro m, con lo que serán distintospara distintos valores de m (para las distintas rectas consideradas). Luego se concluyeque la función no tiene límite en (0,0).

Page 240: Matlab Para Ingenieros y Cientificos

Ejercicio 8-22. Sea f:R2 -----> R una función definida por: 2 2 2 (-x + y )f(x,y) = ----------- 2 4 x + y Hallar Limit f(x,y) (x,y)->(0,0) » maple('limit(limit((y^2-x^2)^2/(y^4+x^2),x=0),y=0)') ans = 1 » maple('limit(limit((y^2-x^2)^2/(y^4+x^2),y=0),x=0)') ans = 0 Como los límites iterados son distintos, se concluye que la función no tiene límiteen el punto (0,0). Ejercicio 8-23. Sea f:R2 -----> R una función definida por: 2 2 (-x + y )f(x,y) = ----------- 2 4 x + y Hallar Limit f(x,y) (x,y)->(0,0) » maple('limit(limit((y^2-x)^2/(y^4+x^2),x=0),y=0)') ans = 1

Page 241: Matlab Para Ingenieros y Cientificos

» maple('limit(limit((y^2-x)^2/(y^4+x^2),y=0),x=0)') ans = 1 Hemos visto que los límites iterados son iguales. A continuación calculamos loslímites direccionales según la familia de rectas y=mx. » maple('limit(((m*x)^2-x)^2/((m*x)^4+x^2),x=0)') ans = 1 Los límites direccionales según la familia de rectas y=mx no dependen de m ycoinciden con los límites iterados. Vamos a hallar el límite según las direcciones de lafamilia de parábolas y^2 = mx. » maple('limit(((m*x)-x)^2/((m*x)^2+x^2),x=0)') ans = (m-1)^2/(m^2+1) Los límites direccionales según las parábolas consideradas dependen delparámetro, luego son distintos. Ello nos lleva a concluir que la función no tiene límite en(0,0). Ejercicio 8-24. Sea f:R2 -----> R una función definida por: 2 x yf(x,y) = ------- 2 2 x + y Hallar Limit f(x,y) (x,y)->(0,0) » maple('limit(limit((x^2*y)/(x^2+y^2),x=0),y=0)') ans =

Page 242: Matlab Para Ingenieros y Cientificos

0 » maple('limit(limit((x^2*y)/(x^2+y^2),x=0),y=0)') ans = 0 » maple('limit(((x^2)*(m*x))/(x^2+(m*x)^2),x=0)') ans = 0 » maple('limit(((m*y)^2)*y/((m*y)^2+y^2),y=0)') ans = 0 Vemos que los límites iterados y los límites direccionales según las direcciones derectas y parábolas coinciden y valen todos cero. Ello nos lleva a sospechar que el límitede la función puede ser cero. Para corroborarlo, transformamos la función a coordenadaspolares y hallamos el límite en polares » maple('limit(limit(((r^2)*(cos(a)^2)*(r)*(sin(a)))/((r^2)*(cos(a)^2) +(r^2)*(sin(a)^2)),r=0),a=0)')ans =0 Se concluye por tanto que el límite es cero en el punto (0,0). Este es un ejemplo, como último recurso se ha utilizado la transformación acoordenadas polares. Se han usado como direcciones familias de rectas y parábolas, peropodrían usarse otras. El cambio a polares resulta crucial a la hora de determinar límitesde funciones de varias variables. Como se ve, hay criterios suficientes para ver que unafunción no tiene límite en un punto. Pero sin embargo no tenemos condiciones necesariasy suficientes para garantizar la existencia de dicho límite. En estos casos es útil realizar la representación gráfica de la función de dosvariables en un entorno del punto conflictivo. Vamos a graficar la superficie problema enun entorno de cero mediante un M-fichero de nombre ‘sup.m’. El código del M-fichero seráel siguiente:

Page 243: Matlab Para Ingenieros y Cientificos

function z=sup(x,y)if x~=0z=x.^2*y/(x.^2+y.^2);end En la figura 8-4 se presenta la superficie (función de dos variables). » [x,y]=meshgrid(-2:0.05:2);» sup(x,y);» mesh(x,y,z)

Figura 8-4

La gráfica no presenta problemas en un entorno de (0,0). Ejercicio 8-25. Sea f:R2 -----> R una función definida por: 2 2 (-1 + x) yf(x,y)= [--------------] 2 2 (-1 + x) + y Hallar Limit f(x,y) (x,y)->(1,0) » maple('limit(limit(y^2*(x-1)^2/(y^2+(x-1)^2),x=0),y=0)') ans = 0 » maple('limit(limit(y^2*(x-1)^2/(y^2+(x-1)^2),y=0),x=0)')

Page 244: Matlab Para Ingenieros y Cientificos

ans = 0 » maple('limit((m*x)^2*(x-1)^2/((m*x)^2+(x-1)^2),x=0)') ans = 0 » maple('limit((m*x)*(x-1)^2/((m*x)+(x-1)^2),x=0)') ans = 0 Vemos que los límites iterados y direccionales coinciden. Calculamos acontinuación el límite en coordenadas polares » maple('limit(limit((r^2*sin(a)^2)*(r*cos(a)-1)^2/((r^2*sin(a)^2)+ (r*cos(a)-1)^2),r=1), a=0)') ans = 0 El límite vale cero en el punto (1,0). En la figura 8-5 se grafica la superficie, y seobserva la tendencia a 0 en un entorno de (1,0) » [x,y]=meshgrid(0:0.05:2,-2:0.05:2);» z=y.^2.*(x-1).^2./(y.^2+(x-1).^2);» mesh(x,y,z),view([-23,30])

Figura 8-5

Page 245: Matlab Para Ingenieros y Cientificos

CONTINUIDAD EN VARIAS VARIABLES n m Dada la función f:R --->R, se dice que es continua en el punto de coordenadas(a1, a2,...,an), si se cumple: Limit f(x1,x2,.......,xn) = f(a1,a2,....,an)x1->a1, x2->a2,..., xn->an Ejercicio 8-26. Sea f:R2 -----> R una función definida por: 3 3 x + yf(x,y) =-------- si(x,y)¹(0,0) y f(x,y)=0 si (x,y)=(0,0) 2 2 x + y Estudiar su continuidad El único punto problemático es el origen. Vamos a hacer el análisis de lacontinuidad en el origen. Para ello calculamos el límite de la función en el origen. » maple('limit(limit((x^3+y^3)/(x^2+y^2),x=0),y=0)') ans = 0 » maple('limit(limit((x^3+y^3)/(x^2+y^2),y=0),x=0)') ans = 0 » maple('limit((x^3+(m*x)^3)/(x^2+(m*x)^2),x=0)')ans = 0 Vemos que los límites iterados y direccionales coinciden, con lo que intentamoscalcular el límite por paso a coordenadas polares.

Page 246: Matlab Para Ingenieros y Cientificos

» maple('limit(limit(((r*cos(a))^3+(r*sin(a))^3)/((r*cos(a))^2+(r*sin(a))^2), r=0),a=0)') ans = 0 Vemos que el límite en (0,0) coincide con f(0,0), luego la función es continua en(0,0), y consecuentemente lo es en todo el plano. Ejercicio 8-27. Sea f:R2 -----> R una función definida por: f(x,y) = (x^2+2y) si (x,y)¹(1,2) y f(1,2)=0 Estudiar su continuidad en el punto (1,2) » maple('limit(limit((x^2+2*y),x=1),y=2)') ans = 5 » maple('limit(limit((x^2+2*y),y=2),x=1)') ans = 5 Vemos que el límite en (1,2) de existir ha de ser 5. Pero la función en el punto(1,2) vale 0. Luego la función no es continua en el punto (1,2). Ejercicio 8-28. Sea f:R2 -----> R una función definida por: (1 - Cos[x]) Sin[y]f(x,y) = ------------------- si (x,y)¹(0,0) y f(0,0)=0 3 3 x + y Estudiar su continuidad en el punto (0,0)

Page 247: Matlab Para Ingenieros y Cientificos

» maple('limit(limit((1-cos(x))*sin(y)/(x^3+y^3),x=0),y=0)') ans = 0 » maple('limit(limit((1-cos(x))*sin(y)/(x^3+y^3),y=0),x=0)') ans = 0» maple('limit((1-cos(x))*sin(m*x)/(x^3+(m*x)^3),x=0)') ans = 1/2*m/(1+m^3) Vemos que el límite en (0,0) no existe, pues hay límites direccionales distintospara direcciones distintas. Luego la función no es continua en (0,0). En el resto de lospuntos del plano sí lo es.

Page 248: Matlab Para Ingenieros y Cientificos

Capítulo 9

SERIES NUMÉRICAS Y SERIES DE POTENCIAS

En este capítulo se muestran las amplias posibilidades de tratamiento de las series numéricasque ofrece Matlab. Se tratan los criterios clásicos del análisis de la convergencia y se ve la forma tansencilla de sumación de series convergentes que aporta el programa. También se presenta la aplicación al análisis del radio e intervalo de convergencia de lasseries de potencias. SERIES NUMÉRICAS. CRITERIOS DE CONVERGENCIA. Dentro de las series numéricas distinguiremos entre series de términos no negativos y seriesde términos alternados. Se presentarán en primer lugar algunos ejemplos de los criterios másclásicos para determinar el carácter convergente o divergente de una serie de términos no negativos.Posteriormente se presentarán ejemplos que ilustren los criterios más típicos del análisis del carácterde las series alternadas. SERIES NUMÉRICAS DE TÉRMINOS NO NEGATIVOS Entre los criterios más comunes tenemos el criterio del cociente o criterio de D’Alembert,que dice lo siguiente: ¥ å a(n) es convergente si Limit [ a(n+1)/a(n) ] < 1n=1 n->¥ ¥ å a(n) es divergente si Limit [ a(n+1)/a(n) ] > 1n=1 n->¥ En caso de que el límite sea 1, no se puede asegurar nada acerca del sentido de la

Page 249: Matlab Para Ingenieros y Cientificos

convergencia de la serie. Otro criterio muy utilizado es el criterio de la raíz o criterio de Cauchy, que dice losiguiente: ¥ 1/n å a(n) es convergente si Limit [ a(n) ] < 1n=1 n->¥ ¥ 1/n å a(n) es divergente si Limit [ a(n) ] > 1n=1 n->¥ En caso de que el límite sea 1, no se puede asegurar nada acerca del sentido de laconvergencia de la serie. En caso de obtener límite 1 en los criterios del cociente y de la raíz, suele utilizarse elcriterio de Raabe o Duhamel, que dice lo siguiente: ¥ å a(n) es convergente si Limit [n[1 - a(n+1)/a(n)] ] > 1n=1 n->¥ ¥ å a(n) es divergente si Limit [ n[1 - a(n+1)/a(n)] ] < 1n=1 n->¥ En caso de que el límite sea 1, no se puede asegurar nada acerca del sentido de laconvergencia de la serie. Otro criterio útil es el que asegura que las series: ¥ ¥ n n å a(n) y å [2 a(2 ) ] tienen el mismo carácter. n=1 n=1 También se pueden utilizar los criterios de mayoración de Gauss, comparación de segundaespecie, comparación con la serie armónica y otros. Todos ellos pueden aplicarse con Matlab deforma sencilla. Veremos a continuación algunos ejemplos. Ejercicio 9-1. Estudiar la convergencia y hallar la suma, si es posible, para la siguiente serie: ¥ 1 + n å -----------------

Page 250: Matlab Para Ingenieros y Cientificos

n=1 n (2 + n) (3 + n)

Vamos a aplicar el criterio del cociente. » maple('a:=n -> (n+1)/(n*(n+2)*(n+3)):limit(a(n+1)/a(n), n=infinity);') ans = 1 Vemos que el límite es 1, con lo que no sabemos nada respecto de la convergencia.Aplicaremos el criterio de Raabe » maple('a:=n -> (n+1)/(n*(n+2)*(n+3)):limit(n*(1-a(n+1)/a(n)),n=infinity);') ans = 2 Como el límite obtenido es mayor que 1, la serie converge y será sumable » maple('sum(a(n),n=1..+infinity)') ans = 17/36

Existe en Matlab el comando symsum, que sirve para sumar series, pero es menos fuerte queel comando maple(‘sum’). La sintaxis de ambos es: symsum(S,'v',a,b) Suma la serie S, para la variable v variando entre a y b maple(‘sum(S,v=a..b)’) Suma la serie S, para la variable v variando entre a y b Ejercicio 9-2. Estudiar la convergencia y hallar la suma, si es posible, para las siguientesseries: n n

Page 251: Matlab Para Ingenieros y Cientificos

¥ n ¥ n ¥ n å ----- å ----- å ------ n=1 n n=1 n! n=1 n 2 3 n! Aplicamos el criterio del cociente para la primera serie» maple('a:=n -> n/2^n: limit(a(n+1)/a(n), n=infinity)') ans = 1/2 El límite es menor que 1, con lo que la serie converge. Vamos a hallar su suma » maple('sum(a(n),n=1..+infinity)') ans = 2

Aplicamos el criterio del cociente para la segunda serie » maple('a:=n -> n^n/n!: limit(a(n+1)/a(n), n=infinity)') ans = exp(1) Como el límite es mayor que 1 la serie diverge y no es sumable. Aplicamos el criterio del cociente para la tercera serie » maple('a:=n -> n^n/((n!)*(3^n)): limit(a(n+1)/a(n), n=infinity)') ans = 1/3*exp(1) El límite es menor que 1, con lo que la serie resulta ser convergente. Al intentar hallar susuma exacta, vemos que Matlab no resuelve el problema.

Page 252: Matlab Para Ingenieros y Cientificos

» maple('sum(a(n),n=1..+infinity)') ans = sum(n^n/n!/(3^n),n = 1 .. inf)

Ejercicio 9-3. Estudiar la convergencia y hallar la suma, si es posible, para las siguientesseries: ¥ 3 + 2 n ¥ n ¥ (n + p)! å ------------ å --- å ---------- p=parámetron=1 n n=1 n n=1 n 7 n (1 + n) p p n! p! Aplicamos el criterio del cociente para la primera serie » maple('a:=n -> (2*n+3)/(n*(n+1)*(7^n)): limit(a(n+1)/a(n), n=infinity)') ans = 1/7 Como el límite es menor que 1, la serie es convergente, y por tanto, sumable. Vamos acalcular su suma. Matlab intenta devolver el resultado, por complicado que este sea. En muchasocasiones el resultado se ofrece dependiendo de determinadas funciones del programa » maple('sum(a(n),n=1..+infinity)') ans = 16/3+30*log(6/7)-13/49*hypergeom([2, 2],[3],1/7)

» maple('evalf(")')

Page 253: Matlab Para Ingenieros y Cientificos

ans = .3833972806909634 Ahora aplicamos el criterio del cociente para la segunda serie » maple('a:=n -> n/p^n');» maple('limit(a(n+1)/a(n), n=infinity)') ans = 1/p Luego si p > 1 la serie converge, si p<1 la serie diverge y si p=1, obtenemos la serie detérmino general n, que diverge. Cuando p es mayor que 1, hallamos la suma de la serie » maple('sum(a(n),n=1..+infinity)')ans = p/(-1+p)^2

Vamos a aplicar el criterio del cociente a la tercera serie. » maple('a:=n ->(n+p)!/((p!)*(n!)*(p^n))');» maple('limit(a(n+1)/a(n), n=infinity)') ans = limit((n+1+p)!/(n+1)!/(p^(n+1))/(n+p)!*n!*p^n,n = inf) Se observa que Matlab no resuelve este límite, por lo que lo intentaremos con el criterio deRaabe. » maple('limit(n*(1-a(n+1)/a(n)),n=infinity)') ans = limit(n*(1-(n+1+p)!/(n+1)!/(p^(n+1))/(n+p)!*n!*p^n),n = inf) El criterio de Raabe tampoco resulta ser eficiente. Sin embargo podemos intentar simplificar

Page 254: Matlab Para Ingenieros y Cientificos

la expresión problema antes de hallar su límite. » maple('limit(simplify(a(n+1)/a(n)), n=infinity)') ans = 1/p Luego si p > 1 la serie converge, si p<1 la serie diverge y si p=1, obtenemos la serie detérmino general n+1, que diverge. Ejercicio 9-4. Estudiar la convergencia y hallar la suma, si es posible, para las siguientesseries: 2 ¥ 1 -n ¥ 1 + n 1 + n 1 + n -n å[(1 + -)] å [-(-----) + (-----) ] n=1 n n=1 n n Para la primera serie aplicamos el criterio del cociente: » maple('a:=n ->(1+1/n)^(-n^2)');» maple('simplify(limit(a(n+1)/a(n), n=infinity))') ans = exp(-1) Como el límite es menor que 1, la serie converge y es sumable. Si intentamos hacer la sumacon los comandos sum o sumsum no obtenemos resultado exacto. Matlab no puede sumar esta serie. » maple('evalf(sum(a(n),n=1..+infinity))') ans = .8174194332978335 Sin embargo, sí se puede hallar un resultado aproximado con la función evalf

Page 255: Matlab Para Ingenieros y Cientificos

Vamos a aplicar el criterio del cociente a la segunda serie » maple('a:=n ->(((n+1)/n)^(n+1)-(n+1)/n)^(-n)');» maple('simplify(limit(a(n+1)/a(n), n=infinity))') ans = 1/(exp(1)-1) Como el límite es menor que 1, la serie converge y es sumable. La suma exacta tampocopuede obtenerse con Matlab, pero sí se puede obtener la suma aproximmada con el comando evalf. » maple('evalf(sum(a(n),n=1..+infinity))') ans = 1.174585575087587

Ejercicio 9-5. Estudiar la convergencia y hallar la suma, si es posible, para las siguientesseries: 2 2 ¥ 5 ¥ 1/n n ¥ 1 + 2n + n n å ---- å [n - 1] å [(----------)] n=1 n n=1 n=1 2 2 n + n -1 Para la primera serie aplicamos el criterio de la raíz » maple('a:=n ->5/(2^n)');» maple('limit((a(n))^(1/n), n=infinity)') ans = 1/2 Como el límite es menor que 1, la serie es convergente y sumable. » maple('sum(a(n),n=1..+infinity)') ans =

Page 256: Matlab Para Ingenieros y Cientificos

5

Ahora aplicamos el criterio de la raíz a la segunda serie » maple('a:=n ->(n^(1/n)-1)^n');» maple('limit(simplify((a(n))^(1/n)), n=infinity)') ans = 0 Como el límite es menor que 1, la serie es convergente y sumable, pero las sumas exacta yaproximada no son calculables. Ahora aplicamos el criterio de la raíz a la tercera serie » maple('a:=n->((n^2+2*n+1)/(n^2+n-1))^(n^2)');» maple('simplify(limit(simplify((a(n))^(1/n)), n=infinity))') ans = exp(1) Como el límite es mayor que 1, la serie diverge y no es sumable. Ejercicio 9-6. Estudiar la convergencia y hallar la suma, si es posible, para la siguiente serie: ¥ n q å Tang (p + ----)n=1 n Aplicamos el criterio de la raíz » maple('a:=n->(tan(p+q/n))^n');» simple(maple('limit(simplify((a(n))^(1/n)), n=infinity)')) ans = sin(p)/cos(p)

Page 257: Matlab Para Ingenieros y Cientificos

Luego para valores de p tales que tan(p)<1 la serie converge. Dichos valores cumplen0<p<Pi/4. Y para valores de p tales que Tan(p)>1 la serie diverge. Dichos valores cumplen Pi/4<p<Pi/2. Matlab no ofrece el resultado exacto ni aproximado de la suma de esta serie. Ejercicio 9-7. Estudiar la convergencia y hallar la suma, si es posible, para las siguientesseries: ¥ 1 ¥ 1 å -------- å ------------ p=parámetro p>0 n=1 n Log(n) n=1 p n [Log(n)] Aplicamos el criterio que asegura que las series: ¥ ¥ n n å a(n) y å [2 a(2 ) ] tienen el mismo carácter. n=1 n=1 » maple('a:=n->1/(n*log(n))');» maple('b:=(2^n)*a(2^n)');» pretty(maple('simplify(b)')) 1 --------- n log(2) Como esta serie está minorada por la armónica divergente de término general 1/n, entoncesdiverge. Y la inicial también diverge. Apliquemos ahora el mismo criterio a la segunda serie » maple('a:=n->1/(n*(log(n))^p)');» maple('b:=(2^n)*a(2^n)');» pretty(maple('simplify(b)')) (- p) (- p) n log(2) Cuando p<1, esta serie está minorada por la serie divergente armónica de término general n-p

= 1/np. Luego diverge y la inicial también. Cuando p>1, esta serie está mayorada por la serie convergente armónica de término general

Page 258: Matlab Para Ingenieros y Cientificos

n-p = 1/np. Luego converge y la inicial también. Cuando p=1, la serie se reduce a la estudiada anteriormente, es decir, diverge. Matlab no ofrece la suma de ninguna de las dos series de este problema. Ejercicio 9-8. Estudiar la convergencia y hallar la suma, si es posible, para las siguientesseries: ¥ (n+1)(n+2) ¥ 1 å ---------- å ------------ n=1 5 n=1 2 n [1 + Ön] Empezaremos estudiando la segunda serie. Intentamos aplicar los criterios del cociente,Raabe y raíz » maple('a:=n->1/(1+n^(1/2))^2');» maple('limit(a(n+1)/a(n), n=infinity)') ans = 1 » maple('limit(n*(1-a(n+1)/a(n)),n=infinity)') ans = 1 » maple('limit(simplify((a(n))^(1/n)), n=infinity)') ans = 1 Se observa que todos los límites son 1. Luego de momento no puede asegurarse nada acercade la convergencia de la serie. Aplicamos ahora el criterio de comparación de segunda especie para comparar nuestra seriecon la armónica divergente de término general 1/n » maple('limit(a(n)/(1/n),n=infinity)')

Page 259: Matlab Para Ingenieros y Cientificos

ans = 1 Como el límite es mayor que cero, la serie inicial es también divergente, y no es sumable. Analizaremos ahora la primera serie del problema, aplicando directamente el criterio decomparación de segunda especie, para comparar nuestra serie con la armónica convergente detérmino general 1/n3

» maple('a:=n->(n+1)*(n+2)/n^5');» maple('limit(a(n)/(1/(n^3)),n=infinity)') ans = 1 Como el límite es mayor que 0, la serie inicial es también convergente, y por lo tanto sumable » maple('sum(a(n),n=1..+infinity)') ans = 2*zeta(5)+1/30*pi^4+zeta(3)

Ahora intentamos aproximar el resultado. » maple('evalf(sum(a(n),n=1..+infinity))') ans = 6.522882114579747

La primera serie podría intentar resolverse por los criterios del cociente, Raabe o raíz: » maple('limit(a(n+1)/a(n), n=infinity)')

Page 260: Matlab Para Ingenieros y Cientificos

ans = 1 » maple('limit(simplify((a(n))^(1/n)), n=infinity)') ans = 1 » maple('limit(n*(1-a(n+1)/a(n)),n=infinity)') ans = 3 Los criterios de la raíz y del cociente no nos dicen nada, pero el de Raabe ya nos asegura laconvergencia (límite mayor que 1). SERIES NUMÉRICAS ALTERNADAS Consideramos ahora series numéricas que tienen términos positivos y negativos. La serie alternada åa(n) es absolutamente convergente si la serie de los módulos å|a(n)| esconvergente. Como la serie de los módulos es una serie de términos positivos ya sabemos analizarla. Por otra parte, toda serie absolutamente convergente es convergente. Aparte de lo expuesto anteriormente existen, entre otros, dos criterios clásicos que permitenanalizar el carácter de series alternadas, y que nos permitirán salir de la mayoría de los apuros conseries alternadas. El criterio de Dirichlet dice que si åa(n) tiene la sucesión de sumas parciales acotadas y{b(n)} es una sucesión decreciente que tiene por límite 0, entonces la serie åa(n)b(n) esconvergente. El criterio de Abel dice que si åa(n) es convergente y {b(n)} es una sucesión monótonaconvergente, entonces la serie åa(n)b(n) es convergente. Ejercicio 9-9. Estudiar la convergencia de la siguiente serie: 1 + n ¥ (-1)

Page 261: Matlab Para Ingenieros y Cientificos

å ----------n=1 2 1 + 2 n Se trata de una serie alternada. Vamos a considerar la serie de los módulos y a analizar sucarácter » maple('a:=n->1/(2*n^2+1)'); Aplicamos a esta serie de términos positivos el criterio de comparación de segunda especie,comparándola con la armónica convergente de término general 1/n2

» maple('limit(a(n)/(1/(n^2)),n=infinity)') ans = ½ Como el límite es mayor que cero, la serie de términos positivos considerada es convergente,luego la serie inicial es absolutamente convergente, y por lo tanto convergente. Ejercicio 9-10. Estudiar la convergencia de las siguientes series: 1 + n 1 + n ¥ (-1) n ¥ (-1) å -------------- å -----------n=1 2 n=1 n (1 + n)

1+n Haciendo a(n)=(-1) y b(n)= n/(1+n)2, tenemos que åa(n) tiene las sumas parcialesacotadas y que {b(n)} es monótona decreciente con límite 0. Aplicando el criterio de Dirichlet se concluye que la serie alternada considerada esconvergente. Para la segunda serie hacemos un razonamiento semejante. 1+n Haciendo a(n)=(-1) y b(n)= 1/n, tenemos que åa(n) tiene las sumas parciales acotadas yque {b(n)} es monótona decreciente con límite 0. Aplicando el criterio de Dirichlet se concluye que la serie alternada considerada esconvergente.

Page 262: Matlab Para Ingenieros y Cientificos

SERIES DE POTENCIAS n Dada la serie de potencias åa(n) x , el problema relevante es calcular el intervalo deconvergencia, es decir, el intervalo de variación de x para el cual la serie es absolutamenteconvergente. Los criterios más comunes a utilizar son los criterios de la raíz y del cociente, ya que paraque una serie sea absolutamente convergente la serie de los módulos (valores absolutos) ha de serconvergente, y esta serie es de términos positivos. Ejercicio 9-11. Estudiar el intervalo de convergencia de la siguiente serie de potencias: 2n ¥ (4) n å ---------(x - 3)n=0 (n + 2) Aplicamos el criterio del cociente » maple('a:=n->(4^(2*n))*((x-3)^n)/(n+2)');» maple('limit(simplify(a(n+1)/a(n)), n=infinity)') ans = 16*x-48 La serie será convergente cuando |16 (-3 + x)|<1 » [solve('16*x-48=1'),solve('16*x-48=-1')] ans = 49/16 47/16 Luego la condición |16 (-3 + x)|<1 es equivalente a la siguiente: 47/16 < x < 49/16 Ya sabemos que en el intervalo anterior la serie es convergente. Ahora falta analizar elcomportamiento de la serie en los extremos del intervalo anterior. Hacemos ahora el análisis para

Page 263: Matlab Para Ingenieros y Cientificos

x=49/16 » maple('a:=x->(4^(2*n))*((x-3)^n)/(n+2)');» maple('simplify(a(49/16))') ans = 1/(n+2) Aplicamos los criterios correspondientes a las series de términos no negativos, hastaencontrar uno que nos resuelva la convergencia. Los criterios del cociente, Raabe y raíz no resuelven el problema. Vamos a aplicar el criteriode comparación de segunda especie, comparando la serie problema con la armónica divergente detérmino general 1/n » maple('a:=n->1/(n+2)');» maple('limit(simplify((a(n))^(1/n)), n=infinity)') ans = 1 Como el límite obtenido es mayor que cero la serie es divergente. Analizamos ahora la serie problema en el extremo x=47/16 » maple('a:=x->(4^(2*n))*((x-3)^n)/(n+2)');» maple('simplify(a(47/16))') ans = (-1)^n/(n+2) Tenemos que analizar la serie alternada siguiente: n ¥ (-1) å ------n=1 n+2 n Por el criterio de Dirichlet, la serie de término general (-1) tiene sus sumas parcialesacotadas, y la sucesión de término general 1/(n+2) es decreciente hacia 0. Luego la serie alternadaconverge.

Page 264: Matlab Para Ingenieros y Cientificos

El intervalo de convergencia de la serie de potencias resulta ser [47/16, 49/16). Ejercicio 9-12. Estudiar el intervalo de convergencia de la siguiente serie de potencias: ¥ 1 2n+1 å ---------(x)n=0 n (-5) Aplicamos el criterio de la raíz » maple('a:=n->x^(2*n+1)/(-5)^n');» maple('limit(simplify(a(n+1)/a(n)), n=infinity)') ans = -1/5*x^2 La serie es absolutamente convergente cuando |-x^2/5|<1 La condición |-x^2/5|<1 es equivalente a -Sqrt(5)<x<Sqrt(5). Luego ya tenemos determinadoel posible intervalo de convergencia de la serie de potencias. Vamos a analizar ahora los extremos. » maple('a:=x->x^(2*n+1)/(-5)^n');» [maple('simplify(a(sqrt(5)))'),maple('simplify(a(-sqrt(5)))')] ans = (-1)^(-n)*5^(1/2) -(-1 ) ^ n * 5 ^ ( 1 / 2 ) Ambas series son evidentemente series alternadas divergentes. Por lo tanto el intervalo finalde convergencia de la serie de potencias será el siguiente: -Sqrt(5)<x<Sqrt(5). DESARROLLO DE FUNCIONES Y SERIES DE POTENCIAS El problema de la aproximación local de una función real de variable real en un punto,consiste en sustituir la función inicial por otra más sencilla. Lo más frecuente es el intento de sustituiruna función arbitraria f(x) por un polinomio Pn(x), llamado serie de potencias, tal que los valores def(x) y Pn(x) sean lo más próximos posible para cada valor de x. DESARROLLOS EN SERIES DE TAYLOR El teorema de Taylor permite aproximar una función f(x) por una función

Page 265: Matlab Para Ingenieros y Cientificos

polinómica en un punto x=x0, que suele denominarse desarrollo de Taylor en serie depotencias de la función f(x) en el punto x=x0. Si el desarrollo de Taylor en series depotencias de f(x) se realiza en el punto x=0, se llama desarrollo de McLaurin de lafunción f(x). El teorema de Taylor dice que si f es una función n+1 veces derivable en unintervalo que contiene al punto a, la función f puede aproximarse por la siguiente funciónpolinómica: (k) (n+1) n f (a) k f (z) n+1f(x) = å ------------ (x-a) + ----------------- (x-a) k=0 k! (n+1)! donde z es un número entre a y x. La expresión anterior es el desarrollo de Taylor de f en series de potencias en elpunto x=a. La última parte de la expresión se denomina resto, y representa una medidadel error que se comete al aproximar la función f por su desarrollo en serie de potencias. Para hallar un desarrollo en serie de Taylor deberán utilizarse los siguientescomandos de Matlab: taylor(‘f’,n) Ofrece el desarrollo de McLaurin de f, de orden n maple(‘taylor(f(x),x=a,n)’) o maple(‘series(f(x),x=a,n)’) Ofrece la expresión del desarrolo de Taylor de f, de orden n, en x=a. La segunda opción es más fuerte Veamos algunos ejercicios al respecto. Ejercicio 9-13. Obtener el desarrollo de Taylor de grado 13 de la función sh(x) en el punto x=0.Hallar también el desarrollo de Taylor de la función 1/(1+x) en el punto 0 y de grado 10. » pretty(simple(taylor('sinh(x)',13))) 3 5 7 9 11 13x + 1/6 x + 1/120 x + 1/5040 x + 1/362880 x + 1/39916800 x +O(x )

Page 266: Matlab Para Ingenieros y Cientificos

» pretty(simple(taylor('1/(1+x)',10))) 2 3 4 5 6 7 8 9 10 1 - x + x - x + x - x + x - x + x - x + O(x ) Ejercicio 9-14. Hallar el polinomio de Taylor de la función 1/(2-x) en el punto x=1 y de grado10. Hallar también el polinomio de Taylor de la función sen(x) en el punto pi/2 y de grado 8, ylo mismo para función Log(x) en el punto x=2 y de grado 5.» pretty(simple(maple('taylor(1/(2-x),x=1,10)'))) 2 10 3 4 5 6 7 8 9 5 x - 20 x + O((x - 1) ) + 50 x - 80 x + 86 x - 62 x + 29x - 8 x + x » pretty(simple(maple('taylor(sin(x),x=pi/2,8)'))) 2 4 6 81 - 1/2(x - 1/2 pi) + 1/24(x - 1/2 pi) - 1/720(x - 1/2 pi) +O((x - 1/2 pi) ) » pretty(simple(maple('taylor(log(x),x=2,5)'))) 25 2 3 4 5 log(2) + 2 x - ---- - 3/4 x + 1/6 x - 1/64 x + O((x -2) ) 12

Page 267: Matlab Para Ingenieros y Cientificos

Capítulo 10

DERIVABILIDAD Y APLICACIONES

EL CONCEPTO DE DERIVADA La derivada de una función real en un punto mide el índice instantáneo de cambio de esafunción en un entorno del punto, es decir, cómo cambia la variable dependiente como consecuenciade un pequeño cambio de la variable independiente. Geométricamente, la derivada de una función en un punto representa la pendiente de latangente a dicha función en el punto. El origen de la idea de derivada proviene precisamente delintento de trazar la recta tangente en un punto dado a una curva dada. La función f(x) definida en un entorno del punto x=a se dice derivable en a si existe: f(a+h) - f(a) Limit --------------------- = f’(a)h->0 h El valor del límite, si existe, se designa por f’(a), y recibe el nombre de derivada de lafunción f en el punto a. Si f es derivable en todos los puntos de su dominio, se dice simplemente quees derivable. La continuidad de una función es una condición necesaria para su derivabilidad y todafunción derivable es continua.Ejercicio 10-1. Estudiar la derivabilidad de la función: 1f(x) = x sen ---- si x ¹ 0 y f(x) = 0 si x = 0 x Estudiamos en primer lugar la derivabilidad en el punto x=0

Page 268: Matlab Para Ingenieros y Cientificos

» maple('limit((h*sin(1/h) - 0)/h,h=0)') ans = -1 .. 1 El límite no existe, ya que la función Sen(1/x) oscila infinitas veces entre -1 y 1 cuando x->0.De ahí la respuesta de Matlab al intento de cálculo de este límite Luego se concluye que: f(0+h) - f(0) Limit --------------------- = f’(0) no existeh->0 h Veamos lo que ocurre para un punto x=a distinto de cero » maple('f:=x->x*sin(1/x)');» maple('limit((f(a+h)-f(a))/h,h=a)') ans = 2*sin(1/2/a)-sin(1/a) Luego ya hemos hallado el valor de la derivada para cualquier punto x=a distinto de cero. Enla figura 10-1 representamos la función. » fplot('x*sin(1/x)',[-1/10,1/10])

Figura 10-1

Ejercicio 10-2. Estudiar la derivabilidad de la función: 3 x f(x) = ------- si x ¹ 0 y f(x) = 0 si x = 0 en el punto x=0 |x|

Page 269: Matlab Para Ingenieros y Cientificos

» maple('f:=x->x^3/abs(x)');» maple('limit((f(0+h)- 0)/h,h=0,left)') ans = 0 » maple('limit((f(0+h)- 0)/h,h=0,right)') ans = 0 Ya hemos comprobado que la derivada en el punto cero existe y vale cero. Al representar lafunción (figura 10-2), vemos que es derivable en todo su campo de definición. plot(f(x),x=-1/10..1/10);

Fgura 14-2 CÁLCULO DE DERIVADAS Matlab ofrece varios comandos que permiten el cálculo de derivadas. diff(‘f’, ‘x’) Halla la función derivada de f respecto a x. Si no se especifica la varible de derivación, deriva respecto de lavariable determinada por symvar diff(‘f’, ‘x’, n) Halla la función derivada enésima de f respecto a x maple(‘D(f)(x)’) Halla la función derivada de f(x) con respecto a x. maple(‘diff(f(x),x$n)’) Halla la derivada enésima de f(x) con respecto a x

Page 270: Matlab Para Ingenieros y Cientificos

maple(‘(D@@n)(f)(x)’) Halla la derivada enésima de f(x) con respecto a x maple(‘diff(expresión, variable)’) Halla la derivada de la expresión respecto de la variable maple(‘diff(expresión, variable$n)’) Halla la derivada enésima de la expresión respecto de la variable Ejercicio 10-3. Calcular la derivada respecto de x de las siguientes funciones: Log(Sen(2x)) x^tanx (4/3)Sqrt[(x^2-1)/(x^2+2)] Log[x+(x^2+1)^(1/2)] » simple(diff('log(sin(2*x))','x')) ans = 2*cos(2*x)/sin(2*x) » pretty(simple(diff('x^tanx','x'))) tanx x tanx ------------ x » pretty(simple(diff('(4/3)*sqrt((x^2-1)/(x^2+2))','x'))) x 4 ----------------------- 2 1/2 2 3/2 (x - 1) (x + 2) » pretty(simple(diff('log(x+(x^2+1)^(1/2))','x'))) 1 ------------ 2 1/2 (x + 1)

Page 271: Matlab Para Ingenieros y Cientificos

Ejercicio 10-4. Calcular la derivada enésima de las siguientes funciones: 1/x , E^(x/2) y (1+x)/(1-x) » f='1/x';» [diff(f),diff(f,2),diff(f,3),diff(f,4),diff(f,5)] ans = -1/x^2 2/x^3 -6/x^4 24/x^5 -120/x^6 Ya tenemos clara la formación de la derivada enésima, que será: n (n) (-1) n!f (x) = --------------- n+1 x » f='exp(x/2)';» [diff(f),diff(f,2),diff(f,3),diff(f,4),diff(f,5)] ans = 1/2*exp(1/2*x) 1/4*exp(1/2*x) 1/8*exp(1/2*x) 1/16*exp(1/2*x 1/32*exp(1/2*x) Luego la derivada enésima será: x/2 (n) ef (x) = ------------- n 2 » f='(1+x)/(1-x)';» [simple(diff(f)),simple(diff(f,2)),simple(diff(f,3)),simple(diff(f,4))] ans = 2/(-1+x)^2 -4/(-1+x)^3 12/(-1+x)^4 -48/(-1+x)^5

Page 272: Matlab Para Ingenieros y Cientificos

Luego la expresión de la derivada enésima será: n (n) (-1) 2 n! 2 n!f (x) = ------------------- = --------------------- n+1 n+1 (-1+x) (1-x) TANGENTES, ASÍNTOTAS, CONCAVIDAD, MÁXIMOS, MÍNIMOS, PUNTOS DEINFLEXIÓN Y CRECIMIENTO. Si f es una función para la cual existe f’(x0), entonces f’(x0) es la pendiente de la líneatangente a la función f en el punto (x0,f(x0)). La ecuación de la tangente será y-f(xo)= f’(x0) (x-x0). Las tangentes horizontales para las que x0->¥ son las asíntotas horizontales de la curvay=f(x). Su ecuación será y=f(x0), cuando x0-> ¥. Las tangentes verticales para las que f(x0)->¥ son las asíntotas verticales de la curva y=f(x).Su ecuación será x=x0, siendo x0 un valor tal que Limit f(x)= ¥.x->x0 Las asíntotas oblicuas de la curva y=f(x) en el punto x=x0 tienen la ecuación y=mx+n, dondem=Limit (y/x) y n=Limit(y-mx). x->¥ x->¥ Si f es una función para la cual existen f’(x0) y f’’(x0), entonces, si f’(x0)=0 y f’’(x0)<0, lafunción f presenta un máximo relativo en el punto (x0,f(x0)). Si f es una función para la cual existen f’(x0) y f’’(x0), entonces, si f’(x0)=0 y f’’(x0)>0, lafunción f presenta un mínimo relativo en el punto (x0,f(x0)). Si f es una función para la cual existen f’(x0), f’’(x0) y f’’’(x0), entonces, si f’(x0)=0 yf’’(x0)=0 y f’’’(x0) ¹ 0, la función f presenta un punto de inflexión en el punto (x0,f(x0)). Supuesta la existencia de f’(x), los valores de x para los cuales la función f es creciente, sonaquellos para los cuales f’(x) es mayor que cero. Supuesta la existencia de f’(x), los valores de x para los cuales la función f es decreciente,son aquellos para los cuales f’(x) es menor que cero. Supuesta la existencia de f’(x) y f’’(x), los valores de x para los cuales la función f escóncava, son aquellos para los cuales f’’(x) es mayor que cero. Supuesta la existencia de f’(x) y f’’(x), los valores de x para los cuales la función f es

Page 273: Matlab Para Ingenieros y Cientificos

convexa, son aquellos para los cuales f’’(x) es menor que cero. Ejercicio 10-5. Encontrar la ecuación de la tangente a la curva : 3 2f(x) = 2x + 3x - 12x + 7 cuando x=-1 Encontrar también los valores de x para los que las tangentes a la curva: 2 x - x - 4g(x) = -------------- son horizontales y verticales. Hallar sus asíntotas. x - 1 » f='2*x^3+3*x^2-12*x+7';» g=diff(f) g = 6*x^2+6*x-12 » subs(g,-1) ans = -12 » subs(f,-1) ans = 20 Hemos visto que la pendiente de la recta tangente en el punto x = -1 es -12, y que la funciónen x = -1 vale 20, luego la ecuación de la tangente a la curva en el punto (-1,20) será: y - 20 = -12 (x - (-1)) Realizamos la representación gráfica de la curva y su tangente sobre los mismos ejes (figura10-3) » fplot('[2*x^3+3*x^2-12*x+7, 20-12*(x - (-1))]',[-4,4])

Page 274: Matlab Para Ingenieros y Cientificos

Figura 10-3

Para calcular las tangentes horizontales a la curva y=f(x) en x=x0, hallamos los valores x0que anulen la pendiente de la tangente (f’(x0)=0). Su ecuación será por tanto y= f(x0). Para calcular las tangentes verticales a la curva y=f(x) en x=x0, hallamos los valores x0 quehagan infinita la pendiente de la tangente (f’(x0)= ¥). Su ecuación será por tanto x = x0 » g='(x^2-x+4)/(x-1)'» solve(diff(g)) ans = [ 3][-1] » subs(g,3) ans = 5 » subs(g,-1) ans = -3 Las dos tangentes horizontales tendrán de ecuaciones: y = g’[-1] (x+1) - 3 , o sea, y = -3 y = g’[3] (x - 3) +5 , o sea, y= 5 Las tangentes horizontales no son asíntotas porque los valores correspondientes de x0 sonfinitos (son -1 y 3). Analizemos ahora las tangentes verticales. Para ello calculamos los valores de x que hacen

Page 275: Matlab Para Ingenieros y Cientificos

g’(x) infinito (valores que anulan el denominador de g’ sin anular a la vez el numerador). » solve('x-1') ans = 1 Por lo tanto, la tangente vertical tendrá de ecuación x=1. Si para x=1, el valor de g(x) es infinito, la tangente vertical será una asíntota vertical. subs(g,1) Error, division by zero Efectivamente, la recta x=1 es una asíntota vertical. Como Limit g(x) = ¥ , no existen asíntotas horizontales. x->¥ Veamos ahora si hay asíntotas oblicuas » maple('limit(((x^2-x+4)/(x-1))/x,x=infinity)') ans = 1 » maple('limit((x^2-x+4)/(x-1) - x,x=infinity)') ans = 0 Luego existe la asíntota obícua y= x. A continuación representamos la curva con sus asíntotas y tangentes. Para ello representamos en el mismo gráfico (figura 10-4) la curva cuya ecuación es g(x)=(x^2-x+4)/(x-1), las tangentes horizontales de ecuaciones a(x)= -3 y b(x)=5, la asíntota oblícua deecuación c(x)=x y las asíntotas horizontales y verticales (que las representa por defecto el comandoplot).

Page 276: Matlab Para Ingenieros y Cientificos

» fplot('[(x^2-x+4)/(x-1),-3,5,x]',[-10,10,-20,20])

Figura 10-4 Ejercicio 10-6. Hallar las asíntotas, máximos ,mínimos, puntos de inflexón, intervalos decrecimiento y decrecimiento e intervalos de concavidad y convexidad para la función: 3 xf(x) = ----------- 2 x - 1 » f='x^3/(x^2-1)' f = x^3/(x^2-1) » maple('limit(x^3/(x^2-1),x=infinity)') ans = inf Por lo tanto, no hay asíntotas horizontales. Para ver si las hay verticales, analicemos losvalores de x que hacen y infinito » solve('x^2-1') ans = [ 1][-1]

Page 277: Matlab Para Ingenieros y Cientificos

Las asíntotas verticales serán las rectas x=1 y x=-1. Veamos ahora si existen asíntotasoblicuas » maple('limit(x^3/(x^2-1)/x,x=infinity)') ans = 1 » maple('limit(x^3/(x^2-1)-x,x=infinity)') ans = 0 La recta y = x es la asíntota oblicua. Ahora se analizarán los máximos y mínimos, puntos deinflexión e intervalos de crecimiento y concavidad. » solve(diff(f)) ans = [ 0][ 0][ 3^(1/2)][-3^(1/2)] La primera derivada se anula en los puntos de abcisa x=0, x=Sqrt[3] y x=-Sqrt[3]. Estospuntos son los candidatos a máximos y mínimos. Para corroborar si son máximos o mínimos hallamosel valor de la segunda derivada en esos puntos. » [numeric(subs(diff(f,2),0)),numeric(subs(diff(f,2),sqrt(3))), numeric(subs(diff(f,2),-sqrt(3)))] ans = 0 2.5981 -2.5981 Por lo tanto, en el punto de abcisa x= -Sqrt[3] hay un máximo y en el punto de abcisa yx=Sqrt[3] hay un mínimo. En x=0 no sabemos nada. » [numeric(subs(f,sqrt(3))),numeric(subs(f,-sqrt(3)))]

Page 278: Matlab Para Ingenieros y Cientificos

ans = 2.5981 -2.5981 Por lo tanto el punto máximo es (-Sqrt[3], -2.5981) y el punto mínimo es (Sqrt[3], 2.5981) Vamos a analizar ahora los puntos de inflexión. » solve(diff(f,2)) ans = [ 0][ i*3^(1/2)][-i*3^(1/2)] El único punto de inflexión posible, se presenta en x=0, y como f(0)=0, el punto de inflexiónposible es (0,0) » subs(diff(f,3),0) ans = -6 Como la tercera derivada en x=0 no se anula, el origen es realmente un punto de inflexión. » pretty(simple(diff(f))) 2 2 x (x - 3) ------------ 2 2 (x - 1) La curva será creciente cuando y’>0, es decir , en los intervalos definidos por (-¥,-Ö3) y(Ö3,¥). La curva será decreciente cuando y’<0, es decir, en los intervalos(-Ö3,-1), (-1,0), (0,1) y (1, Ö3). » pretty(simple(diff(f,2))) 2

Page 279: Matlab Para Ingenieros y Cientificos

x (x + 3) 2 ------------ 2 3 (x - 1) La curva será cóncava cuando y’’>0, es decir, en los intervalos (-1,0) y (1, ¥). La curva será convexa cuando y’’<0, es decir, en los intervalos (0,1) y (- ¥,-1). La curva tiene tangentes horizontales en los tres puntos que anulan la primera derivada. Lasecuaciones de las tangentes horizontales son y=0, y=2.5981 e y=-2.5981. La curva presenta tangentes verticales en los puntos que hacen infinita la primera derivada.Dichos puntos son x=1 y x=-1. Por lo tanto las tangentes verticales coinciden con las dos asíntotasverticales. A continuación representamos la curva junto con sus asíntotas (obsérvese la figura 10-5) » fplot('[x^3/(x^2-1),x]',[-5,5,-5,5])

Figura 10-5

También podemos representar la curva, sus asíntotas y sus tangentes horizontales y verticalesen el mismo gráfico (figura 10-6) » fplot('[x^3/(x^2-1),x,2.5981,-2.5981]',[-5,5,-5,5])

Figura 10-6

Page 280: Matlab Para Ingenieros y Cientificos

APLICACIONES DE MÁXIMOS Y MÍNIMOS La teoría de máximos y mínimos es aplicable a problemas prácticos que se traducenrazonadamente en el planteamiento de funciones a maximizar o minimizar, cuyo resultado esinterpretable en términos aplicados. Vamos a ver algún ejemplo. Ejercicio 10-7. Descomponer el número positivo a en dos sumandos, tales que la suma de suscubos sea mínima. Sea x uno de los sumandos. El otro será a-x. Se pide que la suma 3 3x + (a-x) sea mínima » f='x^3+(a-x)^3' f = x^3+(a-x)^3 » solve(diff(f,'x')) ans = 1/2*a El posible máximo o mínimo se encuentra en x=a/2. Utilizamos la segunda derivada para verque efectivamente se trata de un mínimo » subs(diff(f,'x',2),'a/2') ans = 3*a Como a>0 (por hipótesis), 4a>0, lo que asegura la existencia de mínimo para x=a/2. Los números pedidos serán x=a/2 y a-x=a-a/2=a/2. O sea, que cuando los dos sumandosson iguales se obtiene el mínimo pedido. Ejercicio 10-8. Se quiere comprar un terreno rectangular de 1600 metros cuadrados desuperficie y posteriormente vallarlo. Sabiendo que la valla cuesta 200 pesetas por metro ¿Quédimensiones deberá tener el terreno a fin de que su cercado sea lo más económico posible?.

Page 281: Matlab Para Ingenieros y Cientificos

Si la superficie es de 1.600 metros cuadrados y una de sus dimensiones, desconocida, es x, laotra será 1.600/x. El perímetro del rectángulo será p(x)=2x+2(1600/x), y el coste será f(x)=200p(x). » f='200*(2*x+2*(1600/x))' f = 200*(2*x+2*(1600/x)) Esta será la función a minimizar » solve(diff(f)) ans = [ 40][-40] Los posibles máximos y mínimos se presentan para x=-40 y para x=40. Usamos la segundaderivada para diferenciarlos » [subs(diff(f,2),40), subs(diff(f,2),-40)] ans = 20 -20 x=40 es un mínimo y x=-40 es un máximo. Luego uno de los lados del terreno rectangularpedido mide 40 metros, y el otro medirá 1.600/40 =40 metros. Luego el rectángulo problema resultaser un cuadrado de 40 metros de lado. DERIVADAS PARCIALES Como ya sabemos, Matlab deriva funciones con el comando diff, pero tambiénconocemos la existencia del operador diferenciación D, que calcula derivadas de funciones,así como derivadas parciales para funciones que dependen de más de una variable. Si se define una función de una variable en la forma ya conocida maple(‘f:=x->...........), para calcular su derivada respecto de la única variable x, podemos utilizar elcomando maple(‘D(f)’). Si se quiere el valor de la derivada en el punto de abcisa x=x0 , esdecir la pendiente de la función en el punto correspondiente a dicha abcisa, escribimos

Page 282: Matlab Para Ingenieros y Cientificos

maple(‘D(f)(x0)’) También sabemos que para calcular la derivada de orden n de la función f respectode x, podemos utilizar, aparte del comando diff, los operadores @ y D escribiendomaple(‘(D@@n)(f)’). Si una función depende de varias variables, que para simplificar reduciremos a dos,x e y, podemos escribirla como maple(‘g:=(x,y)->..........). En este caso, las derivadasparciales posibles de la función g se calcularán del siguiente modo: g’x : maple(‘D[1](g)’); g’y : maple(‘D[2](g)’); g’’xx : maple(‘D[1,1](g)’); g”xy : maple(‘D[1,2](g)’); g”yy : maple(‘D[2,2](g)’); giV

xxyy : maple(‘D[1,1,2,2](g)’); Esta notación es generalizable a n variables. Ejercicio 10-9. Dada la función f(x,y)=sin(xy)+cos(xy^2), calcular: ¶ f/¶ x, ¶ f/¶y, ¶ 2 f/¶x2, ¶ 2 f/¶y2, ¶ 2 f/¶x¶y, ¶ 2 f/¶y¶x y ¶ 4 f/¶ 2x¶ 2y » maple('g:=(x,y)->sin(x*y)+cos(x*y^2)'); » pretty(maple('D[1](g)')) 2 2 (x,y) -> cos(x y) y - sin(x y ) y » pretty(maple('D[2](g)')) 2 (x,y) -> cos(x y) x - 2 sin(x y ) x y » pretty(maple('D[1,1](g)')) 2 2 4

Page 283: Matlab Para Ingenieros y Cientificos

(x,y) -> - sin(x y) y - cos(x y ) y » pretty(maple('D[2,2](g)')) 2 2 2 2 2 (x,y) -> - sin(x y) x - 4 cos(x y ) x y - 2 sin(x y) x » pretty(maple('D[1,2](g)')) 2 3 2 (x,y) -> - sin(x y) y x + cos(x y) - 2 cos(x y ) y x - 2 sin(xy ) y » pretty(maple('D[2,1](g)')) 2 3 2 (x,y) -> - sin(x y) y x + cos(x y) - 2 cos(x y ) y x - 2 sin(xy ) y » pretty(maple('D[1,1,2,2](g)')) 2 2 2 6 2 (x,y) -> sin(x y) y x - 4 cos(x y) y x - 2 sin(x y) + 4 cos(xy ) y x 2 4 2 2 + 18 sin(x y ) y x - 12 cos(x y ) y DERIVACIÓN IMPLÍCITA El operador diferenciador D permite realizar la derivación implícita. Ejercicio 10-10. Calcular la derivada implícita de y respecto de x en la siguiente ecuación: x3 + 3x2 y3 + 5xy + 6y3 = 8 Usaremos en primer lugar el operador D, para diferenciar la ecuación. » pretty(maple('D(x^3+3*x^2*y^3+5*x*y+6*y^3=8)'))

Page 284: Matlab Para Ingenieros y Cientificos

2 3 2 2 2 3 D(x) x + 6 D(x) x y + 9 x D(y) y + 5 D(x) y + 5 x D(y) + 18D(y) y = 0 Ahora reemplazamos D(x) por 1 y despejamos D(y): » pretty(maple('subs(D(x)=1,D(x^3+3*x^2*y^3+5*x*y+6*y^3=8))')) 2 3 2 2 2 3 x + 6 x y + 9 x D(y) y + 5 y + 5 x D(y) + 18 D(y) y = 0 » pretty(maple('solve(3*x^2+6*x*y^3+9*x^2*D(y)*y^2+5*y+5*x*D(y)+ 18*D(y)*y^2=0,D(y))')) 2 3 3 x + 6 x y + 5 y - ---------------------- 2 2 2 9 x y + 5 x + 18 y Ejercicio 10-11. Hallar la tangente a la elipse 2x2 -2xy+y2 +x+2y+1 = 0 en el punto de abcisax=-3/2 La pendiente de la tangente vine determinada por y’(-3/2). » pretty(maple('subs(D(x)=1,D(2*x^2 -2*x*y+y^2+x+2*y+1=0 ))')) 4 x - 2 y - 2 x D(y) + 2 D(y) y + 1 + 2 D(y) = 0 » pretty(maple('solve(4*x-2*y-2*x*D(y)+2*D(y)*y+1+2*D(y) = 0,D(y))')) 4 x - 2 y + 1 - ------------------ - 2 x + 2 y + 2 Ahora se trata de sustituir en la expresión anterior el punto (x,y) de la curvaproblema con abcisa x=-3/2, para lo cual es necesario calcular los valores de y para x=-3/2. » maple('solve(subs(x=-3/2,2*x^2-2*x*y+y^2+x+2*y+1=0),y)') ans =

Page 285: Matlab Para Ingenieros y Cientificos

-1, -4 Los puntos de tangencia serán (-3/2,-1) y (-3/2,-4). Calculemos ahora laspendientes de las dos posibles tangentes. » maple('subs(x=-3/2,y=-1,-(4*x-2*y+1)/(-2*x+2*y+2))') ans = 1 » maple('subs(x=-3/2,y=-4,-(4*x-2*y+1)/(-2*x+2*y+2))') ans = 1 Las ecuaciones de las dos tangentes a la curva para x=-3/2 serán: y+1 = x+3/2 e y+4 = x+3/2 Vamos a realizar una representación gráfica de la curva, sus tangentes y los ejes decoordenadas (ver figura 10-7). Como la curva viene dada en coordenadas implícitas, laparametrizamos. Para éllo, intentamos completar a cuadrados su ecuación, con la finalidad de buscaruna parametrización trigonométrica que elimine las posibles potencias fraccionarias resultantes alintentar despejar una variable. Matlab dispone del comando maple(‘completesquare’), implementado en la librería student,que permite completar a cuadrados una expresión respecto de una variable. A continuacióncompletamos a cuadrados la ecuación de la curva respecto de la variable y como sigue: » maple('with(student)');» pretty(maple('completesquare(2*x^2-2*x*y+y^2+x+2*y+1,y)')) 2 2 (y - x + 1) + x + 3 x Ahora es trivial despejar la variable y, para obtener la ecuación siguiente: y = x -1 + sqrt(-x^2 - 3x). Pero tenemos una expresión dentro de una raíz cuadrada, que se completa a cuadradoscomo sigue: » pretty(maple('completesquare(-x^2-3*x,x)'))

Page 286: Matlab Para Ingenieros y Cientificos

2 - (x + 3/2) + 9/4 Obtenemos la ecuación de la curva y = x -1 + sqrt(-(x+3/2)^2 +9/4), que se parametrizatrivialmente poniendo x+3/2 = 3/2 sen(t), con lo que queda:x = 3/2*(sin(t)-1), y = 3/2*(sin(t)+cos(t))-5/2. Ya podemos realizar la gráfica de la curva, las asíntotas y los ejes coordenados (el eje OY serepresenta en paramétricas como x=0, y=t). » fplot('[x+3/2-1,x+3/2-4,0]',[-4,2,-6,2]);» hold on;» t=(0:.1:2*pi);» x=3/2*(sin(t)-1);» y=3/2*(sin(t)+cos(t))-5/2;» plot(x,y);» t=(-6:.1:2);» x=zeros(size(t));» y=t;» plot(x,y)

Figura 10-7

Page 287: Matlab Para Ingenieros y Cientificos

Capítulo 11

DERIVABILIDAD EN VARIAS VARIABLES. APLICACIONES

En este capítulo se expone la forma de tratar la derivabilidad en el campo de las variasvariables, usando las facilidades que ofrece Matlab en esta materia. Se abordarán, entre otros temas,la resolución de problemas de extremos y extremos condicionados.

DERIVABILIDAD EN VARIAS VARIABLES 2 Dada la función f:R ---> R, se define la derivada parcial de f con respecto a la variable x enel punto (a,b) de la siguiente forma: ¶ f f(a+h,b) - f(a,b)---- (a,b) = Limit ---------------------------¶ x h->0 h De la misma manera se define la derivada parcial de f con respecto a la variable y en el punto(a,b) de la siguiente forma: ¶ f f(a,b+h) - f(a,b)---- (a,b) = Limit --------------------¶ y h->0 h Generalizando, podemos definir la derivada parcial respecto de cualquier variable para unafunción de n variables. n Dada la función f:R ---> R, se define la derivada parcial de f con respecto a la variable xi enel punto (a1,a2,.....,an) de la siguiente forma: ¶ f f(a1,a2,.....,ai+h,....an) - f(a1,a2,....,an)---- (a1,a2,...,an) = Limit -----------------------------------------------------

Page 288: Matlab Para Ingenieros y Cientificos

¶ xi h->0 h i = 1,2,.....,n La función f es diferenciable si existen todas las derivadas parciales respecto de las xi(i=1,2,..,n) y son continuas. Toda función diferenciable es continua, y si una función no es continua no puede serdiferenciable. Se define la derivada direccional de la función f según el vector v=(v1,v2,...,vn) como elsiguiente producto escalar: ¶f ¶f ¶f(D f) v = ( -----, -----, ........,------) . (v1,v2,.......,vn) = (Ñ f) . v ¶x1 ¶x2 ¶xn ¶f ¶f ¶fÑ f = ( -----, -----, ........,------) se denomina vector gradiente de f ¶x1 ¶x2 ¶xn La derivada direccional de la función f según el vector v=(dx1,dx2,...,dxn) se denominadiferencial total de f. Su valor será: ¶f ¶f ¶fD f = ( -----dx1+ -----dx2 + ......+ -----dxn) ¶x1 ¶x2 ¶xn A continuación se definen las funciones que implementa Matlab, referentes a los conceptosexpuestos. diff(f(x,y,z,....), ‘x’) Define la derivada parcial de f respecto a x diff(f(x,y,z,....),‘x’,n) Define la derivada parcial n-ésima de f respecto a x maple(‘diff(f(x,y,z,....),x$n)’) Define la derivada parcial n-ésima de f respecto a x maple(‘diff(f(x,y,z,...),x,y,z...)’) Define la derivada parcial de f respecto a las variables x, y, z,...

Page 289: Matlab Para Ingenieros y Cientificos

maple(‘D[n](f)(x1,x2,...)’) Calcula la derivada parcial de f(x1,x2,...) con respecto a la variable de f que ocupa el lugar n (xn) maple(‘D[1](f)(x,y,z)’) Calcula la derivada parcial de f(x,y,z) respecto a x maple(‘D[1](f)(a,b,c)’) Calcula la derivada parcial de f(x,y,z) respecto a x y sustituye x por a, y por b y z por c. maple(‘D[2](f)(x,y,z)’) Calcula la derivada parcial de f(x,y,z) respecto a y maple(‘D[3](f)(x,y,z)’) Calcula la derivada parcial de f(x,y,z) respecto a z maple(‘D[n1,n2,n3,...](f)(x1,x2,x3,..)’) Calcula la derivada parcial de f respecto a la variable en la posición n1, y luego respecto de la variable en la posición n2, y luego respecto de la variable en la posición n3, ......, en este orden maple(‘D[1,2](f)(x,y)’) Calcula la derivada parcial segunda de f con respecto a x e y, por este orden. maple(‘D[1,2](f)(a,b)’) Calcula la derivada parcial segunda de f con respecto a x e y, por este orden. Después sustituye en el resultado x por a e y por b. maple(‘D(f(x1..xn))’) Calcula la diferencial total de f

Page 290: Matlab Para Ingenieros y Cientificos

Según las definiciones de las funciones anteriores podemos escribir: ¶ fdiff(f(x,y,z..),’x’) = ----- = maple(‘D[1](f)(x,y,z,..)’) = maple(‘diff(f(x,y,z),x)’) ¶ x ¶ n n)diff(f(x,y,z..),’x’,n)= ----- f =maple(‘D[1,1,....1](f)(x,y,z..)’)=maple(‘diff(f(x,y..),x$n)’) ¶x n

¶ fdiff(f(x1,x2...), ‘xj’ ) = maple(‘diff(f(x1,x2...),xj)’) = ----- maple(‘D[ j ](f)(x1,x2,...)’) ¶ xj ¶ n n)diff(f(x1,..),’xj’,n)=maple(‘diff(f(x1,...),xj$n)’)= ----- f =maple(‘D[,j, j.....j](f)(x,y,z..)’) ¶xj n ¶ ¶ ¶maple(‘diff(f(x,y,z...),x,y,z,..)’) = ----- ----- ------ ... f = maple(‘D[1,2,3..](f)(x,y,z..)’) ¶x ¶y ¶z ¶ 2 fmaple(‘diff(f(x,y),x,y)’) = ----------- = maple(‘D[1,2](f)(x,y)’) ¶ x ¶ y ¶ (k) fmaple(‘diff(f(x1,...),xn,xm,xp)’)= ------------------ = maple(‘D[n,m,p,...](f)(x1,x2,...)’) ¶xn ¶xm ¶xp .... (k=nº de variables) Ejercicio 11-1. Dada la función real de variable real, definida por: x yf(x,y) = ------------- si x2 + y2 ¹ 0 y f(x,y) = 0 si x2 + y2 = 0 x2 + y2

calcular las derivales parciales de f en el origen. Estudiar la diferenciabilidad » maple('f:=(x,y)->(x*y)/(x^2+y^2)');

Page 291: Matlab Para Ingenieros y Cientificos

Para hallar ¶f/¶x y ¶f/¶y en el punto (0,0), aplicamos directamente la definición de derivadaparcial en un punto » maple('(f(h,0)-0)/h') ans = 0 » maple('(f(0,k)-0)/k')ans = 0 Los límites de las dos expresiones anteriores cuando h->0 y k->0 respectivamente, seránambos cero. Vemos que las dos derivadas parciales en el origen son iguales y valen cero. Pero la funciónno es diferenciable en el origen, porque no es continua en (0,0), ya que no existe su límite cuando(x,y)->(0,0) » maple('limit((m*x)^2/(x^2+(m*x)^2),x=0)') ans = m^2/(1+m^2) El límite no existe en (0,0) porque al considerar los límites direccionales respecto de lafamilia de rectas y=mx, el resultado depende del parámetro m. Ejercicio 11-2. Estudiar la diferenciabilidad de la función: 2 x yf(x,y) = ------------- si (x,y) ¹ 0 y f(0,0) = 0 Sqrt[x2 + y2 ] La función será diferenciable si admite derivadas parciales continuas en todo punto. Vamos aconsiderar cualquier punto distinto del origen y a calcular la derivada parcial respecto a la variablex » maple('f:=(x,y)->(2*x*y)/(x^2+y^2)^(1/2)'); » pretty(simple(maple('D[1](f)(x,y)'))) 3

Page 292: Matlab Para Ingenieros y Cientificos

y 2 -------------- 2 2 3/2 (x + y ) Ahora vamos a ver si esta derivada parcial es continua en el origen » maple('limit(2*(m*x)^3/(x^2+(m*x)^2)^(3/2),x=0)') ans = 2*m^3/(1+m^2)^(3/2) El límite de la derivada parcial no existe en (0,0) porque al considerar los límitesdireccionales respecto de la familia de rectas y=mx, el resultado depende de m. Luego la derivadaparcial no es continua en el origen. Se concluye que la función no es diferenciable. Sin embargo la función sí es continua, ya que el único punto problemático es el origen, y enél, el límite de la función vale 0 = f(0,0) » maple('limit(limit(f(x,y),x=0),y=0)') ans = 0» maple('limit(limit(f(x,y),y=0),x=0)') ans = 0 » maple('limit(f(x,(m*x)),x=0)') ans = 0 » maple('limit(f(x,(m*x)^(1/2)),x=0)') ans = 0

Page 293: Matlab Para Ingenieros y Cientificos

» maple('limit(f((r*cos(a)),(r*sin(a))),r=0)') ans = 0 Los límites iterados y los direccionales valen todos cero, y al cambiar la función acoordenadas polares, el límite en el origen resulta ser cero, que coincide con el valor de la funciónen el origen. Hemos visto un ejemplo de función continua no diferenciable. Ejercicio 11-3. Calcular la diferencial total de la siguiente función: 3 2 3 + x - 2 x y » maple('f:=(x,y)->x^3-2*x^2*y+3'); » pretty(simplify('D(f(x,y))')) 2 2 3 D(x) x - 4 D(x) x y - 2 x D(y) Agrupando los diferenciales tendremos la expresión corriente de la diferencial total » pretty(maple('collect(D(f(x,y)),D(x))')) 2 2 (3 x - 4 x y) D(x) - 2 x D(y) Ejercicio 11-4. Comprobar que la función: 1f(x,y,z) = ------------------------- (x2 + y2 + z2 ) 1/2 ¶ 2 f ¶ 2 f ¶ 2 fverifica la ecuación: -------+ --------+------- = 0 ¶x2 ¶y2 ¶z2

» f='1/(x^2+y^2+z^2)^(1/2)';

Page 294: Matlab Para Ingenieros y Cientificos

» simplify(symop(diff(f,'x',2),'+',diff(f,'y',2),'+',diff(f,'z',2))) ans = 0 Otro camino sería el siguiente: » maple('f:=x->1/(x^2+y^2+z^2)^(1/2)'); » simplify('diff(f(x,y,z),x$2)+diff(f(x,y,z),y$2)+diff(f(x,y,z),z$2)') ans = 0 A su vez, otra forma de hacer lo mismo sería la siguiente: » maple('simplify(D[1,1](f)(x,y,z)+D[2,2](f)(x,y,z)+D[3,3](f)(x,y,z))') ans = 0 Ejercicio 11-5. Hallar la diferencial total de la función: a xf(x,y) = E Cos[b y], siendo a y b constantes » maple('g:=(x,y)->exp(a*x)*cos(b*y)'); » pretty(maple('dotprod([D[1](g)(x,y),D[2](g)(x,y)],[dx,dy])')) a exp(a x) cos(b y) dx - exp(a x) sin(b y) b dy Ejercicio 11-6. Hallar la derivada direccional de la función: 1f(x,y,z) = ------------------------- (x2 + y2 + z2 ) 1/2 en el punto (2,1,1), según la dirección del vector v=(1,1,0).

Page 295: Matlab Para Ingenieros y Cientificos

» maple('f:=(x,y,z)->1/(x^2+y^2+z^2)^(1/2)'); » maple('dotprod([D[1](f)(2,1,1),D[2](f)(2,1,1),D[3](f)(2,1,1)],[1,1,0])') ans = -1/12*6^(1/2) Ejercicio 11-7. Dada la función : 2 2 (-x - y )/8 2 2f(x,y) = E (Cos[x] + Sin[y] ) calcular: ¶ f ¶ f ¶ 2 f ¶ 2 f ¶ 2 f ¶ 2 f ¶ 4 f ¶ 4 f ¶ 5 f-----, -----, ----------- , ----------, ---------- , -------------, -----------, ------------ y ----------¶ x ¶ y ¶ x ¶ y ¶ y ¶ x ¶ x2 ¶ y2 ¶x3 ¶y ¶x2 ¶y2 ¶x3 ¶y2

y hallar su valor en el punto (Pi/3, Pi/6) » maple('f:=(x,y)->exp(-(x^2+y^2)/8)*(cos(x)^2+sin(y)^2)'); » pretty(factor('D[1](f)(x,y)')) 2 2 2 2 - 1/4 exp(- 1/8 x - 1/8 y ) (x cos(x) + x sin(y) + 8cos(x) sin(x)) » pretty(factor('D[1](f)(pi/3,pi/6)')) 2 1/2 - 1/24 exp(- 5/288 pi ) (pi + 12 3 ) Si se quiere el valor aproximado ponemos: » numeric('D[1](f)(pi/3,pi/6)') ans = -0.8399

Page 296: Matlab Para Ingenieros y Cientificos

» pretty(factor('D[2](f)(x,y)')) 2 2 2 2 - 1/4 exp(- 1/8 x - 1/8 y ) (y cos(x) + y sin(y) - 8sin(y) cos(y)) » pretty(factor('D[2](f)(pi/3,pi/6)')) 2 1/2 - 1/48 exp(- 5/288 pi ) (pi - 24 3 ) » numeric('D[2](f)(pi/3,pi/6)')ans = 0.6745 » pretty(factor('D[1,2](f)(x,y)')) 2 2 1/16 exp(- 1/8 x - 1/8 y ) 2 2 (y x cos(x) + y x sin(y) + 8 y cos(x) sin(x) - 8 xsin(y) cos(y)) » pretty(factor('D[1,2](f)(pi/3,pi/6)')) 2 1/2 1/576 pi exp(- 5/288 pi ) (pi - 12 3 ) » numeric('D[1,2](f)(pi/3,pi/6)') ans = -0.0811 » pretty(factor('D[2,1](f)(x,y)')) 2 2 1/16 exp(- 1/8 x - 1/8 y ) 2 2 (y x cos(x) + y x sin(y) + 8 y cos(x) sin(x) - 8 x

Page 297: Matlab Para Ingenieros y Cientificos

sin(y) cos(y)) » pretty(factor('D[2,1](f)(pi/3,pi/6)')) 2 1/2 1/576 pi exp(- 5/288 pi ) (pi - 12 3 ) » numeric('D[2,1](f)(pi/3,pi/6)') ans = -0.0811 » pretty(factor('D[1,1](f)(x,y)')) 2 2 2 2 2 2 2 21/16 exp(- 1/8 x - 1/8 y ) (- 36 cos(x) - 4 sin(y) + x cos(x) + x sin(y) 2 + 16 x cos(x) sin(x) + 32 sin(x) ) » pretty(factor('D[1,1](f)(pi/3,pi/6)')) 2 2 1/2 1/288 exp(- 5/288 pi ) (252 + pi + 24 pi 3 ) » numeric('D[1,1](f)(pi/3,pi/6)') ans = 1.1481 » pretty(factor('D[2,2](f)(x,y)')) 2 2 2 2 2 2 2 21/16 exp(- 1/8 x - 1/8 y ) (- 4 cos(x) - 36 sin(y) + y cos(x) + y sin(y) 2 - 16 y sin(y) cos(y) + 32 cos(y) )

Page 298: Matlab Para Ingenieros y Cientificos

» pretty(factor('D[2,2](f)(pi/3,pi/6)')) 2 2 1/2 - 1/1152 exp(- 5/288 pi ) (- 1008 - pi + 48 pi 3 ) » numeric('D[2,2](f)(pi/3,pi/6)') ans = 0.5534 » pretty(factor('D[1,1,1,2](f)(x,y)')) 2 2 2 2 1/256 exp(- 1/8 x - 1/8 y ) (- 108 y x cos(x) - 12 y xsin(y) 3 2 3 2 - 608 y cos(x) sin(x) + y x cos(x) + y x sin(y) 2 2 + 24 y x cos(x) sin(x) + 96 y x sin(x) + 96 x sin(y)cos(y) 3 - 8 x sin(y) cos(y)) » pretty(factor('D[1,1,1,2](f)(pi/3,pi/6)')) 2 3 1/2 2 1/2 1/82944 pi exp(- 5/288 pi ) (pi + 12 3 pi + 756 pi -5616 3 ) » numeric('D[1,1,1,2](f)(pi/3,pi/6)') ans = -0.2271 » pretty(factor('D[1,1,2,2](f)(x,y)'))

Page 299: Matlab Para Ingenieros y Cientificos

2 2 2 2 2 21/256 exp(- 1/8 x - 1/8 y ) (144 cos(x) + 144 sin(y) - 4 x cos(x) 2 2 2 2 2 - 36 x sin(y) - 64 x cos(x) sin(x) - 128 sin(x) - 36 y cos(x) 2 2 2 2 2 2 2 2 2 - 4 y sin(y) + y x cos(x) + y x sin(y) + 16 y xcos(x) sin(x) 2 2 2 2 + 32 y sin(x) + 64 y sin(y) cos(y) - 16 y x sin(y) cos(y)- 128 cos(y) 2 2 + 32 x cos(y) ) » pretty(factor('D[1,1,2,2](f)(pi/3,pi/6)'))1/165888* 2 2 1/2 4 3 1/2 exp(- 5/288 pi ) (- 77760 + 1260 pi - 1728 pi 3 + pi -24 pi 3 ) » numeric('D[1,1,2,2](f)(pi/3,pi/6)') ans = -0.3856 » pretty(factor('D[1,1,1,2,2](f)(x,y)')) 2 2 2- 1/1024 exp(- 1/8 x - 1/8 y ) (2432 cos(x) sin(x) + 432 x cos(x) 2 2 3 2 3 2 + 432 x sin(y) - 384 x sin(x) - 4 x cos(x) - 36 x sin(y)

Page 300: Matlab Para Ingenieros y Cientificos

2 2 2 2 + 192 y x sin(y) cos(y) + 96 y x sin(x) - 108 y x cos(x) 2 3 2 2 3 2 2 2 2 2 + y x cos(x) + y x sin(y) + 24 y x cos(x) sin(x) - 12y x sin(y) 2 2 3 2 - 608 y cos(x) sin(x) - 96 x cos(x) sin(x) + 32 x cos(y) 2 3 - 384 x cos(y) - 16 y x sin(y) cos(y)) » pretty(factor('D[1,1,1,2,2](f)(pi/3,pi/6)')) 21/1990656 exp(- 5/288 pi )* 1/2 3 2 1/2 4 1/2 5 (- 1181952 3 + 233280 pi - 1764 pi + 8208 pi 3 + 12pi 3 - pi ) » numeric('D[1,1,1,2,2](f)(pi/3,pi/6)') ans = -0.5193 La ventaja de usar el operador D en lugar del comando diff, radica en la posibilidad que tieneel primero de calcular directamente el valor de la derivada en un punto. MÁXIMOS Y MÍNIMOS DE FUNCIONES DE VARIAS VARIABLES Dada la función f:Rn---> R, que aplica el punto (x1,x2,...,xn)ÎRn en el puntof(x1,x2,....,xn)ÎR, se dice que presenta un posible extremo en el punto (a1,a2,....,an) si el vectorgradiente: ¶f ¶f ¶fÑ f = ( -----, -----, ........,------) se anula en el punto (a1,a2,.....,an) ¶x1 ¶x2 ¶xn Al igualar a cero todas las derivadas parciales y resolver el sistema resultante, se obtienen

Page 301: Matlab Para Ingenieros y Cientificos

los posibles puntos extremos. Para saber de qué clase de extremo se trata es necesario construir la matriz Hessiana en elpunto, que tiene la siguiente estructura: ┌ ¶2f ¶2f ¶2f ┐ | -------, --------, ........, -------- | | ¶x12 ¶x1 ¶x2 ¶x1 ¶xn | | | | ¶2f ¶2f ¶2f |H = | --------, --------, ........,-------- | | ¶x1 ¶x2 ¶x22 ¶x2 ¶xn | | | | ......................................... | | | | ¶2f ¶2f ¶2f | | --------, --------, ........,-------- | └ ¶x1 ¶xn ¶x2 ¶xn ¶xn2 ┘ Con notación de Matlab, el determinante hessiano puede escribirse de la siguiente forma: | D[1,1](f) D[1,2](f) D[1,3](f) ............. D[1,n](f) | | | | |D[1,2](f) D[2,2](f) D[2,3](f) ............. D[2,n](f) | | | |.................................................................................... | | | | |D[1,n](f) D[2,n](f) D[3,n](f) .......... D[n,n](f) | Pero Matlab habilita una función específica para calcular el determinante hessiano de unafunción de varias variables. Su sintaxis es: maple(‘hessian(función, [x1,x2, ...., xn]) Matlab contempla también una función específica para el cálculo del gradiente de una funciónde varias variables. Su sintaxis es la siguiente: maple(‘grad(función, [x1,x2, ...., xn]) Supongamos en primer lugar que el determinante de H es no nulo en el punto (a1,a2,...,an). En

Page 302: Matlab Para Ingenieros y Cientificos

este caso se dice que el punto es no degenerado, y además podemos dar las siguientes condicionessuficientes de extremo: Si la matriz Hessiana en el punto (a1,a2,...,an) es definida positiva, entonces la funciónpresenta un mínimo en ese punto. Si la matriz Hessiana en el punto (a1,a2,...,an) es definida negativa, entonces la funciónpresenta un máximo en ese punto. En cualquier otro caso, la función presenta un punto silla en el punto (a1,a2,...,an). Si el determinante de H es nulo en el punto (a1,a2,...,an) se dice que el punto es nodegenerado. Ejercicio 11-8. Hallar y clasificar los puntos extremos de la función : 3 4 5 6 2-120 x - 30 x + 18 x + 5 x + 30 x y En primer lugar hallamos los posibles puntos extremos, igualando a cero las parciales(componentes del vector gradiente de f) y resolviendo el sistema resultante maple(‘f:=(x,y)->-120*x^3-30*x^4+18*x^5+5*x^6+30*x* y^2’); » maple('solve({diff(f(x,y),x)=0,diff(f(x,y),y)=0},{x,y})') ans = {x = 0, y = 0}, {y = 0, x = 2}, {y = 0, x = -3}, {y = 0, x = -2} Luego los posibles puntos extremos son: (0,0), (-2,0), (2,0) y (-3,0) También podemos, alternativamente, igualar a cero el vector gradiente. » maple('grad(f(x,y),[x,y])') ans = [-360*x^2-120*x^3+90*x^4+30*x^5+30*y^2, 60*x*y] » maple('solve({-360*x^2-120*x^3+90*x^4+30*x^5+30*y^2=0, 60*x*y=0},{x,y})') ans =

Page 303: Matlab Para Ingenieros y Cientificos

{x = 0, y = 0}, {y = 0, x = 2}, {y = 0, x = -3}, {y = 0, x = -2} Para clasificar los posibles extremos construímos la matriz Hessiana, y calculamos su valoren cada uno de ellos. » maple('hessian(-120*x^3-30*x^4+18*x^5+5*x^6+30*x* y^2,[x,y])') ans = [-720*x-360*x^2+360*x^3+150*x^4, 60*y][ 60*y, 60*x] También se puede hallar la matriz hessiana de la siguiente forma: » maple('array([[D[1,1](f)(x,y),D[1,2](f)(x,y)],[D[1,2](f)(x,y),D[2,2](f)(x,y)]])') ans = [-720*x-360*x^2+360*x^3+150*x^4, 60*y][ 60*y, 60*x] Pero lo que necesitamos es la matriz hessiana M como una función de x e y, para posterioressustituciones en determinados puntos. » maple('M:=(x,y)->hessian(-120*x^3-30*x^4+18*x^5+5*x^6+30*x* y^2,[x,y])') » maple('subs(x=0,y=0,M(x,y))') ans = [0, 0][0, 0] El origen resulta ser un punto degenerado, pues el determinante de la matriz Hessiana se anulaen (0,0) » maple('subs(x=-2,y=0,M(x,y))') ans = [-480, 0][ 0, -120] » determ(H)

Page 304: Matlab Para Ingenieros y Cientificos

ans = 57600 » eigensys(H) ans = [-480.][-120.] La matriz Hessiana en el punto (-2,0) tiene determinante no nulo, y además es definidanegativa, porque todos sus autovalores son negativos. Por lo tanto el punto (-2,0) es un máximo de lafunción » H=maple('subs(x=2,y=0,M(x,y))') H = [2400, 0][ 0, 120] » determ(H) ans = 288000 » eigensys(H) ans = [ 120.][2400.] La matriz Hessiana en el punto (2,0) tiene determinante no nulo, y además es definidapositiva, porque todos sus autovalores son positivos. Por lo tanto el punto (2,0) es un mínimo de lafunción. » H=maple('subs(x=-3,y=0,M(x,y))') H =

Page 305: Matlab Para Ingenieros y Cientificos

[1350, 0][ 0, -180] » determ(H) ans = -243000 » eigensys(H) ans = [-180.][1350.] La matriz Hessiana en el punto (-3,0) tiene determinante no nulo, y además ni es definidapositiva ni definida negativa, porque sus autovalores, ni son todos positivos, ni son todos negativos.Por lo tanto el punto (-3,0) es un punto silla de la función. Ejercicio 11-9. Hallar y clasificar los puntos extremos de la función : 2 2 2f(x,y,z) = x + x y + y + z En primer lugar hallamos los posibles puntos extremos, igualando a cero las parciales(componentes del vector gradiente de f) y resolviendo el sistema resultante. » maple('f:=(x,y)->x^2+y^2+z^2+x*y'); » maple('solve({diff(f(x,y,z),x)=0,diff(f(x,y,z),y)=0,diff(f(x,y,z),z)},{x,y,z})') ans = {z = 0, y = 0, x = 0} El único punto extremo es el origen (0,0,0). Vamos a analizar de qué clase de extremo setrata. Para ello calculamos la matriz Hessiana y la expresamos como una función de x, y, z » maple('H:=(x,y,z)->hessian(f(x,y,z),[x,y,z])'); » M = maple('H(x,y,z)') M =

Page 306: Matlab Para Ingenieros y Cientificos

[2, 1, 0][1, 2, 0][0, 0, 2] » determ(M) ans = 6 Vemos que la matriz Hessiana es constante (no depende del punto en que se aplique), por lotanto su valor en el origen ya está hallado. El determinante es distinto de cero, con lo que no habráextremos degenerados. » eigensys(M) ans = [1][2][3] La matriz Hessiana en el origen es definida positiva, porque todos sus autovalores sonpositivos. Luego podemos concluir que el origen es un mínimo de la función. MÁXIMOS Y MÍNIMOS CONDICIONADOS. EL MÉTODO DE LOS MULTIPLICADORESDE LAGRANGE Supongamos que queremos optimizar (maximizar o minimizar) la función f(x1,x2,..,xn),denominada función objetivo, pero sujeta a unas determinadas restricciones dadas por lasecuaciones: g1(x1,x2,....,xn)=0 g2(x1,x2,....,xn)=0............................gk(x1,x2,....,xn)=0 En este caso se plantea la función de Lagrange, que es una combinación lineal de la funciónobjetivo y las restricciones, y que tiene la siguiente forma: k

Page 307: Matlab Para Ingenieros y Cientificos

L(x1,x2,....,xn,l) = f(x1,x2,....,xn) +å li gi(x1,x2,....,xn) i=1 Los posibles puntos extremos se obtienen de la resolución del sistema resultante de igualar acero las componentes del vector gradiente de L , o sea, Ñ L(x1,x2,....,xn,l)=(0,0,.....,0). Lo que setraduce en: ¶L ¶L ¶L ¶L ¶L ¶LÑ L = ( -----, -----, ........,------, ------, ------, .....,-------) = (0, 0, ....., 0) ¶x1 ¶x2 ¶xn ¶l1 ¶l2 ¶lk Al igualar a cero todas las derivadas parciales y resolver el sistema resultante, se obtienenlos valores de x1, x2, ..., xn, l1, l2,...,lk correspondientes a posibles máximos y mínimos. El carácter del punto extremo suele hallarse por simple inspección, sustituyendo el punto enla función objetivo. Pero Matlab habilita el comando “extrema”, que nos da directamente los posibles puntosextremos de un problema con una función objetivo a optimizar (fobjetivo), sujeta a unasrestricciones, resuelto por el método de los multiplicadores de Lagrange. Su sintaxis es la siguiente: maple(‘extrema(fobjetivo, {restricciones}, {variables},s)’) La variable s contiene la lista de puntos candidatos a extremos. Esta función es necesarioleerla de una librería, mediante el comando maple(‘readlib(extrema)’). Ejercicio 11-10. Hallar y clasificar los puntos extremos de la función : f(x,y,z) = x + z , sujeta a la restricción. x2 + y2 + z2 = 1 » maple('readlib(extrema)');» maple('extrema(x+z,{x^2+y^2+z^2=1},{x,y,z},s)') ans = {2^(1/2), -2^(1/2)} El comando extrema devuelve los valores que toma la función objetivo en cada puntoextremo, pero la variable s contiene los puntos extremos. » maple('s') ans =

Page 308: Matlab Para Ingenieros y Cientificos

{{y = 0, z = 1/2*2^(1/2), x = 1/2*2^(1/2)}, {y = 0, z = -1/2*2^(1/2), x = -1/2*2^(1/2)}} Ya tenemos que los posibles puntos extremos son: (Sqrt[2]/2, 0, Sqrt[2]/2) y (-Sqrt[2]/2, 0, -Sqrt[2]/2) Ahora vamos a ver qué tipo de extremos son. Para ello los sustituimos en la función objetivo(ya sabemos que los resultados son sqrt[2] y -sqrt[2]).» maple('obj(sqrt(2)/2,0,sqrt(2)/2)') ans = 2^(1/2) » maple('obj:=(x,y,z)->x+z');» maple('obj(-sqrt(2)/2,0,-sqrt(2)/2)') ans = -2^(1/2) Luego en el punto (-Sqrt[2]/2, 0, -Sqrt[2]/2) la función presenta un mínimo y estamos ante lapresencia de un máximo en el punto (Sqrt[2]/2,0,Sqrt[2]/2). Ejercicio 11-11. Hallar y clasificar los puntos extremos de la función : f(x,y,z) =sqrt(x2 + y2 )-z, sujeta a las restricciones: x2 + y2 = 16 y x+y+z=10 » maple('f := (x^2+y^2)^(1/2)-z');» maple('g1 := x^2+y^2-16; g2 := x+y+z = 10');» maple('readlib(extrema)')» maple('extrema(f,{g1,g2},{x,y,z},s)') ans = {-6-4*2^(1/2), -6+4*2^(1/2)} » maple('s')

Page 309: Matlab Para Ingenieros y Cientificos

ans = {{y = -8^(1/2), x = -8^(1/2), z = 2*8^(1/2)+10}, {y = 2*2^(1/2), x= 2*2^(1/2), z = -4*2^(1/2)+10}} Luego los posibles puntos extremos son (sqrt(8),sqrt(8),-2sqrt(8)+10) y (-sqrt(8),-sqrt(8),2sqrt(8)+10). Ahora vamos a ver qué tipo de extremos son. Para ello los sustituimos en lafunción objetivo. » numeric(maple('obj(-sqrt(8),-sqrt(8),sqrt(8)+10)')) ans = -8.8284 » numeric(maple('obj(sqrt(8),sqrt(8),-sqrt(8)+10)')) ans = -3.1716 Luego en el punto (-sqrt(8),-sqrt(8),2sqrt(8)+10) la función presenta un mínimo y estamosante la presencia de un máximo en el punto (sqrt(8),sqrt(8),10-2sqrt(8). ALGUNAS APLICACIONES DE LOS MÁXIMOS Y MÍNIMOS EN VARIAS VARIABLES. Al igual que en el caso de una variable, también en varias variables surgen problemasprácticos que nos llevan indefectiblemente al uso de las derivadas para su resolución. Ejercicio 11-12. Hallar las dimensiones del paralelepípedo de volumen máximo, que tiene deárea 10 metros cuadrados. Si x, y, z son las dimensiones del paralelepípedo, su volumen será V=xyz. Como sabemos quetiene 10 metros cuadrados de superficie, la restricción será: 2xy+2xz+2yz=10. Estamos entonces anteun problema de máximos y mínimos condicionados, donde la función objetivo a maximizar es V=xyzy la restricción a considerar es 2xy+2xz+2yz-10=0. Utilizaremos el método de los multiplicadores deLagrange » maple('funcion:=x*y*z');» maple('g1:=2*x*y+2*x*z+2*y*z-10');» maple('extrema(funcion,{g1},{x,y,z}, a )') ans =

Page 310: Matlab Para Ingenieros y Cientificos

{5/9*5^(1/2)*3^(1/2), -5/9*5^(1/2)*3^(1/2)} » maple('a') ans = {{z = -1/3*5^(1/2)*3^(1/2), y = -1/3*5^(1/2)*3^(1/2), x = -1/3*5^(1/2)*3^(1/2)}, {z = 1/3*5^(1/2)*3^(1/2), x =1/3*5^(1/2)*3^(1/2), y = 1/3*5^(1/2)*3^(1/2)}} Luego los posibles puntos extremos son: (-Sqrt[5/3], -Sqrt[5/3], -Sqrt[5/3]) y (Sqrt[5/3], Sqrt[5/3], Sqrt[5/3]). El único punto que es posible solución es el segundo, pues no puede haber lados deparalelepípedos con medida negativa. Pero falta ver que efectivamente el punto (Sqrt[5/3], Sqrt[5/3],Sqrt[5/3]) es un máximo. » maple('obj:=(x,y,z)->x*y*z'); » numeric('[obj(-sqrt(5/3),-sqrt(5/3),-sqrt(5/3)),obj(sqrt(5/3),sqrt(5/3),sqrt(5/3))]') ans = -2.1517 2.1517 Efectivamente se ve que el punto es un máximo. Con lo que tenemos que el paralelepípedo demayor volumen para un área dada es precisamente un cubo (x=y=z).

Page 311: Matlab Para Ingenieros y Cientificos

Capítulo 12

CALCULO DIFERENCIAL VECTORIAL Y TEOREMAS EN VARIAS VARIABLES

CONCEPTOS DE CÁLCULO DIFERENCIAL VECTORIAL _ m n Dada la función F : R -------------------> R (x1,x2,..xm) -----> (F1(x1,..xm),.....,Fn(x1,...,xm)) _ _ se dice que la función vectorial F es diferenciable en el punto a =(a1,...am)si lo son sus n componentes F1, F2, ...,Fn. Para la función anterior se define la matriz jacobiana como: ┌ ¶F1/¶ x1 ¶F1/¶x2 ............¶ F1/¶xn ┐ | ¶F2/¶ x1 ¶F2/¶x2 ............¶ F2/¶xn |J = | ........................................................... ú = ¶ (F1,F2,....,Fn) / ¶ (x1,x2,.....,xn) | ........................................................... | └ ¶Fn/¶ x1 ¶Fn/¶x2 ............¶ Fn/¶xn ┘ El jacobiano para una función vectorial, es una extensión de concepto de derivadas parcialespara una función de una sola componente. Matlab habilita el comando “jacobian”, que calcula jacobianos. ¶ (F1,F2,....,Fn)maple(‘jacobian([F1,F2,....,Fn],[x1,x2,....,xn])’) Calcula J = -------------------- ¶ (x1,x2,.....,xn)Ejercicio 12-1. Calcular la matriz jacobiana para la siguiente función: xf(x,y,z) = (e , Cos(y), Sen(z)) y hallar su valor en el punto (0,-Pi/2,0)

Page 312: Matlab Para Ingenieros y Cientificos

» maple('jacobian([exp(x),cos(y),sin(z)],[x,y,z])') ans = [exp(x), 0, 0][ 0, -sin(y), 0][ 0, 0, cos(z)] » maple('M:=(x,y,z)->array([[exp(x),0,0],[0,-sin(y),0],[0,0,cos(z)]])');» maple('M(0,-Pi/2,0)') ans = [1, 0, 0][0, 1, 0][0, 0, 1] Vemos que el jacobiano pedido es la matriz identidad. LA REGLA DE LA CADENA La regla de la cadena permite la diferenciación de funciones de este tipo. Concretamentepermite la diferenciación de la composición de funciones vectoriales. La regla de la cadena es unode los mitos del cálculo diferencial. Suele introducirse para funciones de una variable real, hasta sergeneralizada para funciones vectoriales. Dice lo siguiente: _ n m _ m p Sean las funciones vectoriales g:UÌR ---->R y f:VÌR------>R , _ _ n pdonde U y V son abiertos y existe la función compuesta (f ° g):R---->R. Si_ _ _ _ _ _ _ _g es diferenciable en x0 y f es diferenciable en y0=g(x0), entonces f ° g es _diferenciable en x0 y además se cumple que: _ _ _ _ _ _ _D (f ° g) (xo) = D f(y0) D g(xo) Matlab aplica directamente la regla de la cadena, sin más que proponerle la diferenciación dela composición de funciones. _

Page 313: Matlab Para Ingenieros y Cientificos

Ejercicio 12-2. Sea f(x,y)=x2 + y, y sea h(u)=(Sen(3u),Cos(8u)). _Sea g(u)=f(h(u) Calcular dg/du en u=0 » maple('f:=(x,y)->x^2+y');» maple('h:=u->(sin(3*u),cos(8*u))');» maple('g:=u->(f@h)(u)');» pretty(maple('diff(g(u),u)')) 6 sin(3 u) cos(3 u) - 8 sin(8 u) Ya hemos diferenciado la función compuesta. Ahora hallamos el valor de la derivada en u=0,definiéndola previamente como una función de u. » pretty(maple('dcompuesta:=u->diff(g(u),u)')) dcompuesta := u -> diff(g(u), u) » numeric(maple('subs(u=0,dcompuesta(u))')) ans = 0 Ejercicio 12-3. Calcular ¶z / ¶x y ¶z / ¶y sabiendo que: u2 + v2 x-y xyz = ------------- , u = e y v = e u2 - v2

» maple('f:=(u,v)->(u^2+v^2)/(u^2-v^2)'); Ahora definimos la siguiente función vectorial: » maple('g:=(x,y)->(exp(x-y),exp(x*y))'); Ahora se define la función z, como compuesta de las dos anteriores: » maple('z:=(x,y)->(f@g)(x,y)'); Por último se deriva la función compuesta, planteando a Matlab directamente la derivación

Page 314: Matlab Para Ingenieros y Cientificos

de la composición de aplicaciones. Matlab maneja perfectamente la composición de funciones. » pretty(maple('simplify(diff(z(x,y),x))')) (- 1 + y) exp(2 x - 2 y + 2 x y) 4 -------------------------------- 2 (exp(2 x - 2 y) - exp(2 x y)) » pretty(maple('simplify(diff(z(x,y),y))')) (1 + x) exp(2 x - 2 y + 2 x y) 4 ------------------------------- 2 (exp(2 x - 2 y) - exp(2 x y)) También se podía haber calculado directamente la función compuesta, para despuésderivarla. Veamos: » pretty(maple('simplify(f(g(x,y)))')) exp(2 x - 2 y) + exp(2 x y) --------------------------- exp(2 x - 2 y) - exp(2 x y) Ahora el problema se reduciría a hallar las derivadas parciales de esta expresión respecto dex y de y, lo cual es trivial con Matlab. » maple('compuesta:=(x,y)->simplify(f(g(x,y)))');» pretty(maple('simplify(diff(compuesta(x,y),x))')) (- 1 + y) exp(2 x - 2 y + 2 x y) 4 -------------------------------- 2 (exp(2 x - 2 y) - exp(2 x y)) » pretty(maple('simplify(diff(compuesta(x,y),y))')) (1 + x) exp(2 x - 2 y + 2 x y) 4 --------------------------------- 2 (exp(2 x - 2 y) - exp(2 x y)) Evidentemente, el resultado que se obtiene es el mismo.

Page 315: Matlab Para Ingenieros y Cientificos

EL TEOREMA DE LA FUNCIÓN IMPLÍCITA _ n+m m n+m Sea la función vectorial F : AÌR -------->R A=Abierto de R _ _ _ _ _ _ (x , y) -------> (F1(x,y),....., Fm(x,y)) Si Fi (i=1,2,...,m) son derivables con derivada continua hasta el orden r

y la matriz jacobiana de valor J=¶(F1,..,Fm)/¶(y1,..,ym) tiene determinante _ _ _ _ _ _

distinto de cero en un punto (x0,y0) tal que F(x0,y0) =0 , entonces existe n _ m _un abierto UÌ R que contiene a x0 y un abierto VÌ R que contiene a y0, y _ _ _ _ _ _ _una única función f:U--->V tal que F(x,f(x)) = 0 "x Î U y f es diferenciable de orden r conderivadas continuas. Este teorema permite asegurar la existencia de determinadas derivadas en funcionesimplícitas. Matlab posibilita la diferenciación de funciones implícitas y ofrece los resultados, enaquellos casos en que se cumplan las hipótesis del teorema. Ejercicio 12-4. Hallar la condición para que la superficie de ecuación implícita: 3 2 2 3x + 3 y + 8 x z - 3 y z = 1 pueda ponerse de la forma z=z(x,y) con z función diferenciable. Calcular : ¶z/¶x , ¶z/¶y, ¶2 z/¶x2 y ¶2 z/¶y2

» maple('f:=(x,y,z)->x^3+3*y^2+8*x*z^2-3*z^3*y-1'); Para que se cumplan las hipótesis del teorema de la función implícita, ha de ser distinta decero la derivada parcial de f respecto a la variable z. » pretty(maple('diff(f(x,y,z),z)')) 2 16 x z - 9 z y La condición a cumplir será : 16xz ¹ 9yz2

Page 316: Matlab Para Ingenieros y Cientificos

Ahora vamos a calcular las derivadas parciales pedidas, suponiendo siempre que se cumplela condición anterior. Se parte de la derivada implícita (total) de f y se despeja D(z) » pretty(simple(maple('D(f(x,y,z)=0)'))) 2 2 2 3 3 D(x) x + 6 D(y) y + 8 D(x) z + 16 x D(z) z - 9 D(z) z y - 3z D(y) = 0 » pretty(simple(maple('D(z):=solve(D(f(x,y,z)=0),D(z))'))) 2 2 3 3 D(x) x + 6 D(y) y + 8 D(x) z - 3 z D(y) D(z) := - --------------------------------------------- 2 16 x z - 9 z y Como y no depende de x (x e y son, por hipótesis, variables independientes , y la variable zdepende de x e y), hacemos D(y)=0 en la expresión de D(z)/D(x) » pretty(maple('simplify(subs(D(y)=0,D(z)/D(x)))')) 2 2 3 x + 8 z - ------------------- z (16 x - 9 z y) Ya hemos obtenido la expresión de ¶z/¶x. Para obtener ¶z/¶y operamos de forma semejante. » pretty(maple('simplify(subs(D(x)=0,D(z)/D(y)))')) 3 2 y - z - 3 ------------------ z (16 x - 9 z y) Para calcular ¶2z/¶x2 consideramos la derivada parcial de ¶z/¶x respecto de x

Page 317: Matlab Para Ingenieros y Cientificos

» pretty(maple('simplify(diff(subs(D(y)=0,D(z)/D(x)),x))')) 2 2 24 x - 27 x z y - 64 z - 2 ---------------------------- 2 z (16 x - 9 z y) Para calcular ¶2z/¶y2 consideramos la derivada parcial de ¶z/¶y respecto de y » pretty(maple('simplify(diff(subs(D(x)=0,D(z)/D(y)),y))')) 4 32 x - 9 z - 3 ------------------- 2 z (16 x - 9 z y) Ejercicio 12-5. Mostrar que cerca del punto (x,y,u,v)=(1,1,1,1) se puede resolver el sistema: x u + y v u2 = 2 x u3 + y2 v4 = 2 de manera única para u y v como funciones de x e y (u=u(x,y), v=v(x,y)). En primer lugar comprobamos si en el punto (1,1,1,1) se cumplen las hipótesis del teorema dela función implícita. Las funciones son derivables y con derivada continua. Nos falta ver que el jacobianocorrespondiente tiene determinante distinto de 0 en el punto (1,1,1,1) » maple('f1:=(x,y,u,v)-> x*y +y*v*u^2-2');» maple('f2:=(x,y,u,v)->x*u^3+y^2*v^4-2');» maple('jacobian([f1(x,y,u,v),f2(x,y,u,v)],[u,v])') ans = [2*y*v*u, y*u^2][3*x*u^2, 4*y^2*v^3]

Page 318: Matlab Para Ingenieros y Cientificos

» J=maple('subs(x=1,y=1,u=1,v=1,jacobian([f1(x,y,u,v),f2(x,y,u,v)],[u,v]))') J = [2, 1][3, 4] » determ(J) ans = 5 Ya sabemos que se cumplen las hipótesis del teorema de la función implícita, luego se puederesolver de manera única el sistema propuesto. EL TEOREMA DE LA FUNCIÓN INVERSA _ n n n Sea la función vectorial f:UÌR ----------->R U= Abierto de R (x1,...,xn)---->(f1(x1,..,xn),....,fn(x1,..,xn)) de modo que f es derivable con derivada continua. _ _ Si existe x0 tal que |J|=|¶(f1,..,fn)/¶(x1,..,xn)|¹0 en x0, entonces _ _ _existen un abierto A que contiene a x0 y un abierto B que contiene a f(xo) _ _ _ -1tales que f(A) = B y f tiene una función inversa f : B------>A que es derivable con derivadacontinua. Además se cumple que: _ -1 _ _ -1 -1D f (y) = [ D f (x) ] y si J=¶(f1,..,fn)/¶(x1,..,xn) entonces |J| = 1/|J|. Matlab realiza automáticamnete los cálculos correspondientes al teorema de la funcióninversa, siempre que se cumplan las hipótesis. Ejercicio 12-6. Dada la función vectorial (u(x,y), v(x,y)) donde: 4 4 x + yu(x,y) = ---------- v(x,y) = Sen(x) + Cos(y) x

Page 319: Matlab Para Ingenieros y Cientificos

Hallar las condiciones para que exista la función vectorial inversa (x(u,v),y(u,v)) con x=x(u,v)e y=y(u,v) y hallar la derivada y el jacobiano de la transformación inversa. Hallar su valor en elpunto (pi/4,-pi/4) Las condiciones a cumplir serán las hipótesis del teorema de la función inversa. Lasfunciones son derivables con derivada continua, salvo acaso en x=0. Ahora vamos a plantear eljacobiano de la transformación directa: ¶(u(x,y), v(x,y))/¶(x, y) » J=simple(maple('jacobian([(x^4+y^4)/x,sin(x)+cos(y)],[x,y])')) J = [(3*x^4-y^4)/x^2, 4*y^3/x][ cos(x), -sin(y)] » pretty(determ(J)) 4 4 3 3 sin(y) x - sin(y) y + 4 y cos(x) x - --------------------------------------- 2 x Por lo tanto, en los puntos donde esta expresión no se anule, se puede resolver para x e y entérminos de u y v. Además, también ha de cumplirse que x¹0. Calculamos la derivada de la función inversa. Su valor será la matriz inversa de la matrizjacobiana inicial y el determinante de su jacobiano será el recíproco del determinante del jacobianoinicial » I=simple(inverse(J)) I = [sin(y)/(3*sin(y)*x^4-sin(y)*y^4+4*y^3*cos(x)*x)*x^2, 4*y^3*x/(3*sin(y)*x^4-sin(y)*y^4+4*y^3*cos(x)*x)][cos(x)/(3*sin(y)*x^4-sin(y)*y^4+4*y^3*cos(x)*x)*x^2, -(3*x^4-y^4)/(3*sin(y)*x^4-sin(y)*y^4+4*y^3*cos(x)*x)] » pretty(simple(determ(inverse(J)))) 2 x

Page 320: Matlab Para Ingenieros y Cientificos

-------------------------------------------- 4 4 3 3 sin(y) x - sin(y) y + 4 y cos(x) x Se observa que el determinante del jacobiano de la función vectorial inversa es el recíprocodel determinante del jacobiano de la función directa. Vamos a hallar los valores para el punto (Pi/4, -Pi/4) » numeric(subs(subs(determ(I),pi/4,'x'),-pi/4,'y')) ans = 0.3821 » numeric(subs(subs(symdiv(1,determ(J)),pi/4,'x'),-pi/4,'y')) ans = 0.3821 Aquí se ve claramente que el determinante del jacobiano de la función inversa es el recípricodel determinante del jacobiano de la función. Ejercicio 12-7. Demostrar que la transformación entre coordenadas cartesianas y polarescumple las hipótesis del teorema de la función inversa Sabemos que las ecuaciones de la transformación son: x = a Cos[b]y = a Sin[b] Evidentemente las funciones son derivables con parciales continuas. Veamos si eldeterminante del jacobiano de la transformación es distinto de 0. » J=simple(maple('jacobian([a*cos(b),a*sin(b)],[a,b])')) J = [cos(b), -a*sin(b)][sin(b), a*cos(b)] » pretty(simple(determ(J)))

Page 321: Matlab Para Ingenieros y Cientificos

a Vemos que el jacobiano de la transformación es no nulo (a¹0). Luego es aplicable el teoremade la función inversa. El determinante del jacobiano de la transformación inversa será 1/a. EL TEOREMA DEL CAMBIO DE VARIABLE Supongamos que conocemos una función f(x,y) que depende de las variables originales x e y,y que cumple todas las condiciones de derivabilidad y continuidad necesarias. Introducimos lasnuevas variables u y v, que se relacionan con las anteriores mediante las funciones u=u(x,y) yv=v(x,y), de modo que las funciones u y v también cumplen las condiciones de derivabilidad ycontinuidad necesarias (teorema de la función inversa) para poder despejar x e y en función de u y v:x=x(u,v) e y=y(u,v). Bajo las condiciones anteriores es posible expresar la función inicial f en función de lasnuevas variables u y v, mediante la expresión: f(u,v) = f(x(u,v),y(u,v)) |J| siendo J el jacobiano ¶(x(u,v), y(u,v))/¶(u,v) El teorema es generalizable a funciones vectoriales de n componentes. Ejercicio 12-8. Consideremos la siguiente función: x-yf(x,y) = e , y sea la transformación u=u(x,y)=x+y, v=v(x,y)=x Calcular f(u,v). » maple('f:=(x,y)->exp(x-y)'); Se trata de una transformación que cumple las condiciones del teorema de la función inversa(funciones continuas con parciales continuas y jacobiano con determinante no nulo). Hallamos directamente la transformación inversa y su jacobiano, para poder aplicar elteorema del cambio de variable » maple('solve({u=x+y,v=x},{x,y})') ans = {x = v, y = u-v} » maple('jacobian([v,u-v],[u,v])')

Page 322: Matlab Para Ingenieros y Cientificos

ans = [0, 1][1, -1] » pretty(simple(maple('f(v,u-v)* abs(det(jacobian([v,u-v],[u,v])))'))) exp(2 v - u) 2v-u La función pedida es f(u,v) = e. EL TEOREMA DE TAYLOR PARA n VARIABLES n Sea f:R--------->R derivable k veces y derivadas parciales continuas (x1,..,xn)---> f(x1,..,xn) _ _ El desarrollo de Taylor de la función f(x) en el punto a = (a1,..,an) es el siguiente:_ _ n ¶f _ 1 n n ¶2 f _ 1 n n n ¶3 f _f(x) = f(a)+å -----(a)ti + --- åå --------(a)ti tj + --- ååå -------------(a)ti tj tk + i=1 ¶xi 2! i j ¶xi¶xj 3! i j k ¶xi¶xj¶xk 1 n n n n ¶ k f _ ........... + --- ååå.....å ---------------------- (a)ti tj tk...tl + R(k+1) k! i j k l ¶xi ¶xj ¶xk... ¶xl_ _x =(x1,x2, ...,xn) a = (a1,a2,....,an) ti = xi - ai (i=1,2,....,n) R=resto El teorema de Taylor permite desarrollar en forma polinómica una función cualquiera quecumpla sus hipótesis. Normalmente los desarrollos suelen efectuarse hasta el orden 2. Ejercicio 12-9. Obtener el desarrollo de Taylor hasta el orden 2 y en el punto (1,0) de la función: 2 (-1 + x)f(x,y) = E Cos[y] » maple('f:=(x,y)->exp((x-1)^2)*cos(y)');

Page 323: Matlab Para Ingenieros y Cientificos

» pretty(maple('f(1,0)+D[1](f)(1,0)*(x-1)+D[2](f)(1,0)*(y)+ (1/2!)*(D[1,1](f)(1,0)*(x-1)^2+ 2*D[1,2](f)(1,0)*( x-1)*y+D[2,2](f)(1,0)*(y)^2)')) 2 2 1 + (x - 1) - 1/2 y Ejercicio 12-10. Obtener el desarrollo de Taylor hasta el orden 2 en el origen de coordenadas dela función : 2 x + yf(x,y) = E » maple('f:=(x,y)->exp(x+y^2)');» pretty(maple('f(0,0)+D[1](f)(0,0)*(x)+D[2](f)(0,0)*(y)+ (1/2!)*(D[1,1](f)(0,0)*(x)^2+2*D[1,2](f)(0,0)*(x)*( y)+D[2,2](f)(0,0)*(y)^2)')) 2 2 1 + x + 1/2 x + y CAMPOS VECTORIALES: ROTACIONAL, DIVERGENCIA Y LAPLACIANO Se recuerdan algunos conceptos básicos: Definición de gradiente: Si h=f(x,y,z), entonces el gradiente de f, que se denotamediante 1, es el vector

grad = 2 Definición de potencial escalar de un campo vectorial: Un campo vectorial 3 sellama conservativo, si existe una función diferenciable f tal que 4. La función 5 seconoce como función potencial escalar para 6. Definición de rotacional de un campo vectorial: El rotacional del campo vectorial

7 tiene la siguiente expresión:

8 Definición de potencial vector de un campo vectorial: Un campo vectorial F tiene9como potencial vector a otro campo vectorial G si F=rotacional(G).

Page 324: Matlab Para Ingenieros y Cientificos

Definición de divergencia de un campo vectorial: La divergencia del campovectorial 10 tiene la siguiente expresión:

11 Definición de laplaciano: El laplaciano es el operador diferencial definido por:

laplacian= 12 Matlab proporciona al efecto los siguientes comandos: maple(‘grad(f,[x1,..,xn])’) Calcula el gradiente de f(x1,...,xn) maple(‘potential([f1,..,fn],[x1,..,xn],p)’) Dice si el campo vectorial de componentes [f1,..,fn] tiene potencial escalar (para ello el campo vectorial ha de ser irrotacional o de rotacional nulo). Encaso afirmativo, p es el valor del potencial escalar maple(‘curl([f1,..,fn],[x1,..,xn])’) Da el rotacional del campo vectorial de componentes [f1,..,fn] maple(‘vectpotent([f1,..,fn],[x1,..,xn],p)’) Dice si el campo vectorial de componentes [f1,..,fn] tiene potencial vector (para ello el campo vectorial ha de ser incomprensible o de divergencianula). En caso afirmativo, p es el valor del potencial vector maple(‘diverge([f1,..,fn],[x1,..,xn])’) Da la divergencia del campo vectorial de componentes [f1,..,fn]

Page 325: Matlab Para Ingenieros y Cientificos

maple(‘laplacian(f,[x1,..,xn])’) Calcula el laplaciano de la función f

Ejercicio 12-11. Calcular gradiente y laplaciano de la función 13 » maple('w:=1/sqrt(1-x^2-y^2-z^2)');» pretty(simple(maple('grad(w,[x,y,z])'))) x y z [---------------------, ----------------------, ---------------------] 2 2 2 3/2 2 2 2 3/2 2 2 2 3/2 (1 - x - y - z ) (1 - x - y - z ) (1 - x - y -z ) » pretty(simple(maple('laplacian(w,[x,y,z])'))) 3 --------------------- 2 2 2 5/2 (1 - x - y - z ) Ejercicio 12-12. Calcular el potencial escalar del campo vectorial 14 » maple('potential([1,2*y,3*z^2],[x,y,z],P)') ans = true Contesta true porque existe el potencial escalar, es decir, porque el rotacional delcampo vectorial dado es nulo. » maple('curl([1,2*y,3*z^2],[x,y,z])') ans = [0, 0, 0]

Page 326: Matlab Para Ingenieros y Cientificos

El valor del potencial escalar está contenido en la variable P » pretty(maple('P')) 2 3 y + x + z Si ahora calculamos el gradiente de este potencial escalar, obtendremos el campo vectorialinicial. » pretty(simple(maple('grad(y^2+x+z^3,[x,y,z])'))) 2 [1, 2 y, 3 z ] Ejercicio 12-13. Calcular el rotacional y la divergencia del campo vectorial

15 » pretty(simple(maple('curl([arctan(x/y),ln(sqrt(x^2+y^2)),1],[x,y,z])'))) x [0, 0, 2 -----------] 2 2 x + y » pretty(simple(maple('diverge([arctan(x/y),ln(sqrt(x^2+y^2)),1],[x,y,z])'))) y 2 --------- 2 2 x + y Ejercicio 12-14. Calcular el potencial vector de los siguientes camposvectoriales: F=[xz, -yz,y] G=[xey, -xCos(z), -zey] H=[xCos(y), -Sen(y), Sen(x)]16 » maple('vecpotent([x*z,-y*z,y],[x,y,z],Q)') ans = true

Page 327: Matlab Para Ingenieros y Cientificos

Luego ya sabemos que existe el potecial vector, con lo que la divergencia delcampo vectorial será nula. » maple('diverge([x*z,-y*z,y],[x,y,z])') ans = 0 El valor del potencial vector está contenido en la variable Q. » pretty(simple(maple('print(Q)'))) 2 2 [- 1/2 y (z + y), - 1/2 x z , 0] Si ahora calculamos el rotacional del resultado anterior, hemos de obtener el campo vectorialinicial. » pretty(maple('curl([-1/2*y*(z^2+y),-1/2*x*z^2,0],[x,y,z])')) [x z, - y z, y] Ahora calculamos el potencial vector de los otros dos campos. » maple('vecpotent([x*exp(y),-x*cos(z),-z*exp(y)],[x,y,z],R)') ans = true » pretty(simple(maple('print(R)'))) [- sin(z) x, - x exp(y) z, 0] » maple('vecpotent([x*cos(y),-sin(y),sin(x)],[x,y,z],V)') ans = true » pretty(simple(maple('print(V)'))) [- sin(y) z - sin(x) y, - x cos(y) z, 0]

Page 328: Matlab Para Ingenieros y Cientificos

Si hallamos el rotacional de los potenciales vectores hallados, obtendremos los camposvectoriales iniciales. » pretty(maple('curl([- sin(z)*x, - x*exp(y)*z, 0],[x,y,z])')) [x exp(y), - x cos(z), - z exp(y)] » pretty(maple('curl([- sin(y)*z - sin(x)*y, - x*cos(y)*z, 0],[x,y,z])')) [x cos(y), - sin(y), sin(x)] TRANSFORMACIÓN DE COORDENADAS En esta sección vamos a ver como convertir coordenadas cilíndricas y esféricas arectangulares, cilíndricas a esféricas y las transformaciones inversas. Definiremosnuestras propias funciones, dada la sencillez de las mismas. Previamente, para fijar conceptos, se da una pequeña explicación de lascoordenadas cilíndricas y esféricas: En un sistema de coordenadas cilíndricas, un punto P del espacio serepresenta por una tripleta ordenada (r, q, z), donde: r es la distancia del origen (O) a la proyección de P (P') en el plano XY q es el ángulo entre el eje X y el segmento OP' z es la distancia PP' En un sistema de coordenadas esféricas, un punto P del espacio se representapor una tripleta ordenada (r, q, f), donde: r es la distancia de P al origen q es el mismo ángulo que el usado en coordenadas cilíndricas f es el ángulo entre el eje Z positivo y el segmento OP Fácilmente se llega a las ecuaciones de conversión siguientes: Cilíndricas a rectangulares: 17

Page 329: Matlab Para Ingenieros y Cientificos

18Rectangulares a cilíndricas: 19

20 21 Esféricas a rectangulares: 22 23 24 Rectangulares a esféricas: 25

26

27 Por tanto, en Matlab podemos definir las siguientes funciones: » maple('esfrec:=(r,t,f)->[r*sin(f)*cos(t),r*sin(f)*sin(t),r*cos(f)]'); » maple('cilrec:=(r,t,z)->[r*cos(t),r*sin(t),z]'); » maple('recesf:=(x,y,z)->(sqrt(x^2+y^2+z^2),arctan(y/x), arccos(z/sqrt(x^2+y^2+z^2)))'); » maple('reccil:=(x,y,z)->[sqrt(x^2+y^2),arctan(y/x),z]');Ejercicio 12-15. Expresar el punto dado en coordenadas esféricas 28en coordenadas rectangulares y cilíndricas. » maple('esfrec(4,pi/6,pi/4)') ans = [2^(1/2)*3^(1/2), 2^(1/2), 2*2^(1/2)] Ahora pasamos las rectangulares a cilíndricas

Page 330: Matlab Para Ingenieros y Cientificos

» maple('reccil(2^(1/2)*3^(1/2), 2^(1/2), 2*2^(1/2))') ans = [2*2^(1/2), 1/6*pi, 2*2^(1/2)] Ejercicio 12-16. Expresar el punto dado en coordenadas cilíndricas 29,en coordenadas rectangulares y esféricas. » maple('cilrec(4,5*Pi/6,3)') ans = [-2*3^(1/2), 2, 3] Ahora pasamos las rectangulares a esféricas. » maple('recesf(-2*3^(1/2), 2, 3)') ans = 5, -1/6*pi, acos(3/5) Ejercicio 12-17. Expresar las superficies de ecuaciones xz=1 y x2 + y2 + z2 =1en coordenadas esféricas. » pretty(maple('subs(x=r*sin(a)*cos(t),y=r*sin(a)*sin(t),z=r*cos(a), x*z=1)')) 2 r sin(a) cos(t) cos(a) = 1 » pretty(simple(maple('subs(x=r*sin(a)*cos(t),y=r*sin(a)*sin(t),z=r*cos(a), x^2+y^2-z^2=1)'))) 2 - r cos(2 a) = 1 Ejercicio 12-18. Expresar en coordenadas cartesianas y esféricas la superficiede ecuación z=r2 (1+Sen(t)) en coordenadas cilíndricas. » pretty(simple(maple('subs(r=sqrt(x^2+y^2),t=arctan(y/x),z=z, z=r^2*(1+sin(t)))')))

Page 331: Matlab Para Ingenieros y Cientificos

2 2 z = (x + y ) (1 + sin(atan(y/x))) Podemos intentar simplificar más el resultado en cartesianas. » pretty(maple('expand(simplify(subs(r=sqrt(x^2+y^2),t=arctan(y/x),z=z, z=r^2*(1+sin(t)))))')) 2 2 2 2 1/2 z = x + y + (x + y ) y Ahora vamos a pasar las cartesianas a esféricas. » pretty(simple(maple('subs(x=r*sin(a)*cos(t),y=r*sin(a)*sin(t),z=r*cos(a), z=(x^2+y^2)*(1+sin(atan(y/x))))'))) 2 2 2 2 2 2 r cos(a) = r sin(t) - r cos(a) sin(t) + r - r cos(a)

Page 332: Matlab Para Ingenieros y Cientificos

Capítulo 13

INTEGRACIÓN Y APLICACIONES

INTRODUCCIÓN Matlab trabaja con el cálculo integral de forma clara y sencilla. El número defunciones que habilita al respecto no es muy elevado, pero son muy eficientes a la horade resolver los problemas de integración. Se pueden calcular integrales indefinidas de la mayor parte de las funcionesintegrables cuya estructura no sea muy complicada, por ejemplo funciones que envuelvende forma simple logaritmos, exponenciales, funciones racionales, trigonométricas,trigonométricas inversas, etc. Las integrales definidas y las impropias no presentan problemas especiales paraMatlab. Las integrales dobles, triples y de dimensión n también son resolubles como elprograma. Las funciones más utilizadas en el cálculo integral son: int(f(x), ‘x’) Calcula la integral indefinida ò f(x) dx bint(f(x), ‘x’, ‘a’, ‘b’) Calcula la integral definida ò f(x) dx a int(int(f(x,y), ‘x’, ‘a’, ‘b’), ‘y’, ‘c’, ‘d’)) b d Calcula la integral definida ò ò f(x,y) dx dy

Page 333: Matlab Para Ingenieros y Cientificos

a c int(int(int(....int(f(x,y,...,z), ‘x’, ‘a’, ‘b’), ‘y’, ‘c’, ‘d’),...), ‘z’, ‘e’, ‘f’) b d f Calcula ò ò .... ò f(x,y,...,z) dx dy....dz a c e Veamos acontinuación algunos ejemplos: » int('1/(x^2-1)','x') ans = -atanh(x) » pretty(simple(int('a*log(1+b*x)','x'))) a (log(1 + b x) - 1) (1 + b x) ------------------------------ b » pretty(int('x^n','x')) (n + 1) x --------- n + 1 Hemos visto cómo Matlab permite introducir parámetros en las integrales, queson tratados como constantes genéricas » pretty(simple(int(int('x^3+y^3','x',0,'a'),'y',0,'b'))) 4 4 1/4 a b + 1/4 a b » pretty(simple(int(int('x^3+y^3','x',0,'a'),'y',0,'x'))) 4 4 1/4 a x + 1/4 a x En estos últimos ejemplos se han resuelto integrales definidas, una de la cualespresenta una variable como límite de integración, lo cual es perfectamente válido conMatlab.

Page 334: Matlab Para Ingenieros y Cientificos

INTEGRALES DE RESOLUCIÓN SENCILLA Integrales inmediatas En los ejemplos que siguen se va a mostrar la facilidad con que Matlab resuelvedirectamente ciertas integrales, que por los caminos clásicos no son tan evidentes.Matlab realiza de forma inmediata integrales que envuelven de forma simple funcionesracionales, exponenciales, logarítmicas, trigonométricas y trigonométricas inversas. Ejercicio 13-1. Calcular las integrales siguientes:

, , » pretty(simple(int('sec(x)*csc(x)'))) log(tan(x)) » pretty(simple(int('x*cos(x)'))) cos(x) + x sin(x) » pretty(simple(int('acos(2*x)'))) 2 1/2 x acos(2 x) - 1/2 (1 - 4 x ) Ejercicio 13-2. Calcular las integrales siguientes:

, , , » pretty(simple(int('1/sqrt(x^2+1)'))) 2 1/2 log(x + (x + 1) ) » pretty(simple(int('log(x)/x^(1/2)'))) 1/2 2 x (log(x) - 2) » pretty(simple(int('1/((2+x)*(1+x)^(1/2))'))) 1/2

Page 335: Matlab Para Ingenieros y Cientificos

2 atan((x + 1) ) » pretty(simple(int('x^3*sqrt(1+x^4)'))) 4 3/2 1/6 (1 + x ) MÉTODO DE INTEGRACIÓN POR SUSTITUCIÓN (O POR CAMBIO DE VARIABLE) Se trata de resolver integrales ò f(x) dx que no son inmediatas y que no seajustan a ningún otro método conocido. El método consiste en encontrar una función x=g(t), que al sustituirla por x bajoel signo integral, convierta la integral en otra más sencilla con variable t, y que en lamayoría de los casos resulta ser inmediata o racional. La sustitución x=g(t) debe cumplir: 1. g(t) derivable y con derivada no nula 30

2. x = g(t) debe admitir función inversa t=h(x) Una vez calculada la integral en función de t, habrá que sustituir t=h(x) para darla solución final en función de x. El método de sustitución es uno de los más amplios del cálculo integral por lagran variedad de sustituciones que se pueden dar, según el tipo de función que aparezcabajo el signo integral, pero la sustitución debe ser la recomendada para el tipo concreto,dado que el error al utilizar una sustitución inadecuada conducirá frecuentemente aintegrales de incluso mayor dificultad que la propia propuesta. Matlab aporta la función maple(‘changevar’), dentro de la librería student(que ha de ser cargada previamente con with(student)), que permite realizar integralespor el método de sustitución. Su sintaxis es la siguiente: maple(‘changevar(expr_vnueva=expr_vantigua, integral, v_nueva) Realiza el cambio de variable (especificado por la expresión en la variable nueva igualada a la

Page 336: Matlab Para Ingenieros y Cientificos

expresión en la variable antigua) en la integral dada y para la variable nueva también dada Como ejemplo calculemos la integral de la función 1/(1+ex), mediante el cambiode variable t=ex. » maple('with(student)')» pretty(simple(maple('changevar(t=exp(x),int(1/(1+exp(x)),x),t)'))) - log(1 + exp(x)) + x Funciones exponenciales, logarítmicas, hiperbólicas y circulares inversas El siguiente esquema resume las sustituciones (cambios de variable) a realizarsegún la función a integrar, donde R significa función racional de su argumentocorrespondiente. Función a integrar Sustitución Función inversa-------------------------------------------------------------------------------------------------------- R(ax) ax = t x = (1/lna)lnt R(x,ax) a = tx x = (1/lna)lnt R(ex) ex = t x = lnt R(x,ex) ex = t x = lnt R(x,lnx) lnx = t x = et

R(x,asenx) asenx = t x = senx R(x,acosx) acosx = t x = cost R(x,atanx) atanx = t x= tant R(x,senhx) ex = t x = lnt R(x,coshx) ex = t x = lnt R(x,tanhx) ex = t x = lnt

Page 337: Matlab Para Ingenieros y Cientificos

R(sinhx,coshx) ex = t x = lnt R(función hiperb.) ex = t x = lnt Ejercicio 13-3. Resolver las integrales siguientes:

, , , » pretty(simple(maple('changevar(t=atan(x/2),int(atan(x/2)/(4+x^2),x),t)'))) 2 1/4 t Ahora se deshace el cambio de variable para obtener el resultado final. » pretty(subs('1/4*t^2','atan(x/2)')) 2 1/4 atan(1/2 x) » pretty(simple(maple('changevar(t=asin(x),int(asin(x)/(1-x^2)^(3/2),x),t)'))) t tan(t) + log(cos(t)) Ahora deshacemos el cambio de variable. » pretty(subs('t*tan(t)','asin(x)')) asin(x) x -------------- 2 1/2 (1 - x ) » pretty(simple(maple('changevar(t=sin(x),int(cos(x)^3/sin(x)^(1/2),x),t)'))) 1/2 2 - 2/5 t (t - 5) » pretty(subs('-2/5*t^(1/2)*(t^2-5)','sin(x)'))

Page 338: Matlab Para Ingenieros y Cientificos

1/2 2 - 2/5 sin(x) (sin(x) - 5) Funciones irracionales, integrales binomias El siguiente esquema resume las sustituciones (cambios de variable) a realizar,según la función a integrar, donde R significa función racional de su argumentocorrespondiente. Todos estos tipos de integrales son resolubles mediante el comandomaple(‘changevar’), realizando la sustitución indicada en cada caso. Función a integrar Sustitución Función inversa m/n p/q ax+b M M ┌ ax+b ┐ ┌ ax+b ┐ ──── =t dt b R (x, │───── │,...,│───── │ ) cx+d x= ──────── └ cx+d ┘ └ cx+d┘ M M = mcm(n,..,q) a ct M M m/n p/q ax+b = t t b R (x, (x, (ax+b),...,(ax+b) ) x =────── M = mcm(n,...,q) a M m/n p/q r/s x = t R (x, x , x , ....,x ) M = mcm(n,q,..,s) 1 1 1 ───────────────────── ───── = t x = a + ─ p 2 1/2 x a t (x a) (ax +bx +c) 2 2 1/2 2 1/2 t c R (x, (ax +bx + c) a>0 (ax +bx+c) = xÖa +t x=──────── b

Page 339: Matlab Para Ingenieros y Cientificos

2tÖa 2 1/2 2 1/2 2tÖc b R (x, (ax +bx + c) c>0 (ax +bx+c) = Öc +xt x =──────── 2 a t 2 2 1/2 2 1/2 ab at R (x, (ax +bx + c) (ax +bx+c) = (x a)t x =──────── a,b son las raφces de 2 2 a t ax + bx + c = 0 2 1/2 Öc R (x, ( ax +c) ) x = ── SIN(t) Öa 2 1/2 Öc R (x, (ax c) ) x = ── SEC(t) Öa 2 1/2 Öc R (x, (ax +c) ) x = ── TAN(t) Öa BINOMIAS: m n p 1/n x (a+bx ) con p entero x = t

Page 340: Matlab Para Ingenieros y Cientificos

s 1/n m n p m+1 n s (t a) x (a+bx ) con ─── entero a+bx = t x =───────── n s=denominador de p 1/n b s -1/n m n p m+1 n s (t b) x (a+bx ) con ─── +p entero ax +b = t x=───────── n s=denominador de p 1/n a Ejercicio 13-4. Resolver las integrales siguientes:

, , , En la primera integral, que es irracional, procede el cambio 1/x=t » maple(‘with(student)’);» pretty(simple(maple('changevar(t=1/x,int(x^(-3)*(x^2+3*x-1)^(-1/2),x),t)'))) 2 1/2 2 1/2 1/2 (x + 3 x - 1) (x + 3 x - 1) (3x - 2) 131/2 ----------------- + 9/4 ----------------- + 31/8 asin(1/13 ---------------) 2 x x x En la segunda integral, que también es irracional, procede el cambio x=3/2 Sen(t),o lo que es lo mismo t=arcsen(2x/3) » pretty(simple(maple('changevar(t=asin(2*x/3), int(x^(-1)*(9-4*x^2)^(-1/2), x),t)')))

Page 341: Matlab Para Ingenieros y Cientificos

2 1/2 3 + (9 - 4 x ) - 1/3 log(1/2 --------------- x En la tercera integral, que es binomia, hacemos el cambio 3+5x3=t4 » pretty(simple(maple('changevar(t=(3+5*x^3)^(1/4),int(x^8*(3+5*x^3)^(1/4), x),t)'))) 3 5/4 6 3 4/73125 (3 + 5 x ) (375 x - 200 x + 96) INTEGRACIÓN POR PARTES Sean u=f(x) y v=g(x) dos funciones de x derivables. Por la fórmula de ladiferencial de un producto de funciones tendremos: d(u.v) = u.dv + v.du, despejando u.dv tendremos: u.dv = d(u.v) v.du, integrando en ambos miembros tendremos: òu.dv = òd(u.v) òv.du, con lo que nos queda: òu.dv = u.v òv.du al ser u=f(x), du=f'(x).dx al ser v=g(x), dv=g'(x).dx La expresión final de la integral será: ò f(x).g'(x).dx = f(x).g(x) òg(x).f'(x) El método estriba fundamentalmente en descomponer la integral original en elproducto de dos funciones, de tal forma que al aplicar la fórmula la nueva integral seamás sencilla que la original. Si ponemos: òu.dv = òf(x).g'(x).dx = ò P(x).Q(x).dx

Page 342: Matlab Para Ingenieros y Cientificos

podríamos hacer una tabla con determinados asignaciones a hacer a u y a dv según lanaturaleza de las funciones P(x) y Q(x). Normalmente las integrales por partes se ajustan bien a los cambios que se vana relacionar a continuación, pero éllo no quiere decir que no puedan utilizarse otroscualesquiera. P(x) Q(x) u dv -------------------------------------------------------------------------------------------------------- Función inversa de circular, La unidad u otralogarítmica o hiperbólica.. constante cualquiera P(x) Q(x) dx Función inversa de circular, Polinomio en x ologarítmica o hiperbólica.. función racional en x P(x) Q(x) dx Polinomio en x o función Función exponencial,racional en x hiperbólica directa o P(x) Q(x)dx circular Función exponencial Función circular o hiperbólica directa P(x) Q(x) dx Matlab aporta el comando maple(‘intparts’) que permite realizar integrales porpartes directamente. Dicho comando pertenece a la librería student, con lo que ha de sercargado previamente en memoria con el comando maple(‘with(student)’). La sintaxis esla siguiente: maple(‘intparts(int(f(x),x), u(x))’) Realiza la integral por partes de la función f(x), siendo u(x) la parte de f(x) que se diferencia (òf(x)dx= òu(x)v(x)du(x)) Como ejemplo, calculamos la integral de la función (3x2+2x-7)Cos(x) » pretty(simple(maple('intparts(int((3*x^2+2*x-7)*cos(x),x),3*x^2+2*x-7)'))) 2 3 x sin(x) - 13 sin(x) + 6 cos(x) x + 2 cos(x) + 2 xsin(x) Ejercicio 13-5. Resolver las integrales siguientes:

Page 343: Matlab Para Ingenieros y Cientificos

, , 31 Para la primera integral hacemos u(x)=5x2-3 maple(‘with(student)’);» pretty(simple(maple('intparts(int((5*x^2-3)*4^(3*x+1),x),5*x^2-3)'))) x 2 2 2 64 (5 - 54 log(2) - 30 x log(2) + 90 x log(2)) 1/27 -------------------------------------------------- 3 log(2) Para la segunda integral hacemos u(x)=ex

» pretty(simple(maple('intparts(int(exp(x)*cos(x),x),exp(x))'))) 1/2 exp(x) (cos(x) + sin(x)) Para la tercera integral hacemos u(x)=x » pretty(simple(maple('intparts(int(sin(ln(x))*x^2,x),x)'))) 3 2 x (- 1 + 6 tan(1/2 log(x)) + tan(1/2 log(x)) ) 1/10 ----------------------------------------------- 2 1 + tan(1/2 log(x)) INTEGRACIÓN POR REDUCCIÓN E INTEGRACIÓN CÍCLICA La integración por reducción (fórmulas de reducción) se aplica a integrales confunciones de exponentes normalmente enteros, pero elevados, buscando obtener unaparte integrada y una parte sin integrar, en la que aparecerá la misma integral inicialpero con estos exponentes disminuidos. De esta forma se puede ir rebajando elexponente hasta llegar a integrales de resolución directa. En cada caso se puede obtener la fórmula de reducción directamente, y

Page 344: Matlab Para Ingenieros y Cientificos

posteriormente aplicarla al problema concreto. El procedimiento usual es hacer en primer lugar una integración por partes, quenos conducirá a una parte ya integrada y a una integral parecida a la inicial, peroreducida en el exponente. En la integración cíclica se sigue el mismo procedimiento relatado antes, pero alfinal se obtiene la misma integral que teníamos al principio (salvo constantes), con locual se pueden hacer operaciones despejando la integral problema, para hallar así suvalor final. En ambos casos, el problema radica en la elección adecuada de la función u(x)para la aplicación correcta de la fórmula general de integral por partes. Matlab calculadirectamente el valor final de este tipo de integrales en la mayoría de los casos. En lapeor de las circunstancias suele hallarse el valor final de la integral después de larealización de un primer paso por partes, o como mucho dos o tres. Ejercicio 13-6. Resolver las integrales siguientes:

, , Resolvemos la primera integral por partes poniendo u(x)=(sen(x))11

» maple('with(student)');» pretty(simple(maple('intparts(int(sin(x)^13*cos(x)^15,x),sin(x)^12)'))) 16 12 10 8 6 - 1/48048 cos(x) (1716 sin(x) + 792 sin(x) + 330 sin(x) +120 sin(x) 4 2 + 36 sin(x) + 8 sin(x) + 1) Resolvemos la segunda integral por partes poniendo u(x)=x7

» pretty(simple(maple('intparts(int(x^7*sqrt(a+b*x),x),x^7)'))) 3/2 2 5 5 6 5 2 2 - 2/109395 (a + b x) (- 5544 a b x - 3072 a b x + 3840 a b x

Page 345: Matlab Para Ingenieros y Cientificos

4 3 3 3 4 4 6 6 7 7 7 8 - 4480 a b x + 5040 a b x + 6006 a b x + 2048 a -6435 b x )/b Resolvemos la tercera integral por partes poniendo u(x)=(cos(x))10

» pretty(simple(maple('intparts(int(exp(12*x)*cos(x)^11,x),cos(x)^10)'))) 11 101/63918719475 exp(12 x) (2894432580 cos(x) + 2653229865 cos(x) sin(x) 9 8 7 + 1415055928 cos(x) + 1061291946 cos(x) sin(x) + 527896512cos(x) 6 5 4 + 307939632 cos(x) sin(x) + 131193216 cos(x) + 54663840cos(x) sin(x) 3 2 + 17149440 cos(x) + 4287360 cos(x) sin(x) + 709632 cos(x) +59136 sin(x)) LA INTEGRAL DEFINIDA La integral definida adquiere su fuerza a la hora de aplicar las técnicas y conceptosde la integración a los problemas prácticos. No se tratan aquí con conceptos teóricos,pero sí se presentan algunos ejemplos de las aplicaciones más comunes.LONGITUD DE UN ARCO DE CURVA Una de las aplicaciones más comunes del cálculo integral es hallar longitudes dearcos de curva. Para una curva plana de ecuación y=f(x), la longitud del arco de curvacomprendido entre los puntos de abcisas x=a y x=b, viene dada por la expresión: b 2 1/2L = ò (1+f’(x) ) dx a

Page 346: Matlab Para Ingenieros y Cientificos

Para una curva plana con coordenadas paramétricas x=x(t) y=y(t),la longitud del arco de curva comprendido entre los puntos relativos a los valores t=t0 yt=t1 del parámetro, viene dada por la expresión: t1 2 2 1/2L = ò (x’(t)+y’(t) ) dt t0 Para una curva en coordenadas polares de ecuación r=f(a), la longitud del arcode curva comprendido entre los puntos relativos a los valores a=a0 y a=a1 delparámetro, viene dada por la expresión: a1 2 2 1/2L = ò (r +r’(a) ) dr a0 Para una curva alabeada con coordenadas paramétricas x=x(t) y=y(t) z=z(t),la longitud del arco de curva comprendido entre los puntos relativos a los valores t=t0 yt=t1 del parámetro, viene dada por la expresión: t1 2 2 2 1/2L = ò (x’(t) + y’(t) + z’(t) ) dt t0 Para una curva alabeada en coordenadas cilíndricas de ecuaciones x=rCos(a),y=rSen(a), Z=z, la longitud del arco de curva comprendido entre los puntos relativos alos valores a=a0 y a=a1 del parámetro, viene dada por la expresión: a1 2 2 2 1/2L = ò (r + r’ + z’ ) dr a0 Para una curva alabeada en coordenadas esféricas de ecuacionesx=rSen(a)Cos(b), y=rSen(a)Sen(b), z=rCos(a), la longitud del arco de curva comprendidoentre los puntos relativos a los valores a=a0 y a=a1 del parámetro, viene dada por laexpresión: a1 2 2 2 2 2 2 1/2L = ò (dr +rda+r Sen(a)db ) dr a0 Ejercicio 13-7. Un cable eléctrico cuelga entre dos torres que están separadas 80 metros. El

Page 347: Matlab Para Ingenieros y Cientificos

cable adopta la posición de una catenaria cuya ecuación es:

32 Calcular la longitud del arco de cable entre las dos torres. Dada la simetría de la curva respecto del eje de ordenadas, los límites deintegración serán -40 y 40 » f='100*cosh(x/100)';» diff(f,'x') ans = sinh(1/100*x) » pretty(simple(int('(1+sinh(1/100*x)^2)^(1/2)','x','-40','40'))) 100 exp(2/5) - 100 exp(-2/5) Si queremos el resultado aproximado usamos el comando numeric. » numeric(simple(int('(1+sinh(1/100*x)^2)^(1/2)','x','-40','40'))) ans = 82.1505 Resultado: 82.1505 m Ejercicio 13-8. Calcular la longitud de la curva espacial representada por las ecuacionesparamétricas:

33, desde t=0 hasta t=2. »pretty(simple(int('(diff(t,t)^2+diff((4/3)*t^(3/2),t)^2+diff((1/2)*t^2,t)^2)^(1/2)', 't','0','2')))

Page 348: Matlab Para Ingenieros y Cientificos

1/2 1/2 2 13 - 3/2 log(13 + 4) - 1 + 3/2 log(3) Ahora redondeamos el resultado. »numeric(simple(int('(diff(t,t)^2+diff((4/3)*t^(3/2),t)^2+diff((1/2)*t^2,t)^2)^(1/2)' ,'t','0','2'))) ans = 4.8157 Resultado: 4.8157 Ejercicio 13-9. Hallar la longitud del arco definido para valores desde a=0 hasta a=2pi en lacardioide de ecuaciones polares r=3-3cos(a) » r='3-3*cos(a)'; » diff(r,'a') ans = 3*sin(a) » R=simple(int('((3-3*cos(a))^2+(3*sin(a))^2)^(1/2)','a','0','2*pi')) R = 24 Resultado: 24 ÁREA COMPRENDIDA ENTRE CURVAS El área comprendida entre una curva de ecuación y=f(x) y el eje x viene dada, deforma general, por la integral: b

Page 349: Matlab Para Ingenieros y Cientificos

S = | ò f(x) dx | a siendo x=a y x=b las abcisas de los puntos de corte de la curva con el eje de abcisas. Si la curva viene en coordenadas paramétricas x=x(t) y=y(t), el área viene dadapor la integral: b S = | ò y(t) x’(t) dt | a para los valores correspondientes del parámetro t=a y t=b, en los puntos de corte. Si la curva viene en coordenadas polares r=f(a), el área viene dada por laintegral: a1 2S = ½ ò f(a) da a0 para los correspondiente valores a0 y a1 del parámetro a en los puntos de corte. Si se quiere calcular el área comprendida entre dos curvas de ecuaciones y=f(x) e y=g(x), utilizaremos la integral: b S = ò |f(x) - g(x)| dx a siendo x=a y x=b las abcisas de los puntos de corte de las dos curvas. Es muy importante tener en cuenta el signo de las funciones a la hora dedelimitar los recintos para el cálculo de las correspondientes áreas. Nunca se debensumar valores negativos de áreas con valores positivos. Se dividirá la región deintegración en las subregiones necesarias para que no se computen simultáneamenteáreas positivas y negativas. Las áreas que resulten negativas se consideran en módulo. Ejercicio 13-10. Hallar el área de la región limitada por las gráficas de 34 Habremos de hallar las abcisas de los puntos de corte, planteando la ecuación:

Page 350: Matlab Para Ingenieros y Cientificos

35 » solve('2-x^2=x') ans = [-2][ 1] Ahora ya podemos plantear el área a calcular » int('2-x^2-x','x',-2,1) ans = 9/2 Resultado: 4.5 unidades cuadradas En la figura 13-1 se presenta un gráfico que ilustra el área a calcular » fplot('[2-x^2,x]',[-2,1])

Figura 13-1

Ejercicio 13-11. Calcular el área bajo la curva normal entre los límites 1.96 y 1.96

Se trata de calcular la integral 36 » numeric(int('exp(-x^2/2)/(2*pi)^(1/2)','x',-1.96,1.96)) ans = 0.9500Ejercicio 13-12. Calcular el área de la elipse de semiejes a y b

Page 351: Matlab Para Ingenieros y Cientificos

Como es conocido, la ecuación de esta elipse es: 37 Despejando y, y tomando la raíz positiva, queda en la forma:

38 Por la simetría de la elipse, el área de la misma será cuatro veces la integral deesta expresión entre 0 y a. Se trata pues de calcular:

» pretty(int('(4*b*(a^2-x^2)^(1/2))/a','x',0,'a')) a pi b El resultado pedido es por tanto p a b. Ejercicio 13-13. Calcular la longitud y el área encerrada por las curvas: x(t) = Cos[t] (2-Cos[2t])/4 y(t) = Sin[t] (2+Cos[2t])/4 En primer lugar realizamos la representación gráfica de la curva, para hacernosuna idea del problema (figura 13-2). » x=(0:.1:2*pi);» t=(0:.1:2*pi);» x=cos(t).*(2-cos(2*t))./4;» y=sin(t).*(2+cos(2*t))./4;» plot(x,y)

Figura 15.2

Page 352: Matlab Para Ingenieros y Cientificos

Se trata de una curva cerrada, con variación del parámetro entre 0 y 2p. Luegoya podemos calcular su longitud y el área que encierra » A=simple(diff('cos(t)*(2-cos(2*t))/4')) A = -3/8*sin(t)+3/8*sin(3*t) » B=simple(diff('sin(t)*(2+cos(2*t))/4')) B = 3/8*cos(t)+3/8*cos(3*t) Ahora aplicamos la fórmula de la longitud de una curva en coordenadasparamétricas (considerando solo medio cuadrante). » int('sqrt((-3/8*sin(t)+3/8*sin(3*t))^2+(3/8*cos(t)+3/8*cos(3*t))^2)','t',0,pi/4) ans = 3/8 Como en total hay 8 medios cuadrantes tenemos que L=8*(3/8)=3. La longitud de la curva es 3 unidades. Para calcular el área dividimos la superficieen 4 trozos iguales (para evitar la suma de cantidades positivas con negativas), haciendovariar t entre 0 y p/2. El área de cada trozo será el valor absoluto de la integral entre 0 yp/2 del producto y(t)*x’(t). » S=simple(int('(sin(t)*(2+cos(2*t))/4)*(-3/8*sin(t)+3/8*sin(3*t))','t',0,pi/2)) S = -3/128*pi Luego la superficie encerrada por la curva es de 3p/32 unidades cuadradas. Ejercicio 13-14. Calcular la longitud y el área encerrada por cada curva en polares:

Page 353: Matlab Para Ingenieros y Cientificos

r = Sqrt[Cos[2 a]] y r = Sin[2 a] Comenzamos representando ambas curvas sobre el mismo gráfico. Ver la figra17-3. A continuación utilizaremos las fórmulas de longitudes y áreas en polares,adecuadas a los límites deducidos de los recintos gráficos. » a=0:.1:2*pi;» subplot(1,2,1)» r=sqrt(cos(2*a));» polar(a,r)» title(' r = (Cos(2a))^(1/2)')» subplot(1,2,2)» r=sin(2*a);» polar(a,r)» title(' r = Sen(2a)')

Figura 13-3

Ahora calculamos las longitudes y superficies pedidas para ambas curvas. Laprimera de ellas repite 4 veces su estructura para a entre 0 y p/4 y la segunda para aentre 0 y p/2 » r='sqrt(cos(2*a))';» A=simple(diff(r,'a')) A = -1/cos(2*a)^(1/2)*sin(2*a) Calculamos la superficie S1 encerrada por la primera curva.

Page 354: Matlab Para Ingenieros y Cientificos

» I=simple(int('(sqrt(cos(2*a)))^2','a',0,pi/4)) I = 1/2 Tenemos que S1 = 4*(1/2)*I = 1 unidades cuadradas Ahora hallamos la longitud L1 de la primera curva. » integrando=simple('sqrt((sqrt(cos(2*a))^2+(-1/cos(2*a)^(1/2)*sin(2*a))^2))') integrando = 1/cos(2*a)^(1/2) » I=numeric(int('1/cos(2*a)^(1/2)','a',0,pi/4)) I = 1.3110 Luego L1 = 4*I = 4*1.3110 = 5,244 unidades Ahora hallamos la superficie encerrada por la segunda curva. » r='sin(2*a)';» B=simple(diff(r)) B = 2*cos(2*a) » I=simple(int('sin(2*a)^2','a',0,pi/2)) I = 1/4*pi La superficie será S2=4*(1/2)*I = p/2 unidades cuadradas A continuación hallamos la longitud L2 de la curva.

Page 355: Matlab Para Ingenieros y Cientificos

» I=numeric(int('sqrt(sin(2*a)^2+(2*cos(2*a))^2)','a',0,pi/2)) I = 2.4221 Tenemos que L2 = 4*2.4221 = 9,6884 unidades cuadradas. Ejercicio 13-15. Calcular el área encerrada por las curvas: y = Sin[x] e y = Cos[x] para x variando entre 0 y 2p Realizamos la representación gráfica de ambas curvas sobre los mismos ejes(figura 13-4) para hacernos una idea de los puntos de intersección y la regióncomprendida » fplot('[sin(x),cos(x)]',[0,2*pi])

Figura 13-4

Necesitamos saber las abcisas de los puntos de intersección de las dos curvas.Para ello resolvemos el sistema que forman sus ecuaciones. El comando solve no resuelve el problema, por lo tanto utilizaremos el comandomaple(‘fsolve’) para posibles soluciones en los intervalos (0,1) y (1,2p) deducidos de laobservación de las abcisas de los puntos de intersección de ambas gráficas » maple('fsolve(sin(x)=cos(x),x,0..1)') ans = .7853981633974483 » maple('fsolve(sin(x)=cos(x),x,1..2*pi)') ans =

Page 356: Matlab Para Ingenieros y Cientificos

3.926990816987242 Ahora calculamos el área entre las dos curvas como sigue: » S1=numeric(int('cos(x)-sin(x)','x',0,0.785398)) S1 = 0.4142 » S2=numeric(int('cos(x)-sin(x)','x',0.785398,3.92699)) S2 = -2.8284 » S3=numeric(int('cos(x)-sin(x)','x',3.92699,2*pi)) S3 = 2.4142 I=S1+abs(S2)+S3 = 5.6569 unidades cuadradas SUPERFICIES DE REVOLUCIÓN El área engendrada por la curva de ecuación y=f(x) al girar alrededor del eje x,viene dada por la integral: b 2 ½ t1 1/2S = 2p ò f(x) [1+f’(x) ] dx y S = 2p ò y(t) [x’(t)^2+y’(t)^2 ] dt a t0 en coordenadas paramétricas, siendo x=a y x=b los valores de las abcisas de los puntosque delimitan el arco de curva que gira (t0 y t1 son los valores del parámetrocorrespondiente a esos puntos). El área engendrada por la curva de ecuación x=f(y) al girar alrededor del eje y,viene dada por la integral:

Page 357: Matlab Para Ingenieros y Cientificos

b 2 1/2S = 2p ò f(y) [1+f’(y) ] dy a siendo y=a e y=b los valores de las ordenadas de los puntos que delimitan el arco decurva que gira. Ejercicio 13-16. Calcular el área engendrada al girar la cúbica 12 x - 9 x2 + 2 x3

alrededor del eje OX, comprendida entre x=0 y x=5/2 La superficie de revolución tendrá de ecuación y2+z2 =(12x-9x2+2x3) 2 , y paragraficarla en la figura 13-5 puede parametrizarse como sigue: x = t, y = Cos(u)*(12t-9t2+2t3), z= Sen(u)*(12t-9t2+2t3) » t=(0:.1:5/2);» u=(0:.5:2*pi);» x=ones(size(u))'*t;» y=cos(u)'*(12*t-9*t.^2+2*t.^3);» z=sin(u)'*(12*t-9*t.^2+2*t.^3);» surf(x,y,z)

Figura 13-5

Ahora hallamos la superficie de revolución mediante integración. » I=numeric(int('(2*x^3-9*x^2+12*x)*sqrt(1+(6*x^2-18*x+12)^2)','x',0,5/2)) I =

Page 358: Matlab Para Ingenieros y Cientificos

0.8656 La superficie pedida será 2p(0.8656) = 1.7312 p unidades cuadradas. Ejercicio 13-17. Calcular el área engendrada al girar la curva: x(t)=t - Sin[t] y(t)= 1 - Cos[t] alrededor del eje OX, comprendida entre t=0 y t=2p » x='t-sin(t)';» y= '1-cos(t)';» [diff(x),diff(y)] ans = 1-cos(t) sin(t) Ahora hallamos el área de revolución pedida por integración. » I=numeric(int('(1-cos(t))*sqrt(abs((1-cos(t))^2+sin(t)^2))','t',0,2*pi)) I = 10.6667

El área será 2p(10.6667) = 21.3334p unidades cuadradas VOLÚMENES DE REVOLUCIÓN El volumen engendrado por la curva de ecuación y=f(x) al girar alrededor del ejex, viene dado por la integral: b 2S = p ò [f(x)] dx a siendo x=a y x=b los valores de las abcisas de los puntos que delimitan el arco de curvaque gira. El volumen engendrado por la curva de ecuación x=f(y) al girar alrededor del eje

Page 359: Matlab Para Ingenieros y Cientificos

y, viene dado por la integral: b 2S = p ò [f(y)] dy a siendo y=a e y=b los valores de las ordenadas de los puntos que delimitan el arco decurva que gira. Si seccionamos una superficie por planos paralelos a uno de los tres planoscoordenados (por ejemplo al plano z=0) y su ecuación podemos ponerla en función de ladistancia al origen (en este caso z). Es decir, la ecuación de la superficie se puede ponerde la forma S(z), entonces el volumen comprendido por los planos y la superficie vienedado por: z2V = ò S(z) dz z1 Ejercicio 13-18. Calcular el volumen engendrado al girar la elipse: x2 y2

-- + -- = 1 alrededor del eje OX y alrededor del eje OY 4 9 Representamos sobre el mismo gráfico las figuras generadas, pero solamente ensu mitad positiva. El volumen final será el doble del representado (figura 13-6). Laecuación de la figura de revolución alrededor del eje OX es y2+z2 = 9(1-x2/4), y separametriza así: x=t, y = 3 Cos(u) (1-t2/4) 1/2, z = 3 Sen(u) (1-t2/4) 1/2

La ecuación de la figura de revolución alrededor del eje OY se escribe comox2+z2 = 4(1-y2/4), y se parametriza así: x = 3 Cos(u) (1-t2/9) 1/2, y=t, z = 3 Sen(u) (1-t2/9) 1/2

» t=(0:.1:2);» u=(0:.5:2*pi);» x=ones(size(u))'*t;» y=cos(u)'*3*(1-t.^2/4).^(1/2);

Page 360: Matlab Para Ingenieros y Cientificos

» z=sin(u)'*3*(1-t.^2/4).^(1/2);» subplot(1,2,1)» surf(x,y,z)» subplot(1,2,2)» x=cos(u)'*3*(1-t.^2/4).^(1/2);» y=ones(size(u))'*t;» z=sin(u)'*3*(1-t.^2/4).^(1/2);» surf(x,y,z)

Figura 13-6

Ahora calculamos los volúmenes pedidos por integración.

» V1=int('pi*9*(1-x^2/4)','x',-2,2) V1 = 24*pi » V2=int('pi*4*(1-y^2/9)','y',-3,3) V2 = 16*pi Ejercicio 13-19. Calcular el volumen engendrado al girar la curva: r = 1+Cos(a) alrededor del eje OX La curva viene en coordenadas polares, pero no hay ningún problema en calcularlos valores de x(a) e y(a) necesarios para aplicar la fórmula conocida en coordenadascartesianas. x(a)= r(a)Cos(a)= (1+cos(a))Cos(a) y(a)= r(a)Sen(a)= (1+cos(a))Sen(a)

Page 361: Matlab Para Ingenieros y Cientificos

ò p y(a)2 dx(a)=ò p (1+cos(a))2 (Sen(a)) 2 [(1+cos(a)) (-Sen(a))-Sen(a)Cos(a)] da » x='(1+cos(a))*cos(a)';» y='(1+cos(a))*sin(a)';» A=simple(diff(x)) A = -sin(2*a)-sin(a) » I=int('((1+cos(a))*sin(a))^2*(-sin(2*a)-sin(a))','a',0,pi) I = -8/3 El volumen será p(abs(I))=8/3 p unidades cúbicas. INTEGRALES CURVILÍNEAS _ Sea F un campo vectorial en R3 que sea continuo sobre la trayectoria _continua con derivada continua c:[a,b]------->R3 . Definimos ò F . ds, y la _ cdenominamos la integral de línea de F a lo largo de la curva c, como sigue: _ b _ ò F. ds = ò F(c(t)) . c´(t) dt c a Ejercicio 13-20. Sea la curva c(t)=(Sen(t),Cos(t),t) con 0<t<2p, y sea el campo vectorialF(x,y,z)=xi+yj+zk. Calcular ò C F . ds » derivadaC=[diff('sin(t)'),diff('cos(t)'),diff('t')] derivadaC =

Page 362: Matlab Para Ingenieros y Cientificos

cos(t) -sin(t) 1 » pretty(int('dotprod(vector([sin(t),cos(t),t]),vector([cos(t),-sin(t),1]))','t',0,2*pi)) 2 2 pi Ejercicio 13-21. Sea la trayectoria C de ecuaciones paramétricas: x=cos(a)^3, y=sin(a)^3, z=a con 0<a<7p/2. Calcular òC (Sen(z)dx + Cos(z)dy - (xy) dz )1/3

» derivadaC=[diff('cos(a)^3'),diff('sin(a)^3'),diff('a')] derivadaC = -3*cos(a)^2*sin(a) 3*sin(a)^2*cos(a) 1 » pretty(numeric(int('dotprod(vector([sin(a),cos(a),-sin(a)^3*cos(a)^3]), vector([-3*cos(a)^2*sin(a),3*sin(a)^2*cos(a),1]))^(1/3)','a',0,7*pi/2))) -1/2Ejercicio 13-22. Sea la trayectoria C dada por la circunferencia: x2 + y2 = a2

Calcular ò C x3 dy - y3 dx Primero se parametriza la circunferencia (x=aCos(t), y=aSin(t)) y luego secalcula la integral curvilínea a lo largo de ella. » pretty(int('a*cos(t)^3*diff(a*sin(t),t)-a*sin(t)^3*diff(a*cos(t),t)','t',0,2*pi)) 2 3/2 a pi

Page 363: Matlab Para Ingenieros y Cientificos

Capítulo 14

TIPOS ESPECIALES DE INTEGRALES

INTEGRALES EULERIANAS La función Gamma La función G(p), llamada Gamma de Euler, se define para p>0, mediante laintegral:

También se conoce como integral euleriana de segunda especie. Matlabofrece los siguientes comandos relacionados con la función G : gamma(p) Función Gamma de Euler de 2ª especie (p>0) x

gammainc(x,p) Función Gamma incompleta: G(x,p)=(1/G(p)) ò tp-1e-tdt 0gammaln(p) Logaritmo de la función Gamma log(gamma(p) Para argumentos complejos, Matlab ofrece las siguientes funciones dematemática simbólica: ¥GAMMA(z) Función Gamma : G(z) = ò tz-1 e-t dt 0 ¥

GAMMA(z1,z2) Función Gamma incompleta: G(a,z)=ò ta-1e-t dt zlnGAMMA(z) Logaritmo de Gamma: ln G(z) = ln(G(z))

Page 364: Matlab Para Ingenieros y Cientificos

Psi(z) Función Digamma: y (z) = G´(z)/ G(z) Psi(n,z) Función Poligamma: y (n)(z) = dn /dzn (y (z))

Para acceder a estas funciones de matemática simbólica es necesario utilizar elcomando “mfun”, cuya sintaxis es la siguiente: mfun('función',p1,p2,p3,p4) Evalúa la función especificada para los argumentos especificados Si p es un número natural, G(p) = (p 1)! Ejercicio 14-1. Resolver las integrales siguientes:

La primera integral se resuelve de la forma siguiente: » gamma(4) ans = 6 La segunda integral se resuelve de la forma siguiente: » gamma(4)*gammainc(5,4) ans = 4.4098 En la tercera integral realizamos el cambio x3 = t, para obtener la integral:

que se resuelve de la siguiente forma: » (1/3)*mfun('GAMMA',(2/3)*i-2/3+1)

Page 365: Matlab Para Ingenieros y Cientificos

ans = 0.1312 - 0.2897i En la cuarta integral también realizamos el cambio x3 = t, y queda:

que se resuelve de la siguiente forma: » (1/3)*mfun('GAMMA',(2/3)*i-2/3+1,i^3) ans = -0.1651 + 0.5300i La función beta La función ß(p,q), llamada Beta de Euler, se define mediante la integral:

Esta función se llama también integral euleriana de primera especie. Matlabhabilita al efecto los siguientes comandos: 1beta(z,w) Función Beta, con valor ò t z-1 (1-t) w-1 dt 0

1 1betainc(z,w) Función Beta incompleta = ------------ ò t z-1 (1-t) w-1 dt beta(z,w) 0 betaln(z,w) Logaritmo de la función Beta log(beta(z,w) A su vez existe la función simbólica de argumentos complejos dada por Beta(z1,z2) Función Beta, con valor G(z1) G(z2) / G(z1+z2)

Page 366: Matlab Para Ingenieros y Cientificos

Se cumple siempre que :

Ejercicio 14-2. Resolver las integrales siguientes:

La primera integral se resuelve mediante: » beta(5,4)*betainc(1/2,5,4) ans = 0.0013 La segunda integral se resuelve mediante la expresión: » mfun('Beta',i+1,2*i+1) ans = -0.5089 - 0.4009i Para la tercera integral hacemos el cambio de variable x1/3 = 2t, con lo que laintegral se convierte en la siguiente:

cuyo valor se calcula mediante la expresión Matlab: » 6*2^(3/4)*beta(3/2,5/4)

Page 367: Matlab Para Ingenieros y Cientificos

ans = 5.0397 INTEGRALES ELÍPTICAS Matlab habilita funciones simbólicas que calculan los valores de las integraleselípticas de primer, segundo y tercer orden. Son las siguientes: La función LegendreF(k,m) calcula el valor de la integral elíptica incompletade primer orden (k > 0, 0 < m < 1):

La función LegendreE(k,m) calcula el valor de la integral elíptica incompletade segundo orden (k > 0, 0 < m < 1):

La función LegendrePi(k,n,m) calcula el valor de la integral elípticaincompleta de tercer orden (k > 0, 0 < m < 1, n real):

Además, Matlab dispone de las integrales elípticas completas de primero,segundo y tercer orden, cuyas funciones simbólicas son: LegendreKc(m) = LegendreF(p/2,m) LegendreEc(m) = LegendreE(p/2,m) LegendrePic(n,m) = LegendrePi(p/2,n,m) Matlab también dispone de las integrales elípticas asociadas (para módulo mcomplementario), cuyas funciones simbólicas son: LegendreKc1(m) = LegendreKc(sqrt(1-m2))

Page 368: Matlab Para Ingenieros y Cientificos

LegendreEc1(m) = LegendreEc(sqrt(1-m2)) LegendrePic1(n, m) = LegendrePic(n, sqrt(1-m2)) Las primitivas correspondientes a integrales elípticas son de difícil cálculoalgebraico. El hecho de estandarizar su resolución permite hallar el valor de múltiplestipos de integrales, que por cambio de variable, pueden reducirse a integrales elípticas.En los ejemplos veremos varios ejercicios de este tipo. El cálculo de longitudes de curvas cerradas es uno de los campos de aplicaciónmás comunes de las integrales elípticas. Ejercicio 14-3. Hallar el valor de las integrales siguientes:

39 Para la primera integral (irracional), como el polinomio subradical es de tercergrado, se hace el cambio x = a + t2 , siendo a una de las raíces del polinomio subradical.Tomamos la raíz x=3 y hacemos el cambio x = 3 + t2, con lo que obtenemos la integral:

Hagamos ahora el cambio t=(2/Ö3) tan u, con lo que la integral se transforma enla elíptica completa de primer orden:

cuyo valor se calcula mediante la expresión: » 2/3*mfun('LegendreKc',sqrt(1/9)) ans =

Page 369: Matlab Para Ingenieros y Cientificos

1.0783 De todas maneras, la forma de pasar una integral a euleriana, depende del cambioque se haga. Si planteamos directamente la integral a Matlab, nos devuelve unatransformación a euleriana, de las varias posibles. » int('(6*x^3-37*x^2+72*x-45)^(-1/2)','x',3,inf) ans = 1/2*LegendreF(1,1/2*3^(1/2)) » numeric(ans) ans = 1.0783 Para la segunda integral , hacemos el cambio x = sen t y tendremos:

Hemos reducido el problema a dos integrales elípticas, la primera completa deprimera especie y la segunda completa de segunda especie, cuyo valor puede calcularsemediante la expresión: » 5/2*mfun('LegendreKc',sqrt(1/4))-2*mfun('LegendreEc',sqrt(1/4)) ans = 1.2795 Ejercicio 14-4. Calcular la longitud de un período completo de la sinusoidey=3sen(2x) La longitud de esta curva vendrá dada por la fórmula:

Page 370: Matlab Para Ingenieros y Cientificos

O lo que es lo mismo:

Hagamos el cambio de variable 2x=t. Usaremos cos2(t)=1 sin2(t), y estamosante la integral elíptica completa de segundo orden siguiente:

cuyo valor lo hallamos mediante la expresión: » 2*sqrt(37)*mfun('LegendreEc',sqrt(36/37)) ans = 12.6116 INTEGRALES EXPONENCIALES Y LOGARÍTMICAS En este apartado veremos como trata Matlab determinados tipos de integrales,cuyo cálculo es muy difícil por métodos tradicionales. Las funciones a integrar serán detipo exponencial, logarítmicas y trigonométricas, y en muchas ocasiones serán impropias. Matlab ofrece al respecto las siguientes funciones simbólicas : x

Ei(z) Integral exponencial: ò e-t/t dt (valor principal) -¥

¥

Ei(n,z) Integral exponencial ampliada: ò e-zt/tn dt (Real(z)>0) 1 x

Li(x) = Ei(ln(x)) Logaritmo integral: ò dt/ln(t) (valor principal) x>1 0 xdilog(x) Integral dilogarítmica: ò ln(t)/(1-t) dt x>1 1 z

erf(z) Función error: 2/Öp ò e-t^2 dt

Page 371: Matlab Para Ingenieros y Cientificos

0 ¥

erfc(z) Complemento error: 2/Öp ò e-t^2 dt = 1 - erf(z) z ¥

erfc(n, z) erfc(n,z) = ò erfc(n-1,t) dt, erfc(-1,x) = 2/Öp e-x^2

z x

dawson(x) Integral de Dawson: e-x^2 ò e-t^2 dt 0 En todas las funciones z significa variable compleja. Matlab tambiém implementa las funciones no simbólicas erf(x) y erfc(x) para xreal. A su vez aporta la función no simbólica x=erfinv(y) que define la función inversade y=erf(x). Ejercicio 14-5. Hallar el valor de la siguiente integral

, , , La primera integral es una integral de tipo exponencial. Realizamos el cambio devariable v=2t y obtenemos la integral equivalente:

que se resuelve mediante la expresión: » -3*mfun('Ei',4) ans = -58.8926 La segunda integral es del tipo logaritmo integral y se resuelve como: » mfun('Li',10) ans = 6.1656

Page 372: Matlab Para Ingenieros y Cientificos

La tercera integral es exponencial y se calcula mediante: » mfun('Ei',8,2) ans = 0.0147 La cuarta integral la descomponemos en la suma de otras dos, con lo queobtenemos:

lo que nos lleva a su cálculo mediante la expresión: » int('3','t',0,2)+2*mfun('Li',2) ans = 56.0903 INTEGRALES TRIGONOMÉTRICAS E HIPERBÓLICAS Matlab incorpora varias funciones simbólicas que permiten resolver integralestrigonométricas e hiperbólicas. Las más importantes son: zSi(z) Seno integral: ò sin(t) / t dt 0Ssi(z) Seno integral desviado = Si(z) - p/2 zCi(z) Coseno integral: g + ln(iz) - yp/2 + ò (cos(t)-1)/t dt (g =constante de Euler=0,5772) 0 zShi(z) Seno hiperbólico integral: ò sinh(t) / t dt 0 zChi(z) Coseno hiperb. integral: g+ln(z))+ò (cosh(t)-1)/tdt 0

Page 373: Matlab Para Ingenieros y Cientificos

Ejercicio 14-6. Resolver las siguientes integrales:

, ,

Para la primera integral la función integrando es par, luego nuestra integral entre3 y 3 será el doble de la integral entre 0 y 3 . A continuación hacemos el cambio devariable 2t=v, y llegamos a la solución por Matlab: » 2/3*mfun('Si',6) ans = 0.9498 La segunda integral la descomponemos en suma de otras dos :

con lo que la solución es evidente mediante la expresión: » mfun('Li',pi)+mfun('Si',pi) ans = 4.1418 La tercera integral es una hiperbólica que se calcula mediante: » mfun('Chi',5)-log(5)-numeric('gamma') ans = 17.9054

Page 374: Matlab Para Ingenieros y Cientificos

INTEGRALES DE FRESNEL Se denominan integrales de Fresnel a aquellas que tienen en el integrando lasfunciones sen (x2) o cos (x2). Estas funciones son normalmente difíciles de integrar. Matlab ofrece la función simbólica FresnelC(z), que calcula la integral:

Matlab ofrece además la función simbólica FresnelS(z), que permite calcular laintegral:

Ejercicio 14-7. Calcular las integrales siguientes:

, , En la primera integral hacemos el cambio de variable x =t Ö (p/2) y obtenemos :

que puede resolverse mediante la expresión: » sqrt(pi/2)*(mfun('FresnelS',sqrt(pi/2))+mfun('FresnelC',sqrt(pi/2))) ans = 1.6773

Page 375: Matlab Para Ingenieros y Cientificos

La segunda y tercera integrales son directas (Shi(7) y Si(2)). » [mfun('Shi',7),mfun('Si',2)] 95.7524 1.6054 LA FUNCIÓN ZETA DE RIEMANN Se define la función Zeta de Riemann Zeta(s) mediante la serie:

Se puede demostrar la igualdad:

Matlab ofrece varias funciones simbólicas relacionadas con la función Zeta. Entreellas tenemos las siguientes: nharmonic(n) Función armónica: S 1/k = y (n+1) + g k=1 y (x)= G´(x) / G(x) = función digamma=Psi(x) ¥

Zeta(s) Zeta de Riemann: S 1/ks = z(s) (s real) k=1 ¥

Zeta(0,s,q) = S 1/(k+q)s (s y q reales) k=1

Zeta(n,s) = dn /dsn (z(s) Zeta(n,s,q) = dn /dsn (z(0,s,q)) Ejercicio 14-8. Hallar el valor de las siguientes expresiones:

, , , 43 La primera integral se resuelve mediante la expresión:

Page 376: Matlab Para Ingenieros y Cientificos

» mfun('GAMMA',3+sqrt(3))*mfun('Zeta',3+sqrt(3)) ans = 16.8965 La segunda integral es dilogarítmica y se puede calcular como: » (1/3)*mfun('dilog',10) ans = -1.3169 La tercera expresión se calcula como una función armónica: » mfun('harmonic',100) ans = 5.1874 Evidentemente se obtiene el mismo resultado planteando: » mfun('Psi',101)+numeric('gamma') ans = 5.1874 La cuarta expresión se adapta a una función Zeta, de la forma: » 1/pi^5+mfun('Zeta',0,5,pi) ans = 0.0079INTEGRALES IMPROPIAS Matlab trabaja con las integrales impropias considerándolas como cualquier otrotipo de integral definida. No vamos a tratar aquí temas teóricos de convergencia deintegrales impropias, pero dentro de las integrales impropias distinguiremos dos tipos:

Page 377: Matlab Para Ingenieros y Cientificos

1) Integrales con límites infinitos: El campo de definición de la funciónintegrando es el semieje cerrado [a,¥) o el (-¥,a] o el (-¥,¥). 2) Integrales de funciones discontinuas: La función dada es continua entodo el intervalo [a,b]. a excepción de en un número finito de puntos aislados, llamadossingulares. También pueden presentarse casos complicados, combinación de los dosanteriores. También se puede generalizar al caso en el que el campo de definición de lafunción (el recinto de integración) sea el conjunto de valores de una función (integral deStieljes), pero esto sería materia de cursos completos de análisis matemático. Ejercicio 14-9. Estudiar y calcular el valor de las siguientes integrales:

La primera de las integrales presenta un único punto singular en x=0, luego esen un entorno de cero donde puede haber problemas. Veamos: » pretty(maple('limit(int(1/sqrt(x),x=a..b),a=0)')) 1/2 2 b » pretty(int('1/sqrt(x)','x',0,'b')) 1/2 2 b La primera de las integrales es convergente y vale 2Öb. La segunda de las integrales presenta un único punto singular en x=p/2, peroresulta divergente (no es calculable) porque: » maple('limit(int(tan(x),x=0..pi/2-b),b=0)') ans = inf La tercera de las integrales es convergente ya que se calcula como:

Page 378: Matlab Para Ingenieros y Cientificos

» pretty(int('exp(-x)*sin(x)/x','x',0,inf)) 1/4 pi La cuarta de las integrales es divergente (no es calculable), ya que: » pretty(maple('limit(int(x^(3/2)/(1+x^2),x=1..b),b=inf)')) inf INTEGRALES DEPENDIENTES DE UN PARÁMETRO b Dada la función de variable y: F(y) = ò f(x,y) dx a que está definida en el intervalo c£y£e, siendo la función f(x,y) continua en el rectángulo[a,b]x[c,e] con derivada parcial respecto de y continua en el rectángulo, entonces secumple que para todo y del intervalo c£y£e :

Este resultado es muy importante, pues permite intercambiar derivada conintegral para poder derivar bajo el signo integral, técnica muy utilizada en el cálculo deintegrales dependientes de un parámetro. Las integrales dependientes de un parámetro también pueden ser impropias, yademás también los parámetros pueden aparecer en los límites de integración, en cuyocaso podemos asegurar lo siguiente:

siempre y cuando a(y) y b(y) estén definidas en el intervalo [c,e] y tengan derivadascontinuas a’(y) y b’(y), estando también las curvas a(y) y b(y) contenidas en elrectángulo [a,b]x[c,e] Además si la función F(y) está definida en el intervalo [c,e] y f(x,y) es continuaen el rectángulo [a,b]x[c,d], entonces se cumple la fórmula:

Page 379: Matlab Para Ingenieros y Cientificos

es decir, se permite la integración bajo el signo integral, y el orden de integraciónrespecto de las variables es indiferente. Ejercicio 14-10. Resolver por derivación respecto al parámetro a>0 lasintegrales:

Para la primera integral, como la función integrando cumple las condiciones parala derivación bajo el signo integral, partimos de la integral de la derivada respecto delparámetro a de la función integrando. El resultado final será la integral respecto delparámetro a del resultado de la integral de la derivada anterior. Si llamamos a la integralI(a), calculamos I‘(a), que normalmente es más fácil de calcular que I(a), y el resutadofinal será ò I’(a) da. El principal apoyo nos lo presta el hecho de poder derivar la integral como laintegral de la derivada, lo cual reduce la dificultad de la integración. » F=simple(int('diff(atan(a*x)/(x*(1+x^2)),a)','x',0,inf)) F = 1/2*pi*(a*signum(a)-1)/(-1+a^2) Como a>0, se puede simplificar el resultado con simplify y factor » simplify('1/2*pi*(a*signum(a)-1)/(-1+a^2),symbolic') ans = 1/2*pi*(a-1)/(-1+a^2) » factor('1/2*pi*(a-1)/(-1+a^2)')ans =

Page 380: Matlab Para Ingenieros y Cientificos

1/2*pi/(a+1) Ahora integramos esta función respecto de la variable a, para hallar I(a). » int('1/2*pi/(a+1)') ans = 1/2*log(a+1)*pi Para resolver la segunda integral definimos la integral de parámetro a:

Calculamos I’(a). Posteriormente integramos I’(a) derivando bajo el signointegral, ya que la función I(a) lo permite. A continuación integramos en a el resultadoanterior, para obtener la función s(a). La integral problema será s(1) » G=simple(int('diff((1-exp(-a*x^2))/x^2,a)','x',0,inf)) G = 1/2/a^(1/2)*pi^(1/2) » s=int('1/2/a^(1/2)*pi^(1/2)','a') s = a^(1/2)*pi^(1/2) Al hacer a=1, tenemos que s(1) = I(a) = Öp INTEGRAL DE RIEMANN Riemann define la integral definida de una función f(x), como el áreacomprendida entre su grafo y el eje x, para los valores de x dados por los límites deintegración.

Page 381: Matlab Para Ingenieros y Cientificos

Riemann divide este área en el número máximo de rectángulos, de tal forma queel área total será la suma de las áreas de todos los rectángulos. Pero Riemann define dostipos de rectángulos, los que aproximan por exceso el área total (ese área es la suma delas áreas de los rectángulos por exceso o sumas superiores) y los que aproximan pordefecto el área total (ese área es la suma de las áreas de los rectángulos por defecto osumas inferiores). El verdadero valor de la integral (suma de áreas de los rectángulos) será el valoral que tienden tanto las sumas superiores como las sumas inferiores cuando el númerode rectángulos tiende a infinito (y estará comprendido entre las sumas superiores y lassumas inferiores). Luego el límite (si existe), cuando el número de rectángulos tiende a infinito,tanto de las sumas superiores como de las sumas inferiores (para que este límite existaha de ser único), es el verdadero valor de la integral. Cualquiera de los dos límites esválido para hacer el cálculo. Evidentemente, cuanto más grande sea n (número de rectángulos) , mejor serála aproximación a la integral. Por este método pueden aproximarse integrales cuyaprimitiva es difícil de calcular en modo algebráico. Si la función y=f(x) a integrar es positiva y continua en el intervalo [a,b] deintegración, las sumas superiores e inferiores se calcularán con las siguientes expresionesde Matlab: suminf = (b-a)/n *sum(abs(f(a + k*(b-a)/n)),k=0..n-1) sumsup = (b-a)/n*sum(abs(f(a + k*(b-a)/n)),k=1..n) Si la función a integrar es negativa en determinados subconjunttos de sudominio, se considera su módulo, a efectos de computar la integral. Lo que no se puedehacer es aplicar la fórmula directamente sin cerciorarse de si la función es negativa enalgunos subintervalos de su campo de definición. Ejercicio 14-11. Aproximar el valor de las integrales siguientes:

, , , 44

Page 382: Matlab Para Ingenieros y Cientificos

Para aproximar la primera integral calculamos el límite cuando el número derectángulos n tiende a infinito, tanto de las sumas superiores como de las sumas inferiores.Si ambos límites coinciden, existe la integral y su valor es precisamente el valor de eselímite coincidente. » maple('f:=x->cos(sin(x))');» numeric(maple('limit((1-0)/n*sum(abs(f(0+(1-0)*k/n)),k=1..n),n=infinity)')) ans = 0.8687 » numeric(maple('limit((1-0)/n*sum(abs(f(0+(1-0)*k/n)),k=0..n-1),n=infinity)')) ans = 0.8687 Si calculamos la integral directamente, vemos que hay coincidencia. » numeric(int('cos(sin(x))','x',0,1)) ans = 0.8687 Realizamos los mismos pasos para la segunda integral. » maple('g:=x->sin(x)^2');» numeric(maple('limit((5-2)/n*sum(g(2+(5-2)*k/n),k=0..n-1),n=infinity)')) ans = 1.4468 » numeric(maple('limit((5-2)/n*sum(g(2+(5-2)*k/n),k=1..n),n=infinity)')) ans = 1.4468

Page 383: Matlab Para Ingenieros y Cientificos

Si hallamos el valor de la integral directamente ha de coincidir. » numeric(int('sin(x)^2','x',2,5)) ans = 1.4468 Para aproximar la tercera integral utilizamos 1000 rectángulos. » maple('h:=x->1/log(x)');» numeric('(7-2)/1000*sum(abs(h(2+(7-2)*k/1000)),k=1..1000)') ans = 3.7096 » numeric('(7-2)/1000*sum(abs(h(2+(7-2)*k/1000)),k=0..999)') ans = 3.7142 El resultado exacto es un número entre 3.7096 y 3.7142. Para calcular la cuarta integral usamos 500 rectángulos. » maple('r:=x->sin(x)/x');» numeric('(5-1)/500*sum(abs(r(1+(5-1)*k/500)),k=1..500)')ans = 1.2053 » numeric('(5-1)/500*sum(abs(r(1+(5-1)*k/500)),k=0..499)') ans = 1.2105 El valor exacto de la integral está entre 1.2053 y 1.2105.

Page 384: Matlab Para Ingenieros y Cientificos

Capítulo 15

INTEGRACIÓN EN VARIAS VARIABLES Y APLICACIONES

INTEGRACIÓN EN VARIAS VARIABLES Trataremos en este capítulo la forma de resolver integrales enedimensionalescon Matlab, las aplicaciones de las integrales dobles y triples al cálculo de áreas yvolúmenes y algunas otras aplicaciones típicas del cálculo integral multivariable. Las funciones que habilita Matlab al respecto ya fueron estudiadasanteriormente, y básicamente son las siguientes: int(f(x), ‘x’) Calcula la integral indefinida ò f(x) dx int(int(f(x,y),‘x’),‘y’) Calcula la integral indefinida ò ò f(x,y) dxdy int(int(int(f(x,y,z),‘x’),‘y’),‘z’) Calcula la integral ò ò ò f(x,y,z) dx dy dz int(int(int(....int(f(x,y,...,z), ‘x’), ‘y’),...), ‘z’) Calcula la integral ò ò ... ò f(x,y,...,z) dx dy....dz bint(f(x), ‘x’, ‘a’, ‘b’) Calcula la integral definida ò f(x) dx a int(int(f(x,y), ‘x’, ‘a’, ‘b’), ‘y’, ‘c’, ‘d’)) b d Calcula la integral definida ò ò f(x,y) dx dy a c

Page 385: Matlab Para Ingenieros y Cientificos

int(int(int(....int(f(x,y,...,z), ‘x’, ‘a’, ‘b’), ‘y’, ‘c’, ‘d’),...), ‘z’, ‘e’, ‘f’) b d f Calcula la integral ò ò....ò f(x,y,...,z) dxdy...dz a c e ÁREA DE FIGURAS PLANAS, DOBLE INTEGRACIÓN Si consideramos un recinto S, podemos hallar su área mediante el uso deintegrales dobles. Si el recinto S está determinado por curvas cuyas ecuaciones vienendadas en coordenadas cartesianas, su área A se halla mediante la fórmula: A = ò ò dx dy S Si por ejemplo S está determinado por a<x<b y f(x)<y<g(x), el área valdrá: b g(x)A = ò dx ò dy a f(x) Si S está determinado por h(a)<x<k(b) y c<y<d, el área valdrá: d k(b)A = ò dy ò dx c h(a) Si el recinto S está determinado por curvas cuyas ecuaciones vienen dadas encoordenadas polares con radio vector r y ángulo a, su área A se halla mediante lafórmula: A = ò ò r da dr S Si por ejemplo S está determinado por s<a<t y f(a)<r<g(a), el área valdrá: t g(a)A = ò da ò r dr s f(a) Ejercicio 15-1. Calcular el área de la figura situada sobre el eje OX, limitada por este eje, laparábola y^2 = 4x y la recta x+y = 3

Page 386: Matlab Para Ingenieros y Cientificos

En primer lugar hacemos una representación gráfica del problema (figura 15-1). » fplot('[(4*x)^(1/2),3-x]',[0,4,0,4])

Figura 15-1 Vemos que el recinto se puede limitar para y entre 0 y 2 (0<y<2) y para x entrelas curvas x=y^2/4 y x=3-y. Luego se puede calcular el área pedida de la siguienteforma: » int(int('1','x','y^2/4','3-y'),'y',0,2) ans = 10/3 Ejercicio 15-2. Calcular el área del primer cuadrante comprendida entre la parábolasemicúbica y^2 = x^3 y la bisectriz del primer cuadrante. En primer lugar hacemos una representación gráfica del problema (figura 15-2) » fplot('[x^(3/2),x]',[-1/4,5/4])

Figura 15-2 Si observamos el gráfico vemos que el recinto está definido para x variando ente0 y 1 (0<x<1) y para y entre la curvas y=x e y=x^(3/2). Luego el área de la regiónpedida se puede calcular de la forma : » int(int('1','y','x^(3/2)','x'),'x',0,1) ans =

Page 387: Matlab Para Ingenieros y Cientificos

1/10 Ejercicio 15-3. Calcular el área exterior al círculo de ecuación polar r = 2, e interior a lacardioide de ecuación polar r = 2(1+Cos(a)). En primer lugar realizamos la representación gráfica (figura 15-3). » a=0:0.1:2*pi;» r=2*(1+cos(a));» polar(a,r)» hold on;» r=2*ones(size(a));» polar(a,r)

Figura 15-3

Observando la gráfica vemos que, por su simetría, podemos calcular la mitad delárea pedida haciendo variar a entre 0 y Pi/2 (0<a<Pi/2) y r entre las curvas r=2 yr=2(1+Cos(a)) (2<r<2(1+Cos(a))) . pretty(int(int('r','r',2,'2*(1+cos(a))'),'a',0,pi/2)) 1/2 pi + 4 El área será p + 8 unidades cuadradas. ÁREA DE SUPERFICIES POR DOBLE INTEGRACIÓN El área S de una superficie curva expresada como z=f(x,y), que tiene porproyección en el plano OXY un recinto R es: S= ò ò R Sqrt(1+ (¶z/¶x)2 + (¶z/¶y) 2 ) dx dy El área S de una superficie curva expresada como x=f(y,z), que tiene porproyección en el plano OYZ un recinto R es:

Page 388: Matlab Para Ingenieros y Cientificos

S= ò ò R Sqrt(1+ (¶x/¶y) 2 + (¶x/¶z) 2 ) dy dz El área S de una superficie curva expresada como y=f(x,z), que tiene porproyección en el plano OXZ un recinto R es: S= ò ò R Sqrt(1+ (¶y/¶x) 2 + (¶y/¶z) 2 ) dx dz Ejercicio 15-4. Calcular el área de la superficie del cono x2 + y2 = a z2, limitada porencima del plano OXY y cortada por el cilindro x2 + y2 = b y La proyección en el plano OXY es el recinto formado por el círculo x2 + y2 = by, luego la fórmula a aplicar será la siguiente: » maple('z:=(x,y)->sqrt((x^2+y^2)/a)'); » pretty(int(int('(1+diff(z(x,y),x)^2+diff(z(x,y),y)^2)^(1/2)','x','-(b*y-y^2)^(1/2)', '(b*y-y^2)^(1/2)'),'y',0,'b')) 2 b 1/2 b asin(------) (a + 1) abs(b) 1/2 ----------------------- 1/2 a El resultado se puede simplificar si suponemos b>0. » simplify('1/2*b^2*asin(b/abs(b))*(a+1)^(1/2)/a^(1/2),assume(b>0)') ans = 1/4*b~^2*pi*(a+1)^(1/2)/a^(1/2) » pretty('1/4*b^2*pi*(a+1)^(1/2)/a^(1/2)') 2 1/2 b pi (a + 1) 1/4 ------------- 1/2 a

Page 389: Matlab Para Ingenieros y Cientificos

Ejercicio 15-5. Calcular el área del paraboloide x2 + y2 = 2 z limitada por el plano z=2 » maple('z:=(x,y)->(x^2+y^2)/2');» pretty(maple('(1+diff(z(x,y),x)^2+diff(z(x,y),y)^2)^(1/2)')) 2 2 1/2 (1 + x + y ) Esta expresión es adecuada para transformarla a polares. » maple('m:=(x,y)->sqrt(1+x^2+y^2)');» pretty(simple('m(r*cos(a),r*sin(a))')) 2 1/2 (1 + r ) La integral pedida se calculará considerando 4 veces el recinto delimitado por elprimer cuadrante del círculo r=2 » pretty(simple(int(int('r*sqrt(1+r^2)','r',0,2),'a',0,pi/2))) 1/2 1/6 (5 5 - 1) pi El resultado de la integral será 4/2 del valor anterior, o sea:

Vamos a hacer una representación gráfica del problema (figura 15-4) » [x,y]=meshgrid(-3:.1:3);» z=(1/2)*(x.^2+y.^2);» mesh(x,y,z)» hold on;» z=2*ones(size(z));» mesh(x,y,z)» view(-10,10)

Page 390: Matlab Para Ingenieros y Cientificos

Figura 15-4 CÁLCULO DE VOLÚMENES POR INTEGRALES DOBLES El volumen V de un cilindroide limitado en su parte superior por la superficiez=f(x,y); en su parte inferior por el plano OXY y lateralmente por la superficie cilíndricarecta que corta al plano OXY, generando un recinto R es: V = ò ò R f(x,y) dx dy = ò ò R z dx dy El volumen V de un cilindroide limitado en su parte superior por la superficiex=f(y,z); en su parte inferior por el plano OYZ y lateralmente por la superficie cilíndricarecta que corta al plano OYZ, generando un recinto R es: V = ò ò R f(y,z) dy dz = ò ò R x dy dz El volumen V de un cilindroide limitado en su parte superior por la superficiey=f(x,z); en su parte inferior por el plano OXZ y lateralmente por la superficie cilíndricarecta que corta al plano OXZ, generando un recinto R es: V = ò ò R f(x,z) dx dz = ò ò R y dx dz Ejercicio 15-6. Calcular el volumen en el primer octante comprendido entre el plano OXY, elplano z=x+y+2 y el cilindro x2 + y2 = 16 Comenzaremos haciendo una representación gráfica del recinto, con el plano encartesianas y el cilindro parametrizado (figura 17.5). » t=(0:.1:2*pi);» u=(0:.1:10);» x=4*cos(t)'*ones(size(u));» y=4*sin(t)'*ones(size(u));» z=ones(size(t))'*u;» mesh(x,y,z)

Page 391: Matlab Para Ingenieros y Cientificos

» hold on;» [x,y]=meshgrid(-4:.1:4);» z=x+y+2;» mesh(x,y,z)» set(gca,'Box','on');» view(15,45)

Figura 15-5

El volumen pedido se halla mediante la integral: » pretty(simple(int(int('x+y+2','y',0,'sqrt(16-x^2)'),'x',0,4))) 128/3 + 8 pi Ejercicio 15-7. Calcular el volumen limitado por el paraboloide x2 + 4 y2 = z, y lateralmentepor los cilindros de ecuaciones y2 = x y x2 = y En primer lugar realizamos el gráfico auxiliar de la figura 15-6, en el queaparecen los dos cilindros y el paraboloide. » [x,y]=meshgrid(-1/2:.02:1/2,-1/4:.01:1/4);» z=x.^2+4*y.^2;» mesh(x,y,z)» hold on;» y=x.^2;» mesh(x,y,z)» hold on;» x=y.^2;» mesh(x,y,z)» set(gca,'Box','on')» view(-60,40)

Page 392: Matlab Para Ingenieros y Cientificos

Figura 15-6 El volumen se calculará mediante la integral siguiente: » pretty(int(int('x^2+4*y^2','y','x^2','sqrt(x)'),'x',0,1)) 3/7 CÁLCULO DE VOLÚMENES E INTEGRALES TRIPLES El volumen de un recinto R tridimensional, cuyas ecuaciones están expresadas encoordenadas cartesianas, viene dado por la integral triple: V = ò ò ò R dx . dy . dz El volumen de un recinto R tridimensional, cuyas ecuaciones están expresadas encoordenadas cilíndricas, viene dado por la integral triple: V = ò ò ò R r dz . dr . da El volumen de un recinto R tridimensional, cuyas ecuaciones están expresadas encoordenadas esféricas, viene dado por la integral triple: V = ò ò ò R r2 Sen(b) dr db da Ejercicio 15-8. Calcular el volumen limitado por el paraboloide a x2 + y2 = z, y el cilindro deecuación z = a2 - y2

El volumen será cuatro veces la siguiente integral:» I=simple(int(int(int('1','z','a*x^2+y^2','a^2-y^2'),'y',0,'sqrt((a^2-a*x^2)/2)'), 'x',0,'sqrt(a)')) I = 1/32*a^(7/2)*2^(1/2)*(3*pi-2*asin(a^(1/2)/abs(a)^(1/2)))

Page 393: Matlab Para Ingenieros y Cientificos

Podemos suponer a>0 y simplificar la expresión 4*I como sigue: » simplify('4*1/32*a^(7/2)*2^(1/2)*(3*pi-2*asin(a^(1/2)/abs(a)^(1/2))), assume(a>0)') ans = 1/4*a^(7/2)*2^(1/2)*pi » pretty('1/4*a^(7/2)*2^(1/2)*pi') 7/2 1/2 1/4 a 2 pi Ejercicio 15-9. Calcular el volumen limitado por los cilindros z = x2 y 4 - y2 = z En primer lugar hacemos una representación gráfica (figura 15-7) » [x,y]=meshgrid(-2:.1:2);» z=x.^2;» mesh(x,y,z)» hold on;» z=4-y.^2;» mesh(x,y,z)

Figura 17.7

El volúmen será cuatro veces la siguiente integral: » pretty(simple(int(int(int('1','z','x^2','4-y^2'),'y',0,'sqrt(4-x^2)'),'x',0,2))) 2 pi El resultado final del volumen pedido es 8pEjercicio 15-10. Calcular el volumen limitado por el cilindro r=4Cos(a), el plano z=0 y la esferade ecuación r2 + z2 = 16 El volúmen del recinto en coordenadas cilíndricas será:

Page 394: Matlab Para Ingenieros y Cientificos

» pretty(simple(int(int(int('r','z',0,'sqrt(16-r^2)'),'r',0,'4*cos(a)'),'a',0,pi))) 256/9 + 64/3 pi Ejercicio 15-11. Calcular el volumen limitado por el cono b=Pi/4, y la esfera de ecuación r =2k Cos(b) El volumen del recinto en coordenadas esféricas será cuatro veces el resultado dela siguiente integral: » pretty(simple(int(int(int('r^2*sin(b)','r',0,'2*k*cos(b)'),'b',0,pi/4),'a',0,pi/2))) 3 1/4 k pi El resultado final será k3 p EL TEOREMA DE GREEN Sea C una curva plana simple cerrada a trozos, y sea R la región consistente en Cy su interior. Si f y g son funciones continuas con primeras derivadas parciales continuasen un abierto D que contiene a R, entonces: ò C (m(x,y)dx + n(x,y)dy) = ò ò R (¶n/¶x - ¶m/¶y) dA Ejercicio 15-12. Calcular usando el teorema de Green la integral: Öyò C (x+e )dx + (2y +Cos(x))dy donde C es la frontera de la región cerrada por las parábolas y=x2 , x=y2

Las dos parábolas se interceptan en los puntos (0,0) y (1,1). Al representarlas seven los límites de integración (figura 15-8) plot({x^2,sqrt(x)},x=0..1.2);

Page 395: Matlab Para Ingenieros y Cientificos

Figura 15-8

» maple('m:=(x,y)->x+exp(sqrt(y))');» maple('n:=(x,y)->2*y+cos(x)');» int(int('diff(n(x,y),x)-diff(m(x,y),y)','y','x^2','sqrt(x)'),'x',0,1) ans = 2*cos(1)-1/2*2^(1/2)*pi^(1/2)*FresnelC(2^(1/2)/pi^(1/2))+9*exp(1)+2*sin(1)-27 » numeric(ans) ans = -0.6764 TEOREMA DE LA DIVERGENCIA Sea Q un dominio con la propiedad de que cada línea recta que pasa por unpunto interior al dominio corta a su frontera en exactamente dos puntos. Además, lafrontera S del dominio Q, es una superficie orientada cerrada a trozos con vector normalunitario exterior n. Si f es un campo vectorial que tiene derivadas parciales continuas enQ, entonces: ò ò f.n dS = ò ò ò Div(f) dV S Q El primer miembro de la igualdad anterior se denomina flujo de salida del campovectorial f a través de la superficie S. Ejercicio 15-13. Utilizar el teorema de la divergencia para hallar el flujo de salida del campovectorial f = (xy+x2 y z, yz+xy2 z, xz+xyz2 ), a través de la superficie del cubo delimitado en elprimer octante por los planos x=2, y=2 y z=2 » maple('f:=vector([x*y+x^2*z*y, y*z+x*y^2*z, x*z+x*y*z^2])');» maple('v:=vector([x,y,z])');» int(int(int('diverge(f,v)','x',0,2),'y',0,2),'z',0,2)

Page 396: Matlab Para Ingenieros y Cientificos

ans = 72 EL TEOREMA DE STOKES Sea S una superficie orientada de área finita definida por una función f(x,y), connormal unitaria n y frontera C. Sea F un campo vectorial continuo definido en S, tal quelas funciones componentes de F tienen derivadas parciales continuas en cada punto nofrontera de S. Entonces se cumple: ò C F . dr = ò ò S (curlf).ndS Ejercicio 15-14. Utilizar el teorema de Stokes para evaluar la integral de línea: ò C (- y3 dx +x3 dy - z3 dz donde C es la intersección del cilindro x2 + y2 =1 y el plano x+y+z=1, y la orientación de Ccorresponde al movimiento en sentido contrario al que giran las manecillas del reloj, en elplano OXY. La curva C acota a la superficie S definida por z=1-x-y=f(x,y) para (x,y) en eldominio D={(x,y)/ x2 +y2 =1}. Hacemos F= -y3 i + x3 j - z3 k Ahora calculamos el rotacional de F y lo integramos en la superficie S » maple('F:=vector([-y^3,x^3,z^3])');» maple('v:=vector([x,y,z])');» pretty(maple('curl(F,v)')) 2 2 [0, 0, 3 x + 3 y ] Por lo tanto, hemos de calcular la integral: ò (3 x 2+3 y 2 ) dx dy D Cambiando a coordenadas polares, esta integral se calcula de la forma:

Page 397: Matlab Para Ingenieros y Cientificos

» pretty(simple(int(int('3*r^3', 'a',0,2*pi),'r',0,1))) 3/2 pi

Page 398: Matlab Para Ingenieros y Cientificos

Capítulo 16

ECUACIONES DIFERENCIALES

INTRODUCCIÓN El número de comandos que implementa Matlab relativos a este tema no es muyelevado, pero sí muy eficiente. De todas formas, es posible seguir con el programa losmétodos algebráicos de resolución ya conocidos para cada tipo de ecuación diferencial.También se implementan métodos de resolución aproximados de ecuaciones y sistemasde ecuaciones diferenciales. El comando básico para resolución de ecuaciones diferenciales es dsolve. Estecomando computa soluciones simbólicas de ecuaciones diferenciales ordinarias ysistemas. Las ecuaciones son especificadas por expresiones simbólicas conteniendo laletra D para denotar diferenciación, o las letras D2, D3,...,etc, para denotar diferenciaciónde orden 2,3,...,etc. A continuación de la letra D se sitúa la variable dependiente (quesuele ser y), y cualquier letra no precedida por D es un candidato a variableindependiente. Si no se especifica la variable independiente, por defecto es x. Si x seespecifica como variable dependiente, la variable independiente es t. O sea, x es lavariable independiente por defecto, y en segundo lugar t. Se pueden especificar condiciones iniciales en ecuaciones adicionales, mediantela forma y(a)=b o Dy(a)=b,...,etc. Si las condiciones iniciales no se especifican, lassoluciones de las ecuaciones diferenciales contienen constantes de integración C1, C2, ...,etc. Los comandos más importantes de Matlab que resuelven ecuaciones diferencialesson los siguientes: dsolve(‘ecuación’, ‘v’) Resuelve la ecuación diferencial siendo v la variable independiente (si no se especifica ‘v’, la variable independiente es x). Solo devuelve

Page 399: Matlab Para Ingenieros y Cientificos

soluciones explícitasdsolve(‘ecuación’, ‘condición_inicial’,... , ‘v’) Resuelve la ecuación diferencial sujeta a la condición inicial especificada dsolve(‘ecuación’, ‘cond1’, ‘cond2’,..., ‘condn’ , ‘v’) Resuelve la ecuación diferencial sujeta alas condiciones iniciales especificadas dsolve(‘ecuación’, ‘cond1, cond2,..., condn’ , ‘v’) Resuelve la ecuación diferencial sujeta alas condiciones iniciales especificadas dsolve(‘ec1’, ‘ec2’,..., ‘ecn’, ‘cond1’, ‘cond2’,..., ‘condn’ , ‘v’) Resuelve el sistema diferencial sujeto alas condiciones iniciales especificadas (explícitas) dsolve(‘ec1, ec2,..., ecn’, ‘cond1, cond2,..., condn’ , ‘v’) Resuelve el sistema diferencial sujeto alas condiciones iniciales especificadas maple(‘dsolve(ecuación, func(var))’) Resuelve la ecuación diferencial, considerando var como variable independiente y func como variable dependiente (devuelve soluciones implícitas) maple(‘dsolve({ecuación, cond1,cond2, ....condn}, func(var))’) Resuelve la ecuación diferencial sujeta a las condiciones iniciales especificadas maple(‘dsolve({ec1, ec2,..,ecn}, {func1(var), func2(var),...,funcn(var)})’) Resuelve el sistema de ecuaciones diferenciales especificado (devuelve soluciones implícitas) maple(‘dsolve(ecuación, func(var), ‘explicit’)’)

Page 400: Matlab Para Ingenieros y Cientificos

Resuelve la ecuación diferencial, ofreciendo la solución en forma explícita, si es posible A continuación se mostrarán algunos ejemplos. Resolvemos en primer lugar ecuaciones diferenciales de primer oreden y primergrado, sin y con valores iniciales. » pretty(dsolve('Dy = a*y')) exp(a x) C1 » pretty(dsolve('Df = f + sin(t)')) - 1/2 cos(t) - 1/2 sin(t) + exp(t) C1 Las dos ecuaciones anteriores también pueden resolverse de la siguiente forma: » pretty(maple('dsolve(diff(y(x),x)= a*y,y(x))')) y(x) = exp(a x) _C1 » pretty(maple('dsolve(diff(f(t),t)=f+sin(t),f(t))')) f(t) = - 1/2 cos(t) - 1/2 sin(t) + exp(t) _C1 » pretty(dsolve('Dy = a*y', 'y(0) = b')) exp(a x) b » pretty(dsolve('Df = f + sin(t)', 'f(pi/2) = 0')) exp(t) - 1/2 cos(t) - 1/2 sin(t) + 1/2 ----------- exp(1/2 pi) Ahora resolvemos una ecuación de segundo grado y primer orden. » y = dsolve('(Dy)^2 + y^2 = 1', 'y(0) = 0', 's') y = [ sin(s)][-sin(s)]

Page 401: Matlab Para Ingenieros y Cientificos

que también puede resolverse de la siguiente forma: » pretty(maple('dsolve({diff(y(s),s)^2 + y(s)^2 = 1, y(0) = 0}, y(s))')) y(s) = sin(s), y(s) = - sin(s) Ahora resolvemos una ecuación de segundo orden y primer grado. » pretty(dsolve('D2y = -a^2*y', 'y(0) = 1, Dy(pi/a) = 0')) cos(a x) A continuación resolvemos sistemas sin y con valores iniciales. » pretty(dsolve('Dx = y', 'Dy = -x')) x(t) = C1 sin(t) + C2 cos(t), y(t) = C1 cos(t) - C2 sin(t) » pretty(dsolve('Df = 3*f+4*g', 'Dg = -4*f+3*g')) g(x) = - C2 exp(3 x) sin(4 x) + C1 exp(3 x) cos(4 x), f(x) = C1 exp(3 x) sin(4 x) + C2 exp(3 x) cos(4 x) » pretty(dsolve('Df = 3*f+4*g, Dg = -4*f+3*g', 'f(0)=0, g(0)=1')) g(x) = exp(3 x) cos(4 x), f(x) = exp(3 x) sin(4 x) Este último sistema puede resolverse también de la siguiente forma: » pretty(maple('dsolve({diff(f(x),x)= 3*f(x)+4*g(x), diff(g(x),x)=-4*f(x)+3*g(x), f(0)=0,g(0)=1}, {f(x),g(x)})')) {f(x) = exp(3 x) sin(4 x), g(x) = exp(3 x) cos(4 x)} ECUACIONES EN VARIABLES SEPARADAS Una ecuación diferencial en variables separadas presenta la forma f(x)dx =g(y)dy. La resolución de este tipo de ecuaciones es inmediata poniendo ò f(x)dx = òg(y)dy +C.

Page 402: Matlab Para Ingenieros y Cientificos

Si Matlab no resuelve directamente la ecuación diferencial con la función dsolve,entonces se sigue el método algebráico usual, que no presenta dificultades especialespara el programa, dada su versatilidad en el cálculo simbólico. Ejercicio 16-1. Resolver la ecuación diferencial: y Cos(x) dx - (1+y2 ) dy = 0 y(0)=1 En primer lugar intentamos resolverla directamente. La ecuación puede ponersede la forma: Cos[x] y[x]y'[x] == ----------- 2 1 + y[x] » dsolve('Dy=y*cos(x)/(1+y^2)') ??? Error using ==> dsolveExplicit solution could not be found. Luego la ecuación diferencial no es resoluble con dsolve. Aplicaremos el método algebráico usual de resolución de las ecuacionesdiferenciales en variables separadas (separando variables). » pretty(solve('int(cos(x),x)=int((1+y^2)/y,y)')) 2 asin(log(y) + 1/2 y ) La función solución será x=asin(log(y)+1/2 y2), o lo que es lo mismo: sin(x)=log(y)+1/2 y2 + C Ahora hallamos el valor C para x=0 e y=1. » C=simple('solve(subs(x=0,y=1,sin(x)=log(y)+1/2*y^2+C),C)') C = -1/2 La función solución será sin(x)=log(y)+1/2 y2 - 1/2

Page 403: Matlab Para Ingenieros y Cientificos

De la misma forma se puede resolver cualquier otra ecuación diferencial envariables separadas. Esta ecuación diferencial también es resoluble directamente utilizando: » pretty(maple('dsolve(diff(y(x),x)=y(x)*cos(x)/(1+y(x)^2),y(x))')) 2 log(y(x)) + 1/2 y(x) - sin(x) = _C1 ECUACIONES DIFERENCIALES HOMOGÉNEAS Consideremos una ecuación diferencial general de primer grado y primer ordenpuesta en la forma M(x,y)dx=N(x,y)dy. Esta ecuación se dice que es homogénea degrado n, si lo son a la vez las funciones M y N, es decir, si se cumple simultáneamente: M(tx,ty)=t n M(x,y) N(tx,ty)=t n N(x,y) Para este tipo de ecuaciones, el cambio de la variable x por la variable v tal quex=vy, transforma la ecuación diferencial inicial (de variables x e y) en otra de variablesseparadas (de variables u e y). Se resuelve la ecuación en variables separadas yposteriormente se deshace el cambio. Ejercicio 16-2. Resolver la ecuación diferencial: (x 2 - y 2) dx + x y dy = 0 Vamos a resolver la ecuación por el método algebráico ordinario para ecuacionesdiferenciales homogéneas. En primer lugar comprobamos si la ecuación es homogénea » maple('m:=(x,y)->x^2-y^2');» maple('n:=(x,y)->x*y');» factor('m(t*x,t*y)') ans = t^2*(x-y)*(x+y) » factor('n(t*x,t*y)')

Page 404: Matlab Para Ingenieros y Cientificos

ans = t^2*x*y Luego la ecuación es homogénea de grado 2. Para resolverla aplicamos elcambio de variable x=vy. Antes de realizar las operaciones del cambio de variable, es conveniente cargarla librería difforms, mediante el comando maple(‘with(difforms)’), que nos permitirátrabajar con formas diferenciales. Una vez cargada esta librería también es convenienteutilizar el comando maple('defform(v=0,x=0,y=0)'), que permite declarar todas lasvariables que no van a ser constantes o parámetros en la diferenciación. » maple(‘with(difforms)’);» maple('defform(v=0,x=0,y=0)'); Ahora realizamos ya el cambio de variable x=vy, y agrupamos términos en d(v) y d(y). » simplify('subs(x=v*y,m(x,y)*d(x)+n(x,y)*d(y))') ans = v^2*y^3*d(v)+v^3*y^2*d(y)-y^3*d(v) » pretty(maple('collect(v^2*y^3*d(v)+v^3*y^2*d(y)-y^3*d(v),{d(v),d(y)})')) 2 3 3 3 2 (v y - y ) d(v) + v y d(y) Si dividimos la expresión anterior por v3 y3 , y agrupamos términos en d(v) y d(y), tenemos ya una ecuación en variables separadas. » pretty(maple('collect(((v^2*y^3-y^3)*d(v)+v^3*y^2*d(y))/(v^3*y^3), {d(v),d(y)})')) 2 3 3 (v y - y ) d(v) d(y) ----------------- + ---- 3 3 y v y

Page 405: Matlab Para Ingenieros y Cientificos

Ahora obtenemos la expresión anterior con todos sus términos simplificadostotalmente. » pretty(maple('convert(collect(((v^2*y^3-y^3)*d(v)+v^3*y^2*d(y))/(v^3*y^3), {d(v),d(y)}),parfrac,y)')) 2 (v - 1) d(v) d(y) ------------- + ---- 3 y v Ahora resolvemos la ecuación en variables separadas » pretty(simple('int((v^2-1)/v^3,v)+int(1/y,y)')) 1 log(v) + ---- + log(y) 2 2 v Ahora deshacemos el cambio de variable » pretty(simple('subs(v=x/y,log(v)+1/2/v^2+log(y))')) 2 y log(x) + 1/2 ---- 2 x Ya estamos en condiciones de escribir la solución general de la ecuacióndiferencial inicial. 2 y log(x) + 1/2 ------ = C 2 x Ahora se representan gráficamente las soluciones de esta ecuación diferencial.Para ello nos basamos en que el gráfico de la familia de soluciones con parámetro c, es

Page 406: Matlab Para Ingenieros y Cientificos

equivalente al gráfico de las curvas de nivel correspondiente a la ecuación sin constante(figura 16-1) » [x,y]=meshgrid(0.1:0.05:1/2,-1:0.05:1);» z=y.^2./(2*x.^2)+log(x);» contour(z,65)

Figura 16-1 ECUACIONES DIFERENCIALES EXACTAS La ecuación diferencial M(x,y)dx+N(x,y)dy=0 es exacta si se cumple que ¶N/¶x= ¶M/¶y. Si una ecuación diferencial es exacta, existe una función F tal que su diferencialtotal dF coincide con la ecuación, o sea: dF=M(x,y)dx+N(x,y)dy por lo tanto F(x,y)=c será la familia de soluciones de la ecuación diferencial. A continuación se muestra un ejercicio que sigue el método algebráico normal deresolución de este tipo de ecuaciones. Ejercicio 16-3. Resolver la ecuación diferencial: (-1+ y exy + y Cos(xy))dx + (1+ x exy + x Cos(xy))dy = 0 En primer lugar intentamos resolver la ecuación con dsolve » maple('m:=(x,y)->-1+y*exp(x*y)+y*cos(x*y)');» maple('n:=(x,y)->1+x*exp(x*y)+x*cos(x*y)');» dsolve('m(x,y)+n(x,y)*Dy=0')

Page 407: Matlab Para Ingenieros y Cientificos

??? Error using ==> dsolveExplicit solution could not be found. Se observa que la función dsolve no resuelve la ecuación propuesta. Vamos aintentarlo por el método algebráico clásico de resolución de ecuaciones diferencialesexactas. En primer lugar comprobamos si la ecuación diferencial propuesta es realmenteexacta » pretty(simple(diff('m(x,y)','y'))) exp(y x) + x y exp(y x) + cos(y x) - x sin(y x) y » pretty(simple(diff('n(x,y)','x'))) exp(y x) + x y exp(y x) + cos(y x) - x sin(y x) y Por ser exacta, su solución se puede hallar de la siguiente forma: » solucion1=simplify('int(m(x,y),x)+g(y)') solucion1 = -x+exp(y*x)+sin(y*x)+g(y) Ahora calculamos la expresión de la función g(y), bajo la siguiente condición:diff(int(m(x,y),x)+g(y),y)=n(x,y) » pretty(simplify('int(m(x,y),x)+g(y)')) - x + exp(y x) + sin(y x) + g(y) » pretty(simplify('diff(-x+exp(y*x)+sin(y*x)+g(y),y)')) d x exp(y x) + x cos(y x) + ---- g(y) dy » simplify('solve(x*exp(y*x)+x*cos(y*x)+diff(g(y),y)=n(x,y),diff(g(y),y))') ans = 1

Page 408: Matlab Para Ingenieros y Cientificos

Luego g’(y)=1, con lo que la solución final será, salvo constante: » pretty(simplify('subs(g(y)=int(1,y),-x+exp(y*x)+sin(y*x)+g(y))')) - x + exp(y x) + sin(y x) + y Para representar gráficamente la familia de soluciones, graficamos las curvas denivel de la solución sin constante (figura 16-2) » [x,y]=meshgrid(-2*pi/3:.2:2*pi/3);» z=-x+exp(y.*x)+sin(y.*x)+y;» contour(z,100)

Figura 16-2 De la misma forma se puede resolver cualquier ecuación diferencial reducible aexacta mediante un factor integrante. ECUACIONES DIFERENCIALES LINEALES Una ecuación diferencial lineal de primer orden es del tipo: dy/dx + P(x)y = Q(x) con P(x) y Q(x) polinomios. Las ecuaciones diferenciales de este tipo se transforman en exactas mediante elfactor integrante: ò P(x)dxe y su solución general viene dada por la expresión: -ò P(x)dx ò P(x)dx(e ) ( ò e Q(x) dx)

Page 409: Matlab Para Ingenieros y Cientificos

Matlab implementa estas soluciones de las ecuaciones diferenciales lineales, y lasofrece siempre y cuando la integral del factor integrante sea evaluable para el programa. Ejercicio 16-4. Resolver la ecuación diferencial: x dy/dx + 3 y = x Sen(x) » pretty(simple(dsolve('x*Dy+3*y=x*sin(x)'))) sin(x) cos(x) C1 - 6 sin(x) - cos(x) + 3 ------ + 6 ------ + ------------- x 2 3 x x Otra forma más eficiente de resolución de la ecuación diferencial, que incluyesoluciones implícitas, es la siguiente: » pretty(simplify('dsolve(x*diff(y(x),x)+3*y(x)=x*sin(x),y(x))')) 3 2 x cos(x) - 3 x sin(x) + 6 sin(x) - 6 x cos(x) -_C1 y(x) = - ----------------------------------------------------- 3 x ECUACIONES ORDINARIAS DE ORDEN SUPERIOR Las ecuaciones diferenciales lineales ordinarias de orden n tienen lasiguiente forma general: n (k) (n) å ak(x) y (x)=a0(x)y(x)+a1(x)y’(x)+a2(x)y’’(x)+....+ an(x)y (x)=f(x)k=0 Si la función f(x) es idénticamente nula la ecuación se llama homogénea y sif(x) no es la función cero, la ecuación se llama no homogénea. Si las funciones ai(x) (i=1...n) son constantes, la ecuación se denomina en coeficientes constantes. Un concepto de gran interés aquí va a ser el de conjunto de funcioneslinealmente independientes. {f1(x), f2(x),....,fn(x)} es un conjunto de funcioneslinealmente independientes si para algún x del intervalo común de definición, el

Page 410: Matlab Para Ingenieros y Cientificos

determinante wronskiano de las funciones es no nulo. El determinante wronskiano delas funciones, en cualquier punto x de su campo de definición común, se define de lasiguiente forma: | f1(x) f2(x) f3(x)......................fn(x) || f1’(x) f2’(x) f3’(x).....................fn’(x) || f1’’(x) f2’’(x) f3’’(x)....................fn’’(x) || ............................................................. | = W(x)| (n-1) (n-1) (n-1) (n-1) || f1 (x) f2 (x) f3 (x).................fn (x) | Matlab dispone del comando maple(‘Wronskian’) que permite calcular la matrizwronskiana de un conjunto de funciones. Su sintaxis es: maple(‘Wronskian(V,variable)’) Calcula la matriz wronskiana correspondiente al vector de funciones V de variable independiente x Un conjunto S = {f1(x),.....,fn(x)} linealmente independiente de soluciones notriviales de la ecuación lineal homogénea de orden n: (n)a0(x)y(x)+a1(x)y’(x)+a2(x)y’’(x)+....+ an(x)y (x) = 0 se llama conjunto fundamental de soluciones de la ecuación. Si las funciones ai(x) (i=1....n) son continuas en un intervalo abierto I, entoncesla ecuación homogénea tiene un conjunto fundamental de soluciones S = {fi(x)} en i. Además, la solución general de la ecuación homogénea vendrá dada por lafunción: nf(x) = å ci fi(x) donde {ci} es un conjunto de constantes arbitrarias i=0 La ecuación: 2 n n ia0 + a1 m + a2 m + ...... + an m = å ai m = 0 i=0 se denomina ecuación característica de la ecuación diferencial homogénea en

Page 411: Matlab Para Ingenieros y Cientificos

coeficientes constantes. Las soluciones de esta ecuación característica van a determinarlas soluciones de la ecuación diferencial lineal homogénea general en coeficientesconstantes. Ejercicio 20-5 . Demostrar que el siguiente conjunto de funciones: { ex , x ex , x2 ex } es linealmente independiente. » funciones=maple('vector([exp(x),x*exp(x), x^2*exp(x)])') funciones = [exp(x), x*exp(x), x^2*exp(x)] » W=maple('Wronskian(funciones,x)') W = [exp(x), x*exp(x), x^2*exp(x)][exp(x), exp(x)+x*exp(x), 2*x*exp(x)+x^2*exp(x)][exp(x), 2*exp(x)+x*exp(x), 2*exp(x)+4*x*exp(x)+x^2*exp(x)] » pretty(determ(W)) 3 2 exp(x) Ya tenemos el valor del wronskiano, que evidentemente es siempre distinto de 0,luego el conjunto de funciones es linealmente independiente. ECUACIONES LINEALES DE ORDEN SUPERIOR HOMOGÉNEAS EN COEFICIENTESCONSTANTES. La ecuación diferencial lineal homogénea de orden n: (n)a0(x)y(x)+a1(x)y’(x)+a2(x)y’’(x)+....+ an(x)y (x) = 0 se dice que es de coeficientes constantes cuando las funciones ai(x) (i=1,..,n) sontodas constantes (no dependen da la variable x). La ecuación:

Page 412: Matlab Para Ingenieros y Cientificos

2 n n ia0 + a1 m + a2 m + ...... + an m = å ai m = 0 i=0 se denomina ecuación característica de la ecuación diferencial homogénea encoeficientes constantes. Las soluciones de esta ecuación característica (m1, m2, ...mn)van a determinar las soluciones de la ecuación diferencial lineal homogénea general encoeficientes constantes. Si los mi (i=1..n) son todos distintos, una solución general de la ecuaciónhomogénea en coeficientes constantes es: m1 x m2x mn xy(x) = c1 e + c2 e + ...... + cn e c1, c2, ...., cn son constantes arbitrarias que determinan la familia de soluciones de laecuación diferencial. Si algún mi es una raíz de multiplicidad k de la ecuación característica,determina los siguientes k términos de la solución: mi x mi x 2 mi x k mi xci e + c(i+1) x e + c(i+2) x e + ........ + c(i+k) x e Si existe alguna raíz compleja mj= a+bi de la ecuación característica, entoncestambién existe la raíz compleja conjugada a-bi. Estas dos raíces determinansimultáneamente el siguiente par de términos de la solución general de la ecuaciónhomogénea: ax axcj e Cos(bx) + c(j+1) e Sen(bx) Matlab aplica directamente este método de obtención de las soluciones de lasecuaciones lineales homogéneas en coeficientes constantes, al utilizar el comando dsolveo maple(‘dsolve’). Ejercicio 20-6. Resolver las siguientes ecuaciones diferenciales: 3y’’ + 2y’ - 5y = 0 2y’’ + 5y’ + 5y = 0 y(0) = 0 y´(0) = ½

Page 413: Matlab Para Ingenieros y Cientificos

» pretty(dsolve('3*D2y+2*Dy-5*y=0')) C1 exp(x) + C2 exp(- 5/3 x) » pretty(dsolve('2*D2y+5*Dy+5*y=0','y(0)=0,Dy(0)=1/2')) 1/2 1/2 1/2 1/2 2/15 3 5 exp(- 5/4 x) sin(1/4 3 5 x) Ejercicio 16-7. Resolver la siguiente ecuación diferencial: 9y’’’’ - 6 y’’’ +46 y’’ - 6y’ + 37 y= 0 » pretty(simple(dsolve('9*D4y-6*D3y+46*D2y-6*Dy+37*y=0'))) C1 exp(1/3 x) sin(2 x) + C2 exp(1/3 x) cos(2 x) + C3 sin(x) + C4 cos(x) Si nos fijamos en la solución, es evidente que la ecuación característica tienedos pares de soluciones complejas conjugadas. » solve('9*x^4-6*x^3+46*x^2-6*x+37=0') ans = [ i][ -i][1/3+2*i][1/3-2*i] También puede resolverse la ecuación de la forma siguiente: » pretty(maple('dsolve(9*diff(y(x),x$4)-6*diff(y(x),x$3)+46*diff(y(x),x$2)- 6*diff(y(x),x)+37*y(x)=0,y(x))')) y(x) = _C1 exp(1/3 x) sin(2 x)+ _C2 exp(1/3 x) cos(2 x)+ _C3 sin(x)+ _C4 cos(x) ECUACIONES NO HOMOGÉNEAS CON COEFICIENTES CONSTANTES, VARIACIÓNDE PARÁMETROS Dada la ecuación lineal no homogénea en coeficientes constantes:

Page 414: Matlab Para Ingenieros y Cientificos

n (k) (n) å ak(x) y (x)=a0(x)y(x)+a1(x)y’(x)+a2(x)y’’(x)+....+ an(x)y (x)=f(x)k=0 sea {y1(x), y2(x),.....,yn(x)} un conjunto de soluciones linealmente independientes de la correspondiente ecuación homogénea: na0(x)y(x)+a1(x)y’(x)+a2(x)y’’(x)+....+ an(x)y (x)= 0 Una solución particular de la ecuación no homogénea viene dada por: nyp(x) = å ui(x) yi(x) donde las funciones ui(x) se obtienen como sigue: i=1 f(x) Wi (y1(x), y2(x),.....,yn(x))ui(x) = ò --------------------------------------------- dx ( i=1,2,....,n ) W (y1(x), y2(x),.....,yn(x)) Wi (y1(x), y2(x),.....,yn(x)) es el determinante de la matriz que resulta al sustituir la i-ésima columna del Wronskiano W(y1(x), y2(x),.....,yn(x)), por el transpuesto del vector(0,0,.....,0,1). La solución general de la ecuación no homogénea viene dada por lasolución de la homogénea más la solución particular de la no homogénea, y tendrá laforma: m1 x m2x mn xy(x) = c1 e + c2 e + ...... + cn e + yp(x) supuestas las raíces mi de la ecuación característica de la homogénea todas distintas. Sino lo fueran, nos remitimos a la forma general de la solución de una ecuaciónhomogénea, que ya hemos estudiado antes. Ejercicio 20-8. Resolver las siguientes ecuaciones diferenciales: y’’ + 4y’ + 13 y= x cos2 (3x) y’’ - 2y’ + y = ex Ln(x) Vamos a seguir el camino algebráico del método de variación de parámetros pararesolver la primera ecuación. Consideramos la ecuación característica de la homogénea

Page 415: Matlab Para Ingenieros y Cientificos

para obtener un conjunto de soluciones linealmente independientes. » solve('m^2+4*m+13=0') ans = [-2+3*i][-2-3*y] » maple('f:=x->x*cos(3*x)^2');» maple('y1:=x->exp(-2*x)*cos(3*x)');» maple('y2:=x->exp(-2*x)*sin(3*x)');» maple('W:=x->Wronskian([y1(x),y2(x)],x)');» pretty(simplify(maple('det(W(x))'))) 3 exp(- 4 x) Ya tenemos el wronskiano no nulo, lo que indica que las funciones sonlinealmente independientes. Ahora calculamos las funciones Wi(x) i=1,2 » maple('W1:=x->array([[0,y2(x)],[1,diff((y2)(x),x)]])');» pretty(simplify(maple('det(W1(x))'))) - exp(- 2 x) sin(3 x) » maple('W2:=x->array([[y1(x),0],[diff((y1)(x),x),1]])');» pretty(simplify(maple('det(W2(x))'))) exp(- 2 x) cos(3 x) Ahora calculamos la solución particular de la ecuación no homogénea. » maple('u1:=x->factor(simplify(int(f(x)*det(W1(x))/det(W(x)),x)))');» maple('u1(x)') ans = 1/14652300*exp(2*x)*(129285*cos(9*x)*x-6084*cos(9*x)-28730*sin(9*x)*x-13013*sin(9*x)+281775*cos(3*x)*x-86700*cos(3*x)-187850*sin(3*x)*x-36125*sin(3*x)) » maple('u2:=x->factor(simplify(int(f(x)*det(W2(x))/det(W(x)),x)))');» maple('u2(x)')ans =

Page 416: Matlab Para Ingenieros y Cientificos

1/14652300*exp(2*x)*(563550*cos(3*x)*x+108375*cos(3*x)+ 845325*sin(3*x)*x-260100*sin(3*x)+28730*cos(9*x)*x+13013*cos(9*x)+ 129285*sin(9*x)*x-6084*sin(9*x)) » maple('yp:=x->factor(simplify(y1(x)*u1(x)+y2(x)*u2(x)))');» maple('yp(x)') ans = -23/1105*x*cos(3*x)^2+13436/1221025*cos(3*x)^2+24/1105*cos(3*x)*sin(3*x)*x+3852/1221025*cos(3*x)*sin(3*x)+54/1105*x-21168/1221025 Luego ya podemos escribir la solución general de la no homogénea » maple('y:=x->simplify(c1*y1(x)+c2*y2(x)+yp(x))');» maple('combine(y(x),trig)') ans = c1*exp(-2*x)*cos(3*x)+c2*exp(-2*x)*sin(3*x)-23/2210*x*cos(6*x)+1/26*x+6718/1221025*cos(6*x)-2/169+12/1105*x*sin(6*x)+ 1926/1221025*sin(6*x) Ahora representamos gráficamente un conjunto de soluciones, para determinadosvalores de c1 y c2 (figura 16-3) » fplot(simplify('subs(c1=-5,c2=-4,y(x))'),[-1,1])» hold on» fplot(simplify('subs(c1=-5,c2=4,y(x))'),[-1,1])» fplot(simplify('subs(c1=-5,c2=2,y(x))'),[-1,1])» fplot(simplify('subs(c1=-5,c2=-2,y(x))'),[-1,1])» fplot(simplify('subs(c1=-5,c2=-1,y(x))'),[-1,1])» fplot(simplify('subs(c1=-5,c2=1,y(x))'),[-1,1])» fplot(simplify('subs(c1=5,c2=1,y(x))'),[-1,1])» fplot(simplify('subs(c1=5,c2=-1,y(x))'),[-1,1])» fplot(simplify('subs(c1=5,c2=-2,y(x))'),[-1,1])» fplot(simplify('subs(c1=5,c2=2,y(x))'),[-1,1])» fplot(simplify('subs(c1=5,c2=4,y(x))'),[-1,1])» fplot(simplify('subs(c1=5,c2=-4,y(x))'),[-1,1])» fplot(simplify('subs(c1=0,c2=-4,y(x))'),[-1,1])» fplot(simplify('subs(c1=0,c2=4,y(x))'),[-1,1])» fplot(simplify('subs(c1=0,c2=2,y(x))'),[-1,1])» fplot(simplify('subs(c1=0,c2=-2,y(x))'),[-1,1])» fplot(simplify('subs(c1=0,c2=-1,y(x))'),[-1,1])» fplot(simplify('subs(c1=0,c2=1,y(x))'),[-1,1])

Page 417: Matlab Para Ingenieros y Cientificos

Figura 16-3

Para la segunda ecuación diferencial aplicamos directamente DSolve y tenemosla solución. » pretty(simple(dsolve('D2y-2*Dy+y=exp(x)*log(x)'))) 2 2 1/4 exp(x) (2 log(x) x - 3 x + 4 C1 + 4 C2 x) ECUACIONES NO HOMOGÉNEAS CON COEFICIENTES VARIABLES. ECUACIONESDE CAUCHY-EULER La ecuación lineal no homogénea en coeficientes variables: n k (k) 2 n (n) å ak x y(x)=a0y(x)+a1 x y’(x)+a2 x y’’(x)+....+ an x y (x)=f(x)k=0 se denomina ecuación de Cauchy-Euler. Matlab resuelve directamente este tipo de ecuaciones con el comando dsolve omaple(‘dsolve’). Ejercicio 16-9. Resolver la siguiente ecuación diferencial: x3 y’’’ + 16 x2 y’’ + 79 x y’ + 125 y = 0 » pretty(simple(dsolve('x^3*D3y+16*x^2*D2y+79*x*Dy+125*y=0'))) C1 + C2 sin(3 log(x)) x + C3 cos(3 log(x)) x -------------------------------------------- 5

Page 418: Matlab Para Ingenieros y Cientificos

xTRANSFORMADA DE LAPLACE Sea una función f(t) una función definida en el intervalo [0,¥). La transformadade Laplace de f(t) es la función de variable s: +¥ -stL{f}(s) = ò e f(t) dt, 0 Decimos que f(t) es la transformada inversa de Laplace de F(s) si se cumple: -1L{f}(s) = F(s) y escribimos L {F(s)} (t) = f(t) Matlab aporta los comandos maple(‘laplace’) y maple(‘invlaplace’) que permitencalcular la transformada de Laplace de una expresión respecto a una variable y latransformada inversa. Su sintaxis es la siguiente: maple(‘laplace(expresión, t, s)’) Calcula la transformada de Laplace de la expresión con respecto a t. La transformada es de variable s maple(‘invlaplace(expresión,s,t)’) Calcula la transformada inversa de Laplce de la expresión con respecto a s. La transformada inversa es de variable t Veamos algunos ejemplos. » pretty(maple('laplace(t^(3/2)-exp(t)+sinh(a*t), t, s)')); 1/2 pi 1 a 3/4 ----- - ----- + ------- 5/2 s - 1 2 2 s s - a » pretty(maple('invlaplace(s^2/(s^2+a^2)^(3/2), s, t)')) - t BesselJ(1, a t) a + BesselJ(0, a t)

Page 419: Matlab Para Ingenieros y Cientificos

La transformada de Laplace y su inversa se utilizan para resolver determinadasecuaciones diferenciales. El método a seguir es calcular las transformada de Laplace decada término de la ecuación para obtener una ecuación diferencial en transformadas deLaplace y resolverla en función de las transformadas de Laplace. Finalmente se halla lasolución de la ecuación inicial calculando la transformada inversa de Laplace de lasolución de la ecuación en transformadas de Laplace. No obstante, Matlab aporta la opción ‘laplace’ en el comando maple(‘dsolve’), quefuerza al programa a resolver la ecuación diferencial utilizando transformadas de Laplace.La sintaxis es la siguiente: maple(‘dsolve(ecuación, func(var), ‘laplace’) Ejercicio 16-10. Resolver la siguiente ecuación diferencial: y’’ +2y’ + 4y = x - e --x y(0)=1 y’(0)=1 utilizando la transformada de Laplace. En primer lugar calculamos las funciones transformadas de Laplace de los dosmiembros de la ecuación diferencial, y aplicamos las condiciones iniciales. » maple('L:=s->laplace(diff(y(x),x$2)+2*diff(y(x),x)+4*y(x),x,s)');» pretty(simplify('subs(y(0)=1,(D(y))(0)=1,L(s))')) 2 laplace(y(x), x, s) s - s - 3 + 2 laplace(y(x), x, s)s + 4 laplace(y(x), x, s) » maple('L1:=s->laplace(x-exp(-x),x,s)');» pretty(simplify('L1(s)')) 2 - s - 1 + s - ------------ 2 s (s + 1) A continuación integramos la ecuación diferencial en transformadas de Laplace » pretty(simplify(maple('solve(L(s)=L1(s),laplace(y(x),x,s))')))

Page 420: Matlab Para Ingenieros y Cientificos

4 3 3 2 2 2 s y(0) + 3 s y(0) + D(y)(0) s + D(y)(0) s + 2 y(0) s + s + 1- s ---------------------------------------------------------------------- 2 2 s (s + 1) (s + 2 s + 4) Ahora sustituímos en la solución las condiciones iniciales dadas. » maple('TL:=s->solve(L(s)=L1(s),laplace(y(x),x,s))');» pretty(simplify('subs(y(0)=1,(D(y))(0)=1,TL(s))')) 4 3 2 s + 4 s + 2 s + s + 1 -------------------------- 2 2 s (s + 1) (s + 2 s + 4) Ya hemos obtenido la transformada de Laplace de la solución de la ecuacióndiferencial inicial. Para calcular la solución de la ecuación inicial calcularemos latransforma inversa de Laplace de la función obtenida en el paso anterior. » maple('TL0:=s->simplify('subs(y(0)=1,(D(y))(0)=1,TL(s))')');» solucion=simple(maple('invlaplace(TL0(s),s,x)'));» pretty(solucion) 1/2 1/2 1/2 1 sin(3 x) 3 35 cos(3 x) 1/4 x - 1/8 - -------- + 5/8 ---------------- + ---- ----------- 3 exp(x) exp(x) 24 exp(x) Ya tenemos la solución de la ecuación diferencial inicial. También se podía haber resuelto directamente mediante: » pretty(simple(maple('dsolve({diff(y(x),x$2)+2*diff(y(x),x)+4*y(x)=

Page 421: Matlab Para Ingenieros y Cientificos

x-exp(-x),y(0)=1,D(y)(0)=1},y(x),laplace)'))) 1/2 1/2 1/2 1 sin(3 x) 3 35 cos(3 x) y(x) = 1/4 x - 1/8 - -------- + 5/8 ---------------- + ---- ------------ 3 exp(x) exp(x) 24 exp(x) SISTEMAS DE ECUACIONES LINEALES HOMOGÉNEAS CON COEFICIENTESCONSTANTES Matlab resuelve directamente este tipo de sistemas sin más que utilizar el comandodsolve o maple(‘dsolve’) con la sintaxis ya conocida Un sistema de ecuaciones diferenciales escrito como X´(t) = A X(t), presenta unasolución general de la forma: n li tX(t) = å ci Vi e i=1 siendo {lk} los autovalores correspondientes a los autovectores {Vk} de la matriz A delsistema (k=1, 2,...n) y todos los lk distintos. Si existiese algun lk =ak+bki, número complejo, genera la siguientecomponente de la solución general: lk t lk tCk1 Wk1 e + Ck2 Wk2 e donde: _ _Wk1 = ½ (Vk + Vk)Cos(bk t) + i/2 (Vk - Vk)Sen(bk t) _ _ Wk2 = i/2 (Vk - Vk)Cos(bk t) - 1/2 (Vk + Vk)Sen(bk t) _Vk es el autovector correspondiente al autovalor lk y Vk es su conjugado. Si existe un li de multiplicidad m>1, genera una parte de la solución general, dela forma:

Page 422: Matlab Para Ingenieros y Cientificos

li t li t 2 li t k li tci e Vi + c(i+1) t e V(i+1)+ c(i+2) t e V(i+2)+ .... + c(i+k) t e Vk Ejercicio 16-11. Resolver el siguiente sistema de ecuaciones diferenciales: x’ = - 5 x + 3 yy’ = - 2 x - 10 » pretty(dsolve('Dx=-5*x+3*y,Dy=-2*x-10*y','t')) y(t) = C1 exp(- 7 t) + C2 exp(- 8 t), x(t) = - 3/2 C1 exp(- 7 t) - C2 exp(- 8 t) También se puede usar la siguiente sintaxis: » pretty(maple('dsolve({diff(x(t),t)=-5*x(t)+3*y(t),diff(y(t),t)=-2*x(t)-10*y(t)}, {x(t),y(t)})')) {y(t) = _C1 exp(- 7 t) + _C2 exp(- 8 t), x(t) = - 3/2 _C1 exp(- 7 t) - _C2 exp(- 8 t)} SISTEMAS DE ECUACIONES LINEALES NO HOMO-GÉNEAS CON COEFICIENTESCONSTANTES Ahora vamos a considerar sistemas de ecuaciones diferenciales no homogéneascon coeficientes constantes de la forma X’ = A X + F(t). Sea X = F(t)C la solución general del sistema homogéneo X’=AX. Una soluciónparticular del sistema no homogéneo es: -1Xp =F(t)ò F(t) F(t) dt La solución general del sistema no homogéneo será X=F(t)C+Xp, con lo quetendremos la solución general: -1X = F(t)C + F(t)ò F(t) F(t) dt

Page 423: Matlab Para Ingenieros y Cientificos

Este método es la generalización a sistemas de ecuaciones del método devariación de parámetros para las ecuaciones simples. Matlab ofrece directamente la solución de estos sistemas con el comando dsolveo maple(‘dsolve’), siempre y cuando pueda obtener la forma algebráica de las solucionesde las integrales que aparecen en la solución.Ejercicio 16-12. Resolver el siguiente sistema de ecuaciones diferenciales: x’ - y = e-t

y’ + 5 x + 2 y = Sin[3t] con las condiciones iniciales x(0)=x0 e y(0)= y0 » pretty(simple(dsolve('Dx-Dy=exp(-t),Dy+5*x+2*y=sin(3+t)', 'x(0)=xo,y(0)=yo','t'))) y(t) = 7/50 sin(3) cos(t) + 7/50 cos(3) sin(t) + 5/6 exp(- t) + 1/50 sin(3) sin(t) - 1/50 cos(3) cos(t) - 5/7 + 5/7 yo - 5/7 xo + (- 7/50 sin(3) + 2/7 yo + 1/50 cos(3) - 5/42 + 5/7 xo) exp(-7t) ECUACIONES DE ORDEN Y GRADO SUPERIOR A UNO, LINEALES Y NO LINEALES,MÉTODOS APROXIMADOS Cuando los métodos conocidos de resolución de de ecuaciones diferenciales ysistemas no ofrecen solución, se suele recurrir a métodos de aproximación. Dentro de losmétodos aproximados los hay simbólicos y numéricos. Los simbólicos permiten obtenersoluciones algebráicas aproximadas, y el más representativo es el de la series de Taylor.Los numéricos permiten obtener conjuntos de puntos de las soluciones, queposteriormente pueden ajustarse por cualquier método algebráico (interpolación,regresión,....) a la curva que mejor les aproxime. Dicha curva será una soluciónaproximada de la ecuación diferencial. Entre de los métodos numéricos más comunes sehalla el método de Runge Kuta. El uso más corriente de los métodos aproximativos es la resolución de ecuacionesy sistemas de ecuaciones diferenciales no lineales de orden y grado superiores a uno,siempre que la solución exacta no sea posible de obtener mediante otros métodos. El Método de las series de Taylor Este método ofrece soluciones polinómicas aproximadas de ecuaciones

Page 424: Matlab Para Ingenieros y Cientificos

diferenciales generales, y se basa en el desarrolo de funciones en series de potencias deTaylor. Matlab ofrece la opción ‘ series’ del comando maple(‘dsolve’), que permite obtenereste tipo de soluciones. Su sintaxis es la siguiente: maple(‘dsolve(ecuación, func(var), ‘series’) Además existe el comando maple(‘powsolve’) que resuelve ecuacionesdiferenciales lineales por series de potencias, y cuya sintaxis es la siguiente: maple(‘powseries[powsolve](ecuación, cond1,....,condn)’) Con el comando maple(‘convert(polynom)’) se puede convertir una solucióncomplicada a polinomio ordenado en potencias de la variable. Ejercicio 16-13. Resolver las dos siguientes ecuaciones diferenciales por el método de la seriesde Taylor: x(x-1)y’’ + 2(1-x)y’ -1 = 0 yy’’ - (y’)2 = yy’/(1+x) con las condiciones iniciales y(0)=1 e y’(0)=1 »pretty(simple(maple('dsolve(4*x^2*diff(y(x),x$2)+4*x*diff(y(x),x)+ (x^2-1)*y(x)=0,y(x),series)'))) 1/2 2 4 6 y(x) = _C1 x (1 - 1/24 x + 1/1920 x + O(x )) 6 2 4 6 log(x) O(x ) 1 - 1/8 x + 1/384 x + O(x) + _C2[------------- + -----------------------------] 1/2 1/2 x x » pretty(simplify(maple('convert(_C1*x^(1/2)*(1-1/24*x^2+1/1920*x^4+ O(x^6))+_C2*(1/x^(1/2)*log(x)*(O(x^6))+1/x^(1/2)*(1-1/8*x^2+1/384*x^4+ O(x^6))),polynom)'))) 3 5 6 1/1920 (1920 _C1 x - 80 _C1 x + _C1 x + 1920 _C1 x O(x )

Page 425: Matlab Para Ingenieros y Cientificos

6 2 4 + 1920 _C2 log(x) O(x ) + 1920 _C2 - 240 _C2 x + 5_C2 x 6 1/2 + 1920 _C2 O(x )) / x » pretty(maple('dsolve({y(x)*diff(y(x),x$2)+diff(y(x),x)^2+1=0, y(0)=1,D(y)(0)=1},y(x),series)')) 2 3 4 5 6 y(x) = 1 + x - x + x - 3/2 x + 5/2 x + O(x ) Ejercicio 16-14. Resolver los siguientes sistemas de ecuaciones diferenciales por el método dela series de Taylor: x’’ + y’ - 4x + 12 = 0 x’’ + 2x’ + 2y’ + 3z’ + x = 1 y’’ - 10x’ - y +7=0 y’ + z’ - x = 0 x(0)=y(0)=x’(0)=y’(0)=1 x’ + z = 0 » pretty(simple(maple('dsolve({diff(x(t),t$2)+diff(y(t),t)-4*x+12=0, diff(y(t),t$2)-10*diff(x(t),t)-y(t)+7=0,x(0)=1,y(0)=1,D(x)(0)=1,D(y)(0)=1}, {x(t),y(t)},series)'))) 2 3 4 387 5 6{y(t) = 1 + t + 2 t + (- 43/2 + 20/3 x) t - 3/2 t + (--- - 3 x)t + O(t ), 40 2 3 4 5 6x(t) = 1 + t + (- 13/2 + 2 x) t - 2/3 t +(43/8 - 5/3 x) t +3/10 t + O(t)} »pretty(simple(maple('dsolve({diff(x(t),t$2)+2*diff(x(t),t)+2*diff(y(t),t)+ 3*diff(z(t),t)+x(t)=1,diff(y(t),t)+diff(z(t),t)-x(t)=0,diff(x(t),t)+z(t)=0}, {x(t),y(t),z(t)}, series)'))) 2

Page 426: Matlab Para Ingenieros y Cientificos

{x(t) = x(0) + D(x)(0) t + (- D(x)(0) - 1/2 x(0) + 1/2) t 3 4 + (1/2 D(x)(0) + 1/3 x(0) - 1/3) t + (- 1/6 D(x)(0) - 1/8x(0) + 1/8) t 5 6 + (1/24 D(x)(0) + 1/30 x(0) - 1/30) t + O(t ), 2 3 z(t) = z(0) + x(0) t + 1/2 D(x)(0) t + (- 1/3 D(x)(0) - 1/6x(0) + 1/6) t 4 + (1/8 D(x)(0) + 1/12 x(0) - 1/12) t 5 6 + (- 1/30 D(x)(0) - 1/40 x(0) + 1/40) t + O(t ), 2 3 y(t) = y(0) + x(0) t + 1/2 D(x)(0) t + (- 1/3 D(x)(0) - 1/6x(0) + 1/6) t 4 + (1/8 D(x)(0) + 1/12 x(0) - 1/12) t 5 6 + (- 1/30 D(x)(0) - 1/40 x(0) + 1/40) t + O(t ) } El Método de Runge-Kutta El método de Runge-Kutta permite obtener un conjunto de puntos de la soluciónaproximada de una ecuación diferencial. Maple aporta la opción numeric del comandomaple(‘solve’) que posibilita el cálculo de soluciones numéricas aproximadas deecuaciones diferenciales. Su sintaxis es: maple(‘dsolve(ecuación, func(var), ‘numeric’) Ejercicio 16-15 . Resolver la siguiente ecuación por el método de Runge-Kutta:

Page 427: Matlab Para Ingenieros y Cientificos

3(y’’)2 = y’ y’’’, con las condiciones iniciales y(0)=1/2, y’(0)=y’’(0)=1 » maple('f := dsolve({3*diff(y(x),x$2)^2 =diff(y(x),x$3)*diff(y(x),x), y(0)=1/2,D(y)(0)=1,(D@@2)(y)(0)=1},y(x), numeric)') ans = f := proc (x) `dsolve/numeric/result2`(x,3879004,[3]) end Ahora calculamos varios puntos de la función solución, para hacer unarepresentación gráfica de la misma (figura 16-4). » [maple('f(-0.3)'),maple('f(-0.2)'),maple('f(-0.1)'),maple('f(0)'), maple('f(0.1)'),maple('f(0.2)'),maple('f(0.3)')] ans = {x = -.3,y(x) = .2350889359260396}{y(x) = .3167840433732281, x = -.2} {y(x) =.4045548849869109, x = -.1}{y(x) = .5000000000000000, x = 0} {x = .1, y(x) =.6055728090006967}{y(x) = .7254033307597474, x = .2} {y(x) = .8675444679682489, x =.3000000000000000}» y=[.2350889359260396,.3167840433732281,.4045548849869109,.5, .6055728090006967,.7254033307597474,.8675444679682489]; » plot((-0.3:.1:0.3),y)

Figura 16-4

Se observa que la figura es de tipo parabólico, con lo que podemoa ajustar lanube de puntos a una parábola. Dicha parábola será la solución simbólica aproximada dela ecuación diferencial. » pretty(vpa(poly2sym(polyfit((-0.3:.1:0.3),y,2))))

Page 428: Matlab Para Ingenieros y Cientificos

2 .5747427827483573 x + 1.041293962469090 x + .4991457846921903 Ya tenemos la función polinómica y(x) solución de la ecuación POLINOMIOS ORTOGONALES Dos funciones distintas f(x) y g(x) se dice que son ortogonales en un intervalo[a,b] si su producto interno es 0, es decir si

Un ejemplo de familia ortogonal pueden ser las funciones fn(x)=sen(nx) y gn(x)=cos(nx), n=1,2,3,... en el intervalo [-p,p]. Matlab aporta una amplia lista de polinomios ortogonales, que van a ser muyútiles a la hora de resolver ciertas ecuaciones diferenciales no lineales de orden superior.Las funciones simbólicas que permiten el trabajo con estos polinomios son las siguientes: T(n,x) Polinomios de Chebychev de primera especie. U(n,x) Polinomios de Chebychev de segunda especie. P(n,x) Polinomios de Legendre H(n,x) Polinomios de Hermite. L(n,x) Polinomios de Laguerre. L(n,a,x) Polinomios generalizados de Laguerre. P(n,a,b,x) Polinomios de Jacobi. G(n,m,x) Polinomios de Gegenbauer. Veamos ahora su relación con las ecuaciones diferenciales. Precisamente estarelación es la que permite hallar soluciones de determinadas ecuaciones no lineales deorden superior. Para usar estas funciones es necesario ejecutar antes maple(‘withorthopoly’).

Page 429: Matlab Para Ingenieros y Cientificos

Polinomios de Chebychev de primera y segunda especie Los polinomios de Chebychev de primera especie son las soluciones de laecuación diferencial:

Su ortogonalidad viene dada por:

Los polinomios de Chebychev de segunda especie cumplen la relación deortogonalidad: 1ò Un(x)Um(x) (1-x2 ) 1/2 dx=0 m¹n-1 Polinomios de Legendre Son soluciones de la ecuación diferencial de Legendre:

1 Su ortogonalidad viene dada por la relación ò Pn(x)Pm(x)dx=0 m¹nPolinomios asociados de Legendre Las soluciones de la ecuación diferencial:

son las llamadas funciones asociadas de Legendre Polinomios de Hermite Las soluciones de la ecuación diferencial de Hermite:

¡Error! Argumento de modificador no especificado. se conocen como polinomios de Hermite.

Page 430: Matlab Para Ingenieros y Cientificos

1 -x2

Su ortogonalidad viene dada por: ò Hn(x)Hm(x)e dx=0 m¹n -1¡Error! Argumento demodificador no especificado. Polinomios generalizados de Laguerre Las soluciones de la ecuación diferencial general de Laguerre: x y’’ + (a+1-x) y’ + n y = 0se conocen como polinomios generalizados de Laguerre. 1 Su ortogonalidad viene dada por: ò Ln(x)Lm(x) xa e-x dx=0 m¹n -1Polinomios de Laguerre Las soluciones de la ecuación diferencial de Laguerre:

se conocen como polinomios de Laguerre. Se trata del caso particular a=0 de lospolinomios generalizados de Laguerre Polinomios de Jacobi 1 Su ortogonalidad viene dada por: ò Pn(x)Pm(x)(1-x)a (1+x) b dx=0 m¹n -1Polinomios de Gegenbauer Su estructura es la siguiente:

Ejercicio 16-16. Hallar soluciones para las ecuaciones diferenciales:

, ¡Error! Argumento de modificador noespecificado.

,

Page 431: Matlab Para Ingenieros y Cientificos

» pretty(simple(maple('T(7,x)'))) 7 5 3 64 x - 112 x + 56 x - 7 x » pretty(simple(maple('P(6,x)'))) 231 6 315 4 105 2 --- x - --- x + --- x - 5/16 16 16 16 » pretty(simple(maple('H(5,x)'))) 5 3 32 x - 160 x + 120 x » pretty(simple(maple('L(5,x)'))) 2 3 4 5 1 - 5 x + 5 x - 5/3 x + 5/24 x - 1/120 x FUNCIONES DE AIRY Y BESSEL Reciben el nombre de funciones de Airy las soluciones linealmenteindependientes de la ecuación diferencial lineal de segundo orden: y’’ - x y = 0 (ecuación de Airy) Reciben el nombre de funciones de Bessel las soluciones linealmenteindependientes de la ecuación diferencial: y’’ + y’/x + (k2 - n2 /x2 ) y = 0 (ecuación de Bessel) Reciben el nombre de funciones de Bessel modificadas las solucioneslinealmente independientes de la ecuación diferencial: y’’ + y’/x - (k2 + n2 /x) y = 0 (ecuación de Bessel modificada) Matlab implementa al respecto las siguientes funciones simbólicas: Ai(z) y Bi(z) Dan soluciones independientes de la ecuación diferencial de Airy.

Page 432: Matlab Para Ingenieros y Cientificos

BesselJ(n,z) y BesselY(n,z) Dan soluciones independientes de la ecuación diferencial de Bessel. BesselI(n,z) y BesselK(n,z) Dan soluciones independientes de la ecuación diferencial de Bessel modificada. Ejercicio 16-17 . Hallar soluciones para las ecuación diferencial: x2 y’’ + x y’ + (x 2 - 1/4)y = 0¡Error! Argumento de modificador no especificado. Se trata de la ecuación diferencial de Bessel para n=1/2. Obtendremos dossoluciones linealmente independientes de la siguiente forma: » pretty(simple(maple('BesselJ(1/2,x)'))) 1/2 2 sin(x) ----------- 1/2 1/2 pi x » pretty(simple(maple('BesselY(1/2,x)'))) 1/2 2 cos(x) - ----------- 1/2 1/2 x pi ECUACIONES EN DIFERENCIAS FINITAS Matlab habilita la función maple(‘rsolve’), que permite resolver ecuaciones endiferencias finitas y recurrentes en general. Su sintaxis es: maple(‘rsolve({ecuación, condiciones_iniciales}, función)’)

Page 433: Matlab Para Ingenieros y Cientificos

Ejercicio 16-18. Hallar soluciones para las ecuación recurentes siguientes: ym+1 = mym+(m+1)! y1 =2, y2n = 4yn + 5 y1 = a, yn+2 -3 yn+1 + 2yn =4n y0=y1=1 ¡Error!Argumento de modificador no especificado. » pretty(maple('rsolve({y(m+1)=m*y(m)+(m+1)!,y(1)=2},y)')) 2 1/2 GAMMA(m) (m + m + 2) » pretty(maple('rsolve({y(2*n)=4*y(n)+5,y(1)=a},y)')) log(n) ------ + 1 2 2 log(2) a n + n (- 20/3 (1/4) + 5/3) » pretty(maple('rsolve({y(n+2)-3*y(n+1)+2*y(n)=4^n,y(0)=1,y(1)=1},y)')) n n 4/3 - 1/2 2 + 1/6 4 Ejercicio 16-19 . Hallar el término general de las sucesiones de números reales definidas por lasiguientes leyes de recurrencia: xn = nxm*xn- = xn+1 x0 =1, yn+2 -2 yn+1 + 5yn =cos(3n) y0=y1= 1 ¡Error! Argumento demodificador no especificado. » pretty(maple('rsolve({x(n)-n*x(n)*x(n+1)=x(n+1),x(0)=1},x)')) 2 ---------- 2 n - n + 2 » maple('rsolve({x(n+2)-2*x(n+1)+5*x(n)=cos(3*n),x(0)=1,x(1)=1},x)') ans = 1/2*(1-2*i)^n+1/2*(1+2*i)^n+(-39*cos(n-2)^3+22*cos(n-5)^3-19*cos(n-4)^3+32*cos(n-3)^3-25*cos(n-2)^3*cos(1)-25*cos(n-2)^3*cos(3)+100*cos(n-2)^3*cos(1)^2+100*cos(n-2)^3*cos(3)^2+10*cos(n-3)^3*cos(1)^2+10*cos(n-3)^3*cos(3)^2-72*cos(n-3)^3*cos(3)-72*cos(n-3)^3*cos(1)-49*cos(n-4)^3*cos(1)+120*cos(n-4)^3*cos(3)^2+120*cos(n-4)^3*cos(1)^2-49*cos(n-4)^3*cos(3) -

Page 434: Matlab Para Ingenieros y Cientificos

60*cos(n-5)^3*cos(3)-60*cos(n-5)^3*cos(1)+169*cos(n-2)^3*cos(1)*cos(3)-120*cos(n-2)^3*cos(3)*cos(1)^2-120*cos(n-2)^3*cos(3)^2*cos(1)-290*cos(n-3)^3*cos(3)^2*cos(1) +200*cos(n-3)^3*cos(3)^2*cos(1)^2+208*cos(n-3)^3*cos(1)*cos(3)-290*cos(n-3)^3*cos(3)* cos(1)^2-100*cos(n-4)^3*cos(3)*cos(1)^2+265*cos(n-4)^3*cos(1)*cos(3)-100*cos(n-4)^3*cos(3)^2*cos(1)+50*cos(n-5)^3*cos(1)*cos(3)+100*cos(n-2)^3*cos(3)^2*cos(1)^2)/(25*cos(3)^2+36*cos(1)*cos(3)-30*cos(3)-30*cos(3)^2*cos(1)+25*cos(1)^2-30*cos(1)-30*cos(3)*cos(1)^2+25+25*cos(3)^2*cos(1)^2)+1/4*(-30*i*(1+2*i)^n-35*(1-2*i)^n*cos(3)^2+27*(1-2*i)^n*cos(1)-25*(1-2*i)^n*cos(1)^2-35*(1+2*i)^n*cos(3)^2-37*i*(1-2*i)^n*cos(3)-25*(1+2*i)^n*cos(1)^2+21*(1-2*i)^n*cos(3)^2*cos(1)+23*(1-2*i)^n*cos(3)*cos(1)^2-20*(1-2*i)^n*cos(3)^2*cos(1)^2+25*i*(1-2*i)^n*cos(3)^2+15*i*(1-2*i)^n*cos(1)^2-20*(1+2*i)^n*cos(3)^2*cos(1)^2-15*i*(1+2*i)^n*cos(1)^2+37*i*(1+2*i)^n*cos(3)+39*i*(1+2*i)^n*cos(1)-39*i*(1-2*i)^n*cos(1)+21*(1+2*i)^n*cos(3)^2*cos(1)+41*(1+2*i)^n*cos(3)+27*(1+2*i)^n*cos(1)+48*i*(1-2*i)^n*cos(1)*cos(3)+10*i*(1-2*i)^n*cos(3)^2*cos(1)^2-25*i*(1+2*i)^n*cos(3)^2+19*i*(1+2*i)^n*cos(3)*cos(1)^2-48*i*(1+2*i)^n*cos(1)*cos(3) +33*i*(1+2*i)^n*cos(3)^2*cos(1)-24*(1+2*i)^n*cos(1)*cos(3)+23*(1+2*i)^n*cos(3)*cos(1)^2-40*(1-2*i)^n-40*(1+2*i)^n+41*(1-2*i)^n*cos(3)-10*i*(1+2*i)^n*cos(3)^2*cos(1)^2-33*i*(1-2*i)^n*cos(3)^2*cos(1)+30*i*(1-2*i)^n-24*(1-2*i)^n*cos(1)*cos(3)-19*i*(1-2*i)^n*cos(3)*cos(1)^2)/(5*cos(1)^2-6*cos(1)+5)/(5-6*cos(3)+5*cos(3)^2)-3/2*(-2*cos(n-2)*cos(1)-2*cos(n-2)+10*cos(n-2)*cos(1)^2-5*cos(n-3)*cos(1)+cos(n-3))/(5*cos(1)^2-6*cos(1)+5)-3/8*(i*(1-2*i)^n*cos(1)^2-2*(1-2*i)^n*cos(1)^2-4*i*(1-2*i)^n*cos(1)+3*i*(1-2*i)^n-4*(1-2*i)^n+2*(1-2*i)^n*cos(1)-2*(1+2*i)^n*cos(1)^2-i*(1+2*i)^n*cos(1)^2+4*i*(1+2*i)^n*cos(1)-4*(1+2*i)^n-3*i*(1+2*i)^n+2*(1+2*i)^n*cos(1))/(5*cos(1)^2-6*cos(1)+5) Ahora intentamos simplificar el resultado no trivial. » pretty(simple(maple('evalf(rsolve({x(n+2)-2*x(n+1)+5*x(n)=cos(3*n), x(0)=1,x(1)=1},x))'))) n n .4373424522418379 (1. - 2. i) + .4373424522418384 (1. + 2. i) 3 2 + .9418421760747166 cos(n) - .2069117398607332 cos(n) sin(n) 2 3 + .4405817940094211 cos(n) sin(n) - .1714545418874301sin(n) n n - .0626567574510487 i (1. + 2. i) + .0626567574510487 i(1. - 2. i)

Page 435: Matlab Para Ingenieros y Cientificos

- .8165270805583898 cos(n) + .1803188413807544 sin(n)

Page 436: Matlab Para Ingenieros y Cientificos

Capítulo 17

PROGRAMACIÓN

A lo largo de los sucesivos capítulos de este libro se han analizado lasherramientas de trabajo con Matlab. Se han descrito los comandos, funciones, operadoresmatemáticos, operadores lógicos, operadores relacionales, variables, operaciones deentrada y salida de datos, manejo de ficheros, importación y exportación de datos, etc. Combinado convenientemente todos los objetos definidos en Matlab, adecuadosa las reglas de trabajo con el programa, se puede construir código de programación muyutil en la investigación matemática. Al igual que en los lenguajes de programamcióncomo C o Fortran, en Matlab se pueden escribir programas con bucles, control de flujo einstrucciones condicionales. Matlab soporta la programación procedimental, con procesositerativos, recursivos, etc. La forma de trabajo y comandos específicos para estas tareasya se estudiaron en el capítulo 7 de este libro. Mención aparte merece la programación funcional. En Matlab se pueden resolvermultitud de problemas mediante la definición adecuada de las correspondientes funcionespermanentes vía M-ficheros, tal y como ya se estudió en el citado capítulo 7. Podemos decir que Matlab permite un tipo de programación estructurada muyfluída y muy estándar. De hecho se puede generar con Matlab código Fortan, C y VisualBasic que puede ser compilable en estos lenguajes de programación. Matlab dispone dedocumentación específica al efecto en la que se explica claramente cómo realizar estastareas. De todas formas, en Matlab suele diferenciarse entre la programación funcional,vía funciones permanentes salvadas en M-ficheros y el código de programación normalmediante secuencias de comandos que van a ejecutar las tareas en modo batchautomáticamente y que se guardan en ficheros denominados ficheros “Scripts”. Tambiénes corriente la mezcla de ambos conceptos, en cuyo caso no sería ni siquiera necesariohacer distinciones.

Page 437: Matlab Para Ingenieros y Cientificos

FICHEROS “SCRIPT” Matlab es habitualmente utilizado en modo comando (o interactivo), en cuyocaso se submite un comando que se escribe en una única línea sobre la ventana decomandos, y se procesa de inmediato. Pero Matlab también permite la ejecución de conjuntos de comandos en modobatch, en cuyo caso se submiten secuencialmente un conjunto de comandos (programa)escritos previamente en un fichero. Este fichero (fichero script o también M-fichero) ha deser almacenado en disco con la extensión “.m” en el subdirectorio que Matlab habilita alefecto. Estos ficheros que contienen los programas se escriben utilizando cualquier editorASCII o la subopción M-file de la opción New del menú File de la barra superior demenús, la cual nos lleva a un editor de texto que permitirá escribir las líneas deprogramación y guardar el fichero con un determinado nombre. Por otra parte, la opción Open M-File del menú File de la barra superior demenús permite editar cualquier M-fichero preexistente para volver a grabarlo con suscorrespondientes modificaciones de código de programación. Para ejecutar un programa almacenado en un M-fichero, basta teclear el nombredel M-fichero (sin extensión) en modo interactivo sobre la ventana de comandos y pulsarEnter. Matlab interpreta secuencialmente todos los comandos o sentencias incluídos enlas diferentes líneas del M-fichero y los ejecuta. Normalmente no aparecen en pantalla los literales de los comandos que Matlab va interpretando, salvo que se active elcomando “echo on”, y solo se van viendo los resultados de las ejecuciones sucesivas delos comandos interpretados. A su vez, la opción Run M-file del menú File permiteejecutar cualquier programa preexistente almecenado en un M-fichero. Como norma general, el trabajo en modo batch es útil cuando se procesanconjuntos muy largos de comandos de escritura tediosa y con propensión a cometererrores, pero la mayor utilidad se presenta en la automatización de procesos. Además,en las líneas de un M-fichero se pueden introducir textos explicativos y comentarios,empezando cada línea al efecto por el símbolo %. Con el comando Help se accede altexto explicativo de un M-fichero. Matlab ofrece ciertos comandos de procedimiento que se utilizan muy a menudoen la escritura de M-ficheros, que ya fueron analizados en el capítulo 7. A continuación se presentan algunos ejercicios muy sencillos de programas enMatlab, que permiten familiarizarse con el entorno. Para profundizar en este tema esnecesario consultar de forma amplia la documentación del programa. Ejercicio 17-1. Realizar un programa que permita calcular el mayor número cuyo factorial no

Page 438: Matlab Para Ingenieros y Cientificos

exceda a 100100. Salvar el programa en el fichero de nombre factcond.m y ejecutarloposteriormente. En primer lugar elegimos la subopción M-File de la opción New del menú File deMatlab (ver figura 20-1).

Figura 17-1

Una vez seleccionado M-File aparece un editor en la pantalla, en el que yaescribimos el programa (ver figura 17-2).

Figura 17-2

Una vez escrito el programa en el editor, utilizamos la opción Guardar del menúArchivo para salvar el programa en un M-fichero de nombre factcond.m (ver las figuras22-3 y 22-4).

Figura 17-3

Si se elige Guardar, el programa se salva en un M-fichero situado en elsubdirectorio por defecto que Matlab habilita al efecto, en cuyo caso la ejecuciónposterior del programa es directa desde la ventana de comandos.

Page 439: Matlab Para Ingenieros y Cientificos

Si se elige Guardar como (figura 17-4), el programa se salva en un M-ficherosituado en el subdirectorio que se especifique voluntariamente, en cuyo caso la ejecuciónposterior del programa exige que esté abierto dicho subdirectorio. Matlab habilita loscomandos cd o ls (ya estudiados anteriormente), que permiten abrir un determinadosubdirectorio.

Figura 17-4 Al elegir Aceptar, el programa se guarda en el fichero permanente de nombrefactcond.m, y puede ser ejecutado desde la ventana de comandos de Matlab de la formasiguiente: » factcond n = 70 Luego el número pedido es 70. Ejercicio 20-2. Dado un vector x cuyos elementos son los n primeros números naturales (sin elcero), escribir un programa que calcule los productos: Pk = x1 x2....xk-1 xk+1....xn para k=1,2, ....., n.Ejecutarlo para distintos valores de n. El código del programa será el siguiente: x=1:n;for j=1:n, p(j)=1; for i=1:n, if i~=j, p(j)=p(j)*x(i); end; end;

Page 440: Matlab Para Ingenieros y Cientificos

end;p Guardamos el programa en el fichereo de nombre prog1.m. Para ejecutarlo paran=6 y n=10 hacemos: » n=6;prog2 p = 720 360 240 180 144 120 » n=10;prog2 p = Columns 1 through 6 3628800 1814400 1209600 907200 725760 604800 Columns 7 through 10 518400 453600 403200 362880