Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методички / Конс_лекц2.doc
Скачиваний:
56
Добавлен:
17.09.2018
Размер:
528.9 Кб
Скачать

10 Вычисление интегралов – команда int

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

I = dx и I = dx.

Здесь f(x) – подынтегральная функция независимой переменной x, a нижний и b верхний пределы интегрирования для определенного интеграла.

Команда int(f, x) возвращает неопределенный интеграл (первообразную функцию) от символьного выражения f по переменной x.

Команда int(f, x, a, b) возвращает значение определенного интеграла от символьного выражения f по переменной x с пределами от а до b.

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

Если f массив, то int(f, x) возвращает массив первообразных, а int(f, x, a, b) – массив значений определенных интегралов.

Примеры:

>> syms x

>> f=[sin(x);1/x]

f =

[ sin(x)]

[ 1/x]

>> int(f,x)

ans =

[ -cos(x)]

[ log(x)]

>> int(f,x,1,2)

ans =

[ -cos(2)+cos(1)]

[ log(2)]

Пример:

Вычислить неопределенный интеграл

dx.

Решение:

>> syms x a

>> int(log(x+a)/sqrt(x+a),x)

ans =

2*log(x+a)*(x+a)^(1/2)-4*(x+a)^(1/2)

>> [m]=simple(ans)

m =

2*(x+a)^(1/2)*(log(x+a)-2)

Полученную первообразную 2(ln(x+a) - 2), зависящую от символьного параметра a, проверим дифференцированием по x:

>> diff(m,x)

ans =

1/(x+a)^(1/2)*(log(x+a)-2)+2/(x+a)^(1/2)

>> [m]=simple(ans)

m =

log(x+a)/(x+a)^(1/2)

>> pretty(m)

log(x + a)

-----------

1/2

(x + a)

В результате дифференцирования получена подынтегральная функция

,

т. е. выражение 2(ln(x+a) - 2) действительно является первообразной.

Пример:

Вычислить определенный интеграл

dx.

Решение:

Подынтегральная функция задана в аналитическом виде с символьными переменными a, b, x, а пределами интегрирования являются символьные переменные c, d. Интегрировать можно по любой из переменных a, b, x. Здесь интегрирование осуществляется по переменной x, поэтому int возвращает значение интеграла, выраженное через параметры a, b, c, d

>> syms x a b c d

>> int(x/(a+b*x^2),x,c,d)

ans =

1/2*(log(a+d^2*b)-log(a+c^2*b))/b

>> pretty(ans)

2 2

log(a + d b) - log(a + c b)

1/2 --------------------------------

b

Пример:

Вычислить определенный интеграл по переменной b

db.

Решение:

>> syms x a b c d

>> int(x/(a+b*x^2),b,c,d)

ans =

(log(a+d*x^2)-log(a+c*x^2))/x

>> pretty(ans)

2 2

log(a + d x ) - log(a + c x )

--------------------------------

x

От символьных параметров могут зависеть и кратные определенные интегралы.

Пример:

Вычислить тройной интеграл

(x2+y2)zdxdydz.

Решение:

Применив команду int трижды, получим символьный ответ:

>> syms a x y z

>> int(int(int((x^2+y^2)*z,x,0,a),y,0,a),z,0,a)

ans =

1/3*a^6

Команда int не позволяет получить неопределенный интеграл от произвольной функции.

Пример:

Вычислить неопределенный интеграл

dx.

Решение:

При вводе int выдается предупреждение об ошибке и команда возвращается без результата:

>> syms x

>> int(exp(abs(sin(x))),x)

Warning: Explicit integral could not be found.

> In C:\matlab6p5\toolbox\symbolic\@sym\int.m at line 58

ans =

int(exp(abs(sin(x))),x)

Это означает, что либо первообразной не существует либо система MATLAB не смогла ее найти.

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

Пример:

Вычислить неопределенный интеграл

dx.

Решение:

>> syms x

>> int(sin(x)/x)

ans =

sinint(x)

Ответ содержит функцию интегральный синус, которая определяется интегралом с переменным верхним пределом:

Si(x) = dt.

Вычисление несобственных интегралов, зависящих от параметров, имеет некоторые особенности.

Пример:

Вычислить несобственный интеграл

dt.

Решение:

Команда int возвращается без результата:

>> syms a n t

>> int(t^n*exp(-a*t),t,0,inf)

ans =

