Компания ALT Linux
Опубликован: 24.03.2015 | Доступ: свободный | Студентов: 550 / 136 | Длительность: 19:00:00
Лекция 4:

Численные методы и программирование с Maxima

4.3 Встроенные численные методы

4.3.1 Численные методы решения уравнений

4.3.1.1 Решение уравнений с одним неизвестным

Для решения уравнения с одним неизвестным в пакете Maxima предусмотрена функция find_root. Синтаксис вызова:

  • find_root(expr,x,a,b)
  • find_root(f,a,b)

Поиск корня функции f или выражения expr относительно переменной x осуществляется в пределах a \leqslant x \leqslant b.

Для поиска корней используется метод деления пополам или, если исследуемая функция достаточно гладкая, метод линейной интерполяции.

4.3.2 Решение уравнений методом Ньютона: пакет newton1

Основная функция пакета newton1 предназначена для решения уравнений методом Ньютона.

Синтаксис вызова: newton(expr,x,x0,eps)

Данная функция возвращает приближенное решение уравнения expr = 0 методом Ньютона, рассматривая expr как функцию одной переменной x. Поиск начинается с x = x_0 и производится, пока не будет достигнуто условие abs(expr) < eps. Функция newton допускает наличие неопределенных переменных в выражении expr, при этом выполнение условия abs(expr) < eps, оценивается как истинное или ложное. Таким образом, нет необходимости оценивать expr только как число.

Для использования пакета необходимо загрузить его командой load(newton1).

Примеры использования функции newton:

(%i1)	load (newton1);
(\%o1)\  /usr/share/maxima/5.26.0/share/numeric/newton1.mac
(%i2)	newton (cos (u), u, 1, 1/100);
(\%o2)\  1.570675277161251
(%i3)	ev (cos (u), u = %);
(\%o3)\  1.2104963335033529\,{10}^{-4}
(%i4)	assume (a > 0);
(\%o4)\  [a>0]
(%i5)	newton (x^2 - a^2, x, a/2, a^2/100);
(\%o5)\  1.00030487804878\,a
(%i6)	ev (x^2 - a^2, x = %);
(\%o6)\  6.098490481853958\,{10}^{-4}\,{a}^{2}
4.3.2.1 Решение уравнений с несколькими неизвестными: пакет mnewton

Мощная функция для решения систем нелинейных уравнений методом Ньютона входит в состав пакета mnewton. Перед использованием пакет необходимо загрузить:

(%i1)	load("mnewton");
/usr/share/maxima/5.13.0/share/contrib/mnewton.mac\leqno{(\%o1) }

После загрузки пакета mnewton становятся доступными основная функция — mnewton и ряд дополнительных переменных для управления ею: newtonepsilon (точность поиска, величина по умолчанию 10.0^{-\frac{fpprec}{2}}), newtonmaxiter (максимальное число итераций, величина по умолчанию 50).

Синтаксис вызова: mnewton(FuncList,V arList,GuessList), где FuncList — список функций, образующих решаемую систему уравнений, VarList — список имен переменной, и GuessList — список начальных приближений.

Решение возвращается в том же самом формате, который использует функция solve(). Если решение не найдено, возвращается пустой список.

Пример использования функции mnewton:

(%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]]
(%i3)	mnewton([2*a^a-5],[a],[1]);
(\%o3)\  [[a=1.70927556786144]]

Как видно из второго примера, функция mnewton может использоваться и для решения единичных уравнений.

4.3.3 Интерполяция

Для выполнения интерполяции функций, заданных таблично, в составе Maxima предусмотрен пакет расширения interpol, позволяющий выполнять линейную или полиномиальную интерполяцию Пакет включает служебную функцию charfun2(x,a,b), которая возвращает true, если число x принадлежит интервалу [a,b), и false в противном случае.

4.3.3.1 Линейная интерполяция

Линейная интерполяция выполняется функцией linearinterpol Синтаксис вызова: linearinterpol(points) или linearinterpol(points,option).

Аргумент points должен быть представлен в одной из следующих форм:

  • матрица с двумя столбцами, например 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);
(\%o3)\  \left( \frac{13}{2}-\frac{3\,x}{2}\right) \,\mathrm{charfun2}\left( x,-\infty ,3\right) +2\,\mathrm{charfun2}\left( x,7,\infty \right) +\\
\left( 37-5\,x\right) \,\mathrm{charfun2}\left( x,6,7\right) +\left( \frac{5\,x}{3}-3\right) \,\mathrm{charfun2}\left( x,3,6\right)
(%i4)	f(x):="%;
(\%o4)\  \mathrm{f}\left( x\right) :=\left( \frac{13}{2}-\frac{3\,x}{2}\right) \,\mathrm{charfun2}\left( x,-\infty ,3\right) +2\,\mathrm{charfun2}\left( x,7,\infty \right) +\left( 37-5\,x\right) \,\mathrm{charfun2}\left( x,6,7\right) +\left( \frac{5\,x}{3}-3\right) \,\mathrm{charfun2}\left( x,3,6\right)
(%i5)	map(f,[7.3,25/7,%pi]);
(\%o5)\  [2,\frac{62}{21},\frac{5\,\pi }{3}-3]
4.3.3.2 Интерполяция полиномами Лагранжа

