06/02/04 01:35:39
>>94
PROGRAM vip
IMPLICIT NONE
INTEGER, PARAMETER :: n = 5
REAL, PARAMETER :: x0(n) = (/0.1 , 0.2 , 0.3 , 0.4 , 0.5 /), &
y0(n) = (/1.228, 1.005, 0.823, 0.674, 0.552/)
REAL :: y(n), t(n, 2), z(2, 2), zinv(2, 2), v(2)
INTEGER :: i
y = LOG(y0)
t(:, 1) = 1.0
t(:, 2) = x0
z = MATMUL(TRANSPOSE(t), t)
v = MATMUL(TRANSPOSE(t), y)
zinv = ainverse(z)
v = MATMUL(zinv, v)
WRITE(*, *) ' least square fit a=', EXP(v(1)), ' b=', v(2)
STOP
CONTAINS
FUNCTION ainverse(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x(2, 2)
REAL :: ainverse(2, 2)
REAL :: determinant
determinant = x(1, 1) * x(2, 2) - x(1, 2) * x(2, 1)
IF (ABS(determinant) < 1.0e-7) STOP ' singular matrix '
ainverse(1, 1) = x(2, 2) / determinant
ainverse(2, 2) = x(1, 1) / determinant
ainverse(1, 2) = -x(1, 2) / determinant
ainverse(2, 1) = -x(2, 1) / determinant
RETURN
END FUNCTION ainverse
END PROGRAM vip