Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metoda_po_inf_ch_2.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

5. Интегрирование

5.1. Встроенные команды интегрирования

В стандартной (загруженной по умолчанию) библиотеке находяться процедуры Int (expr, options ) и int ( expr,options ), т.е. символ и значение. Синтаксис и опции можно найти в справочнике int.

Пример 1 (определенные и неопределенные интегралы).

> f:=sin(x):

> g:=Int(f,x);

> value(g);

> int(f,x);

Таким образом, мы видим,. что обозначения максимально приближены к обычной математической записи. Для вычисления определенного интеграла надо дополнительно указать пределы интегрирования

> f:=x*exp(x):

> g:=Int(f,x=0..1);

> value(g);

> int(f,x=0..1);

Рассмотрим более сложные интегралы

> f:=sin(x^3):

> g:=int(f,x=0..Pi);

> h:=evalf(g);

или

> g:=Int(x/(x^3-x^2+1),x);

> value(g);

здесь сумма берется по %1 - корням полинома в скобках.

Иногда, при интегрировании получаются многозначные функции, при этом, по умолчанию, Maple использует только одно значение. Список многозначных функций и их принципиальные ветви можно посмотреть следующей командой

> restart: readlib(branches):

> branches(ln);

Рассмотрим интегралы с параметрами

> f:=exp(-a*x)*ln(x)*sqrt(x);

> int(f,x=0..infinity);

Как видим, этот интеграл неопределен при всех значениях параметра. Сделаем дополнительные предположения

> assume(a<0): int(f,x=0..infinity);

Сравним с

> assume(a>0): int(f,x=0..infinity);

Полученные при интегрировании эллиптические функции, зависящие от радикалов можно упростить

> answer := int( 1/sqrt( sin(x) ), x=0..Pi/2 );

> radnormal(answer);

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

> int(exp(x^3), x );

> series(", x=0);

В общем случае синтаксис для численного интегрирования имеет вид

evalf ( Int ( f, x = a..b , digits , flag ) ),

где digits- точность вычисления, и flag- код численного метода, см. int[numerical]

> int( exp(v-v^2/2)/(1+1/2*exp(v)), v = -infinity..infinity );

> evalf(", 20);

Здесь digits равно 20. Другой пример - интегрирование гамма функции с использованием алгоритма Ньютона-Котеса:

> evalf(Int(1/GAMMA(x), x = 0..2, 10, _NCrule));

Более сложные опции позволяют вычислять главное значение интеграла и реализуют некоторые дополнительные возможности

> int(1/x^3, x=-1..2, 'CauchyPrincipalValue');

> int( 1/(x+a)^2, x=0..2, 'continuous' );

В принципе, различные эвристические методы, такие как интегрирование по частям и замены переменных, не используются явно, например.

Рассмотрим несколько интегралов, которые берутся по частям или с использованием различных замен переменных

Пример 2 (интегрирование по частям и другие методы) .

> int(x*ln(x),x);

> int(x*sin(x^2),x);

> Int(x^2/(sqrt(1-x^2))^(3/2),x):

> value(");

Тем не менее, для обучения, мы можем использовать подобные команды явно. Эти команды содержатся в пакете student

Пример 3 (интегрирование с пакетом student).

Для начала мы очистим рабочую память и загрузим данный пакет.

> restart:

> with(student);

При загрузке любого пакета Maple выдает список всех загружаемых команд.

Замены переменных:

> f:=Int(sqrt(1-x^2),x=a..b);

> g:=changevar(x=sin(u),f,u);

Здесь мы вводим новую независимую переменную интегрирования u, связанную со старой переменной уравнением x=sin(u) (пределы интегрирования изменились автоматически!) Посмотрим на результат

> value(g);

В двойных интегралах интегралах это позволяет, например, перейти к полярным координатам:

> changevar({x=r*cos(t),y=r*sin(t)}, Doubleint(1,x,y),[t,r] );

Интегрирование по частям:

напомним, что правило интегрирования по частям записывается следующим образом

> f:=Int (u,v)=u*v-Int(v,u);

Синтаксис данной команды intparts(f,u)

> a:=Int(x^2*exp(x),x);

Проинтегрируем по частям

> b:=intparts(a,x^2);

проинтегрируем по частям второй раз

> c:=intparts(b,2*x);

и получим результат

> d:=value(c);

Другие полезные команды для интегрирования из данного пакета

> integrand(Int(h(x),x));

и

> Doubleint(h(x,y),x,y);

> Tripleint(h,x=1..n,y=2..4,z=w..u);

Кроме этого, в пакете student реализовано несколько численных методов:

leftbox, leftsum , rightbox, rightsum, middlebox, middlesum, simpson, trapezoid,

Синтаксис для всех команд одинаков, рассмотрим только один пример

Пример 4 (численное интегрирование).

> restart: with(student):

> f:=x^5*ln(x);

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

> ex:=evalf(int(f,x=1..3));

> s:=evalf(simpson(f,x=1..3,16));

> t:=evalf(trapezoid(f,x=1..3,16));

> ls:=evalf(leftsum(f,x=1..3,16));

Покажем это на рисунке

> leftbox(f,x=1..3,16,color=red,shading=BLUE);

Аналогично и для других команд

> rs:=evalf(rightsum(f,x=1..3,16));

> rightbox(f,x=1..3,16,color=red,shading=BLUE);

и

> ms:=evalf(middletsum(f,x=1..3,16)));

> middlebox(f,x=1..3,16,color=red,shading=BLUE);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]