int(t^n*exp(-a*t),t = 0 .. inf)

Система MATLAB не смогла вычислить интеграл потому, что величина интеграла зависит от знака параметра n, который при определении n остается незаданным. При инициализации символьной переменной n укажем ее знак, например:

>> syms a t

>> n=sym('n','positive');

>> int(t^n*exp(-a*t),t,0,inf)

ans =

1/(a^n)/a*gamma(n)*n

Значение интеграла выражается через гамма - функцию, информацию о которой можно получить с помощью команды doc gamma. Если n целое, то gamma(n)×n = n!, и в таком случае

dt = .

Пример:

Вычислить определенный интеграл

dx.

Решение:

Команда int возвращает символьное значение определенного интеграла, выраженное через функцию арксинус:

>> syms x

>> format long

>> int(asin(x),x,0,pi/4)

ans =

1/4*pi*asin(1/4*pi)+1/4*(16-pi^2)^(1/2)-1

Для получения решения в естественной форме достаточно активизировать с помощью мыши строку ответа и нажать клавишу <Enter>. Будет получен следующий ответ (в установленном формате вывода):

ans =

0.32847177096777

Команда vpa (см. раздел 2) позволяет вывести на экран результат вычислений с любым числом текущих цифр, например, с 20:

>> int(asin(x),x,0,pi/4)

ans =

1/4*pi*asin(1/4*pi)+1/4*(16-pi^2)^(1/2)-1

>> vpa(ans,20)

ans =

.3284717709677653169

Пример:

Вычислить несобственный интеграл

dx.

Решение:

>> syms x

>> int(1/sqrt(abs(x-2)),x,1,3)

ans =

4

Пример:

Вычислить несобственный интеграл

dx.

Решение:

>> syms x

>> int(x*exp(-x),x,0,inf)

ans =

1

Ранее система MATLAB не смогла найти первообразную от функции e|sinx|.

Но она позволяет вычислить определенный интеграл от этой функции.

Пример:

Вычислить определенный интеграл

I = dx.

Решение:

При обращении к int выдается предупреждение об ошибке и команда возвращается без результата:

>> syms x

>> I=int(exp(abs(sin(x))),x,0,2*pi)

I =

int(exp(abs(sin(x))),x = 0 .. 2*pi)

Это означает, что команда int символьное решение не нашла. Воспользуемся теперь командой vpa. При интегрировании с 15 текущими цифрами получим:

>> vpa(I,15)

ans =

12.4175160714222

Пример:

Вычислить двойной интеграл

I = esin(x²+y²)dxdy.

Решение:

Двойное применение int выдает предупреждение об ошибке и команда возвращается без результата:

>> syms x y

>> I=int(int(exp(sin(x^2+y^2)),x,0,pi),y,0,pi)

I =

int(int(exp(sin(x^2+y^2)),x = 0 .. pi),y = 0 .. pi)

Символьное решение не найдено. Совместное применение int и vpa возвращает приближенное значение интеграла. При вычислениях с 10 текущими цифрами получим:

>> vpa(int(int(exp(sin(x^2+y^2)),x,0,pi),y,0,pi),10)

ans =

13.44629794

Пример:

Вычислить тройной интеграл

I = sin(x2+y2+z2)dxdydz.

Решение:

Тройное обращение к int возвращает символьное решение, выраженное через гипергеометрическую функцию и интегралы Френеля:

>> syms x y z

>> I=int(int(int(sin(x^2+y^2+z^2),x,0,pi),y,0,pi),z,0,pi);

>> [R]=simple(I)

R =

1/18*pi^(5/2)*2^(1/2)*(6*pi^2*hypergeom([3/4],[3/2, 7/4],-1/4*pi^4)*FresnelC(2^(1/2)*pi^(1/2))*hypergeom([1/4],[1/2, 5/4],-1/4*pi^4)-pi^4*hypergeom([3/4],[3/2, 7/4],-1/4*pi^4)^2*FresnelS(2^(1/2)*pi^(1/2))+9*hypergeom([1/4],[1/2, 5/4],-1/4*pi^4)^2*FresnelS(2^(1/2)*pi^(1/2)))

Вычислим интеграл командами int и vpa с 15 текущими цифрами:

>>vpa(int(int(int(sin(x^2+y^2+z^2),x,0,pi),y,0,pi),z,0,pi),15)

ans =

.280500993612534

Соседние файлы в папке Методички