You are on page 1of 3

Corrección del Primer Parcial de Computación

Hans Müller Santa Cruz


28 de abril de 2008

G1 Calcular r(1, 5), sabiendo que r(x) = p(x)/q(x + 1), donde p(x) es el polinomio de interpolación por
(0, 0), (1, 1), (2, 0) y (3, 1); q(x) es el polinomio de interpolación por (0, −1), (1, 1), (2, 1) y (3, 1).
El código del programa, escrito en el archivo p1uno.f90, es el siguiente:

program p1uno
real(kind=8),dimension(0:3)::x=(/0.d0,1.d0,2.d0,3.d0/),&
& y=(/0.d0,1.d0,0.d0,1.d0/),z=(/-1.d0,1.d0,1.d0,-1.d0/)
interface
function einterpol(n,x,y,t)
integer,intent(in)::n
real(kind=8),intent(in),dimension(0:n)::x,y
real(kind=8),intent(in)::t
real(kind=8)::einterpol
end function einterpol
end interface
call interpol(3,x,y); call interpol(3,x,z)
write(6,*)’r(1,5)=’,einterpol(3,x,y,1.5d0)/einterpol(3,x,z,1.5d0)
end program p1uno

Se compila y se ejecuta el programa, como sigue:

s]$ gfortran -o p1uno p1uno.f90 -L$HOME/lib/ -lcurso


s]$ ./p1uno

El resultado que se obtiene es:

r(1,5)= 0.40000000000000002

G2 Hallar la raı́z de p(x) sobre el intervalo [1, 2], sabiendo que p(x) es el polinomio de interpolación por
(0, 0), (1, 1), (2, −1) y (3, 0).
El código del programa, escrito en el archivo p1dos.f90, es el siguiente:

program p1dos
implicit none
real(kind=8),dimension(0:3)::x=(/0.d0,1.d0,2.d0,3.d0/),&
& y=(/0.d0,1.d0,-1.d0,0.d0/)
real(kind=8)::a,b,c,d,e,f
interface
function einterpol(n,x,y,t)
integer,intent(in)::n
real(kind=8),intent(in),dimension(0:n)::x,y
real(kind=8),intent(in)::t
real(kind=8)::einterpol

1
end function einterpol
end interface
call interpol(3,x,y)
a=1.d0; b=2.d0; d=einterpol(3,x,y,a); e=einterpol(3,x,y,b)
do while(b-a.gt.1.d-15)
c=.5d0*(a+b); f=einterpol(3,x,y,c)
if(d*f>0.d0)then
a=c; d=f
else
b=c; e=f
end if
end do
write(*,*)’La raiz de p(x) en [1,2] es’, c
end program p1dos

Se compila y se ejecuta el programa, como sigue:

s]$ gfortran -o p1dos p1dos.f90 -L$HOME/lib/ -lcurso


s]$ ./p1dos

El resultado que se obtiene es:

La raiz de p(x) en [1,2] es 1.50000000000000

G3 Graficar sobre [−1, 1] el polinomio de interpolación p(x), que pasa por (x0 , 0), (x1 , 0), (x2 , 0), (x3 , 1) y
(x4 , 0); los xi son las raı́ces de p5 (x) polinomio de Chebichef
El código del programa, escrito en el archivo p1tres.f90, es el siguiente:

program p1tres
integer pgopen
real(kind=8),dimension(0:4)::x,y=(/0.d0,0.d0,0.d0,1.d0,0.d0/)
real(kind=4),dimension(200)::xpg,ypg
real(kind=8)::pi,t,einterpol
pi=2.d0*acos(0.d0); x=(/(-cos((2.d0*i+1.d0)*pi/(2.d0*4+2.d0)),i=0,4)/)
write(*,*)’x=’,x
call interpol(4,x,y)
xmin=-1.d0;xmax=1.d0;ymin=-1.d0;ymax=1.d0
ier=pgopen(’?’)
call pgpap(5.,1.)
call pgenv(xmin,xmax,ymin,ymax,0,1)
do i=1,101
t=.02d0*(i-1)-1.d0; xpg(i)=t; ypg(i)=einterpol(4,x,y,t)
end do
call pgline(101,xpg,ypg)
call pgend
end program p1tres

Se compila y se ejecuta el programa, como sigue:

s]$ gfortran -o p1tres p1tres.f90 -L$HOME/lib/ -lcurso -lpgplot -lX11


s]$ ./p1tres

El resultado que se obtiene es la gráfica:

2
3

You might also like