- •Основы компьютерного моделирования электрических цепей
- •24 Ноября 2009, протокол № 8
- •1 Символьные переменные, константы и выражения
- •2 Вычисления с использованием арифметики произвольной точности
- •3 Команды упрощения выражений – simplify, simple
- •4 Команда расширения выражений – expand
- •5 Разложение выражений на простые множители – команда factor
- •6 Приведение подобных членов – команда collect
- •7 Обеспечение подстановок – команда subs
- •8 Вычисление пределов – команда limit
- •9 Вычисление производных – команда diff
- •10 Вычисление интегралов – команда int
- •11 Разложение в ряд тейлора – команда taylor
- •12 Решение алгебраических уравнений – команда solve
- •13 Решение дифференциальных уравнений – команда dsolve
- •14 Прямое и обратное преобразования лапласа – команды laplace, ilaplace
- •15 Графики символьных функций – команды ezplot, ezpolar
- •16 Прямой доступ к ядру системы Maple – команда maple
- •17 Разложение рациональной дроби на сумму простейших дробей
- •18 Интерполяционный полином лагранжа
- •19 Решение дифференциальных уравнений с помощью степенных рядов
- •Вопросы для самопроверки
- •Задания для самостоятельной работы
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Литература
- •Содержание
- •Основы компьютерного моделирования электрических цепей
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