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

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

4.3.5 Численное интегрирование: пакет romberg

Для вычисления определённых интегралов численными методами в Maxima есть простая в использовании и довольно мощная функция romberg (перед использованием её необходимо загрузить).

Синтаксис вызова:

  • romberg(expr,x,a,b)
  • romberg(F,a,b)

Функция romberg вычисляет определённые интегралы методом Ромберга. В форме romberg(expr,x,a,b) возвращает оценку полного интеграла выражения expr по переменной x в пределах от a до b. Выражение expr должно возвращать действительное значение (число с плавающей запятой).

В форме romberg(F,a,b) функция возвращает оценку интеграла функции F(x) по переменной x в пределах от a до b (x представляет собой неназванный, единственный аргумент F; фактический аргумент может быть отличен от x). Функция F должна быть функцией Maxima или Lisp, которая возвращает значение с плавающей запятой.

Точностью вычислений при выполнении romberg управляют глобальные переменные rombergabs, и rombergtol. Функция romberg заканчивается успешно, когда абсолютное различие между последовательными приближениями — меньше чем rombergabs, или относительное различие в последовательных приближениях — меньше чем rombergtol. Таким образом, когда rombergabs равна 0.0 (это значение по умолчанию), только величина относительной ошибки влияет на выполнение функции romberg.

Функция romberg уменьшает шаг интегрирования вдвое по меньшей мере rombergit раз, поэтому максимальное количество вычислений подинтегральной функции составляет 2^{rombergit}. Если критерий точности интегрирования, установленный rombergabs и rombergtol, не удовлетворен, romberg печатает сообщение об ошибке. Функция romberg всегда делает по крайней мере rombergmin итерации; это — эвристическое правило, предназначенное, чтобы предотвратить преждевременное завершение выполнения функции, когда подинтегральное выражение является колебательным.

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

Рассмотрим примеры вычисления интегралов с использованием romberg:

(%i1)	load (romberg);
/usr/share/maxima/5.13.0/share/numeric/romberg.lisp\leqno{(\%o1) }
(%i2)	g(x, y) := x*y / (x + y);
g\left( x,y\right) :=\frac{x\,y}{x+y}\leqno{(\%o2) }
(%i3)	estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
0.81930228643245\leqno{(\%o3) }
(%i4)	assume (x > 0);
[x>0]\leqno{(\%o4) }
(%i5)	integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
-9\,log\left( \frac{9}{2}\right) +9\,log\left( 3\right) +\frac{2\,log\left( \frac{3}{2}\right) -1}{6}+\frac{9}{2}\leqno{(\%o5) }
(%i6)	float(%);
0.81930239639591\leqno{(\%o6) }

Как видно из полученных результатов вычисления двойного интеграла, точное и приближённое решение совпадают до 7 знака включительно.