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

Задачи высшей математики с Maxima

3.5 Аналитическое и численное интегрирование

3.5.1 Основные команды

Неопределённый интеграл \int f(x)dx вычисляется с помощью команды integrate(f, x), где f — подинтегральная функция, x — переменная интегрирования.

Для вычисления определённого интеграла \int _{a}^{b}f(x)dx в команде integrate добавляются пределы интегрирования, например, integrate((1+cos(x))^2, x, 0, %pi);

\[\int _{0}^{\pi }(1+\cos (x))^{2}  dx=\frac{3}{2} \pi \]

Несобственные интегралы с бесконечными пределами интегрирования вычисляются, если в параметрах команды integrate указывать, например, x, 0, inf.

Численное интегрирование выполняется функцией romberg или при помощи функций пакета quadpack.

3.5.2 Интегралы, зависящие от параметра. Ограничения для параметров

Если требуется вычислить интеграл, зависящий от параметра, то его значение может зависеть от знака этого параметра или каких- либо других ограничений. Рассмотрим в качестве примера интеграл \int _{0}^{+\infty }e^{-ax} dx, который, как известно из математического анализа, сходится при а>0 и расходится при а<0. Если вычислить его сразу, то получится:

(%i1)	integrate(exp(-a*x),x,0,inf);
Is a positive, negative, or zero? p;
(\%o1)\  \frac{1}{a}

Результат аналитического интегрирования

\[\int _{0}^{+\infty }e^{(-ax)} dx=\mathop{\lim }\limits_{x\to \infty }  -\frac{e^{(-ax)} -1}{a} .\]

Для получения явного аналитического результата вычислений следует сделать какие-либо предположения о значении параметров, то есть наложить на них ограничения. Это можно сделать при помощи команды assume(expr1), где expr1 — неравенство.

Описание наложенных ограничений параметра a можно вызвать командой properties(a).

(%i1)	assume (a > 1)$ integrate (x**a/(x+1)**(5/2), x, 0, inf);
Is (2a+2)/5 an integer? no;
Is 2a-3 positive, negative, or zero? neg;
(\%o2)\  \beta\left( a+1,\frac{3}{2}-a\right)
(%i3)	properties(a);
(\%o3)\  [\text{database info, }\  a>1]

Вернёмся к вычислению интеграла с параметром \int _{0}^{+\infty }e^{-ax} dx, которое следует производить в таком порядке:

(%i1)	assume(a>0); integrate(exp(-a*x),x,0,inf);
(\%o1)\  [a>0]\quad  (\%o2)\  \frac{1}{a}

Отменить принятые ограничения на значения параметров можно, используя функцию forget.

Пример:

(%i1)	assume(n+1>0); integrate((a+b)*x^(n+1),x);
(\%o1)\  [n>-1]\quad 
(\%o2)\  \frac{\left( b+a\right) \,{x}^{n+2}}{n+2}

Отмена ограничения влечёт за собой вопрос о значениях параметров подинтегральной функции:

(%i3)	forget(n+1>0); integrate((a+b)*x^(n+1),x);
(\%o3)\quad [n>-1]
Is n + 2 zero or nonzero? zero;
(\%o4)\quad \left( b+a\right) \,log\left( x\right)

Результат, который получен, совершенно другой!

3.5.3 Основные приёмы интегрирования

В Maxima имеется функция, предназначенных для выполнения расчётов шаг за шагом, осуществляющая замену переменной changevar.

Формулу интегрирования по частям:

\[\int u(x)v'(x)dx=u(x)v(x)-\int u'(x)v(x)dx  \]
придётся применять вручную. В Maxima (в отличие от, например, Maple), функция интегрирования по частям не выделена явно, хотя в отдельных случаях этот способ используется integrate.

Для вычисления первообразных дифференциальных выражений используется пакет antid (основные функции пакета — antidiff и antid). Функция antidiff выполняет интегрирование выражений с произвольными функциями (в том числе неопределёнными), перед её первым вызовом следует загрузить пакет (antid отличается от неё форматом выводимого результата).

Пример:

(%i1)	load("antid");
(%i2)	expr: exp(z(x))*diff(z(x),x)*sin(x);
(\%o2)\ {e}^{z\left( x\right) }\,sin\left( x\right) \,\left( \frac{d}{d\,x}\,z\left( x\right) \right)
(%i3)	a1: antid (expr, x, z(x));
(\%o3)\  [{e}^{z\left( x\right) }\,sin\left( x\right) ,-{e}^{z\left( x\right) }\,cos\left( x\right) ]

При помощи пакета antid можно выполнить формальное интегрирование по частям, например:

(%i1)	expr:u(x)*diff(v(x),x);
(\%o1)\  \mathrm{u}\left( x\right) \,\left( \frac{d}{d\,x}\,\mathrm{v}\left( x\right) \right)
(%i2)	a:antid(expr,x,v(x));
(\%o2)\  \mathrm{antid}\left( \mathrm{u}\left( x\right) \,\left( \frac{d}{d\,x}\,\mathrm{v}\left( x\right) \right) ,x,\mathrm{v}\left( x\right) \right)
(%i3)	b:antidiff(expr,x,v(x));
(\%o3)\  \mathrm{antidiff}\left( \mathrm{u}\left( x\right) \,\left( \frac{d}{d\,x}\,\mathrm{v}\left( x\right) \right) ,x,\mathrm{v}\left( x\right) \right)

Если в интеграле требуется сделать замену переменных, используется функция changevar.

Синтаксис вызова этой функции: changevar(expr,f(x,y),y,x).

Функция осуществляет замену переменной в соответствии с уравнением f(x,y) = 0 во всех интегралах, встречающихся в выражении expr (предполагается, что y — новая переменная, x — исходная). При использовании совместно с changevar часто используется отложенное вычисление интеграла (одинарная кавычка перед функцией integrate).

