Matlab Para Ingenieros y Cientificos
February 18, 2017 | Author: Javi Alvarez | Category: N/A
Short Description
Download Matlab Para Ingenieros y Cientificos...
Description
MATLAB Para Ingenieros y Científicos
MARÍA PÉREZ MARQUÉS
ÍNDICE NÚMEROS REALES Y COMPLEJOS. FUNCIONES DE VARIABLE REAL YCOMPLEJA 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
Capítulo 1
NÚMEROS REALES YCOMPLEJOS. FUNCIONES DE VARIABLE REAL YCOMPLEJA NÚMEROS REALES El conjunto de los números reales es la unión disjunta del conjunto de los números racionales y del conjunto de los números irracionales. Como a su vez el conjunto de los números racionales contiene al conjunto de los números enteros, todas las funciones 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ía de las cuales se estudian en capítulos sucesivos de este libro. Dentro del grupo de funciones 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
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) floor(x) ceil(x) round(x) fix(x) rem(a,b) sign(x)
Valor absoluto del real x El mayor entero menor o igual que el real x El menor entero mayor o igual que el real x El entero más próximo al real x Elimina la parte decimal del real x Da el resto de la división entre los reales a y b Signo del real x (1 si x>0 , -1 si x2*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)')
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)y h(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 comando maple. » 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))')
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 Mfichero 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)');
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” para definir la malla de representación (en un entorno del origen), y el comando “surf” para realizar 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 f la sintaxis de la función definida con el comando maple.
» 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 el operador función inversa. A su vez Matlab también permite las operaciones clásicas entre funciones (suma, producto,...). Entre los operadores funcionales y operaciones típicas clásicas entre funciones que 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-...’) symmul(f,g)
Realiza la diferencia f-g-h-.... 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) symop(f,’^’,g) maple(‘f^g’)
Eleva f a la potencia k (k es un escalar) Eleva una función a otra función (fg) Eleva una función a otra función (fg)
compose(f,g)
Función compuesta de f y g (f°g(x) = f(g(x)))
compose(f,g,’u’)
maple(‘f @g @h @...’) finverse(f)
Función compuesta de f y g, tomando la expresión u como dominio de f y g Función compuesta de f, g, h, ... 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))')
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 g(x)=sqrt(tan(x^2))
las
funciones
inversas
de
f(x)=sin(cos(x^(1/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)
y
de
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.
Capítulo 4
EXPRESIONES ALGEBRÁICAS, POLINOMIOS E INTERPOLACIÓN EXPRESIONES ALGEBRAICAS Matlab maneja con maestría todos los cálculos con expresiones algebraicas simples, racionales y complejas. Realiza rápida y eficientemente todas las operaciones de simplificación, factorización, agrupación y expansión de expresiones algebraicas complicadas, 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 transformaciones algebraicas, más comúnmente utilizados en el trabajo con Matlab. expand(‘expr’)
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’)
factor(‘expr,a’)
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 Factoriza la expresión algebraica polinómica en la
extensión algebraica del cuerpo de sus coeficientes definida por a (a suele ser un simple o compuesto, o una expresión RootOff)
radical simplify(‘expr’)
Simplifica lo más posible una expresión algebraica, realizando sumas finales. sumas de fracciones algebraicas, pero no simplifica totalmente
Ejecuta las
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 que Integrales exponenciales, funciones operadores funcionales, funciones hipergeométricas, logaritmos, funciones radicales, raíces cuadradas y funciones trigonométricas respectivamente
contienen: gamma, polares,
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
collect(‘expr’,‘f(x)’)
R=simple(‘expr’)
Agrupa la expresión algebraica en potencias ordenadas de una función f(x) contenida en la expresión 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 expresiones algebraicas que se acaban de definir. Comenzamos con ejemplos ilustrativos del comando expand. » pretty(expand('(x+1)*(x+2)')) 2 x +3x+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) » pretty(expand(‘exp(a+ln(b))’)) exp(a) b » pretty(expand(‘ln(x/(1-x)^2)’))
- 1
ln(x) - 2 ln(1 - x) » pretty(expand(‘(x+1)*(y+z)’)) xy+xz+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 a primera 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 simplifican factores 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 algebraica del 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/3 1/4 (2 x - 5 (x + 5 )
1/2
1/3
1/3
) (2 x - 5
+ (-3)
1/2
1/3
- (-3)
5
5
)
» 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 (y
2 2 2 + RootOf(_Z - 2)) (y - RootOf(_Z - 2))
En el siguiente ejemplo se pone de manifiesto la diferencia entre factorizar en el cuerpo de los coeficientes del polinomio o en una extensión suya dada por (-3)^(1/2). » pretty(factor('x^3+y^3')) 2 (x + y) (x
2 - x y + y
)
» pretty(factor('x^3+y^3,(-3)^(1/2)')) 1/2 1/4 (2 x - y - (-3)
1/2 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) x
1/2 + 4
» pretty(simplify('sin(x)^4 + 2*cos(x)^2 - 2*sin(x)^2 - cos(2*x), trig'))
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 ha asumido 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))'))
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 el resultado: 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
x
- y
Al tratarse de operaciones algebraicas en las que aparecen sumas de fracciones, el comando más eficiente es simple, pero también se pueden utilizar los comandos factor y 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 -----ab » pretty(simplify('(1+a^2)/b + (1-b^2)/a - (a^3-b^3)/(a*b)')) a+b -----ab Ejercicio 4-2. Simplificar lo más posible las siguientes fracciones algebraicas: 3 2 2 2 a - a b + a c - b c [-----------------------] 3 2 2 2 a + a c + a b + b c
2
2
(x - 9) (x - 2 x + 1) (x - 3) [-------------------------------] 2 2 (x - 6 x + 9) (x - 1) (x - 1)
Como se trata de fracciones algebraicas simples, utilizaremos los comandos simple, factor o simplify.
» pretty(simple('(a^3-a^2*b+a*c^2b*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^2b*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)*(x1))')) x+3 -------x+1 » pretty(factor('((x^2-9)*(x^2-2*x+1)*(x-3))/((x^2-6*x+9)*(x^2-1)*(x1))')) x+3 ------x+1 » pretty(simplify('((x^2-9)*(x^2-2*x+1)*(x-3))/((x^2-6*x+9)*(x^2-1)*(x1))')) x+3 -----x+1 Ejercicio 4-3. realizar las siguientes operaciones algebraicas, simplificando al máximo el resultado.
a)
2
3 x - 1 5 - x 4 x 2 2 4 [(------- - ----- - ------) * (x (x + 1) - (x x)] x + 2 x - 2 2 x - 4
+ 4))) / (4 + 5
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 los comandos 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)/(1y/x))^4')) 2 1/4 (x - y)
Ejercicio 4-5. Dada la fracción racional
3 2 (x + 2x - x - 2) ---------------------3 2 x + x - 4x - 4
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 expresiones trigonomé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)
» 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 comandos para el manejo algebraico de las expresiones polinómicas. Estas expresiones pueden tratarse también como expresiones algebraicas en general, pero Matlab particulariza el estudio para las expresiones algebraicas polinómicas incluyendo comandos específicos para 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
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
sy m2 p oly (p olin om) 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 recientemente definidos. Vamos a descomponer la fracción (-x^2+2x+1)/(x^2-1) en suma de fracciones simples. » [r,p,k]=residue([-1,2,1],[1,0,-1]) r=
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 el punto 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 a y b, calculando también los coeficientes de la derivada de a y de los polinomios derivada del producto y cociente de a y b. » a=[2,-4,5,8,0,0,1]; b=[-7, 15, 0,12,0]; » conv(a,b)
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 de coeficientes 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 sus multiplicidades, realizando los cálculos también en módulo 6 y en la extensión algebraica definida por sqrt(2).
» 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 3 a) (5 x y z - 4 x y z ) 4 2 2 4 b) (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
- 300 x
y
z
+ 240 x
y
z
- 64 x
y
9 125 x
y
z
z » pretty(expand('(x+y)*(x^4+x^2*y^2+y^4)*(x-y)')) 6 x
6 - y
Ejercicio 4-9. Factorizar lo más posible las siguientes expresiones polinómicas. 2
2
2
4
2
2
a) 4 x
+ y
4 b) x
t
2 - x
2 y
+ z
- 4 x y t + 4 x z
- 2 y t z
2 2 3 2 + 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*xa*n*y+b*n*y')) - (x + y) (n - m) (- b + a) En expresiones polinómicas, el comando expand realiza operaciones y simplifica el 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, que estudiaremos 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),
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 puntos especificados. Ejercicio 4-12. Representar 200 puntos de interpolación cúbica, entre los puntos (x,y) dados por los valores que toma la función exponencial e^x para 20 valores de x igualmente espaciados entre 0 y 2. Representar también la diferencia entre la función e^x y su aproximación por interpolación. Utilizar interpolación cúbica
En primer lugar definimos los 20 puntos dados (x,y), igualmente espaciados entre 0 y 2. » x=0:0.1:2; » y=exp(x); Ahora hallamos los 200 puntos de interpolación cúbica (xi,yi), igualmente espaciados 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 en los 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 en vez de los puntos exactos. El error sería nulo si la gráfica se reduce al eje x. Ver figura 42.
» 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ón paramétrica X=Cos(t) Y=Sen(t), Z=Tan(t) para valores de t entre 0 y Pi/6, sobre el conjunto de puntos definido para valores de t en el intervalo (i Pi/6) con 0sin(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 ( x1->a1
Limit ( .......( Limit f(x1,x2,.......,xn))...)) 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 la curva 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 en un punto, es que todos los límites iterados tengan el mismo valor (el valor del límite de la función, si este existe). También puede ocurrir que la función tenga límite direccional según la dirección de varias curvas, que dicho límite sea distinto para distintas curvas, o que no exista para alguna de ellas. Otra condición necesaria para que una función de varias variables tenga límite en un punto, es que todos los límites direccionales, según las direcciones de todas las curvas, tengan el mismo valor (el valor del límite de la función, si este existe).
Por lo tanto, para demostrar que una función no tiene límite basta ver que los límites iterados no existen, o si existen, no son iguales. Tampoco la función tendrá límite si algún límite direccional no existe o si existen límites distintos para direcciones distintas. Un procedimiento práctico para calcular el límite de una función de varias variables consiste en cambiar las variables cartesianas por variables polares, para facilitar así las operaciones. Ejercicio 8-21. Sea f:R2 -----> R una función definida por: x y f(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 los lí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 distintos para distintos valores de m (para las distintas rectas consideradas). Luego se concluye que la función no tiene límite en (0,0).
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ímite en 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
» 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 los lí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 y coinciden con los límites iterados. Vamos a hallar el límite según las direcciones de la familia 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 del pará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 y f(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 =
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 de rectas y parábolas coinciden y valen todos cero. Ello nos lleva a sospechar que el límite de la función puede ser cero. Para corroborarlo, transformamos la función a coordenadas polares 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 a coordenadas polares. Se han usado como direcciones familias de rectas y parábolas, pero podrían usarse otras. El cambio a polares resulta crucial a la hora de determinar límites de funciones de varias variables. Como se ve, hay criterios suficientes para ver que una función no tiene límite en un punto. Pero sin embargo no tenemos condiciones necesarias y 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 dos variables en un entorno del punto conflictivo. Vamos a graficar la superficie problema en un entorno de cero mediante un M-fichero de nombre ‘sup.m’. El código del M-fichero será el siguiente:
function z=sup(x,y) if x~=0 z=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) y f(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)')
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 a continuació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 se observa 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
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 + y f(x,y) =-------2 2 x + y
si(x,y)¹(0,0) y f(x,y)=0 si (x,y)=(0,0)
Estudiar su continuidad El único punto problemático es el origen. Vamos a hacer el análisis de la continuidad 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 intentamos calcular el límite por paso a coordenadas polares.
» 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)
» 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 distintos para direcciones distintas. Luego la función no es continua en (0,0). En el resto de los puntos del plano sí lo es.
Capítulo 9
SERIES NUMÉRICAS YSERIES DE POTENCIAS En este capítulo se muestran las amplias posibilidades de tratamiento de las series numéricas que ofrece Matlab. Se tratan los criterios clásicos del análisis de la convergencia y se ve la forma tan sencilla 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 las series de potencias.
SERIES NUMÉRICAS. CRITERIOS DE CONVERGENCIA. Dentro de las series numéricas distinguiremos entre series de términos no negativos y series de términos alternados. Se presentarán en primer lugar algunos ejemplos de los criterios más clá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ácter de 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) ] < 1 n=1 n->¥ ¥ å a(n) es divergente si Limit [ a(n+1)/a(n) ] > 1 n=1 n->¥ En caso de que el límite sea 1, no se puede asegurar nada acerca del sentido de la
convergencia de la serie. Otro criterio muy utilizado es el criterio de la raíz o criterio de Cauchy, que dice lo siguiente: ¥ 1/n å a(n) es convergente si Limit [ a(n) ] < 1 n=1 n->¥ ¥ 1/n å a(n) es divergente si Limit [ a(n) ] > 1 n=1 n->¥ En caso de que el límite sea 1, no se puede asegurar nada acerca del sentido de la convergencia de la serie. En caso de obtener límite 1 en los criterios del cociente y de la raíz, suele utilizarse el criterio de Raabe o Duhamel, que dice lo siguiente: ¥ å a(n) es convergente si Limit [n[1 - a(n+1)/a(n)] ] > 1 n=1 n->¥ ¥ å a(n) es divergente si Limit [ n[1 - a(n+1)/a(n)] ] < 1 n=1 n->¥ En caso de que el límite sea 1, no se puede asegurar nada acerca del sentido de la convergencia de la serie. Otro criterio útil es el que asegura que las series: ¥ ¥ n n å a(n) y å [2 a(2 ) ] n=1 n=1
tienen el mismo carácter.
También se pueden utilizar los criterios de mayoración de Gauss, comparación de segunda especie, comparación con la serie armónica y otros. Todos ellos pueden aplicarse con Matlab de forma 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 -----------------
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 que el 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 siguientes series: n
n
¥ n å ----n=1 n 2
¥ n å ----n=1 n!
¥ n å -----n=1 n 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 su suma exacta, vemos que Matlab no resuelve el problema.
» 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 siguientes series: ¥ å n=1
3 + 2 n -----------n 7 n (1 + n)
¥ n å --n=1 n p
¥ (n + p)! å ---------n=1 n p n! p!
p=parámetro
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 a calcular su suma. Matlab intenta devolver el resultado, por complicado que este sea. En muchas ocasiones 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(")')
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 converge, si p¥ son las asíntotas horizontales de la curva y=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, donde m=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, la funció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 y f’’(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, son aquellos 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 es có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
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 2 f(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-4 g(x) = -------------x-1
son horizontales y verticales. Hallar sus asíntotas.
» 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ón en 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 (figura 10-3) » fplot('[2*x^3+3*x^2-12*x+7, 20-12*(x - (-1))]',[-4,4])
Figura 10-3 Para calcular las tangentes horizontales a la curva y=f(x) en x=x0, hallamos los valores x0 que 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 que hagan 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 son finitos (son -1 y 3). Analizemos ahora las tangentes verticales. Para ello calculamos los valores de x que hacen
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 de ecuación c(x)=x y las asíntotas horizontales y verticales (que las representa por defecto el comando plot).
» 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 de crecimiento y decrecimiento e intervalos de concavidad y convexidad para la función: 3 x f(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 los valores de x que hacen y infinito » solve('x^2-1') ans = [ 1] [-1]
Las asíntotas verticales serán las rectas x=1 y x=-1. Veamos ahora si existen asíntotas oblicuas » 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 de inflexió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]. Estos puntos son los candidatos a máximos y mínimos. Para corroborar si son máximos o mínimos hallamos el 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 y x=Sqrt[3] hay un mínimo. En x=0 no sabemos nada. » [numeric(subs(f,sqrt(3))),numeric(subs(f,-sqrt(3)))]
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ón posible 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 (-1,0) y (1, ¥). La curva será convexa cuando y’’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 son iguales se obtiene el mínimo pedido.
a-x=a-a/2=a/2. O sea, que cuando los dos sumandos
Ejercicio 10-8. Se quiere comprar un terreno rectangular de 1600 metros cuadrados de superficie 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?.
Si la superficie es de 1.600 metros cuadrados y una de sus dimensiones, desconocida, es x, la otra 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 segunda derivada 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 rectangular pedido mide 40 metros, y el otro medirá 1.600/40 =40 metros. Luego el rectángulo problema resulta ser un cuadrado de 40 metros de lado. DERIVADAS PARCIALES Como ya sabemos, Matlab deriva funciones con el comando diff, pero también conocemos 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 el comando maple(‘D(f)’). Si se quiere el valor de la derivada en el punto de abcisa x=x0 , es decir la pendiente de la función en el punto correspondiente a dicha abcisa, escribimos
maple(‘D(f)(x0)’) También sabemos que para calcular la derivada de orden n de la función f respecto de x, podemos utilizar, aparte del comando diff, los operadores @ y D escribiendo maple(‘(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 derivadas parciales 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)’);
giVxxyy : 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 (x,y) -> cos(x y) y - sin(x y
2 ) 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
(x,y) -> - sin(x y) y
- cos(x y
) y
» pretty(maple('D[2,2](g)')) 2 (x,y) -> - sin(x y) x
2 2 2 - 4 cos(x y ) x y
2 - 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 y ) y
x - 2 sin(x
» pretty(maple('D[2,1](g)')) 2
3
2 (x,y) -> - sin(x y) y x + cos(x y) - 2 cos(x y ) y y ) y
x - 2 sin(x
» pretty(maple('D[1,1,2,2](g)')) 2 2
2 6 2 - 4 cos(x y) y x - 2 sin(x y) + 4 cos(x
(x,y) -> sin(x y) y x y ) 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)'))
2
3
2 3 D(x) x + 6 D(x) x y D(y) y = 0
+ 9 x
2 D(y) y
2
+ 5 D(x) y + 5 x D(y) + 18
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 x
3 + 6 x y
2 2 2 + 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 2x 2 -2xy+y2 +x+2y+1 = 0 en el punto de abcisa x=-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 curva problema 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 =
-1, -4 Los puntos de tangencia serán (-3/2,-1) y (-3/2,-4). Calculemos ahora las pendientes 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 de coordenadas (ver figura 10-7). Como la curva viene dada en coordenadas implícitas, la parametrizamos. Para éllo, intentamos completar a cuadrados su ecuación, con la finalidad de buscar una parametrización trigonométrica que elimine las posibles potencias fraccionarias resultantes al intentar 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ón completamos 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 cuadrados como sigue: » pretty(maple('completesquare(-x^2-3*x,x)'))
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 parametriza trivialmente 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 se representa 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
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 varias variables, 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 en el 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 una funció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 en el punto (a1,a2,.....,an) de la siguiente forma: ¶f f(a1,a2,.....,ai+h,....an) - f(a1,a2,....,an) ---- (a1,a2,...,an) = Limit -----------------------------------------------------
¶ 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 ser diferenciable. Se define la derivada direccional de la función f según el vector v=(v1,v2,...,vn) como el siguiente 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 denomina diferencial total de f. Su valor será: ¶f ¶f ¶f D f = ( -----dx1+ -----dx2 + ......+ -----dxn) ¶x1 ¶x2 ¶xn A continuación se definen las funciones que implementa Matlab, referentes a los conceptos expuestos. 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,...
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
Según las definiciones de las funciones anteriores podemos escribir: ¶f diff(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 ¶f diff(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 f maple(‘diff(f(x,y),x,y)’) = ----------- = maple(‘D[1,2](f)(x,y)’) ¶x ¶y ¶ (k) f maple(‘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: xy f(x,y) = ------------x2 + y2
si x2 + y2 ¹ 0 y f(x,y) = 0 si x2 + y2 = 0
calcular las derivales parciales de f en el origen. Estudiar la diferenciabilidad » maple('f:=(x,y)->(x*y)/(x^2+y^2)');
Para hallar ¶f/¶x y ¶f/¶y en el punto (0,0), aplicamos directamente la definición de derivada parcial 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án ambos cero. Vemos que las dos derivadas parciales en el origen son iguales y valen cero. Pero la función no 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 la familia de rectas y=mx, el resultado depende del parámetro m. Ejercicio 11-2. Estudiar la diferenciabilidad de la función: 2 x y f(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 a considerar cualquier punto distinto del origen y a calcular la derivada parcial respecto a la variable x » maple('f:=(x,y)->(2*x*y)/(x^2+y^2)^(1/2)'); » pretty(simple(maple('D[1](f)(x,y)'))) 3
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ímites direccionales respecto de la familia de rectas y=mx, el resultado depende de m. Luego la derivada parcial 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
» 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 a coordenadas polares, el límite en el origen resulta ser cero, que coincide con el valor de la función en 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 3 + x
2 - 2 x
y
» maple('f:=(x,y)->x^3-2*x^2*y+3'); » pretty(simplify('D(f(x,y))')) 2 3 D(x) x
2 - 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 (3 x
2 - 4 x y) D(x) - 2 x D(y)
Ejercicio 11-4. Comprobar que la función: 1 f(x,y,z) = ------------------------(x2 + y2 + z2 ) 1/2 ¶2f ¶2f ¶2f verifica la ecuación: -------+ --------+------- = 0 ¶x2 ¶y2 ¶z2 » f='1/(x^2+y^2+z^2)^(1/2)';
» 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: ax f(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: 1 f(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).
» 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 f(x,y) = E
2 2 (Cos[x] + Sin[y] )
calcular: ¶f ¶f ¶2 f ¶2f ¶2f ¶2f ¶4f ¶4f ¶5f -----, -----, ----------- , ----------, ---------- , -------------, -----------, ------------ 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 - 1/4 exp(- 1/8 x cos(x) sin(x))
2 2 - 1/8 y ) (x cos(x)
2 + x sin(y)
» 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
+ 8
» pretty(factor('D[2](f)(x,y)')) 2 - 1/4 exp(- 1/8 x sin(y) cos(y))
2 2 - 1/8 y ) (y cos(x)
2 + y sin(y)
- 8
» 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 (y x cos(x) sin(y) cos(y))
2 + y x sin(y)
+ 8 y cos(x) sin(x) - 8 x
» 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 (y x cos(x)
2 + y x sin(y)
+ 8 y cos(x) sin(x) - 8 x
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 1/16 exp(- 1/8 x + x sin(y)
2
2
- 1/8 y ) (- 36 cos(x)
- 4 sin(y)
2
2
+ x
cos(x)
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 1/16 exp(- 1/8 x + y sin(y)
2 - 1/8 y ) (- 4 cos(x)
2 - 16 y sin(y) cos(y) + 32 cos(y) )
2 - 36 sin(y)
2
2
+ y
cos(x)
» 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 1/256 exp(- 1/8 x
2
- 1/8 y ) (- 108 y x cos(x)
- 12 y x
sin(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 1/2 1/82944 pi exp(- 5/288 pi ) (pi 5616 3 )
3
1/2
2
» numeric('D[1,1,1,2](f)(pi/3,pi/6)') ans = -0.2271 » pretty(factor('D[1,1,2,2](f)(x,y)'))
+ 12 3
pi
+ 756 pi -
2 2 2 1/256 exp(- 1/8 x cos(x)
2 - 1/8 y ) (144 cos(x)
2 2 - 36 x cos(x)
2
2
+ 144 sin(y)
2
- 4 x
2
2
sin(y)
- 64 x cos(x) sin(x) - 128 sin(x)
2 2 - 4 y sin(y) cos(x) sin(x)
2 2 + y x
2 cos(x)
2 2 + 32 y - 128 cos(y) 2 + 32 x
2 2 + y
x
2 sin(y)
2 + 16 y
x
2
2 + 64 y sin(y) cos(y) - 16 y x
sin(x)
- 36 y
sin(y) cos(y)
2 cos(y) )
» pretty(factor('D[1,1,2,2](f)(pi/3,pi/6)')) 1/165888* 2
2
3 1/2 exp(- 5/288 pi ) (- 77760 + 1260 pi 24 pi 3 )
1/2
4
- 1728 pi 3
+ pi
-
» 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 - 1/1024 exp(- 1/8 x
2 - 1/8 y ) (2432 cos(x) sin(x) + 432 x cos(x)
2
2
3
2
3
- 36 x
sin(y)
2 + 432 x sin(y)
- 384 x sin(x)
- 4 x
cos(x)
2 + 192 y x sin(y) cos(y) + 96 y 2
3
2 y
+ y x x sin(y)
cos(x)
2 2 + y
x
2 sin(y)
2 x sin(x) 2
2 2 - 108 y x cos(x)
3
2
+ 24 y
x
2
cos(x) sin(x) - 12
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)')) 2 1/1990656 exp(- 5/288 pi )* 1/2 1/2 5 (- 1181952 3 pi 3 - pi )
3
2
+ 233280 pi - 1764 pi
+ 8208 pi
1/2
4
3
+ 12
» 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 tiene el 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 punto f(x1,x2,....,xn)ÎR, se dice que presenta un posible extremo en el punto (a1,a2,....,an) si el vector gradiente: ¶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
los posibles puntos extremos. Para saber de qué clase de extremo se trata es necesario construir la matriz Hessiana en el punto, que tiene la siguiente estructura: ┌ | | | | H = | | | | | | | └
¶2f -------, ¶x12
¶2f ¶2f ┐ --------, ........, -------| ¶x1 ¶x2 ¶x1 ¶xn | | ¶2f ¶2f ¶2f | --------, --------, ........,-------| 2 ¶x1 ¶x2 ¶x2 ¶x2 ¶xn | | ......................................... | | ¶2f ¶2f ¶2f | --------, --------, ........,-------- | ¶x1 ¶xn ¶x2 ¶xn ¶xn2 ┘ Con notación de Matlab, el determinante hessiano puede escribirse de la siguiente forma:
(f)
| 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[2,n](f) D[3,n](f) .......... D[n,n](f)
| | | | |
|D[1,n]
|
Pero Matlab habilita una función específica para calcular el determinante hessiano de una funció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ón de 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
este caso se dice que el punto es no degenerado, y además podemos dar las siguientes condiciones suficientes de extremo: Si la matriz Hessiana en el punto (a1,a2,...,an) es definida positiva, entonces la función presenta un mínimo en ese punto. Si la matriz Hessiana en el punto (a1,a2,...,an) es definida negativa, entonces la función presenta 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 no degenerado. Ejercicio 11-8. Hallar y clasificar los puntos extremos de la función : 3 -120 x
4 5 6 2 - 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 =
{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 valor en 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 posteriores sustituciones 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 anula en (0,0) » maple('subs(x=-2,y=0,M(x,y))') ans = [-480, 0] [ 0, -120] » determ(H)
ans = 57600 » eigensys(H) ans = [-480.] [-120.] La matriz Hessiana en el punto (-2,0) tiene determinante no nulo, y además es definida negativa, porque todos sus autovalores son negativos. Por lo tanto el punto (-2,0) es un máximo de la funció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 definida positiva, porque todos sus autovalores son positivos. Por lo tanto el punto (2,0) es un mínimo de la función. » H=maple('subs(x=-3,y=0,M(x,y))') H =
[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 definida positiva 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 f(x,y,z) = x
2 2 + 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 se trata. 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 =
[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 lo tanto 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 son positivos. 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 MULTIPLICADORES DE 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 las ecuaciones: 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ón objetivo y las restricciones, y que tiene la siguiente forma: k
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 a cero las componentes del vector gradiente de L , o sea, Ñ L(x1,x2,....,xn,l)=(0,0,.....,0). Lo que se traduce 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 obtienen los 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 en la función objetivo. Pero Matlab habilita el comando “extrema”, que nos da directamente los posibles puntos extremos de un problema con una función objetivo a optimizar (fobjetivo), sujeta a unas restricciones, 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 necesario leerla 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 punto extremo, pero la variable s contiene los puntos extremos. » maple('s') ans =
{{y = 0, z 1/2*2^(1/2),
=
1/2*2^(1/2), x = 1/2*2^(1/2)}, x = -1/2*2^(1/2)}}
{y
=
0,
z
=
-
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 la presencia 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')
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 la funció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 estamos ante 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 problemas prá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 que tiene 10 metros cuadrados de superficie, la restricción será: 2xy+2xz+2yz=10. Estamos entonces ante un problema de máximos y mínimos condicionados, donde la función objetivo a maximizar es V=xyz y la restricción a considerar es 2xy+2xz+2yz-10=0. Utilizaremos el método de los multiplicadores de Lagrange » 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 =
{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), 1/3*5^(1/2)*3^(1/2)}, {z = 1/3*5^(1/2)*3^(1/2), 1/3*5^(1/2)*3^(1/2), y = 1/3*5^(1/2)*3^(1/2)}}
x
= x
=
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 de paralelepí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 de mayor volumen para un área dada es precisamente un cubo (x=y=z).
Capítulo 12
CALCULO DIFERENCIAL VECTORIAL YTEOREMAS 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:
J=
┌ | | | └
¶F1/¶ x1 ¶F1/¶x2 ............¶ F1/¶xn ¶F2/¶ x1 ¶F2/¶x2 ............¶ F2/¶xn ........................................................... ........................................................... ¶Fn/¶ x1 ¶Fn/¶x2 ............¶ Fn/¶xn
┐ | ú = ¶ (F1,F2,....,Fn) / ¶ (x1,x2,.....,xn) | ┘
El jacobiano para una función vectorial, es una extensión de concepto de derivadas parciales para 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: x f(x,y,z) = (e , Cos(y), Sen(z))
y hallar su valor en el punto (0,-Pi/2,0)
» 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. Concretamente permite la diferenciación de la composición de funciones vectoriales. La regla de la cadena es uno de los mitos del cálculo diferencial. Suele introducirse para funciones de una variable real, hasta ser generalizada para funciones vectoriales. Dice lo siguiente: _ n m _ m p Sean las funciones vectoriales g:UÌR ---->R y f:VÌR------>R , _ _ n p donde 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 de la composición de funciones.
_
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 z = ------------- , u2 - v2
x-y u=e
y
xy v=e
» 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
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és derivarla. 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 de x 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.
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 con derivadas continuas. Este teorema permite asegurar la existencia de determinadas derivadas en funciones implícitas. Matlab posibilita la diferenciación de funciones implícitas y ofrece los resultados, en aquellos 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 x
2 2 3 + 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 de cero 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
Ahora vamos a calcular las derivadas parciales pedidas, suponiendo siempre que se cumple la 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 z D(y) = 0
+ 16 x D(z) z - 9 D(z) z
y - 3
» pretty(simple(maple('D(z):=solve(D(f(x,y,z)=0),D(z))'))) 2 3 D(x) x
2 + 6 D(y) y + 8 D(x) z
3 - 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 z depende 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
» pretty(maple('simplify(diff(subs(D(y)=0,D(z)/D(x)),x))'))
- 2
2 2 24 x - 27 x z y - 64 z ---------------------------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 de la función implícita. Las funciones son derivables y con derivada continua. Nos falta ver que el jacobiano correspondiente 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]
» 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 puede resolver 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) _ _ _ -1 tales que f(A) = B y f tiene una función inversa f : B------>A que es derivable con derivada continua. Además se cumple que: _ -1 _ _ -1 -1 D 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ón inversa, 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+y u(x,y) = ---------x
v(x,y) = Sen(x) + Cos(y)
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 el punto (pi/4,-pi/4) Las condiciones a cumplir serán las hipótesis del teorema de la función inversa. Las funciones son derivables con derivada continua, salvo acaso en x=0. Ahora vamos a plantear el jacobiano 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 en té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 matriz jacobiana inicial y el determinante de su jacobiano será el recíproco del determinante del jacobiano inicial » 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^4sin(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^4sin(y)*y^4+4*y^3*cos(x)*x)] » pretty(simple(determ(inverse(J)))) 2 x
-------------------------------------------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íproco del 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íprico del determinante del jacobiano de la función. Ejercicio 12-7. Demostrar que la transformación entre coordenadas cartesianas y polares cumple 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 el determinante 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)))
a Vemos que el jacobiano de la transformación es no nulo (a ¹0). Luego es aplicable el teorema de 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 las nuevas variables u y v, que se relacionan con las anteriores mediante las funciones u=u(x,y) y v=v(x,y), de modo que las funciones u y v también cumplen las condiciones de derivabilidad y continuidad 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 las nuevas 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-y f(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 el teorema 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])')
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 nnn n ¶kf _ ........... + --- ååå.....å ---------------------- (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 que cumpla 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)');
» pretty(maple('f(1,0)+D[1](f)(1,0)*(x-1)+D[2](f)(1,0)*(y)+ (f)(1,0)*(x-1)^2+ 2*D[1,2](f)(1,0)*( x-1)*y+D[2,2](f)(1,0)*(y)^2)'))
(1/2!)*(D[1,1]
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 de la función : 2 x + y f(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)+ (f)(0,0)*(x)^2+2*D[1,2](f)(0,0)*(x)*( y)+D[2,2](f)(0,0)*(y)^2)'))
(1/2!)*(D[1,1]
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 denota mediante 1, es el vector
grad =
2
Definición de potencial escalar de un campo vectorial: Un campo vectorial 3 se llama conservativo, si existe una función diferenciable f tal que 4. La función 5 se conoce 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 tiene9 como potencial vector a otro campo vectorial G si F=rotacional(G).
Definición de divergencia de un campo vectorial: La divergencia del campo vectorial 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). En caso 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 divergencia nula). 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]
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 del campo vectorial dado es nulo. » maple('curl([1,2*y,3*z^2],[x,y,z])') ans = [0, 0, 0]
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 vectorial inicial. » 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 campos vectoriales: F=[xz, -yz,y]
G=[xey, -xCos(z), -zey]
» maple('vecpotent([x*z,-y*z,y],[x,y,z],Q)') ans = true
H=[xCos(y), -Sen(y), Sen(x)]16
Luego ya sabemos que existe el potecial vector, con lo que la divergencia del campo 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 vectorial inicial. » 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]
Si hallamos el rotacional de los potenciales vectores hallados, obtendremos los campos vectoriales 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 a rectangulares, cilíndricas a esféricas y las transformaciones inversas. Definiremos nuestras propias funciones, dada la sencillez de las mismas. Previamente, para fijar conceptos, se da una pequeña explicación de las coordenadas cilíndricas y esféricas: En un sistema de coordenadas cilíndricas, un punto P del espacio se representa 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 representa por 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
18 Rectangulares 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 en 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
28
» 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 en coordenadas rectangulares y esféricas.
29,
» 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 =1 en 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 superficie de 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, (1+sin(t)))')))
z=r^2*
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, (1+sin(t)))))')) 2 2 2 2 1/2 z = x + y + (x + y ) y
z=r^2*
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), (x^2+y^2)*(1+sin(atan(y/x))))'))) 2
2
2
z=
2
2
2 r cos(a) = r cos(a)
sin(t) - r
cos(a)
sin(t) + r
- r
Capítulo 13
INTEGRACIÓN YAPLICACIONES INTRODUCCIÓN Matlab trabaja con el cálculo integral de forma clara y sencilla. El número de funciones que habilita al respecto no es muy elevado, pero son muy eficientes a la hora de resolver los problemas de integración. Se pueden calcular integrales indefinidas de la mayor parte de las funciones integrables cuya estructura no sea muy complicada, por ejemplo funciones que envuelven de forma simple logaritmos, exponenciales, funciones racionales, trigonométricas, trigonométricas inversas, etc. Las integrales definidas y las impropias no presentan problemas especiales para Matlab. Las integrales dobles, triples y de dimensión n también son resolubles como el programa. Las funciones más utilizadas en el cálculo integral son: int(f(x), ‘x’)
Calcula la integral indefinida ò f(x) dx b
int(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
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, que son 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 cuales presenta una variable como límite de integración, lo cual es perfectamente válido con Matlab.
INTEGRALES DE RESOLUCIÓN SENCILLA Integrales inmediatas En los ejemplos que siguen se va a mostrar la facilidad con que Matlab resuelve directamente ciertas integrales, que por los caminos clásicos no son tan evidentes. Matlab realiza de forma inmediata integrales que envuelven de forma simple funciones racionales, 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 log(x + (x
1/2 + 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
2 atan((x + 1)
)
» pretty(simple(int('x^3*sqrt(1+x^4)'))) 4 1/6 (1 + x
3/2 )
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 se ajustan a ningún otro método conocido. El método consiste en encontrar una función x=g(t), que al sustituirla por x bajo el signo integral, convierta la integral en otra más sencilla con variable t, y que en la mayorí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 dar la 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 la gran variedad de sustituciones que se pueden dar, según el tipo de función que aparezca bajo 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 a integrales 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 integrales por 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
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 cambio de 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 realizar según la función a integrar, donde R significa función racional de su argumento correspondiente. Función a integrar Sustitución Función inversa -------------------------------------------------------------------------------------------------------R(ax) ax = t x = (1/lna)lnt R(x,ax) R(ex)
a = tx ex = t
R(x,ex)
x = (1/lna)lnt x = lnt
ex = t
x = lnt x = et
R(x,lnx)
lnx = t
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
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/5 t » pretty(subs('-2/5*t^(1/2)*(t^2-5)','sin(x)'))
2 (t - 5)
1/2 - 2/5 sin(x)
2 (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 argumento correspondiente. Todos estos tipos de integrales son resolubles mediante el comando maple(‘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 ┌ ax+b ┐ ┌ ax+b ┐ t dt b R (x, │───── │,...,│───── │ ) cx+d = ──────── └ cx+d ┘ ┘ M M = mcm(n,..,q) ct M
M ──── = x └
cx+d a
M
m/n p/q R (x, (x, (ax+b),...,(ax+b) ) ──────
ax+b = t
t
M = mcm(n,...,q)
b x = a
M x = t
m/n p/q r/s R (x, x , x , ....,x )
M = mcm(n,q,..,s) 1 1 ───────────────────── p 2 1/2 (x a) (ax +bx +c)
1 ───── = t x
x = a + ─
a
t
2 2 1/2 t c R (x, (ax +bx + c) ────────
1/2 a>0
2 (ax +bx+c)
= xÖa +t
x= b
2tÖa 2
1/2
1/2 2tÖc b R (x, (ax +bx + c) ────────
2
c>0
(ax +bx+c)
= Öc +xt
x =
2 a
t
2
R (x, ────────
2 ab at (ax +bx
1/2 +
2
c)
(ax +bx+c)
= (x a)t
a,b son las raφces de 2 2
a
t ax + bx + c = 0
2 1/2 R (x, ( ax +c) )
2 1/2 R (x, (ax c) )
Öc x = ── SIN(t) Öa
Öc x = ── SEC(t) Öa Öc x = ── TAN(t) Öa
2 1/2 R (x, (ax +c) )
BINOMIAS: m n p x (a+bx ) con p entero
1/n x = t
1/2 x =
s
1/n m
n p
(t a) x (a+bx ) ─────────
m+1
n
con ─── entero
s
a+bx = t
n
x =
s=denominador de p
1/n
b s m+1 x (a+bx ) ─────────
n con ─── +p entero n
-1/n s
m (t b)
n p
ax +b = t
x=
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
1/2 1/2 + 3 x - 1)
2
(x + 3 x - 1) (x (3 x - 2) 13 1/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)')))
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 la diferencial 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 el producto de dos funciones, de tal forma que al aplicar la fórmula la nueva integral sea más sencilla que la original. Si ponemos: òu.dv = òf(x).g'(x).dx = ò P(x).Q(x).dx
podríamos hacer una tabla con determinados asignaciones a hacer a u y a dv según la naturaleza de las funciones P(x) y Q(x). Normalmente las integrales por partes se ajustan bien a los cambios que se van a relacionar a continuación, pero éllo no quiere decir que no puedan utilizarse otros cualesquiera. P(x) Q(x) u dv -------------------------------------------------------------------------------------------------------Función inversa de circular, logarítmica o hiperbólica..
La unidad u otra constante cualquiera
P(x)
Función inversa de circular, logarítmica o hiperbólica..
Polinomio en x o función racional en x
P(x)
Polinomio en x o función racional en x dx Función exponencial
Q(x) dx
Q(x) dx
Función exponencial, hiperbólica directa o circular Función circular o hiperbólica directa
P(x)
P(x)
Q(x)
Q(x) dx
Matlab aporta el comando maple(‘intparts’) que permite realizar integrales por partes directamente. Dicho comando pertenece a la librería student, con lo que ha de ser cargado previamente en memoria con el comando maple(‘with(student)’). La sintaxis es la 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*x7)'))) 2 3 x
sin(x) - 13 sin(x) + 6 cos(x) x + 2 cos(x) + 2 x
sin(x) Ejercicio 13-5. Resolver las integrales siguientes:
,
,
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 64
2 (5 - 54 log(2)
2 - 30 x log(2) + 90 x
2 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 con funciones de exponentes normalmente enteros, pero elevados, buscando obtener una parte integrada y una parte sin integrar, en la que aparecerá la misma integral inicial pero con estos exponentes disminuidos. De esta forma se puede ir rebajando el exponente hasta llegar a integrales de resolución directa. En cada caso se puede obtener la fórmula de reducción directamente, y
posteriormente aplicarla al problema concreto. El procedimiento usual es hacer en primer lugar una integración por partes, que nos conducirá a una parte ya integrada y a una integral parecida a la inicial, pero reducida en el exponente. En la integración cíclica se sigue el mismo procedimiento relatado antes, pero al final se obtiene la misma integral que teníamos al principio (salvo constantes), con lo cual se pueden hacer operaciones despejando la integral problema, para hallar así su valor 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 calcula directamente el valor final de este tipo de integrales en la mayoría de los casos. En la peor de las circunstancias suele hallarse el valor final de la integral después de la realizació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 6 - 1/48048 cos(x) 120 sin(x)
12
10
8
(1716 sin(x)
+ 792 sin(x)
+ 330 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 2 - 2/109395 (a + b x) b x
2
5
5
6
b
x
- 3072 a
b x + 3840 a
5
(- 5544 a
+
4 3 7 7 7 8 - 4480 a b x 6435 b x )/b
3
3
+ 5040 a
b
4 x
4
6
+ 6006 a b
x
6 + 2048 a
-
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 1/63918719475 exp(12 x) (2894432580 cos(x) sin(x)
10 + 2653229865 cos(x)
9 8 + 1415055928 cos(x) cos(x)
7 + 1061291946 cos(x) sin(x) + 527896512
6 5
4 + 307939632 cos(x) cos(x) sin(x)
sin(x) + 131193216 cos(x)
3 2 + 17149440 cos(x) + 4287360 cos(x) 59136 sin(x))
+ 54663840
sin(x) + 709632 cos(x) +
LA INTEGRAL DEFINIDA La integral definida adquiere su fuerza a la hora de aplicar las técnicas y conceptos de 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 de arcos de curva. Para una curva plana de ecuación y=f(x), la longitud del arco de curva comprendido entre los puntos de abcisas x=a y x=b, viene dada por la expresión: b L = ò (1+f’(x) ) a
2 1/2 dx
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 y t=t1 del parámetro, viene dada por la expresión: t1 2 L = ò (x’(t)+y’(t) ) t0
2 1/2 dt
Para una curva en coordenadas polares de ecuación r=f(a), la longitud del arco de curva comprendido entre los puntos relativos a los valores a=a0 y a=a1 del parámetro, viene dada por la expresión: a1 2 L = ò (r +r’(a) ) a0
2 1/2 dr
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 y t=t1 del parámetro, viene dada por la expresión: t1 2 2 L = ò (x’(t) + y’(t) + z’(t) ) t0
2 1/2 dt
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 a los valores a=a0 y a=a1 del parámetro, viene dada por la expresión: a1 2 2 L = ò (r + r’ + z’ ) a0
2 1/2 dr
Para una curva alabeada en coordenadas esféricas de ecuaciones x=rSen(a)Cos(b), y=rSen(a)Sen(b), z=rCos(a), la longitud del arco de curva comprendido entre los puntos relativos a los valores a=a0 y a=a1 del parámetro, viene dada por la expresión: a1 2 2 2 2 2 L = ò (dr +rda+r Sen(a)db ) dr a0
2 1/2
Ejercicio 13-7. Un cable eléctrico cuelga entre dos torres que están separadas 80 metros. El
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 de integració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 ecuaciones paramé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)^( 't','0','2')))
1/2 2
13
1/2 - 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) ,'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 la cardioide 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, de forma general, por la integral: b
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 dada por 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 la integral: a1 2 S = ½ ò 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:
S= ò
b |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 de delimitar los recintos para el cálculo de las correspondientes áreas. Nunca se deben sumar valores negativos de áreas con valores positivos. Se dividirá la región de integració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:
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.9500 Ejercicio 13-12. Calcular el área de la elipse de semiejes a y b
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 de esta 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 hacernos una 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
Se trata de una curva cerrada, con variación del parámetro entre 0 y 2p. Luego ya 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 coordenadas paramé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 superficie en 4 trozos iguales (para evitar la suma de cantidades positivas con negativas), haciendo variar t entre 0 y p/2. El área de cada trozo será el valor absoluto de la integral entre 0 y p/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:
r = Sqrt[Cos[2 a]] y r = Sin[2 a]
Comenzamos representando ambas curvas sobre el mismo gráfico. Ver la figra 17-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. La primera de ellas repite 4 veces su estructura para a entre 0 y p/4 y la segunda para a entre 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.
» 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.
» 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ón comprendida » 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 comando maple(‘fsolve’) para posibles soluciones en los intervalos (0,1) y (1,2p) deducidos de la observació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 =
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 t1 S = 2p ò f(x) [1+f’(x) ] dx a
2
½
1/2 y S = 2p ò y(t) [x’(t)^2+y’(t)^2 ] dt t0
en coordenadas paramétricas, siendo x=a y x=b los valores de las abcisas de los puntos que delimitan el arco de curva que gira (t0 y t1 son los valores del parámetro correspondiente 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:
b 2 S = 2p ò f(y) [1+f’(y) ] dy a
1/2
siendo y=a e y=b los valores de las ordenadas de los puntos que delimitan el arco de curva 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) graficarla en la figura 13-5 puede parametrizarse como sigue:
2
, y para
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^218*x+12)^2)','x',0,5/2)) I =
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 eje x, viene dado por la integral: b 2 S = p ò [f(x)] dx a siendo x=a y x=b los valores de las abcisas de los puntos que delimitan el arco de curva que gira. El volumen engendrado por la curva de ecuación x=f(y) al girar alrededor del eje
y, viene dado por la integral: b S = p ò [f(y)] dy a
2
siendo y=a e y=b los valores de las ordenadas de los puntos que delimitan el arco de curva que gira. Si seccionamos una superficie por planos paralelos a uno de los tres planos coordenados (por ejemplo al plano z=0) y su ecuación podemos ponerla en función de la distancia al origen (en este caso z). Es decir, la ecuación de la superficie se puede poner de la forma S(z), entonces el volumen comprendido por los planos y la superficie viene dado por:
V= ò
z2 S(z) dz z1
Ejercicio 13-18. Calcular el volumen engendrado al girar la elipse: x2 y2 -- + -- = 1 4 9
alrededor del eje OX y alrededor del eje OY
Representamos sobre el mismo gráfico las figuras generadas, pero solamente en su mitad positiva. El volumen final será el doble del representado (figura 13-6). La ecuación de la figura de revolución alrededor del eje OX es y2+z2 = 9(1-x 2/4), y se parametriza 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 como x2+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);
» 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 calcular los valores de x(a) e y(a) necesarios para aplicar la fórmula conocida en coordenadas cartesianas. x(a)= r(a)Cos(a)= (1+cos(a))Cos(a) y(a)= r(a)Sen(a)= (1+cos(a))Sen(a)
ò 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 _ c denominamos 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 0, 0 < m < 1):
La función LegendrePi(k,n,m) calcula el valor de la integral elíptica incompleta 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 m complementario), cuyas funciones simbólicas son: LegendreKc1(m) = LegendreKc(sqrt(1-m2))
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álculo algebraico. El hecho de estandarizar su resolución permite hallar el valor de múltiples tipos 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ón má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 tercer grado, 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 en la elíptica completa de primer orden:
cuyo valor se calcula mediante la expresión: » 2/3*mfun('LegendreKc',sqrt(1/9)) ans =
1.0783 De todas maneras, la forma de pasar una integral a euleriana, depende del cambio que se haga. Si planteamos directamente la integral a Matlab, nos devuelve una transformació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 de primera especie y la segunda completa de segunda especie, cuyo valor puede calcularse mediante 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 sinusoide y=3sen(2x) La longitud de esta curva vendrá dada por la fórmula:
O lo que es lo mismo:
Hagamos el cambio de variable 2x=t. Usaremos cos2(t)=1 sin2(t), y estamos ante 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 de tipo 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 x
dilog(x)
Integral dilogarítmica: ò ln(t)/(1-t) dt 1 z
erf(z)
Función error: 2/Öp ò e-t^2 dt
x>1
0 ¥
Complemento error: 2/Öp ò e-t^2 dt = 1 - erf(z)
erfc(z)
z ¥
erfc(n,z) = ò erfc(n-1,t) dt, erfc(-1,x) = 2/Öp e-x^2
erfc(n, z)
z
dawson(x)
Integral de Dawson:
x -x^2 e ò
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 x real. A su vez aporta la función no simbólica x=erfinv(y) que define la función inversa de 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 de variable 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
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 que obtenemos:
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 integrales trigonométricas e hiperbólicas. Las más importantes son: z
Si(z)
Seno integral: ò sin(t) / t dt 0
Ssi(z)
Seno integral desviado = Si(z) - p/2 z
Ci(z)
Coseno integral: g + ln(iz) - yp/2 + ò (cos(t)-1)/t dt (g =constante de Euler=0,5772) 0 z
Shi(z)
Seno hiperbólico integral: ò sinh(t) / t dt 0 z
Chi(z)
Coseno hiperb. integral: g+ln(z))+ò (cosh(t)-1)/tdt 0
Ejercicio 14-6. Resolver las siguientes integrales:
,
,
Para la primera integral la función integrando es par, luego nuestra integral entre 3 y 3 será el doble de la integral entre 0 y 3 . A continuación hacemos el cambio de variable 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
INTEGRALES DE FRESNEL Se denominan integrales de Fresnel a aquellas que tienen en el integrando las funciones 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 la integral:
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
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. Entre ellas tenemos las siguientes: n
harmonic(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 de Riemann: S 1/ks = z (s)
Zeta(s)
k=1 ¥
= S 1/(k+q)s (s y q reales)
Zeta(0,s,q)
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:
,
,
,
La primera integral se resuelve mediante la expresión:
43
(s real)
» 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.0079 INTEGRALES IMPROPIAS Matlab trabaja con las integrales impropias considerándolas como cualquier otro tipo de integral definida. No vamos a tratar aquí temas teóricos de convergencia de integrales impropias, pero dentro de las integrales impropias distinguiremos dos tipos:
1) Integrales con límites infinitos: El campo de definición de la función integrando es el semieje cerrado [a,¥) o el (-¥,a] o el (-¥,¥). 2) Integrales de funciones discontinuas: La función dada es continua en todo el intervalo [a,b]. a excepción de en un número finito de puntos aislados, llamados singulares. También pueden presentarse casos complicados, combinación de los dos anteriores. También se puede generalizar al caso en el que el campo de definición de la función (el recinto de integración) sea el conjunto de valores de una función (integral de Stieljes), 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 es en 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, pero resulta 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:
» 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 se cumple que para todo y del intervalo c£y£e :
Este resultado es muy importante, pues permite intercambiar derivada con integral para poder derivar bajo el signo integral, técnica muy utilizada en el cálculo de integrales dependientes de un parámetro. Las integrales dependientes de un parámetro también pueden ser impropias, y además también los parámetros pueden aparecer en los límites de integración, en cuyo caso podemos asegurar lo siguiente:
siempre y cuando a(y) y b(y) estén definidas en el intervalo [c,e] y tengan derivadas continuas a’(y) y b’(y), estando también las curvas a(y) y b(y) contenidas en el rectá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 continua en el rectángulo [a,b]x[c,d], entonces se cumple la fórmula:
es decir, se permite la integración bajo el signo integral, y el orden de integración respecto de las variables es indiferente. Ejercicio 14-10. Resolver por derivación respecto al integrales:
parámetro a>0 las
Para la primera integral, como la función integrando cumple las condiciones para la derivación bajo el signo integral, partimos de la integral de la derivada respecto del parámetro a de la función integrando. El resultado final será la integral respecto del parámetro a del resultado de la integral de la derivada anterior. Si llamamos a la integral I(a), calculamos I‘(a), que normalmente es más fácil de calcular que I(a), y el resutado final será ò I’(a) da. El principal apoyo nos lo presta el hecho de poder derivar la integral como la integral 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 =
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 signo integral, ya que la función I(a) lo permite. A continuación integramos en a el resultado anterior, 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 área comprendida entre su grafo y el eje x, para los valores de x dados por los límites de integración.
Riemann divide este área en el número máximo de rectángulos, de tal forma que el área total será la suma de las áreas de todos los rectángulos. Pero Riemann define dos tipos de rectángulos, los que aproximan por exceso el área total (ese área es la suma de las áreas de los rectángulos por exceso o sumas superiores) y los que aproximan por defecto el área total (ese área es la suma de las áreas de los rectángulos por defecto o sumas inferiores). El verdadero valor de la integral (suma de áreas de los rectángulos) será el valor al que tienden tanto las sumas superiores como las sumas inferiores cuando el número de rectángulos tiende a infinito (y estará comprendido entre las sumas superiores y las sumas 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 exista ha de ser único), es el verdadero valor de la integral. Cualquiera de los dos límites es vá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 cuya primitiva 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] de integración, las sumas superiores e inferiores se calcularán con las siguientes expresiones de 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 su dominio, se considera su módulo, a efectos de computar la integral. Lo que no se puede hacer es aplicar la fórmula directamente sin cerciorarse de si la función es negativa en algunos subintervalos de su campo de definición.
Ejercicio 14-11. Aproximar el valor de las integrales siguientes:
,
,
,
44
Para aproximar la primera integral calculamos el límite cuando el número de rectá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 ese lí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
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.
Capítulo 15
INTEGRACIÓN EN VARIAS VARIABLES YAPLICACIONES INTEGRACIÓN EN VARIAS VARIABLES Trataremos en este capítulo la forma de resolver integrales enedimensionales con Matlab, las aplicaciones de las integrales dobles y triples al cálculo de áreas y volúmenes y algunas otras aplicaciones típicas del cálculo integral multivariable. Las funciones que habilita Matlab al respecto ya fueron estudiadas anteriormente, 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 b int(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
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 de integrales dobles. Si el recinto S está determinado por curvas cuyas ecuaciones vienen dadas en coordenadas cartesianas, su área A se halla mediante la fórmula: A=ò ò
dx dy S Si por ejemplo S está determinado por a1, genera una parte de la solución general, de la forma:
li t li t 2 li t k li t ci 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 y y’ = - 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 COEFICIENTES CONSTANTES Ahora vamos a considerar sistemas de ecuaciones diferenciales no homogéneas con 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ón particular del sistema no homogéneo es: -1 Xp =F(t)ò F(t) F(t) dt La solución general del sistema no homogéneo será X=F(t)C+Xp, con lo que tendremos la solución general: -1 X = F(t)C + F(t)ò F(t) F(t) dt
Este método es la generalización a sistemas de ecuaciones del método de variación de parámetros para las ecuaciones simples. Matlab ofrece directamente la solución de estos sistemas con el comando dsolve o maple(‘dsolve’), siempre y cuando pueda obtener la forma algebráica de las soluciones de 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 y sistemas no ofrecen solución, se suele recurrir a métodos de aproximación. Dentro de los métodos aproximados los hay simbólicos y numéricos. Los simbólicos permiten obtener soluciones 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, que posteriormente pueden ajustarse por cualquier método algebráico (interpolación, regresión,....) a la curva que mejor les aproxime. Dicha curva será una solución aproximada de la ecuación diferencial. Entre de los métodos numéricos más comunes se halla el método de Runge Kuta. El uso más corriente de los métodos aproximativos es la resolución de ecuaciones y 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
diferenciales generales, y se basa en el desarrolo de funciones en series de potencias de Taylor. Matlab ofrece la opción ‘ series’ del comando maple(‘dsolve’), que permite obtener este tipo de soluciones. Su sintaxis es la siguiente: maple(‘dsolve(ecuación, func(var), ‘series’) Además existe el comando maple(‘powsolve’) que resuelve ecuaciones diferenciales 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ón complicada a polinomio ordenado en potencias de la variable. Ejercicio 16-13. Resolver las dos siguientes ecuaciones diferenciales por el método de la series de 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 log(x) O(x )
2 1 - 1/8 x
4 + 1/384 x
6 + O(x
) + _C2[------------- + ----------------------------] 1/2 x
1/2 x
» pretty(simplify(maple('convert(_C1*x^(1/2)*(11/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 )
6 2 4 + 1920 _C2 log(x) O(x ) + 1920 _C2 - 240 _C2 x
+ 5
_C2 x 6 + 1920 _C2 O(x )) /
1/2 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 de la 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
387 5 6 {y(t) = 1 + t + 2 t + (- 43/2 + 20/3 x) t t + O(t ),
- 3/2 t
4 + (--- - 3 x) 40
2 5 6 x(t) = 1 + t + (- 13/2 + 2 x) t 3/10 t + O(t)}
3 - 2/3 t
4 +(43/8 - 5/3 x) 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
+
{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 x(0) + 1/8) t
+ (- 1/6 D(x)(0) - 1/8
5
6 + O(t ),
+ (1/24 D(x)(0) + 1/30 x(0) - 1/30) t
2
3 z(t) = z(0) + x(0) t + 1/2 D(x)(0) t x(0) + 1/6) t
+ (- 1/3 D(x)(0) - 1/6
4 + (1/8 D(x)(0) + 1/12 x(0) - 1/12) t 5 + (- 1/30 D(x)(0) - 1/40 x(0) + 1/40) t
3 y(t) = y(0) + x(0) t + 1/2 D(x)(0) t x(0) + 1/6) t
6 + O(t ),
2
+ (- 1/3 D(x)(0) - 1/6
4 + (1/8 D(x)(0) + 1/12 x(0) - 1/12) t 5 + (- 1/30 D(x)(0) - 1/40 x(0) + 1/40) t
6 + O(t )
} El Método de Runge-Kutta El método de Runge-Kutta permite obtener un conjunto de puntos de la solución aproximada de una ecuación diferencial. Maple aporta la opción numeric del comando maple(‘solve’) que posibilita el cálculo de soluciones numéricas aproximadas de ecuaciones 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:
3(y’’)2 = y’ y’’’, con las condiciones iniciales y(0)=1/2, y’(0)=y’’(0)=1 » maple('f diff(y(x),x$3)*diff(y(x),x), y(x), numeric)')
:=
dsolve({3*diff(y(x),x$2)^2 = y(0)=1/2,D(y)(0)=1,(D@@2)(y)(0)=1},
ans = f := proc (x) `dsolve/numeric/result2`(x,3879004,[3]) end Ahora calculamos varios puntos de la función solución, para hacer una representación gráfica de la misma (figura 16-4). » 0.1)'),maple('f(0)'), maple('f(0.2)'),maple('f(0.3)')]
[maple('f(-0.3)'),maple('f(-0.2)'),maple('f(maple('f(0.1)'),
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 la nube de puntos a una parábola. Dicha parábola será la solución simbólica aproximada de la ecuación diferencial. » pretty(vpa(poly2sym(polyfit((-0.3:.1:0.3),y,2))))
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 esta relación es la que permite hallar soluciones de determinadas ecuaciones no lineales de orden superior. Para usar estas funciones es necesario ejecutar antes maple(‘with orthopoly’).
Polinomios de Chebychev de primera y segunda especie Los polinomios de Chebychev de primera especie son las soluciones de la ecuación diferencial:
Su ortogonalidad viene dada por:
Los polinomios de Chebychev de segunda especie cumplen la relación de ortogonalidad: 1 ò Un(x)Um(x) (1-x2 ) -1
1/2
dx=0
m¹n
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¹n Polinomios 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.
1 -x2 Su ortogonalidad viene dada por: ò Hn(x)Hm(x)e dx=0 m¹n -1¡Error! Argumento de modificador no especificado. Polinomios generalizados de Laguerre Las soluciones de la ecuación diferencial general de Laguerre: x y’’ + (a+1-x) y’ + n y = 0 se conocen como polinomios generalizados de Laguerre. 1 Su ortogonalidad viene dada por: ò Ln(x)Lm(x)
xa
e-x dx=0 m¹n -1
Polinomios 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 los polinomios 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 -1 Polinomios de Gegenbauer Su estructura es la siguiente:
Ejercicio 16-16. Hallar soluciones para las ecuaciones diferenciales: , especificado. ,
¡Error! Argumento de modificador no
» 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 1 - 5 x + 5 x
3 4 5 - 5/3 x + 5/24 x - 1/120 x
FUNCIONES DE AIRY Y BESSEL Reciben el nombre de funciones de Airy las soluciones linealmente independientes 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 linealmente independientes 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 soluciones linealmente 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.
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 dos soluciones 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 en diferencias finitas y recurrentes en general. Su sintaxis es: maple(‘rsolve({ecuación, condiciones_iniciales}, función)’)
Ejercicio 16-18. Hallar soluciones para las ecuación recurentes siguientes: ym+1 = mym+(m+1)! y1 =2, y2n = 4yn + 5 Argumento de modificador no especificado.
y1 = a, yn+2 -3 yn+1 + 2yn =4n
y0=y1=1 ¡Error!
» 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)'))
2 2 a n + n (- 20/3 (1/4)
log(n) ------ + 1 log(2) + 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 4/3 - 1/2 2
n + 1/6 4
Ejercicio 16-19 . Hallar el término general de las sucesiones de números reales definidas por la siguientes leyes de recurrencia: xn = nxm*xn - = xn+1 x0 =1, modificador no especificado.
yn+2 -2 yn+1 + 5yn =cos(3n)
y0=y1= 1 ¡Error! Argumento de
» 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)^325*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) -
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(n3)^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)^2100*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*(12*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*(12*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*(12*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(n2)+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*(12*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*(12*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)^n3*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)
- .1714545418874301
sin(n)
n - .0626567574510487 i (1. + 2. i) (1. - 2. i)
n + .0626567574510487 i
- .8165270805583898 cos(n) + .1803188413807544 sin(n)
Capítulo 17
PROGRAMACIÓN A lo largo de los sucesivos capítulos de este libro se han analizado las herramientas de trabajo con Matlab. Se han descrito los comandos, funciones, operadores matemáticos, operadores lógicos, operadores relacionales, variables, operaciones de entrada y salida de datos, manejo de ficheros, importación y exportación de datos, etc. Combinado convenientemente todos los objetos definidos en Matlab, adecuados a las reglas de trabajo con el programa, se puede construir código de programación muy util en la investigación matemática. Al igual que en los lenguajes de programamción como C o Fortran, en Matlab se pueden escribir programas con bucles, control de flujo e instrucciones condicionales. Matlab soporta la programación procedimental, con procesos iterativos, recursivos, etc. La forma de trabajo y comandos específicos para estas tareas ya se estudiaron en el capítulo 7 de este libro. Mención aparte merece la programación funcional. En Matlab se pueden resolver multitud de problemas mediante la definición adecuada de las correspondientes funciones permanentes 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 muy fluída y muy estándar. De hecho se puede generar con Matlab código Fortan, C y Visual Basic que puede ser compilable en estos lenguajes de programación. Matlab dispone de documentación específica al efecto en la que se explica claramente cómo realizar estas tareas. 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 normal mediante secuencias de comandos que van a ejecutar las tareas en modo batch automáticamente y que se guardan en ficheros denominados ficheros “Scripts”. También es corriente la mezcla de ambos conceptos, en cuyo caso no sería ni siquiera necesario hacer distinciones.
FICHEROS “SCRIPT” Matlab es habitualmente utilizado en modo comando (o interactivo), en cuyo caso se submite un comando que se escribe en una única línea sobre la ventana de comandos, y se procesa de inmediato. Pero Matlab también permite la ejecución de conjuntos de comandos en modo batch, 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 de ser almacenado en disco con la extensión “.m” en el subdirectorio que Matlab habilita al efecto. Estos ficheros que contienen los programas se escriben utilizando cualquier editor ASCII o la subopción M-file de la opción New del menú File de la barra superior de menús, la cual nos lleva a un editor de texto que permitirá escribir las líneas de programació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 de menús permite editar cualquier M-fichero preexistente para volver a grabarlo con sus correspondientes modificaciones de código de programación. Para ejecutar un programa almacenado en un M-fichero, basta teclear el nombre del M-fichero (sin extensión) en modo interactivo sobre la ventana de comandos y pulsar Enter. Matlab interpreta secuencialmente todos los comandos o sentencias incluídos en las 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 el comando “echo on”, y solo se van viendo los resultados de las ejecuciones sucesivas de los comandos interpretados. A su vez, la opción Run M-file del menú File permite ejecutar cualquier programa preexistente almecenado en un M-fichero. Como norma general, el trabajo en modo batch es útil cuando se procesan conjuntos muy largos de comandos de escritura tediosa y con propensión a cometer errores, 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 al texto explicativo de un M-fichero. Matlab ofrece ciertos comandos de procedimiento que se utilizan muy a menudo en 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 en Matlab, que permiten familiarizarse con el entorno. Para profundizar en este tema es necesario 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
exceda a 100100. Salvar el programa en el fichero de nombre factcond.m y ejecutarlo posteriormente. En primer lugar elegimos la subopción M-File de la opción New del menú File de Matlab (ver figura 20-1).
Figura 17-1 Una vez seleccionado M-File aparece un editor en la pantalla, en el que ya escribimos 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 figuras 22-3 y 22-4).
Figura 17-3 Si se elige Guardar, el programa se salva en un M-fichero situado en el subdirectorio por defecto que Matlab habilita al efecto, en cuyo caso la ejecución posterior del programa es directa desde la ventana de comandos.
Si se elige Guardar como (figura 17-4), el programa se salva en un M-fichero situado en el subdirectorio que se especifique voluntariamente, en cuyo caso la ejecución posterior del programa exige que esté abierto dicho subdirectorio. Matlab habilita los comandos cd o ls (ya estudiados anteriormente), que permiten abrir un determinado subdirectorio.
Figura 17-4 Al elegir Aceptar, el programa se guarda en el fichero permanente de nombre factcond.m, y puede ser ejecutado desde la ventana de comandos de Matlab de la forma siguiente: » 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 el cero), 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;
end; p Guardamos el programa en el fichereo de nombre prog1.m. Para ejecutarlo para n=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
Columns 7 through 10 518400
453600
403200
362880
725760
604800
View more...
Comments