Guest User

Untitled

a guest
Jul 18th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. program TpAnalise
  2.  
  3.  
  4. integer n
  5. integer CondErro
  6. real A(100)
  7. real T(100)
  8. c Inicializada a variavel n,numero de pontos,e também A,T e CondErro,
  9. c sendo estas últimas os Pesos,Abscissas e Condição de Erro,respectivamente.
  10.  
  11. print *, 'Digite o numero de pontos:'
  12. read(*,*) n
  13.  
  14.  
  15.  
  16. c faz a leitura do teclado para n,sendo n especificado como numero
  17. c com tres casas decimais.
  18.  
  19. call PesAbsGL(n,A,T)
  20. c chamada da subrotina,que calculará os Pesos e as Abscissas,assim como também
  21. c a condição de erro.
  22.  
  23. open(1, file = 'pesosabscissas.txt', status= 'unknown')
  24. write(1,*) 'A: ',(A(i), i=1, m)
  25.  
  26. write(1,*) 'T: ',(T(i), i=1, m)
  27.  
  28. write(1,4) CondErro
  29. 4 format('CondErro: ',i1)
  30.  
  31. close(1, status ='keep')
  32.  
  33. end
  34.  
  35. subroutine PesAbsGL (n, A, T,CondErro)
  36. c Subrotina para calcular os Pesos e as Abscissas. Recebe como entrada
  37. c o número de pontos e tem como saída os Pesos e Abscissas.
  38.  
  39. integer m, i, j,CondErro
  40. real Pi, z, z1, p1, p2, p3, pp
  41. real A(100), T(100)
  42.  
  43. if(n .lt. 1) then
  44.  
  45. CondErro =1
  46.  
  47. return
  48.  
  49. endif
  50. c Testa a condição do algoritmo,se n<1, retorna erro.
  51.  
  52.  
  53. CondErro=0
  54.  
  55. pi = 3.14159265358979323846
  56.  
  57. m = 0.5 * (n+1)
  58.  
  59. if (m .gt. 100) then
  60.  
  61. CondErro= 1
  62.  
  63. return
  64.  
  65. endif
  66. c Testa o se o limite dos vetores é ultrapassado,gerando erro.
  67.  
  68. do i=1, m
  69.  
  70. z=cos(pi*(i-0.25)/(n+0.5))
  71. do while (.true.)
  72. p1=1
  73.  
  74. p2=0
  75. do j=1, n
  76. p3=p2
  77.  
  78. p2=p1
  79. c Polinomio de Lagrange no ponto z.
  80. p1= ((2*j-1)*z*p2-(j-1)*p3)/j
  81. enddo
  82. c Derivada do polimonio de Legendre no ponto z.
  83. pp = n*(z*p1-p2)/(z**2-1)
  84. z1=z
  85. c Metodo de Newton para calcular os zeros do polinômio.
  86. z=z1-(p1/pp)
  87. if(abs(z-z1) .lt. 10e-15) then
  88. go to 99
  89. endif
  90. enddo
  91.  
  92. 99 continue
  93. T(m+1-i) = z
  94.  
  95. A(m+1-i) = 2/((1-z**2)*pp**2)
  96. enddo
  97.  
  98. end
Add Comment
Please, Sign In to add comment