Численные методы и программирование с Maxima
4.3 Встроенные численные методы
4.3.1 Численные методы решения уравнений
4.3.1.1 Решение уравнений с одним неизвестным
Для решения уравнения с одним неизвестным в пакете Maxima предусмотрена функция . Синтаксис вызова:
Поиск корня функции или выражения expr относительно переменной x осуществляется в пределах
.
Для поиска корней используется метод деления пополам или, если исследуемая функция достаточно гладкая, метод линейной интерполяции.
4.3.2 Решение уравнений методом Ньютона: пакет newton1
Основная функция пакета newton1 предназначена для решения уравнений методом Ньютона.
Синтаксис вызова:
Данная функция возвращает приближенное решение уравнения методом Ньютона, рассматривая
как функцию одной переменной
. Поиск начинается с
и производится, пока не будет достигнуто условие
. Функция
допускает наличие неопределенных переменных в выражении
, при этом выполнение условия
, оценивается как истинное или ложное. Таким образом, нет необходимости оценивать
только как число.
Для использования пакета необходимо загрузить его командой load(newton1).
Примеры использования функции :
(%i1) load (newton1);

(%i2) newton (cos (u), u, 1, 1/100);

(%i3) ev (cos (u), u = %);

(%i4) assume (a > 0);
![(\%o4)\ [a>0]](/sites/default/files/tex_cache/11bd2cfd17bd1fb6c7e79248ecb6804c.png)
(%i5) newton (x^2 - a^2, x, a/2, a^2/100);

(%i6) ev (x^2 - a^2, x = %);

4.3.2.1 Решение уравнений с несколькими неизвестными: пакет mnewton
Мощная функция для решения систем нелинейных уравнений методом Ньютона входит в состав пакета mnewton. Перед использованием пакет необходимо загрузить:
(%i1) load("mnewton");

После загрузки пакета mnewton становятся доступными основная функция — и ряд дополнительных переменных для управления ею:
(точность поиска, величина по умолчанию
),
(максимальное число итераций, величина по умолчанию 50).
Синтаксис вызова: , где
— список функций, образующих решаемую систему уравнений,
— список имен переменной, и
— список начальных приближений.
Решение возвращается в том же самом формате, который использует функция . Если решение не найдено, возвращается пустой список.
Пример использования функции :
(%i1) load("mnewton")$ (%i2) mnewton([x1+3*log(x1)-x2^2,2*x1^2-x1*x2-5*x1+1], [x1, x2], [5, 5]);
![(\%o2)\ [[x1=3.756834008012769,x2=2.779849592817897]]](/sites/default/files/tex_cache/49ebe27ada9658b57aa7c5a12b444796.png)
(%i3) mnewton([2*a^a-5],[a],[1]);
![(\%o3)\ [[a=1.70927556786144]]](/sites/default/files/tex_cache/046a9036b7b4ecc348ed5ebd750ebac3.png)
Как видно из второго примера, функция может использоваться и для решения единичных уравнений.
4.3.3 Интерполяция
Для выполнения интерполяции функций, заданных таблично, в составе Maxima предусмотрен пакет расширения interpol, позволяющий выполнять линейную или полиномиальную интерполяцию Пакет включает служебную функцию , которая возвращает
, если число
принадлежит интервалу
, и
в противном случае.
4.3.3.1 Линейная интерполяция
Линейная интерполяция выполняется функцией Синтаксис вызова:
или
.
Аргумент должен быть представлен в одной из следующих форм:
- матрица с двумя столбцами, например p:matrix([2,4], [5,6], [9,3]), при этом первое значение пары или первый столбец матрицы — это значения независимой переменной,
- список пар значений, например p:[[2,4], [5,6], [9,3]],
- список чисел, которые рассматриваются как ординаты интерполируемой функции, например p:[4,6,3], в этом случае абсциссы назначаются автоматически (принимают значения 1, 2, 3 и т.д.).
В качестве опции указывается имя независимой переменной, относительно которой строится интерполяционная функция.
Примеры выполнения линейной интерполяции:
(%i1) load("interpol")$ (%i2) p: matrix([7,2],[8,2],[1,5],[3,2],[6,7])$ (%i3) linearinterpol(p);

(%i4) f(x):="%;

(%i5) map(f,[7.3,25/7,%pi]);
![(\%o5)\ [2,\frac{62}{21},\frac{5\,\pi }{3}-3]](/sites/default/files/tex_cache/40eacf5e9e558ce37a8a0ffcd9d23b14.png)
4.3.3.2 Интерполяция полиномами Лагранжа
Интерполяция полиномами Лагранжа выполняется при помощи функции .
Синтаксис вызова: или
.
Смысл параметров и
аналогичен указанному выше.
Пример использования интерполяции полиномами Лагранжа:
(%i1) load("interpol")$ (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$ (%i3) lagrange(p);

(%i4) f(x):="%;

(%i5) map(f,[2.3,5/7,%pi]);
![(\%o5)\ [-1.567535,\frac{919062}{84035},\frac{\left( \pi -7\right) \,\left( \pi -6\right) \,\left( \pi -3\right) \,\left( \pi -1\right) }{35}-\frac{\left( \pi -8\right) \,\left( \pi -6\right) \,\left( \pi -3\right) \,\left( \pi -1\right) }{12}+\frac{7\,\left( \pi -8\right) \,\left( \pi -7\right) \,\left( \pi -3\right) \,\left( \pi -1\right) }{30}-\frac{\left( \pi -8\right) \,\left( \pi -7\right) \,\left( \pi -6\right) \,\left( \pi -1\right) }{60}+\frac{\left( \pi -8\right) \,\left( \pi -7\right) \,\left( \pi -6\right) \,\left( \pi -3\right) }{84}]](/sites/default/files/tex_cache/d03c3c1c8d395824c73e0f3df04340b8.png)
(%i6) %,numer;
![(\%o6)\ [-1.567535,10.9366573451538,2.893196551256924]](/sites/default/files/tex_cache/73b806bd82597fbc84d5db4db3934a49.png)
4.3.3.3 Интерполяция сплайнами
Интерполяция кубическими сплайнами выполняется при помощи функции .
Синтаксис вызова: или
.
Смысл параметров и
аналогичен указанному выше.
Пример использования интерполяции кубическими сплайнами:
(%i1) load("interpol")$ (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$ (%i3) cspline(p);

(%i4) f(x):="%;

(%i5) map(f,[2.3,5/7,%pi]);
![[1.991460766423356,\frac{273638}{46991},-\frac{3287\,{\pi }^{3}}{4932}+\frac{2223\,{\pi }^{2}}{274}-\frac{48275\,\pi }{1644}+\frac{9609}{274}]\leqno{(\%o5) }](/sites/default/files/tex_cache/de9244117d131ec340aacc93365c4ca8.png)
(%i6) %,numer;
![[1.991460766423356,5.823200187269903,2.227405312429507]\leqno{(\%o6) }](/sites/default/files/tex_cache/3ac024c046e07cd522a5783f7bb88847.png)