Реализация численных методов в MathCAD 7.0 PRO
Серьезные пользователи, работающие с математическими системами, зачастую бывают недовольны отсутствием информации о реализованных в таких системах численных методах. Связано это с тем, что нередко от этих методов зависит успех решения особых задач, с которыми может столкнуться каждый пользователь. Поэтому немного остановимся на сути численных методов, реализованных в системе MathCAD 7.0 PRO.
Прежде всего отметим, что выражения 0*x, 0/х и 0/0 система вычисляет как 0. Точнее говоря, встречая 0 в числителе любого выражения, она не вычисляет это выражение, а просто полагает его значение равным 0. При реализации численных методов MathCAD дает точными 15 десятичных цифр для результатов вычислений, но при выводе задает число знаков в соответствии с выбранным форматом чисел.
Определенные интегралы система вычисляет методом Ромберга. Этот метод широко описан в нашей литературе (см., например). Поэтому, не описывая его подробно, отметим лишь, что он является вариантом метода трапеций с делением на два интервала интегрирования с итерационным уточнением решения до достижения заданной точности (она определяется значением системной переменной TOL).
Если за заданное число итераций точность не достигнута, используется более точный метод Ромберга с открытыми концами. При нем число интервалов утраивается на каждом шаге интегрирования. Этот метод увеличивает число шагов интегрирования там, где подынтегральная функция меняется более резко (например, если она имеет разрыв).
К достоинствам метода можно отнести то, что он делает все возможное, чтобы вычислить интеграл даже при сложной функции. Но для простых функций это ведет к увеличению времени вычислений. При наличии у подынтегральной функции особенностей время вычисления может резко возрастать из-за перехода от одной реализации метода Ромберга к другой. Поэтому нередко бывает оправданным применение достаточно точных формул интегрирования, например формул Ньютона – Котесса с легко предсказуемыми узлами, которые можно выбрать вдали от особых точек подынтегральной функции. Примеры такого подхода даны в Главе 14.
Для вычисления производных порядка от 0 до 5 система использует метод Риддера. Подробности о нем можно найти в соответствующей литературе. Главное то, что метод вычисляет первую производную с погрешностью до 7-8 верных цифр результата, а с повышением производной на порядок число верных цифр уменьшается на единицу. Метод Риддера – итерационный (на каждой итерации шаг дифференцирования уменьшается), но число итераций ограничено. Если при реализации этого метода указанная точность не достигается, MathCAD сообщает об отсутствии сходимости.
При решении систем уравнений и неравенств используется итерационный метод Левенберга – Маркардта, содержащийся в известном и свободно распространяемом пакете алгоритмов численных методов MINPACK. Этот метод пытается найти нули или минимум среднеквадратичной погрешности при решении заданной системы уравнений или системы неравенств. При решении с применением аппарата комплексных чисел раздельно решаются действительная и мнимая части уравнений.
При решении вычисляется также вектор невязки. Если его величина меньше TOL, система возвращает вектор переменных-неизвестных. Если для решения используется функция find, при величине вектора невязки больше TOL система сообщает, что решение не найдено. Когда используется функция minerr, вектор неизвестных возвращается даже в том случае, когда значение вектора невязки больше TOL. Наконец, если не обнаружено схождение за заданное число итераций, выдается сообщение об отсутствии сходимости (как при применении функции find, так и minerr). В любых случаях величина вектора невязки определяется значением переменной ERR.
Для вычисления определителей матрицы и ее инвертирования используется LU-разложение. При этом матрица М разлагается в произведение нижней треугольной матрицы L и верхней U (т. е. M=L-U). Такой метод хорошо известен. В частности, он позволяет:
- вычислить определитель исходной матрицы как произведение диагональных элементов матриц L и U;
- вычислить обратную матрицу из решения матричного уравнения M*Vj=ej, где е – вектор с единицей на j-м месте и нулями в остальных позициях, V– вектор решения, который образует столбцы обратной матрицы для каждого j;