Sie sind auf Seite 1von 3

Program minimos_cuad

!Declaracion de variables
Implicit none
Real, dimension(100)::x,y,yn
Real::a,b,c,h,f,f1,h1,sumax,sumay,sumaxy,sumax2,sumax2y,sumax3,sumax4
Integer::i,n,opc
!Lectura
Write(*,*) 'Programa para obtener puntos mediante minimos cuadrados'
Write(*,*) 'Cuantos puntos son en total'
Read(*,*) n
Write(*,*) 'Ingresa los valores de X'
Do i=1,n
Read(*,*) x(i)
End do
Write(*,*) 'Ingresa los valores de Y'
Do i=1,n
Read(*,*) y(i)
End do
Write(*,*) 'Que tipo de ecuacion es, elige una opcion'
Write(*,*) 'Recta: y=a+bx...(1)'
Write(*,*) 'Parabola: y=a+bx+cx^2...(2)'
Write(*,*) 'Exponencial: y=ae^(bx)...(3)'
Write(*,*) 'y=ax^b...(4)'
Write(*,*) 'y=a+(b/x)...(5)'
Read(*,*) opc
Select case(opc)
case(1)
Write(*,*) 'Minimos cuadrados para y=a+bx'
!Calculos para una recta
sumax=0
sumay=0
sumaxy=0
sumax2=0
Do i=1,n
sumax=sumax+x(i)
sumay=sumay+y(i)
sumaxy=sumaxy+x(i)*y(i)
sumax2=sumax2+x(i)**2
End do
a=((sumay*sumax2)-(sumax*sumaxy))/((n*sumax2)-(sumax**2))
b=((n*sumaxy)-(sumax*sumay))/((n*sumax2)-(sumax**2))
Write(*,*) ''
Write(*,*) 'El valor de a es igual a', a
Write(*,*) 'El valor de b es igual a', b
Write(*,*) ''
Write(*,*) 'Nuevos valores de Y'
Do i=1,n
yn(i)=a+b*x(i)
Write(*,*) yn(i)
End do
Case(2)
Write(*,*) 'Minimos cuadrados para y=a+bx+cx^2'
!Calculos para una parabola
sumax=0
sumay=0
sumaxy=0
sumax2=0
sumax2y=0
sumax3=0
sumax4=0

Do i=1,n
sumax=sumax+x(i)
sumay=sumay+y(i)
sumaxy=sumaxy+x(i)*y(i)
sumax2y=sumax2y+(x(i)**2)*y(i)
sumax2=sumax2+x(i)**2
sumax3=sumax3+x(i)**3
sumax4=sumax4+x(i)**4
End do
f= (sumaxy -((sumax*sumay)/n))*(sumax4-((sumax2**2)/n))-(sumax2y -((sumax2*sum
ay)/n))*(sumax3-((sumax2*sumax)/n))
h= (sumax2-((sumax**2)/n))*(sumax4-((sumax2**2)/n))-((sumax3 -((sumax2*sumax)/
n))**2)
b= f/h
f1= (sumax2-((sumax**2)/n)) *(sumax2y -((sumax2*sumay)/n))-(sumax3 -((sumax2*s
umax)/n))*(sumaxy-((sumax*sumay)/n))
h1=(sumax2-((sumax**2)/n))*(sumax4-((sumax2**2)/n))-((sumax3-((sumax2*sumax)/n
))**2)
c= f1/h1
a= (sumay-b*sumax-c*sumax2)/n
Write(*,*) ''
Write(*,*) 'El valor de a es igual a', a
Write(*,*) 'El valor de b es igual a', b
Write(*,*) 'El valor de c es igual a', c
Write(*,*) ''
Write(*,*) 'Nuevos valores de Y'
Do i=1,n
yn(i)=a+b*x(i)+c*x(i)**2
Write(*,*) yn(i)
End do
Case (3)
Write(*,*) 'Minimos cuadrados para y=ae^(bx)'
!Calculos para y=ae^(bx)
sumax=0
sumay=0
sumaxy=0
sumax2=0
Do i=1,n
sumax=sumax+x(i)
sumay=sumay+log(y(i))
sumaxy=sumaxy+x(i)*log(y(i))
sumax2=sumax2+x(i)**2
End do
a=((sumay*sumax2)-(sumax*sumaxy))/((n*sumax2)-(sumax**2))
a=exp(a)
b=((n*sumaxy)-(sumax*sumay))/((n*sumax2)-(sumax**2))
Write(*,*) ''
Write(*,*) 'El valor de a es igual a', a
Write(*,*) 'El valor de b es igual a', b
Write(*,*) ''
Write(*,*) 'Nuevos valores de Y'
Do i=1,n
yn(i)=a*exp(b*x(i))
Write(*,*) yn(i)
End do
Case (4)
Write(*,*) 'Minimos cuadrados para y=ax^b'
!Calculos para y=ax^b
sumax=0
sumay=0

sumaxy=0
sumax2=0
Do i=1,n
sumax=sumax+log(x(i))
sumay=sumay+log(y(i))
sumaxy=sumaxy+log(x(i))*log(y(i))
sumax2=sumax2+log(x(i))**2
End do
a=((sumay*sumax2)-(sumax*sumaxy))/((n*sumax2)-(sumax**2))
a=exp(a)
b=((n*sumaxy)-(sumax*sumay))/((n*sumax2)-(sumax**2))
Write(*,*) ''
Write(*,*) 'El valor de a es igual a', a
Write(*,*) 'El valor de b es igual a', b
Write(*,*) ''
Write(*,*) 'Nuevos valores de Y'
Do i=1,n
yn(i)=a*x(i)**(b)
Write(*,*) yn(i)
End do
Case (5)
Write(*,*) 'Minimos cuadrados para y=a+(b/x)'
!Calculos para y=a+(b/x)
sumax=0
sumay=0
sumaxy=0
sumax2=0
Do i=1,n
sumax=sumax+(1/(x(i)))
sumay=sumay+y(i)
sumaxy=sumaxy+(1/(x(i)))*y(i)
sumax2=sumax2+(1/(x(i)))**2
End do
a=((sumay*sumax2)-(sumax*sumaxy))/((n*sumax2)-(sumax**2))
b=((n*sumaxy)-(sumax*sumay))/((n*sumax2)-(sumax**2))
Write(*,*) ''
Write(*,*) 'El valor de a es igual a', a
Write(*,*) 'El valor de b es igual a', b
Write(*,*) ''
Write(*,*) 'Nuevos valores de Y'
Do i=1,n
yn(i)=a+(b/(x(i)))
Write(*,*) yn(i)
End do
Case default
Write(*,*) 'Elige una opcion correcta'
End select
End program minimos_cuad

Das könnte Ihnen auch gefallen