Покопавшись в мануале и интернете, я так и не смог найти в Julia встроенной функции численного дифференцирования. Можно, конечно, для этой цели загрузить какой-либо специализированный пакет, коих предостаточно, но я решил написать соответствующую функцию самостоятельно. За одно, продемонстрирую использование управляющих конструкций и работу с файлами.
Итак, воспользуюсь всё тем же методом работы с интерполяционным многочленом Ньютона, ограничиваясь 3-мя первыми членами. Такой подход я уже реализовывал год назад, когда писал про Freemat. Что ж, времена меняются, а проверенные методы остаются)
Итак, воспользуюсь всё тем же методом работы с интерполяционным многочленом Ньютона, ограничиваясь 3-мя первыми членами. Такой подход я уже реализовывал год назад, когда писал про Freemat. Что ж, времена меняются, а проверенные методы остаются)
Вот описание функции, которое я сохранил с именем deriv.jl. Возможно, с точки зрения Julia этот код не слишком изящен, но он вполне работоспособен и даёт погрешность не хуже 0(h^3) (к сожалению, формулы остаточного члена я не нашёл, оценивал "на глаз"). В качестве аргументов defive() передаются имя функции, точка, в которой ищется значение и, при желании, шаг. Внутри самой функции рассчитываются с заданным шагом 4 точки, для них определяются конечные разности до 3-его порядка включительно, из которых и получается искомая производная.
Для загрузки файла используется функция include("файл.jl"). Как видно, полученное значение производной синуса в точке 0 отличается от единицы только в 9-м знаке.
С интегрированием всё гораздо проще, т.к. имеется встроенная функция quadgk(функция, начало, конец). На самом деле число её аргументов больше, полное описание можно получить, если ввести команду help(quadgk), но в основном, будет достаточно этого выражения. Функция возвращает 2 числа: значение интеграла и величину погрешности.
Комментариев нет:
Отправить комментарий