Você está na página 1de 7

Fsica Computacional 1 2015

Nome: Thas Celine Campos Braga


RA: 386383

Tarefa nmero: 3

Ttulo: Utilizando variveis indexadas para a


construo de grficos

Data da entrega: 25/03/2015

Tarefa 3.1

No comando 'DO' a varivel recebe um valor inicial e a cada iterao do


comando ela atualizada de acordo com o incremento at alcanar o limite
estabelecido. Caso este incremento seja bem pequeno, o grfico resultante
apresentar curvas mais suaves, porm esse procedimento ir gerar muitos
dados surgindo a possibilidade de que o programa fique lento e demore
muito para rodar. Porm, com incrementos maiores as curvas ficam com um
aspecto mais 'quadrado' como se pode ver na figura abaixo onde foram
plotados grficos com trs diferentes incrementos, sendo estes dx=0.2, 0.1
e 0.01.

Figure 1: Grfico de uma gaussiana com diferentes incrementos

Cdigo implementado usando variveis comuns para a construo de


grficos de uma gaussiana:
program tarefa
implicit none
integer :: i=0
real :: a,b,c,h,x,f
h=1e-2
x=0.0d0
y=0.0d0
print *, 'Digite um valor para a altura do pico'

read *, a
print *, 'Digite um valor para a posicao do centro do pico'
read *, b
print *, 'Digite um valor para a largura do pico'
read *, c
open(unit=1,file='gaussiana.dat',form='formatted')
do i=1,100
x=x+h*real(i)
f=a*exp(-((x-b)**2.0d0)/(2.0d0*c**2.0d0))
write(1,*)i,x,y,f
enddo
close(1)
end program tarefa

Cdigo implementado usando variveis indexadas para a construo de


grficos de uma gaussiana:
program tarefa3
implicit none
!contadores inteiros
integer :: i,j
!variaveis reais da gaussiana e o incremento h
real :: a=0.0d0,b=0.0d0,c=0.0d0,h=1e-2
!variaveis indexadas
real,dimension(1:1000) :: x,y
print *, 'Digite um valor para a altura do pico'
read *, a
print *, 'Digite um valor para a posicao do centro do pico'
read *, b
print *, 'Digite um valor para a largura do pico'
read *, c
open(unit=10,file='gaussianavetor.dat',form='formatted')
i=0
!zerando as funcoes
do i=1,1000
y(i)=0.0d0
x(i)=0.0d0
enddo
j=0
do j=0,60
x(j+1)=x(j)+h*real(j)
y(j+1)=a*exp(-(x(j+1)-b)**2.0d0/(2.0d0*c**2.0d0))
write(10,*)x(j+1),y(j+1)
enddo
close(10)
end program tarefa3

Ao fixar os valores de b e c, variariando a tem-se gaussianas com diferentes


valores de pico:

Figure 2: Fixando as variveis b e c e variando a tem-se gaussianas com diferentes


valores de pico.

Ao fixar os valores de a e c, variando b tem-se gaussianas centradas em


diferentes pontos de x:

Figure 3: Fixando as variveis a e c e variando b, tem-se gaussianas centradas em


diferentes pontos de x.

Ao fixar os valores de b e c, variando c tem-se gaussianas diferentes


larguras de pico:

Figure 4: Fixando as variveis b e c e variando a, tem-se gaussianas com


diferentes larguras de pico.

Tarefa 3.2
program pi
implicit none
integer :: i=0,j=0,k=0
real,dimension(1:1000) ::n1,n2,n3,n4,n5,pi1,pi2,pi3,pi4,pi5
print *, 'Digite um valor para o numero de iteraoes'
read *, k
open(unit=11,file='pi1.dat',form='formatted')
open(unit=12,file='pi2.dat',form='formatted')
open(unit=13,file='pi3.dat',form='formatted')
open(unit=14,file='pi4.dat',form='formatted')
open(unit=15,file='pi5.dat',form='formatted')
do i=1,100
n1(i)=0.0d0
n2(i)=0.0d0
n3(i)=0.0d0
n4(i)=0.0d0
n5(i)=0.0d0
pi1(i)=0.0d0
pi2(i)=0.0d0
pi3(i)=0.0d0
pi4(i)=0.0d0
pi5(i)=0.0d0
enddo
do j=1,k
n1(j+1) = n1(j)+(((-1.0d0)**j*(-1.0d0))/(2.0d0*j-1.0d0))
pi1(j+1)=4.0d0*n1(j+1)
write(11,*)j,pi1(j+1)
n2(j+1)= n2(j)+(1.0d0/(j**2.0d0))
pi2(j+1)=sqrt(6.0d0*n2(j+1))
write(12,*)j,pi2(j+1)
n3(j+1)=n3(j)+((-1.0d0)*(-1.0d0)**j)/(j**2.0d0)
pi3(j+1)=sqrt(12.0d0*n3(j+1))
write(13,*)j,pi3(j+1)
enddo
do j=0,k
n4(j+1)=n4(j)+(1.0d0/(2.0d0*j+1.0d0)**2.0d0)
pi4(j+1)=sqrt(8.0d0*n4(j+1))
write(14,*)j,pi4(j+1)
enddo
do j=1,k
n5(j+1)=n5(j)+(1.0d0/j**4.0d0)
pi5(j+1)=sqrt(sqrt(90.0d0*n5(j+1)))
write(15,*)j,pi5(j+1)
enddo
end program pi

Figure 5: Grfico das somas que convergem para pi

Você também pode gostar