Пример:

(%i5)	assume(a > 0)$ 'integrate (%e**sqrt(a*y), y, 0, 4);
\int_{0}^{4}{e}^{\sqrt{a}\,\sqrt{y}}dy\leqno{(\%o6) }

Данный интеграл не вычисляется аналитически непосредственно, поэтому выполняем замену:

(%i7)	changevar (%, y-z^2/a, z, y);
-\frac{2\,\int_{-2\,\sqrt{a}}^{0}z\,{e}^{\left| z\right| }dz}{a}\leqno{(\%o7) }

Исходный интеграл был записан с признаком отложенного вычисления, поэтому приводим результат в "завершённую" форму (выполняем ev с ключом nouns).

(%i8)	ev(%,nouns);
-\frac{2\,\left( -2\,\sqrt{a}\,{e}^{2\,\sqrt{a}}+{e}^{2\,\sqrt{a}}-1\right) }{a}\leqno{(\%o8) }

Не всегда можно вычислять интеграл (как определённый, так и неопределённый) до конца лишь за счёт использования функции integrate. В этом случае функция возвращает выражение с отложенным вычислением вложенного (возможно, более простого по форме) интеграла.

Пример:

(%i10)	expand ((x-4) * (x^3+2*x+1));
{x}^{4}-4\,{x}^{3}+2\,{x}^{2}-7\,x-4\leqno{(\%o10) }
(%i11)	integrate (1/%, x);

Не зная корней знаменателя, невозможно полностью вычислять интеграл от рационального выражения, поэтому один из компонентов результата — неопределённый интеграл, для окончательного вычисления которого необходимо найти корни знаменателя (например, используя allroots).

\frac{log\left( x-4\right) }{73}-\frac{\int \frac{{x}^{2}+4\,x+18}{{x}^{3}+2\,x+1}dx}{73}\leqno{(\%o11) }

Возможным решением является упрощение интеграла, сопровождающееся понижением степени рационального выражения в знаменателе. При этом необходимо установить в true значение прерменной integrate_use_rootsof. Однако при этом результат может быть довольно трудно интерпретируемым.

Рассмотрим предыдущий пример, выполнив предварительно факторизацию знаменателя:

(%i1)	f:expand ((x-4) * (x^3+2*x+1));
{x}^{4}-4\,{x}^{3}+2\,{x}^{2}-7\,x-4\leqno{(\%o1) }
(%i2)	polyfactor:true$ ffact:allroots(f);
1.0 ( x-3.999999999999997)( x+0.4533976515164)\leqno{(\%o3)}
( {x}^{2}-0.45339765151641\,x+2.205569430400593)
(%i4)	float(integrate(1/ffact,x));

Полученный результат всё равно трудно назвать однозначно приемлемым, т.к. он включает одновременно очень большие и очень малые величины. Причина в том, что корни знаменателя представлялись рациональными числами. Для того, чтобы получить компактный результат, желательно для коэффициентов вида r=\frac{m}{n} уменьшить m и n.

Интегралы от тригонометрических и логарифмических функций Maxima вычисляет довольно успешно. Рассмотрим несколько примеров.

(%i1)	integrate(sin(x)*sin(2*x)*sin(3*x),x);
\frac{cos\left( 6\,x\right) }{24}-\frac{cos\left( 4\,x\right) }{16}-\frac{cos\left( 2\,x\right) }{8}\leqno{(\%o1) }
(%i2)	integrate(1/cos(x)^3,x);
\frac{log\left( sin\left( x\right) +1\right) }{4}-\frac{log\left( sin\left( x\right) -1\right) }{4}-\frac{sin\left( x\right) }{2\,{sin\left( x\right) }^{2}-2}\leqno{(\%o2) }
(%i3)	integrate(x^3*log(x),x);
\frac{{x}^{4}\,log\left( x\right) }{4}-\frac{{x}^{4}}{16}\leqno{(\%o3) }

3.5.4 Преобразование Лапласа

Прямое и обратное преобразование Лапласа вычисляются посредством функций laplace и ilt соответственно.

Синтаксис обращения к функции laplace: laplace(expr,t,s).

Функция вычисляет преобразование Лапласа выражения expr по отношению к переменной t. Образ выражения expr будет включать переменную s.

Функция laplace распознаёт в выражении expr функции delta, exp, log, sin, cos, sinh, cosh, и erf, а также производные, интегралы, суммы и обратное преобразование Лапласа (ilt). При наличии других функций вычисление преобразования может и не удаться.

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

(%i1)	laplace(c,t,s);
\frac{c}{s}\leqno{(\%o1) }
(%i2)	laplace(erf(t),t,s);
\frac{{e}^{\frac{{s}^{2}}{4}}\,\left( 1-erf\left( \frac{s}{2}\right) \right) }{s}\leqno{(\%o2) }
(%i3)	laplace(sin(t)*exp(-a*t),t,s);
\frac{1}{{s}^{2}+2\,a\,s+{a}^{2}+1}\leqno{(\%o3) }

Функция ilt(expr,t,s) вычисляет обратное преобразование Лапласа относительно переменной t с параметром s.

Пример:

(%i1)	laplace(c,t,s);
\frac{c}{s}\leqno{(\%o1) }
(%i2)	ilt(%,s,t);
c\leqno{(\%o2) }
(%i3)	laplace(sin(2*t)*exp(-4*t),t,s);
\frac{2}{{s}^{2}+8\,s+20}\leqno{(\%o3) }
(%i4)	ilt(%,s,t);
{e}^{-4\,t}\,sin\left( 2\,t\right) \leqno{(\%o4) }