|
Программирование символьных операций
Реализация итераций Ньютона в символьном виде
Найти достаточно простую и наглядную
задачу, решение которой отсутствует в системе Maple 7, не очень просто. Поэтому
для демонстрации решения задачи с применением аналитических методов воспользуемся
примером, ставшим классическим, — реализуем итерационный метод Ньютона при решении
нелинейного уравнения вида f(x) - 0.
Как известно, метод Ньютона сводится
к итерационным вычислениям по следующей формуле:
xi+1=x1+f(x1)/f'(x1);
Реализующая его процедура выглядит
довольно просто:
Для получения итерационной формулы
в аналитическом виде здесь используется функция unapply.
Теперь, если задать решаемое уравнение, то можно получить искомое аналитическое
выражение:
Далее, задав начальное приближение
для х в виде х = х0, можно получить результаты вычислений для ряда
итераций:
Нетрудно заметить, что, испытав
скачок в начале решения, значениях довольно быстро сходятся к конечному результату,
дающему корень заданной функции. Последние три итерации дают одно и то же значение
х. Заметим, что этот метод дает только одно решение, даже если корней несколько.
Вычислить другие корни в таком случае можно, изменив начальное условие.
Можно попробовать с помощью полученной
процедуры получить решение и для другой функции:
Здесь итерационная формула имеет
(и вполне естественно) уже другой вид, но сходимость к корню также обеспечивается
за несколько итераций. ;
Возможна и иная форма задания итерационной
процедуры с применением оператора дифференцирования D и заданием исходной функции
также в виде процедуры:
Вообще говоря, в программных процедурах
можно использовать любые операторы и функции, присущие Maple-языку, в том числе
и те, которые реализуют символьные вычисления. Это открывает широкий простор
для разработки новых процедур и функций, обеспечивающих выполнение символьных
операций.
|