ferry2
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет всем.Следующая подпрограмма Код: subroutine Tridiagonal_Solv(n, a, b, alpha, beta, x, y, y_deriv, error) implicit none integer n integer i double precision a, b, alpha, beta double precision h double precision s(n), t(n) double precision down(n), main(n), up(n) !double precision exact_sol(n) double precision r(n) double precision x(n) double precision y(n), y_deriv(n) double precision error common /DIM/ D(1) integer D common /PAR/P(4) double precision P n = D(1) a = P(1) b = P(2) alpha = P(3) beta = P(4) h = Step(n, a, b) x(1) = a r(1) = alpha do i = 2, n - 1 x(i) = a + (i - 1)*h r(i) = 2.0d0*dsin(x(i)) end do r(n) = beta x(n) = b do i = 2, n - 1 down(i) = -1.0d0/(h*h) end do down(n) = 2.0d0/h main(1) = -3.0d0/(2.0d0*h) do i = 2, n - 1 main(i) = (2.0d0/(h*h)) + 1.0d0 end do main(n) = 3.0d0/(2.0d0*h) up(1) = 2.0d0/h do i = 2, n - 1 up(i) = -1.0d0/(h*h) end do s(1) = -(main(1)*up(2) - main(2)*up(1))/(down(1)*up(2) - down(2)*up(1)) t(1) = (up(2)*r(1) - up(1)*r(2))/(down(1)*up(2) - down(2)*up(1)) s(2) = -(up(1)*down(2) - up(2)*down(1))/(main(1)*down(2) - main(2)*down(1)) t(2) = (down(2)*r(1) - down(1)*r(2))/(main(1)*down(2) - main(2)*down(1)) do i = 3, n - 2 s(i) = -up(i)/(main(i) + down(i)*s(i - 1)) t(i) = (r(i) - down(i)*t(i - 1))/(main(i) + down(i)*s(i - 1)) end do y(n) = ((r(n - 1) - t(n - 2)*down(n - 1))*(s(n - 2)*down(n) + main(n)) - (r(n) - t(n - 2)*down(n))*(s(n - 2)*down(n - 1) + main(n - 1)))/(up(n - 1)*(down(n)*s(n - 2) + main(n)) - up(n)*(down(n - 1)*s(n - 2) + main(n - 1))) y(n - 1) = (r(n)*up(n - 1) - t(n - 2)*down(n)*up(n - 1) - r(n - 1)*up(n) + t(n - 2)*down(n - 1)*up(n))/(s(n - 2)*down(n)*up(n - 1) + main(n)*up(n - 1) - s(n - 2)*down(n - 1)*up(n) - main(n - 1)*up(n)) do i = n - 2, 3, -1 y(i) = s(i)*y(i + 1) + t(i) end do y(2) = s(2)*y(3) + t(2) y(1) = s(1)*y(2) + t(1) y'(x(i)) = [-3*y(x(i)) + 4*y(x(i)) - y(x(i))]/2*h y_deriv(1) = (-3.0d0*y(1) + 4.0d0*y(2) - y(3))/2.0d0*h y'(x(i)) = [y(x(i)) - y(x(i - 1))]/2*h do i = 2, n - 1 y_deriv(i) = (y(i) - y(i - 1))/h end do y'(x(n)) = [y(x(n - 2)) - 4*y(x(n - 1)) + 3*y(x(n))]2*h y_deriv(n) = (y(n - 2) - 4*y(n - 1) + 3*y(n))/2.0d0*h do i = 2, n - 1 error = -(y(i - 1) - 2*y(i) + y(i + 1))/h**2 + y(i) - 2*dsin(x(i)) end do end subroutine Tridiagonal_Solv | я получаю сообщение об ошибке: Program Exception - array bounds exceeded порядка Код:. Для проверки с отладчиком я вижу, что величина (п), которые используют измерение массива правильно читать и по-прежнему получаю сообщение об ошибке. Почему? |