У функции quad8 более высокий порядок точности по сравнению с функцией quad, что очень хорошо для гладких функций, так как обеспечивается более высокая точность результата при большем шаге интегрирования (меньшем объеме отчислений). Однако функция quad может иметь не меньшее, а даже большее быстродействие для не слишком гладких функций (разрывны или велики по абсолютной величине вторая или третья производные). В любом случае обе эти функции по умолчанию обеспечивают одинаковую относительную точность результата, равную 0.001.
Как и многие другие функции системы МАТLАВ, функции quad и quad8 могут принимать различное количество параметров. Минимальный формат вызова этих функций включает в себя три параметра: имя подынтегральной функции, нижний предел интегрирования и верхний предел интегрирования. Если применяется четвертый параметр, то он является требуемой относительной точностью результата вычислений. Кстати, если обе эти адаптивные функции не могут обеспечить получение необходимой точности (расходящийся или близкий к этому интеграл), то они возвращают символическую бесконечность Inf.
Для вычисления определённых интегралов символьными методами можно использовать два варианта решения: напрямую или по этапам (с подстановкой символьных чисел).
Задача 8. Вычислить определённый интеграл
.Программа: Результат:
a1=sym('0'); b1=sym('2');
syms w t a b
w=t^2;
% 1 способ: работа с подстановкой символьных чисел
symbol=int(w,'t',a,b)
symbol2a=subs(symbol,[a,b],[a1,b1])
digits(20);
number=vpa(symbol2a)
% 2 способ: работа с символьными числами
symbol2b=int(w,'t',a1,b1) symbol =
1/3*b^3-1/3*a^3
symbol2a =
8/3
number =
2.6666666666666666667
symbol2b =
8/3
Задача 9. Вычислить площадь поверхности, полученной вращением астроиды вокруг оси Ox:
. (поверхность визуализирована в задаче 2).Программа: Результат:
t1=sym('0'); t2=sym('pi/2'); a=sym('1');
syms x y t f
x=a*cos(t)^3; y=a*sin(t)^3;
f=y.*sqrt(diff(x)^2+diff(y)^2);
symbol=simplify(int(4*pi*f,'t',t1,t2))
digits(10);
number=vpa(symbol) symbol =
12/5*pi
number =
7.539822370
б) Двойные интегралы сводятся к вычислению повторных определённых интегралов, один из которых является внутренним, а другой внешним. Внутренний интеграл является подынтегральной функцией для внешнего интеграла. Можно было бы для численных вычислений написать некоторую цепочку вычислений, в которой многократные вычисления подынтегральной функции сводились бы к многократным вызовам функции quad. Однако нет необходимости делать это самостоятельно, так как в системе MATLAB для этого имеется специальная функция dblquad.
Задача 8. Вычислить интеграл
, где .Программа:
Результат:
function z=fof(x,y)
z=x.*sin(y)+y.*sin(x); >> format long
>> dblquad('fof',0,1,1,2)
ans =
1.16777110966887
Задача 9. С помощью символьных вычислений получить следующие интегралы
, , , , , где .Программа:
symsxy
z=sym('x*sin(y)+y*sin(x)');
i1=int(z,'x')
i2=int(z,'x',0,1)
i3=int(int(z,'x'),'y')
i4=int(int(z,'x',1,2),'y',0,1)
digits(14);
number4=vpa(i4)
i5=int(int(x+y,'y',x,1),'x',0,1) i1 =
1/2*x^2*sin(y)-y*cos(x)
i2 =
1/2*sin(y)-y*cos(1)+y
i3 =
-1/2*x^2*cos(y)-1/2*y^2*cos(x)
i4 =
-1/2*cos(2)-cos(1)+3/2
number4 =
1.1677711124054
i5 =
1/2
Так как символьные вычисления не дают погрешности метода вычисления и сами по себе они более точные, то можно увидеть, что функция dblquad даёт точный результат до 7 знака после запятой.
в) Из высшей математики известно, что к определенным и двойным интегралам могут быть сведены многие другие типы интегралов, например поверхностный интеграл 1-го рода. Так как при его нахождении используется дифференцирование под знаком интеграла, то использовать численные вычисления некорректно.
Задача 10. Вычислить поверхностный интеграл 1-го рода:
, где S – часть плоскости , лежащая в первом октанте (по теореме 2).Программа: Результат:
symsxyzf1 f2
f1=1-x-y;
f2=x*y*z;
fun=subs(f2,z,f1)
d=1+diff(f1,x)^2+diff(f1,y)^2
syms x1 x2 y1 y2
x1=sym('0');
x2=sym('1');
y1=sym('0');
y2=sym('1-x');
intpov1=int(int(fun*sqrt(d),'y',y1,y2),'x',x1,x2)
digits(10);
number=vpa(intpov1) fun =
x*y*(1-x-y)
d =
3
intpov1=
1/120*3^(1/2)
number =
1443375673e-1
Задача 11. Вычислить поверхностный интеграл 1-го рода
, где S- сфера (по теореме 3).Сначала создадим функцию, описывающую поверхность по которой происходит интегрирование:
function [x,y,z]=pov;
syms x y z u v a
x=a*sin(u)*cos(v);
y=a*sin(u)*sin(v);
z=a*cos(u);
Программа:
syms x y z u v a
f=sym('x^2+y^2');
[x0,y0,z0]=pov;
syms E G F W
E=diff(x0,'u')^2+diff(y0,'u')^2+diff(z0,'u')^2;
G=diff(x0,'v')^2+diff(y0,'v')^2+diff(z0,'v')^2;
F=diff(x0,'u')*diff(x0,'v')+diff(y0,'u')*
diff(y0,'v')+diff(z0,'u')*diff(z0,'v');
W=sqrt(E*G-F^2); f2=W*subs(f,[x,y],[x0,y0]);
syms u1 u2 v1 v2
u1=sym('0');
u2=sym('pi/2');
v1=sym('0');
v2=sym('pi/2');
p=sym('8');
intpov=p*int(int(f2,'v',v1,v2),'u',u1,u2)
intpov2=simplify(intpov)
digits(10);
number=vpa(intpov2)
b=sym('1');
int=subs(intpov2,a,b) intpov =
4/3*a^2*pi*(a^4)^(1/2)*4^(1/2)
intpov2 =
8/3*a^4*pi*csgn(a^2)
number =
8.377580412*a^4*csgn(a^2)
int =
8/3*pi
Примечание. Функция сsgn является специфической в MATLAB. Она не может быть введена пользователем и возникает только при оперировании с функцией simplify (упрощение символьных выражений). Например:
>> syms a t
>> t=csgn(a^2)*a^2
??? Undefined function or variable 'csgn'.
>> simplify((a^4)^(1/2))
ans =
csgn(a^2)*a^2
>> simplify((a^8)^(1/4))
ans =
(a^8)^(1/4)
>> simplify((a^9)^(1/3))
ans =
(a^9)^(1/3)
1. Ануфриев, И.Е. Самоучитель MatLab 5.3/6.х / И.Е. Ануфриев. - СПб.: БХВ-Петербург, 2002. - 736 с.
2. Берман, Г.Н. Сборник задач по курсу математического анализа / Г.Н. Берман, И.Г. Араманович, А.Ф. Бермант и др. - М.: Наука, 1966. - 456 с.
3. Бермант, А.Ф. Краткий курс математического анализа для втузов / А.Ф. Бермант, И.Г. Араманович. - М.: Наука, 1966. - 736 с.
4. Гультяев, А. Визуальное моделирование в среде MatLab / А. Гультяев. - СПб.: Питер, 2001. - 553 с.
5. Демидович, Б.П. Задачи и упражнения по математическому анализу для втузов / Б.П. Демидович, Г.С. Бараненков, В.А. Ефименко и др. - М.: Наука, 1966. - 472 с.
6. Лазарев, Ю.Ф. MatLab 5.х / Ю.Ф. Лазарев. - Киев: BHV, 2000. - 388 с.
7. Мартынов, Н.Н. Matlab 5.х: вычисления, визуализация, программирование / Н.Н. Мартынов, А.П. Иванов. - М.: КУДИЦ-ОБРАЗ, 2000. - 336 с.
8. Куринной, Г.Ч. Математика: Справочник / Г.Ч. Куринной. - Харьков: Фолио; Ростов на Дону: Феникс, 1997. - 463 с.
9. Пискунов, Н.С. Дифференциальное и интегральное исчисление для втузов в 2 томах / Н.С. Пискунов. - М.: Наука, 1966. - 2 т. - 312 с.
10. Фихтенгольц, Г.М. Курс дифференциального и интегрального исчисления в 3 томах / Г.М. Фихтенгольц. - М.: Государственное изд-во физико-математической литературы, 1959. - т. 1-3.
11. Сайты http://www/informika.ru, htt://www.softline.ru, http://matlab.ru.