Ασκηση3
!den prolava na midenisw tous paragegous
PROGRAM ask3
IMPLICIT NONE
DOUBLE PRECISION,ALLOCATABLE:: c(:,:),a(:),x(:),y(:),res(:)
DOUBLE PRECISION :: V
INTEGER,ALLOCATABLE:: tx(:)
INTEGER:: n=2.8,nn=10
INTEGER:: i,j,status
DOUBLE PRECISION:: sx,sx2,sx3,sx4,sy,sxy,sx2y,a0,a1,a2,xx(1),yy(1)
INTERFACE
SUBROUTINE TRIANG(A, B)
IMPLICIT NONE
DOUBLE PRECISION, INTENT (inout) :: A(:,:), B(:)
END SUBROUTINE TRIANG
SUBROUTINE BACKSU(A, B, X)
IMPLICIT NONE
DOUBLE PRECISION, INTENT (in) :: A(:,:), B(:)
DOUBLE PRECISION, INTENT (out) :: X(:)
END SUBROUTINE BACKSU
SUBROUTINE PRINT_MATRIX(A)
IMPLICIT NONE
DOUBLE PRECISION, INTENT (in) :: A(:,:)
END SUBROUTINE PRINT_MATRIX
END INTERFACE
ALLOCATE(c(n,n+1),a(n),x(nn),y(nn),res(n))
! pinakas r
x=[2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.2,4.4,4.6]
! pinakas V
y=[1.403,-1.188,-2.470,-2.633,-2.560,-2.304,-1.988,-1.668,-1.374,-1.117]
! Edw dinoume diafora simeia pou zitame ti timi tis V.
xx=[0.0]
sx=0
sx2=0
sx3=0
sx4=0
sy=0
sxy=0
sx2y=0
DO i=1,10
sx=sx+x(i)
sx2=sx2+x(i)**2
sx3=sx3+x(i)**3
sx4=sx4+x(i)**4
sy=sy+y(i)
sxy=sxy+x(i)*y(i)
sx2y=sx2y+(x(i)**2)*y(i)
END DO
c(1,1)=nn
c(1,2)=sx
c(1,3)=sx2
c(2,:)=[sx,sx2,sx3]
c(3,:)=[sx2,sx3,sx4]
a(1)=sy
a(2)=sxy
a(3)=sx2y
CALL TRIANG(C, A)
CALL BACKSU(C, A, RES)
V = RES(1) / x^12 - RES(2) / x^6
print*
print*," Oi suntelestes tou poluwnumou"
print*, "a=",RES(1),"b=",RES(2)
print *, V
print*
!Ypologismos tou poluwnumou sta zitoumena simeia
DO i=1,1
yy(i)=RES(1)+RES(2)*xx(i)+RES(3)*xx(i)**2
END DO
END PROGRAM ask3
SUBROUTINE TRIANG(A, B)
IMPLICIT NONE
DOUBLE PRECISION, INTENT (inout) :: A(:,:), B(:)
INTEGER :: N, I, K
DOUBLE PRECISION :: G
N = SIZE(B)
DO K=1, N-1
DO I=K+1, N
G = -A(I,K) / A(K,K)
A(I,K:N) = A(I,K:N) + A(K,K:N) * G
B(I) = B(I) + B(K) * G
ENDDO
ENDDO
END SUBROUTINE TRIANG
SUBROUTINE BACKSU(A, B, X)
IMPLICIT NONE
DOUBLE PRECISION, INTENT (in) :: A(:,:), B(:)
DOUBLE PRECISION, INTENT (out) :: X(:)
INTEGER :: I, N
N = SIZE(B)
DO I = N,1,-1
X(I) = (B(I) - DOT_PRODUCT(A(I,I+1:N), X(I+1:N)) ) / A(I,I)
ENDDO
END SUBROUTINE BACKSU