Método Punto Fijo: Calcular profundidad de un tanque

Método de Bisección: Cálculo de área de región sombreada

PROBLEMA:  Use el Método de Bisección para calcular el área de la región sombreada que muestra la Grafica 1.

Gráfica 1

SOLUCIÓN

Análisis de la situación


Al ver la Gráfica 1, se puede apreciar, que el área está limitada por dos funciones, una mayor $$y=x\sqrt { sen(x) }$$ y otra menor $$y=ln\left( { x }^{ \frac { 2 }{ 3 }  } \right)$$. Si nos apoyamos en el Cálculo Integral,  vemos que una forma de calcular el área entre dos curvas o funciones es $$ A=\int _{ a }^{ b }{ \left[ g(x)-f(x) \right] dx } $$, donde $$f(x)$$ es la función menor y $$g(x)$$ es la función mayor,  definidas en el intervalo $$[a,b].$$

Ahora, para poder calcular el valor de nuestra región sombreada,  en primer lugar, es necesario que conozcamos los puntos de corte entre las funciones $$y=ln\left( { x }^{ \frac { 2 }{ 3 }  } \right)$$ y $$y=x\sqrt { sen(x) },$$ luego de estos puntos de corte, obtendremos el valor inicial (a) y el valor final (b),  con los cuales podremos plantear y resolver la integral de modo que obtengamos el área de la región. 


Pasos para determinar los puntos de corte


1. Igualamos las funciones $$y=ln\left( { x }^{ \frac { 2 }{ 3 }  } \right)$$  y $$y=x\sqrt { sen(x) }$$ del siguiente modo:  $$ln\left( { x }^{ \frac { 2 }{ 3 }  } \right)= x\sqrt { sen(x) }.$$  
2. Creamos una nueva función a partir de esta, es decir, $$f(x)=ln\left( { x }^{ \frac { 2 }{ 3 }  } \right)-x\sqrt { sen(x) }.$$
3. Graficamos la función f(x) para ver los interceptos con el eje x, de estos saldrán los valores de a y b. Evidentemente, como muestra la Gráfica 1, los valores de los interceptos deben estar entre 5 y 10.


Gráfica de f(x):

Gráfica 2

Al ver la gráfica, es claro que los valores que los interceptos que nos interesan son los que se encuentran en los intervalos [6,7] y [9,10].

4. Usar el método de bisección para determinar los interceptos, estos serán el valor inicial (a) y el valor final (b). Sabemos que el método de bisección requiere de un intervalo cerrado en donde la función sea continua y además, que éste contenga la raíz de la función (esto es, el intercepto con el eje x). Como mencionamos en el ítem 3, los intervalos que nos interesan son [6,7] y [9,10].

Para determinar estos interceptos, usaremos el siguiente código, creado para Matlab, al que llame bisección.m:

f=inline(input('Ingrese funcion: ','s'));
a=input('Ingrese extremo inferior del intervalo cerrado: ');
b=input('Ingrese extremo superior del intervalo cerrado: ');
E=input('Ingrese porcentaje de error: ');
if f(a)*f(b)<0
    Pm=(a+b)/2;
    Ea=abs((Pm-a)/Pm)*100;
    while E<Ea
        if f(a)*f(Pm)<0
            b=Pm;
        elseif f(Pm)*f(b)<0
            a=Pm;
        else
            Ea=0;
        end
        if Ea~=0
            Pm=(a+b)/2;
            Ea=abs((Pm-a)/Pm)*100;
        end
    end
    Raiz_Aprox=Pm;
    fprintf('La raiz aproximada es: %12.10f \n',Raiz_Aprox);
else
    disp('No Hay Raiz en el Intervalo.');
end

Al ejecutarlo en la línea de comandos de Matlab e ingresando la información correspondiente al intervalo [6,7] obtenemos:

>> biseccion
Ingrese funcion: log(x^(2/3))-x*sqrt(sin(x))
Ingrese extremo inferior del intervalo cerrado: 6
Ingrese extremo superior del intervalo cerrado: 7
Ingrese porcentaje de error: 10^(-10)
La raiz aproximada es: 6.0000000000

