Professional Documents
Culture Documents
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