DIVERSOS
CALCULO NUMÉRICO
MÉTODO DA BISSECÇÃO
!!! Prof. Dr. Carlos Santana
program bisseccao
real a,b,p,tol
integer i,n0
Print*,'entre com a'
read*,a
Print*,'entre com b'
read*,b
Print*,'entre com N0'
read*,n0
Print*,'entre com a tolerancia'
read*,tol
i=1
fa=f(a)
do while(i.le.n0)
p=a+(b-a)/2.
fp=f(p)
if((fp.eq.0.) .or.((b-a)/2..lt.tol) )then
print*,p
goto 5
endif
i=i+1
if(fa*fp.gt.0.)then
a=p
fa=fp
else
b=p
endif
enddo
print*,'o metodo falhou depois de ',n0,' interacoes'
5 stop
end
!!!!!!!!!!!!!!!!!!funcao!!!!!!!!!!!!
real function f(x)
real x
f=2.*x-1.
return
end
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
MÉTODO DE NEWTON
!
! NOME: METODO DE NEWTON
! AUTOR: DR. CARLOS SANTANA
! DESC.: www.fisica.uece.br/santana
! DATA.: 11/09/08 18:31C
!
program newton
real p0,tol,n0,p
integer i
i=1
n0=10000.
print*,'entre com p0'
read*,p0
print*,'entre com a tolerancia'
read*,tol
dowhile(float(i).le.n0)
p=p0-f(p0)/df(p0)
if(abs(p-p0).lt.tol )then
print*,'procedimento ralizado com sucesso'
print*,'Raiz = ', p
go to 100
endif
i=i+1
p0=p
enddo
print*,'O procedimento falhou depois de', n0,'interacoes'
100 stop
end
!!!!!!!!!!!!!!!!!!funcao!!!!!!!!!!!!
real function f(x)
f=exp(x)-3.*x**2. !se preciso troque a funcao
return
end
!!!!!!!!!!!!!!!derivada!!!!!!!!!!!!!!!!!!!!
real function df(x)
df=exp(x)-6*x !se preciso troque a derivada
return
end
////////////////////////////////////////////////////////////////////////////////////////////////////
METODO DA REGULA-FALSI (falsa posicão)
! NOME: Metodo da Falsa posicao
! AUTOR: Dr. Carlos Santana
! DESC.:
! DATA:18/09/08 11:11
!
program falsa_posicao
real p,p0,p1,tol,q0,q1,q
integer i,n0
print*,'enntre com p0'
read*,p0
print*,'entre com p1'
read*,p1
print*,'entre com o numero de interacoes'
read*,n0
print*,'entre com a tolerancia'
read*,tol
i=2
q0=F(p0)
q1=F(p1)
do while(i.le.n0)
p=p1-q1*(p1-p0)/(q1-q0) !calcula p
if(abs(p-p1).lt.tol)then
print*,'a raiz para esse intervalo e= ',p
goto 10
endif
i=i+1
q=f(p)
if(q*q1.lt.0)then
p0=p1
q0=q1
endif
p1=p
q1=q
enddo
print*,'O metodo falhou apos ',n0,' intereacoes'
10 stop
end
!!!!!!!!!!!!!!!!!!!!!FUNCAO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
real function F(x)
real x
F=230.*(x**4.)+18.*(x**3.)+9.*(x**2.)-221.*x-9.
return
end
/////////////////////////////////////////////////////////////////////////////////////////////////////////
METODO DA SECANTE
! NOME: Metodo da Secante
! AUTOR: Dr. Carlos Santana
! DESC.:
! DATA:18/09/08 11:11
!
program secante
real p,p0,p1,tol,q0,q1,q
integer i,n0
print*,'enntre com p0'
read*,p0
print*,'entre com p1'
read*,p1
print*,'entre com o numero de interacoes'
read*,n0
print*,'entre com a tolerancia'
read*,tol
i=2
q0=F(p0)
q1=F(p1)
do while(i.le.n0)
p=p1-q1*(p1-p0)/(q1-q0)!calcula p
if(abs(p-p1).lt.tol)then
print*,'a raiz para esse intervalo e= ',p
goto 10
endif
i=i+1
p0=p1
q0=q1
p1=p
q1=f(p)
enddo
print*,'O metodo falhou apos ',n0,' intereacoes'
10 stop
end
!!!!!!!!!!!!!!!!!!!!!FUNCAO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
real function F(x)
real x
F=230.*(x**4.)+18.*(x**3.)+9.*(x**2.)-221.*x-9.
return
end
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
METODO DO PONTO FIXO
!
! NOME:METODO DO PONTO FIXO
! AUTOR:DR. CARLOS SANTANA
! DESC.:www.fisica.uece.br/santana
1 DATA:
!
PROGRAM PONTO_FIXO
real p,p0,tol
integer n0,i
i=1
Print*,'entre com aproximacao inicial'
read*,p0
Print*,'entre com N0'
read*,n0
Print*,'entre com a tolerancia'
read*,tol
dowhile(i.le.n0)
p=g(p0)
if(abs(p-p0).lt.tol)then
print*,p
goto 10
endif
i=i+1
p0=p
enddo
print*,'o metodo falhou depois de ',n0,' interacoes'
10 stop
end
!!!!!!!!!!!!!!funcao!!!!!!!!!!!!!!!!!!
real function g(x)
real x
!f(x)=x**3.+4*x**2-10. funcao que deseja encontra a raiz
g=(1./2.)*(10.-x**3.)**(1./2.) !funcao manipulada para gera g(x)
return
end
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Sistema Linear
Resolução de sistema linear triangular superior - Substituição Retroativa
C NOME: sistema linear triangular superior
C AUTOR: Dr. Carlos Santana
C DESC.:
program principal_sretro
integer i,j,mmax,n,nmax,n1
real a(20,21),x(20)
nmax=20
mmax=nmax+1
read(*,1)n
! n ordem da matriz
1 format(i2)
n1=n+1
do i=1,n
read(*,2)(a(i,j),j=i,n1)
2 format(10f8.0)
!matriz de coeficientes e termos independentes
enddo
call sretro(a,n,nmax,mmax,x)
call exit
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!! subrotina sretro !
!resolução de sistema linear triangular superior !
!metodo utilizado: subtituições retroativas !
!uso: call sretro(a,n,nmax,mmax,x) !
!parametros de entrada: !
!A :Matriz de coeficientes e termos independentes !
!N :ordem da matriz A !
!NMAX :numero maximo de linhas declarado !
!MMAX :numero maximo de colunas declarado !
!parametro de saida: !
!X :vetor solução !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine sretro(a,n,nmax,mmax,x)
integer i,j,k,l,m,nmax,n,mmax,n1
real a(nmax,mmax),x(nmax)
!substituições retroativas
n1=n+1
k=n-1
x(n)=a(n,n1)/a(n,n)
do i=1,k
l=n-i
x(l)=a(l,n1)
m=l+1
do j=m,n
x(l)=x(l)-a(l,j)*x(j)
enddo
x(l)=x(l)/a(l,l)
enddo
!fim das substituições
!impressão dos resultados
write(*,21)
21 format(1h1,15h vetor solucao,/)
do i=1,n
write(*,22)x(i),i
22 format(1h0,6hx = 1p,e12.5,/,2x,i2)
enddo
return
end
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
INTERPOLAÇÃO - MÉTODO DE LAGRANGE
!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
! programa principal para utilização da subrotina lagran
! livro Calculo Numerico com aplicações - Leonidas Conceição Barroso
!-----------------------------------------------------------------------
program interpolacao_lagrange
integer i,n,nmax,npi
real tabela(20,2),x(20),y(20)
nmax=20
print*,'num de pontos da tabela e numero de pontos a interpolar'
read(*,1)n,npi
1 format(2i2)
! n :numero de pontos da tabela
! npi :numero de pontos a ser interpolado
print*,'Entre com a funcao tabela'
do 10 i=1,n
read(*,2)(tabela(i,j),j=1,2)
2 format(2f10.0)
! tabela: matriz que contem os pontos conhecidos da funcao
10 continue
print*,'abscissas dos pontos a serem interpolados'
read(*,11)(x(i),i=1,npi)
11 format(8f10.0)
! x : vetor que contem as abscissas dos pontos interpolados
!
call lagran(tabela,nmax,n,npi,x,y)
call exit
end
!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
! subtoutina lagran
! objetivo: interpolação de um ou mais valores numa função tabelada
! nmax : numero que contem os pontos conhecidos
! n ; numero de pontos da tabela
! npi : numero de pontos a ser interpolado
! x : vetor que comtem as abscissas dos pontos interpolados
! paramentros de saida
! y : vetor que contem as ordenadas dos pontos interpolados
!---------------------------------------------------------------------
subroutine lagran(tabela,nmax,n,npi,x,y)
integer i,j,k,n,nmax,npi
real parc,tabela(nmax,2),x(nmax),y(nmax)
!
! impressão da tabela
!
write(*,1)
1 format(1h1,5x,24hinterpolacao de lagrange, //)
write(*,2)
2 format(1h0,4x,1hI,8x,1hx,14x,1hy,/,15x,1hi,14x,1hi,/)
do 10 i=1,n
j=i-1
write(*,3)j,tabela(i,1),tabela(i,2)
3 format(1h0,3x,i2,2(3x,1pe12.5))
10 continue
write(*,11)
11 format(5(/),5x,20htabela de resultados,/)
write(*,2)
! fim da impressao
do 40 k=1,npi
y(k)=0.
do 30 I=1,n
parc=1.
do 20 j=1,n
if(i.eq.j) go to 20
parc=parc*((x(k)-tabela(j,1))/(tabela(i,1)
& -tabela(j,1)))
20 continue
y(k)=y(k)+parc*tabela(i,2)
30 continue
! impressao do resutados
write(*,3)k,x(k),y(k)
40 continue
return
end
!encontra divisores de um inteiro
program divisors
! This program finds the divisors of an integer input by the user.
! The divisors are printed to a file.
integer n, k, d(10)
open (unit = 1, file = "divisors")
print *, "Enter a positive integer :"
read *, n
write (1,*) "Here are the divisors of ", n, " :"
k = 0
do i = 1, n
if (mod(n,i) .eq. 0) then
k = k + 1
d(k) = i
end if
if (k .eq. 10) then
write (1,5) (d(j), j = 1, 10)
k = 0
end if
end do
write (1,5) (d(j), j = 1, k)
5 format (10i7)
close (1)
print *, "The divisors are listed in the file 'divisors'. Bye."
end
///////////////////////////////////////////////////////////////////////////////////////////////
-------------------------------------------------------------------
Método de intregral trapezios
Algoritmo
ENTRADA: extremidades a, b; inteiro positivo n
SAÍDA: aproximadamente Xi para i
passo 1 faça h= (b-a)/h
passo 2 faça Xi0=f(a)+f(b);
Xi1=0;(Somatório de f(xi).)
passo 3 Para i=1,...,n-1 execute Passos 4 e 5
passo 4 Faça X = a +ih
passo 5 faça Xi1 = Xi1+f(x)
passo 6 Faça Xi =h(Xi0+2*Xi1)/2.
passo 7 Saída (Xi);
Pare.
passo 5 faça Xi1 = Xi1+f(x)
passo 6 Faça Xi =h(Xi0+2*Xi1)/2.
passo 7 Saída (Xi);
Pare.
Programa
!Universidade Estadual do Ceará
!Curso de Física
!Computação Aplicada a Física I
!Prof. Dr. Carlos Santana
!Programa baseado no algoritmo do livro Análise Numerica - Richad l. Burden e J. Douglas Faires integral !regra dos trapézios
program trapezios_composta
real a,b,h,x,xi,xi1,xi0
integer n
print*,'entre com o valor das extremidades'
read*,a,b
print*,'entre com um numero par de subintervalos'
read*,n
h=(b-a)/float(n)
xi0=f(a)+f(b)
xi1=0
xi2=0
do i=1,n-1
x=a+real(i)*h
if(mod(i,2)==0)then
xi2=xi2+f(x)
else
xi1=xi1+f(x)
endif
xi=h*(xi0+2.*xi2+4.*xi1)/3.
enddo
write(*,10)xi,i
10 format(2x,'xi=',f20.15,2x,' n =',i5.0)
stop
end
real function f(x)
f=exp(x)
end
_______________________________________________________________
MÉTODO DE INTEGRAL DE SIMPSON 1/3
Algoritmo
ENTRADA: extremidades a, b; inteiro positivo par n
SAÍDA: aproximadamente Xi para i
passo 1 faça h= (b-a)/h
passo 2 faça Xi0=f(a)+f(b);
Xi1=0;(Somatório de f(x2i-1).)
Xi2=0;(Somatório de f(x2i).)
passo 3 Para i=1,...,n-1 execute Passos 4 e 5
passo 4 Faça X = a +ih
passo 5 Se i for par, então faça Xi2 = Xi2+f(x)
senão faça Xi1=Xi1+f(x)
passo 6 Faça Xi =h(Xi0+2*Xi2+4*Xi1)/3.
passo 7 Saída (Xi);
Pare.
passo 5 Se i for par, então faça Xi2 = Xi2+f(x)
senão faça Xi1=Xi1+f(x)
passo 6 Faça Xi =h(Xi0+2*Xi2+4*Xi1)/3.
passo 7 Saída (Xi);
Pare.
Programa
!Universidade Estadual do Ceará
!Curso de Física
!Computação Aplicada a Física I
!Prof. Dr. Carlos Santana
!Programa baseado no algoritmo do livro Análise Numerica - Richad l. Burden e J. Douglas Faires integral !de Simpson 1/3
program simpson_composta
real a,b,h,x,xi,xi1,xi2,xi0
integer n
print*,'entre com o valor das extremidades'
read*,a,b
5 print*,'entre com um numero par de subintervalos'
read*,n
if(n< 2. .or. mod(n,2)/=0)then
print*,'numero de divisorias deve ser par'
print*,' tente novamente '
print*
goto 5
endif
h=(b-a)/float(n)
xi0=f(a)+f(b)
xi1=0
xi2=0
do i=1,n-1
x=a+real(i)*h
if(mod(i,2)==0)then
xi2=xi2+f(x)
else
xi1=xi1+f(x)
endif
xi=h*(xi0+2.*xi2+4.*xi1)/3.
enddo
write(*,10)xi,i
10 format(2x,'xi=',f20.15,2x,' n =',i5.0)
stop
end
real function f(x)
f=exp(x)
end
Nenhum comentário:
Postar um comentário