You are on page 1of 7

Un abrevadero de longitud (L) tiene una sección transversal en forma de semicírculo con

radio (r). Encuentre una expresión para calcular el volumen en términos de la altura (h)
medida desde la parte superior.

Suponga que L=10ft, r=1ft y v=12.4 ft3. Determine la profundidad del agua en el
abrevadero hasta 0.01 ft (exactitud).
Codificación del programa de bisección.
program biseccion
real::fun, xu, xl, xr, errorA, l, u, z, r, precisión
!Se declaran todas las variables del programa, siendo -fun-
!La función propuesta en la parte inferior
character(len=50)::v
v='iniciar'
print*, 'para dar comienzo al programa escriba la palabra -iniciar-'
read*, v
!Se escribe la palabra, -iniciar- para empezar a encontrar la raíz en el
programa,&
!Este programa se metió en un ciclo, para que después de encontrar una raíz, el
programa &
!Siga trabajando, aceptando nuevos valores para encontrar otras raíces en
diversos puntos,&
!El usuario decide cuando terminar de ejecutar el programa, escribiendo la
palabra -ya-.
do while(v=='iniciar')
print*,'para dar comienzo inserte los valores xl, xu, el número de interacciones
y la precision que desea'
read*, xl, xu, precision
l=fun(xl) !en esta parte, se evalúa la función que proporcionamos en xl.
u=fun(xu) !en esta parte, se evalúa la función que proporcionamos en xu.
if (l*u<0)then !el usuario debe buscar valores de xl y xu que al evaluarlos
!en la función, su producto de ambos sea menor a cero, esta
!Condición es necesaria para iniciar en el programa.
xr=(xl+xu)/2 !la aproximación de la raíz, se obtiene mediante el punto medio
del intervalo.
r=fun(xr) !la aproximación de la raíz evaluada en la función.
print*,'xr=',xr,'f(xr)=',r
do
b=xr !el valor de xr anterior (n-1).
xr=(Xl+Xu)/2
errorA=abs((xr-b)/xr)*100 !se saca el error aproximado
z=fun(xl)*fun(Xr)
r=fun(xr)
print*,'++ error aproximado %=',errorA
if(Z<0)then
xu=xr !si Z es negativo, xu va tomar el valor de xr.
print*,'Z=',z
else
if(Z>0)then
xl=xr !si Z es positivo, xl va tomar el valor de xr.
print*,'Z=',z
else
print*,'la raiz es X=',xr !esto es, si z=0
end if
end if
if(abs(r)<precision)exit !el programa se va detener hasta que el valor
absoluto de la función evaluada en xr, sea menor a la precisión que indiquemos al
inicio.
end do
else
print*,'no se encuentra, cheque sus valores, su producto debe ser menor a
cero' !esta frase va aparecer cuando el producto
!de la función evaluada en xu y en xl sea positivo.
end if
print*, 'x=', xr,'f(x)=',fun(xr)
print*
print*,'++ error aproximado %=',errorA
print*,'para seguir en encontrando raices, escriba -iniciar-, si quiere salir
escriba -ya-'
read*,v
pause
enddo
end
!esta función se propuso para simplificar el algoritmo
function fun(x)
real fun,x
fun=-3.307963268+10*asin(x)+10*x*sqrt(1-x**2) !cuando el usuario quiera encontrar
las raíces de alguna función, tendrá que escribirla en este apartado
end

-se da un intervalo de (0,1), con una precisión de 0.00001.


La raíz es de x=h=0.1661663, con un error aproximado de 1.1478553E-03 %.
Codificación del programa de falsa posición.
program falsa_posicion
real::fun, xu, xl, xr,errorA, l, u, z, r, precisión
!se declaran todas las variables del programa, siendo -fun-
!la función propuesta en la parte inferior
character(len=50)::v
v='iniciar'
print*, 'para dar comienzo al programa escriba la palabra -iniciar-'
read*, v
!se escribe la palabra, -iniciar- para empezar a encontrar la raíz en el
programa,&
!este programa se metió en un ciclo, para que después de encontrar una raíz, el
programa &
!siga trabajando, aceptando nuevos valores para encontrar otras raíces en
diversos puntos,&
!el usuario decide cuando terminar de ejecutar el programa, escribiendo la
palabra -ya-.
do while(v=='iniciar')
print*,'para dar comienzo inserte los valores xl, xu, el número de interaciones
y la precisión que desea'
read*, xl, xu, precisión
l=fun(xl) !en esta parte, se evalúa la función que proporcionamos en xl.
u=fun(xu) !en esta parte, se evalúa la función que proporcionamos en xu.
if (l*u<0)then !el usuario debe buscar valores de xl y xu que al evaluarlos
!en la funcion, su producto de ambos sea menor a cero, esta
!condicion es necesaria para iniciar en el programa.
xr=xu-((u*(xl-xu))/(l-u)) !la aproximacion de la raiz, se obtiene mediante
el punto medio del intervalo.
r=fun(xr) !la aproximación de la raíz evaluada en la función.
print*,'xr=',xr,'f(xr)=',r
do
xrold=xr !el valor de xr anterior (n-1).
xr=xu-((u*(xl-xu))/(l-u))
errorA=abs((xr-xrold)/xr)*100 !se saca el error aproximado
z=fun(xl)*fun(Xr)
r=fun(xr)
if(Z<0)then
xu=xr !si Z es negativo, xu va tomar el valor de xr.
print*,'Z=',z
else
if(Z>0)then
xl=xr !si Z es positivo, xl va tomar el valor de xr.
print*,'Z=',z
else
print*,'la raíz es X=',xr !esto es, si z=0
end if
end if
if(abs(r)<precisión)exit !el programa se va detener hasta que el valor
absoluto De la función evaluada en xr, sea menor a la precisión que indiquemos al
inicio
end do
else
print*,'no se encuentra, cheque sus valores, su producto debe ser menor a
cero' !esta frase va aparecer cuando el producto
!de la función evaluada en xu y en xl sea positivo.
end if
print*, 'x=', xr,'f(x)=',fun(xr)
print*
print*,'++ error aproximado %=',errorA
print*,'para seguir en encontrando raíces, escriba -iniciar-, si quiere salir
escriba -ya-'
read*,v
pause
enddo
end
!esta función se propuso para simplificar el algoritmo
function fun(x)
real fun,x
fun=-3.307963268+10*asin(x)+10*x*sqrt(1-x**2) !cuando el usuario quiera encontrar
las raíces de alguna función, tendrá que escribirla en este apartado
end
Codificación del programa de punto fijo.

You might also like