Возможна ли разработка приложения на Octave с GUI? |
Интегрирование и дифференцирование
8.3.3 Интегрирование по квадратурным формулам Гаусса
Запишем в общем виде квадратурную формулу для функции заданной на промежутке [-1; 1]
Попытаемся найти коэффициенты и узловые точки , таким образом, чтобы квадратурная формула была точной для всех полиномов
В этом случае построение квадратурной формулы приводит к определению и из нелинейной системы уравнений:
Решение нелинейной системы задача не тривиальная, но её можно обойти, если знать, что значениями квадратурной формулы служат корни многочлена Лежандра
Как известно, корни полинома Лежандра существуют при любом , различны и принадлежат интервалу [-1; 1].
Итак, квадратурной формулой Гаусса называют выражение
где — корни полинома Лежандра, а определяется интегрирова-нием базисных многочленов Лежандра степени :
В Octave интегрирование по квадратуре Гаусса выполняет функция , где: — имя функции, задающей подынтегральное выражение; — пределы интегрирования; — точность вычислений; — вектор значений, близких к тем, в которых подынтегральная функция терпит разрыв; — значение интеграла; — код ошибки в решении (0 — решение завершено успешно); — количество итераций; — погрешность вычислений.
Пример 8.14. Вычислить интеграл
Обратите внимание, что в нижней границе интегрирования подынтегральная функция терпит разрыв. Решение примера с применением функции приведено в листинге 8.16.
clear all; function y=f(x) y=(x.^2).-sqrt(3+sin(1./x)); end; >>> format long >>> [F, kod, K, err]=quad(’f’, 0, 1) F = 0.654343719149802 kod = 0 K = 1323 err = 1.37557012147481 e-08 >>> [F, kod, K, err]=quad(’f’, 0, 1, 1.0 e-05) F = 0.654343738854992 kod = 0 K = 315 err = 3.82733563379833 e -06 >>> [F, kod, K, err]=quad(’f’, 0, 1, 1.0 e-20) F = 0.654343718970708 kod = 0 K = 1491 err = 9.39557628735834 e-09 >>> [F, kod, K, err]=quad(’f’, 0, 1, 1.0 e-20,0.1) F = 0.654343710193938 kod = 0 K = 840 err = 5.80259740257105 e-09 >>> [F, kod, K, err]=quad(’f’, 0, 1, 1.0 e- 20,0.001) F = 0.654343718720156 kod = 0 K = 1596 err = 8.35248716562893 e-09Листинг 8.16. Вычисление интеграла через quad (пример 8.14).
Функции
и , где: — имя функции, задающей подынтегральное выражение; — пределы интегрирования; — точность вычислений; — таблица промежуточных вычислений; — значение интеграла; — погрешность вычислений; также выполняют интегрирование по квадратуре Гаусса. В этих функциях специальным образом подбирается шаг. В первом случае по методу Гаусса-Лобатто, во втором Гаусса-Конрада.
Пример 8.15. Вычислить интеграл
Решение примера с применением функций и приведено в листинге 8.17.
function y=f(x) y = tan(x).^4; end; >>> format long >>> [F]= quadl (’f’,-pi/3, pi/3, 1.0 e-05) F = 2.09439512983937 >>> [F, err]=quadgk(’f’, -pi/3, pi/3, 1.0 e-05) F = 2.09439510239319 err = 1.02555919485880 e-12Листинг 8.17. Вычисление интеграла через quadl и quadgk (пр. 8.15).