Solución Prác. 2

Anuncio
CN - 2011/2012
PR 2 - 01
CN - 2011/2012
PR 2 - 02
CN - 2011/2012
PR 2 - 03
CN - 2011/2012
PR 2 - 04
CN - 2011/2012
PR 2 - 05
CN - 2011/2012
PR 2 - 06
CN - 2011/2012
PR 2 - 07
CN - 2011/2012
PR 2 - 08
CN - 2011/2012
PR 2 - 09
CN - 2011/2012
PR 2 - 10
CN - 2011/2012
PR 2 - 11
CN - 2011/2012
PR 2 - 12
CN - 2011/2012
PR 2 - 13
CN - 2011/2012
PR 2 - 14
CN - 2011/2012
PR 2 - 15
c===============================================================================
c===================================================== Programa DerivarPolinomio
c===============================================================================
c
c
-------------------------------------------------------------------------c
2
n
c
Dado el polinomio
P (x) = a + a x + a x + ... + a x
c
n
0
1
2
n
c
c
y el punto de calculo
z
c
c
2
n
c
realiza el cambio de base
P (x) = b + b (x-z) + b (x-z) + ... + b (x-z)
c
n
0
1
2
n
c
c
(i
|
c
d P (x) |
c
n
|
c
y calcula las derivadas
c(i) = -------- |
c
(i
|
c
d x
|x = z
c
c
-------------------------------------------------------------------------parameter (MX=100)
implicit real*8 (a-h,o-z)
dimension a(0:MX),b(0:MX),c(0:MX)
!MX=grado maximo del polinomio
c.....LECTURA DE DATOS
1 write(6,100) MX+1
100 format(/' Introduzca GRADO del polinomio [n < ',i6,'] = ',$)
read(5,*) n
if (n.lt.0.or.n.gt.MX) goto 1
write(6,200)
200 format(/' Introduzca PUNTO de calculo
[z] = ',$)
read(5,*) z
call LeerCoeficientes(n,a)
c.....CAMBIO DE BASE POR DIVISION SINTETICA
call DivisionSintetica(n,z,a,b)
c.....CALCULO DE DERIVADAS
call CalcularDerivadas(n,b,c)
c.....ESCRITURA DE RESULTADOS
call EscribirResultados(n,z,a,b,c)
end
c_______________________________________________________________LeerCoeficientes
Subroutine LeerCoeficientes(n,a)
implicit real*8 (a-h,o-z)
dimension a(0:n)
write(6,300)
300 format(/' Introduzca COEFICIENTES del polinomio:'/)
do i=0,n
write(6,302) i
302
format(16x,'a(',i5,') = ',$)
read(5,*) a(i)
enddo
return
end
c______________________________________________________________DivisionSintetica
Subroutine DivisionSintetica(n,z,a,b)
implicit real*8 (a-h,o-z)
dimension a(0:n),b(0:n)
do i=0,n
b(i)=a(i)
enddo
do k=n,1,-1
do i=n-1,n-k,-1
b(i)=b(i)+b(i+1)*z
enddo
enddo
return
end
c______________________________________________________________CalcularDerivadas
Subroutine CalcularDerivadas(n,b,c)
implicit real*8 (a-h,o-z)
dimension b(0:n),c(0:n)
do i=0,n
c(i)=b(i)
enddo
fact=1.d+00
do i=2,n
fact=fact*dfloat(i)
c(i)=c(i)*fact
enddo
return
end
c_____________________________________________________________EscribirResultados
Subroutine EscribirResultados(n,z,a,b,c)
implicit real*8 (a-h,o-z)
dimension a(0:n),b(0:n),c(0:n)
write(6,1000)
1000 format(///' RESULTADOS'/,' ==========',/)
write(6,1100) n
1100 format(/' Grado del polinomio [n] = ',i5)
write(6,1200) z
1200 format(/' Punto de calculo
[z] = ',d20.9)
write(6,1300)
1300 format(/' Coeficientes en la base {1,x,...,x^n}:'/)
do i=0,n
write(6,1302) i,a(i)
1302
format(16x,'a(',i5,') = ',d20.9)
enddo
write(6,1400)
1400 format(/' Coeficientes en la base {1,(x-z),...(x-z)^n}:'/)
do i=0,n
write(6,1402) i,b(i)
1402
format(16x,'b(',i5,') = ',d20.9)
enddo
write(6,1500)
1500 format(/' Funcion y derivadas en el punto x = z:'/)
do i=0,n
write(6,1502) i,c(i)
1502
format(16x,'c(',i5,') = ',d20.9)
enddo
write(6,1600)
1600 format(/)
return
end
NOTA:
El tiempo de computación que requiere este programa es del tipo
T(n^2), ya que para valores de n grandes la mayor parte del
tiempo de computación se consume en la subrutina
DivisionSintetica.
Descargar