Professional Documents
Culture Documents
******************************************************
! Funcao teorica.
!******************************************************
Do i=0,ord
Pol=Pol+coef(i)*x**i
End Do
End Function
!******************************************************
! Aplicacao do metodo dos minimos quadrados.
!******************************************************
m(i,k)=somx(j)
k=k+1
End Do
End Do
!construcao da matriz b.
Do i=1,ord+1
b(i)=somxy(i-1)
End Do
End Subroutine
!****************************************************
! Transformacao da matriz m em matriz LU
!****************************************************
!transformacao LUD
Do j=1,n-1
Maior=M(j,j); iM=j
Do i=j+1,n
If(ABS(M(i,j)) > ABS(Maior))then
Maior=M(i,j)
iM=i
End If
If(ABS(Maior) < 1.0E-05)Then
Write(*,*)'Matriz mal&
& condicionada, pode conduzir a solucao de reduzido&
& significado!'
Return
End If
End Do
Do k=1, n
Mx=M(iM,k)
M(iM,k)=M(j,k)
M(j,k)=Mx
End Do
!Registo das trocas de linhas
trocax=trocas(iM)
trocas(iM)=trocas(j)
trocas(j)=trocax
End If
!********************************************************
! Resolucao do sistema de matrizes
!********************************************************
Subroutine Solve(M,n,mmax,trocas,B)
Real:: M(mmax,n), B(n), T(10), soma
Integer:: n, mmax,trocas(n),i,j
!******************************************************************
! Programa principal
!******************************************************************
Program main
Implicit None
Real::x(50),y(50),xnt,ymx,ytx,Sr(50),Srtot,Erro_padrao,&
&somy2,Coef_corr
Real::Pol,m(10,10),somx(0:20),somxy(0:10),b(11),coef(0:10),&
&dif(0:10),difmed
Integer::i,j,n,nmax,ord,trocas(10) ,p ,q
Character::opcao,opcao2, detval, calc
Integer,Parameter::mmax=10
!menu inicial
3 Write(*,100)
pause
!menu principal
100 FORMAT (5(/),T10,65('#')/T10,'#',T34,'MENU PRINCIPAL',T74,'#'/T10,&
&65('#')/T10,'#',T74,'#'/T10,'#',T74,'#'/T10,'#',T14,'Prima:'&
&,T34,'Para:',T74,'#'/T10,'#',T14,6('-'),T34,29('-'),T74,'#'/T10,&
&'#',T16,'1',T34,'Iniciar o Programa',T74,'#'/T10,'#',T74,'#'/&
&T10,'#',T16,'0',T34,'O que faz este
Programa?',T74,'#'/T10,'#',T74,&
&'#'/T10,'#',T16,'9',T34,'Sair do programa',T74,'#'/T10,'#',T74,&
&'#'/T10,'#',T74,'#'/T10,65('#'),4(/))
read(*,*)p
if(p==1)then
goto 1
else if(p==0)then
goto 2
else if(p==9)then
goto 50
else
goto 4
end if
2
Write(*,*)'**************************************************************
*****************'
Write(*,*)'* Bem vindo! Este programa realiza uma&
& comparacao entre os ** valores dos coeficintes de uma equacao&
& teorica e os valores dos mesmos ** coeficientes obtidos pelo&
& metodo dos minimos quadrados a partir de um ** conjunto de pontos&
& experimentais.Permite ainda o calculo dos valores da ** funcao&
& para pontos desconhecidos, quer por via teorica quer pelo&
& polinomio ** resultante da regressao polinomial! *'
Write(*,*)'**************************************************************
*****************'
pause
goto 3
Read(*,*)opcao
!le os dados, n de pontos e valores de x e y, do ficheiro
If(opcao=='f')Then
Open(15,File='dados.txt',Status='unknown')
Read(15,*)nmax,ord
Do i=1,nmax
Read(15,*)x(i),y(i)
End Do
Read(15,*)(coef(i),i=0,ord)
Else
!le dados do ecran
10 Write(*,1000)' Quantos pontos possui?'
Read(*,*)nmax
If(nmax <= 0 .or. nmax >50)Then
Write(*,1000)' O valor e invalido!'
Goto 10
End If
Write(*,1000)' Introduza os os valores de x dos pontos!'
Read(*,*)(x(i),i=1,nmax)
Write(*,1000)' Introduza os valores de y correspondentes!'
Read(*,*)(y(i),i=1,nmax)
20 Write(*,*)' Qual o grau do polinomio que deseja calcular&
&(devera ser do mesmo grau que a eq. teorica)?'
Read(*,*)ord
If(ord < 0 .or. ord > 9)Then
Write(*,*)' O valor e invalido!'
Goto 20
End If
End If
1000 Format(T5,/,a)
End If
!Quantificacao de erros
Do i=1,nmax
Sr(i)=0.0
Do j=0,ord
Sr=Sr+b(j)*x(i)**j
End Do
Sr(i)=(Sr(i)-y(i))**2
End Do
Srtot=0.0
Do i=1,nmax
Srtot=Srtot+Sr(i)
End Do
!erro de selecao
4 write(*,101)
Write(*,102)
!menu continuar a utilizacao do programa
102 FORMAT (7(/),T10,65('#')/T10,'#',T24,'DESEJA CONTINUAR A UTILIZAR O
&
&PROGRAMA',T74,'#'/T10,65('#')/T10,'#',T74,'#'/T10,'#',T74,'#'/&
&T10,'#',T14,'Prima:',T27,'Para:',T74,'#'/T10,'#',T14,6('-'),T27,&
&39('-'),T74,'#'/T10,'#',T16,'S',T27,'Volta ao inicio e continua &
&a utilizar',T74,'#'/T10,'#',T74,'#'/T10,'#',T16,'N',T27,'Termina&
& a utilizacao e sai do programa',T74,'#'/T10,'#',T74,'#'/T10,'#'&
&,T74,'#'/T10,65('#'),7(/))
pause
read(*,*)q
if(q==3)then
Goto 3
else if(q==9)then
goto 50
else
goto 4
end if
50 Write(*,105)
105 format(T15,' Obrigado por utilizar este programa!',/,/,/,T25,'Antonio Rodrigues -
2002' ,/,/)
pause
End Program