ferry2
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте. Напишите программу, в которой я хочу реализовать функцию, которая получается производной численно разностным методом. Вот код функции: Код: function YDerivative(x, b, a, n) result(y_deriv) implicit none integer :: i integer, intent(in) :: n double precision, dimension(n + 2) :: x double precision :: b, a double precision, dimension(n) :: y_deriv double precision, dimension(n + 2) :: exact_sol double precision :: h h = Step(n, a, b) x(1) = a exact_sol(1) = ExactSolution(x(1)) do i = 2, n - 1 !x(i) = a + (i - 1)*h exact_sol(i) = ExactSolution(x(i)) end do x(n) = b exact_sol(n) = ExactSolution(x(n)) x(n + 1) = a + n*h exact_sol(n + 1) = ExactSolution(x(n + 1)) x(n + 2) = a + (n + 1)*h exact_sol(n + 2) = ExactSolution(x(n + 2)) do i = 1, n y_deriv(i) = (-3.0d0*ExactSolution(x(i)) + 4.0d0*ExactSolution(x(i + 1)) - ExactSolution(x(i + 2))) / 2.0d0*h end do end function YDerivative | Step это функция, которая вычисляет шаги, ExactSolution это функция, которая содержит правильное решение - это функции, которые выглядят производной. Вот их код: Код: function Step(n, a, b) result(h) implicit none integer, intent(in) :: n double precision, intent(in) :: b, a double precision :: h h = (b - a) / (n - 1.0d0) end function Step function ExactSolution(x) result(exact_sol) implicit none double precision, intent(in) :: x double precision :: exact_sol exact_sol = dsin(x) end function ExactSolution | Только то, что есть что-то не так с функцией, которая вычисляет производную - YDerivative. Я получаю неправильные результаты. Почему? | Всего записей: 2 | Зарегистр. 08-01-2012 | Отправлено: 21:27 08-01-2012 | Исправлено: ferry2, 21:29 08-01-2012 |
|