Интерполяция полиномами Лагранжа выполняется при помощи функции lagrange.

Синтаксис вызова: lagrange(points) или lagrange(points,option).

Смысл параметров points и options аналогичен указанному выше.

Пример использования интерполяции полиномами Лагранжа:

(%i1)	load("interpol")$
(%i2)	p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3)	lagrange(p);
(\%o3)\  \frac{\left( x-7\right) \,\left( x-6\right) \,\left( x-3\right) \,\left( x-1\right) }{35}-\frac{\left( x-8\right) \,\left( x-6\right) \,\left( x-3\right) \,\left( x-1\right) }{12}+\\
\frac{7\,\left( x-8\right) \,\left( x-7\right) \,\left( x-3\right) \,\left( x-1\right) }{30}-\frac{\left( x-8\right) \,\left( x-7\right) \,\left( x-6\right) \,\left( x-1\right) }{60}+\frac{\left( x-8\right) \,\left( x-7\right) \,\left( x-6\right) \,\left( x-3\right) }{84}
(%i4)	f(x):="%;
(\%o4)\  \mathrm{f}\left( x\right) :=\frac{\left( x-7\right) \,\left( x-6\right) \,\left( x-3\right) \,\left( x-1\right) }{35}-\frac{\left( x-8\right) \,\left( x-6\right) \,\left( x-3\right) \,\left( x-1\right) }{12}+\\
\frac{7\,\left( x-8\right) \,\left( x-7\right) \,\left( x-3\right) \,\left( x-1\right) }{30}-\frac{\left( x-8\right) \,\left( x-7\right) \,\left( x-6\right) \,\left( x-1\right) }{60}+\frac{\left( x-8\right) \,\left( x-7\right) \,\left( x-6\right) \,\left( x-3\right) }{84}
(%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}]
(%i6)	%,numer;
(\%o6)\  [-1.567535,10.9366573451538,2.893196551256924]
4.3.3.3 Интерполяция сплайнами

Интерполяция кубическими сплайнами выполняется при помощи функции cspline.

Синтаксис вызова: cspline(points) или cspline(points,option)).

Смысл параметров points и options аналогичен указанному выше.

Пример использования интерполяции кубическими сплайнами:

(%i1)	load("interpol")$
(%i2)	p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3)	cspline(p);
(\%o3)\  \left( \frac{1159\,{x}^{3}}{3288}-\frac{1159\,{x}^{2}}{1096}-\frac{6091\,x}{3288}+\frac{8283}{1096}\right) \,charfun2\left( x,-\infty ,3\right) +\\
\left( -\frac{2587\,{x}^{3}}{1644}+\frac{5174\,{x}^{2}}{137}-\frac{494117\,x}{1644}+\frac{108928}{137}\right) \,charfun2\left( x,7,\infty \right) +\\
\left( \frac{4715\,{x}^{3}}{1644}-\frac{15209\,{x}^{2}}{274}+\frac{579277\,x}{1644}-\frac{199575}{274}\right) \,charfun2\left( x,6,7\right) +\\
\left( -\frac{3287\,{x}^{3}}{4932}+\frac{2223\,{x}^{2}}{274}-\frac{48275\,x}{1644}+\frac{9609}{274}\right) \,charfun2\left( x,3,6\right)
(%i4)	f(x):="%;
\%o4)\  f\left( x\right) :=\left( \frac{1159\,{x}^{3}}{3288}-\frac{1159\,{x}^{2}}{1096}-\frac{6091\,x}{3288}+\frac{8283}{1096}\right) \,charfun2\left( x,-\infty ,3\right) +\\
\left( -\frac{2587\,{x}^{3}}{1644}+\frac{5174\,{x}^{2}}{137}-\frac{494117\,x}{1644}+\frac{108928}{137}\right) \,charfun2\left( x,7,\infty \right) +\\
\left( \frac{4715\,{x}^{3}}{1644}-\frac{15209\,{x}^{2}}{274}+\frac{579277\,x}{1644}-\frac{199575}{274}\right) \,charfun2\left( x,6,7\right) +\\
\left( -\frac{3287\,{x}^{3}}{4932}+\frac{2223\,{x}^{2}}{274}-\frac{48275\,x}{1644}+\frac{9609}{274}\right) \,charfun2\left( x,3,6\right)
(%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) }
(%i6)	%,numer;
[1.991460766423356,5.823200187269903,2.227405312429507]\leqno{(\%o6) }