Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program TpAnalise
- integer n
- integer CondErro
- real A(100)
- real T(100)
- c Inicializada a variavel n,numero de pontos,e também A,T e CondErro,
- c sendo estas últimas os Pesos,Abscissas e Condição de Erro,respectivamente.
- print *, 'Digite o numero de pontos:'
- read(*,*) n
- c faz a leitura do teclado para n,sendo n especificado como numero
- c com tres casas decimais.
- call PesAbsGL(n,A,T)
- c chamada da subrotina,que calculará os Pesos e as Abscissas,assim como também
- c a condição de erro.
- open(1, file = 'pesosabscissas.txt', status= 'unknown')
- write(1,*) 'A: ',(A(i), i=1, m)
- write(1,*) 'T: ',(T(i), i=1, m)
- write(1,4) CondErro
- 4 format('CondErro: ',i1)
- close(1, status ='keep')
- end
- subroutine PesAbsGL (n, A, T,CondErro)
- c Subrotina para calcular os Pesos e as Abscissas. Recebe como entrada
- c o número de pontos e tem como saída os Pesos e Abscissas.
- integer m, i, j,CondErro
- real Pi, z, z1, p1, p2, p3, pp
- real A(100), T(100)
- if(n .lt. 1) then
- CondErro =1
- return
- endif
- c Testa a condição do algoritmo,se n<1, retorna erro.
- CondErro=0
- pi = 3.14159265358979323846
- m = 0.5 * (n+1)
- if (m .gt. 100) then
- CondErro= 1
- return
- endif
- c Testa o se o limite dos vetores é ultrapassado,gerando erro.
- do i=1, m
- z=cos(pi*(i-0.25)/(n+0.5))
- do while (.true.)
- p1=1
- p2=0
- do j=1, n
- p3=p2
- p2=p1
- c Polinomio de Lagrange no ponto z.
- p1= ((2*j-1)*z*p2-(j-1)*p3)/j
- enddo
- c Derivada do polimonio de Legendre no ponto z.
- pp = n*(z*p1-p2)/(z**2-1)
- z1=z
- c Metodo de Newton para calcular os zeros do polinômio.
- z=z1-(p1/pp)
- if(abs(z-z1) .lt. 10e-15) then
- go to 99
- endif
- enddo
- 99 continue
- T(m+1-i) = z
- A(m+1-i) = 2/((1-z**2)*pp**2)
- enddo
- end
Add Comment
Please, Sign In to add comment