Observamos que la raíz aproximada (o intercepto) no es la que esperábamos, puesto que, según la Gráfica 2, ésta debe estar entre 6 y 6.5. Entonces, ¿qué pasó?, ¿No funciona el método? Veamos más de cerca el asunto, si nos fijamos hay una raíz cuadrada en f(x), es la que tiene la función sen(x). Sabemos que si sen(x) genera cantidades negativas entonces la raíz cuadrada de estos valores generará números complejos y como consecuencia el método de bisección fallará.

Observemos la gráfica de sen(x) en el intervalo de [6,7]:

Gráfica 3

La Gráfica 3 muestra que en el intervalo [6,6.3] la función sen(x) genera valores negativos, es decir, estos valores hacen que el método de bisección no funcione correctamente, por lo tanto, debemos tomar un intervalo en donde estemos seguros que la función seno siempre genere valores positivos. Probemos el método de bisección nuevamente con el intervalo [6.3,7] y veamos que tal nos va:

>> biseccion
Ingrese funcion: log(x^(2/3))-x*sqrt(sin(x))
Ingrese extremo inferior del intervalo cerrado: 6.3
Ingrese extremo superior del intervalo cerrado: 7
Ingrese porcentaje de error: 10^(-10)
La raiz aproximada es: 6.3210132516

Perfecto, ahora si tenemos una raíz aproximada razonable, la cual concuerda con el intercepto de la Gráfica 2

De igual modo calcularemos la raíz de f(x) en el intervalo [9,10] teniendo en cuenta el detalle de la raíz cuadrada.

Observemos cómo se comporta la función seno en el intervalo:

Gráfica 4

Es claro, según la Gráfica 4, que debemos tomar un intervalo en donde los valores de la función seno sean positivos, por ejemplo el intervalo [9,9.4]. Apliquemos el método de bisección sobre este intervalo:

>> biseccion
Ingrese funcion: log(x^(2/3))-x*sqrt(sin(x))
Ingrese extremo inferior del intervalo cerrado: 9
Ingrese extremo superior del intervalo cerrado: 9.4
Ingrese porcentaje de error: 10^(-10)
La raiz aproximada es: 9.3995196842


Listo, ahora sí, ya tenemos el valor inicial (a) y valor final (b) para nuestra integral, estos son, 6.3210132516 y 9.3995196842, respectivamente.


Calculo del área

Procedamos a calcular el área de la región sombreada usando el comando quad de Matlab. Recordemos que la función mayor es  $$y=x\sqrt { sen(x) }$$ y la función menor es $$y=ln\left( { x }^{ \frac { 2 }{ 3 }  } \right).$$ Ejecutemos


>> quad('x.*sqrt(sin(x))-log(x.^(2/3))',6.3210132516,9.3995196842)
ans =
  14.545952137319851

Por lo tanto, el área de la región sombreada es de 14.545952137319851 unidades cuadradas.


Sobre el comando quad en Matlab

>> help quad
 quad   Numerically evaluate integral, adaptive Simpson quadrature. Q = quad(FUN,A,B) tries to approximate the integral of scalar-valued function FUN from A to B to within an error of 1.e-6 using recursive adaptive Simpson quadrature. FUN is a function handle. The function Y=FUN(X) should accept a vector argument X and return a vector result  Y, the integrand evaluated at each element of X.



Listo, hemos llegado al final de esta entrada.

Para aquellos que les interese el método de bisección en Python, les dejo a continuación el código:

from sympy import *

funTexto=input('Ingrese funcion: ')
a=float(input('Ingrese limite inferior del intervalo: '))
b=float(input('Ingrese limite superior del intervalo: '))
E=float(input('Ingrese porcentaje de error: '))

f=sympify(funTexto)
e=abs((b-a)/b)*100    

while E<e:
    r1=(a+b)/2
    if(f.subs('x',r1)==0):
        e=0
    else:
        if(f.subs('x',a)*f.subs('x',r1)<0):
            b=r1
        else:
            a=r1

        e=abs((b-a)/b)*100

print('La raiz aproximada es: ',r1)


Espero esta entrada le sirva de ayuda a todos aquellos que estén interesados en la aplicación del método de bisección.  


Comentarios