
- •Лабораторная работа № 3 приближенное вычисление определенных интегралов. Методы прямоугольников, трапеций и симпсона
- •Постановка задачи
- •Содержание отчета
- •Теоретические сведения
- •Примеры выполнения заданий Пример ручного счета численного интегрирования
- •Пример вычисления определенного интеграла в среде mathcad
- •Пример вычисления определенного интеграла в среде matlab
- •Варианты заданий
Пример вычисления определенного интеграла в среде mathcad
-
Вычисление определенного интеграла с помощью встроенной функции
-
Программный блок, реализующий вычисление приближенного значения определенного интеграла. Параметр N определяет вид квадратурной формулы:
-
1 - формула Симпсона;
-
2 - формула трапеций;
-
3 - формула средних прямоугольников;
-
4- формула правых прямоугольников;
-
5 - формула левых прямоугольников.
-
g(u) – подынтегральная функция;
-
x – вектор узловых точек;
-
k – порядок метода N.
Программный блок для определения значения k-й производной функции g(u) в узловых точках:
Далее приведен фрагмент вычисления апостериорной погрешности – апостериорная погрешность для формулы средних прямоугольников, остальную часть программного блока составляют по аналогии:
…
…
-
Априорные погрешности приближенного вычисления определенного интеграла:
-
g(x) – подынтегральная функция;
-
x – узловые точки;
-
k – порядок метода N.
Пример вычисления определенного интеграла в среде matlab
-
Вычисление определенного интеграла с помощью встроенной функции:
>> syms x
>> I = double(int((x^2-6.5)/(x^3+sin(7.8*x)),3.6,5.4))
>>
I =
0.26649340577279
-
Программный блок, реализующий приближенное вычисление определенного интеграла:
//str – выбор метода приближенного вычисления определенного интеграла; a, b – пределы интегрирования; n – количество точек:
function res = Integral(str, a , b, n);
h = (b-a)/n;
Sum = 0;
switch (str)
// метод Симпсона
case 'Simpson'
q1=0; q2=0;
for i = 1:n-1
if (mod(i,2)==1)
q1 = q1+f(a + i*h);
else q2 = q2+f(a + i*h);
end;
end;
Sum =(h/3)*( f(a) + 4*q1 + 2*q2 + f(b));
//метод трапеций
case 'Trapezium'
for i = 1:n-1
Sum = Sum + f(a + i*h);
end;
Sum = (h/2)*( f(a) + 2*Sum + f(b));
//метод левых прямоугольников
case 'LeftRectangles'
for i=1:n-1
Sum = Sum + h*f(a + i*h);
end;
Sum = h*f(a) + Sum;
//метод правых прямоугольников
case 'RightRectangles'
for i=1:n-1
Sum = Sum + h*f(a + i*h);
end;
Sum = h*f(b) + Sum;
//метод средних прямоугольников
case 'MediumRectangles'
for i=1:n
Sum = Sum + h*f(((a + (i-1)*h)+(a + i*h))/2);
end;
otherwise
error('This is impossible value')
end
res = Sum;
return
-
Программный блок вычисления апостериорных погрешностей вычислений строится аналогично с использованием оператора выбора. Далее приведен фрагмент программы:
//вычисление погрешности для формулы трапеций
…
case 'Trapezium'
R = abs(Integral(str,a,b,n)-Integral(str,a,b,0.5*n))/3;
…
-
Результаты вычислений:
>> format long
>> IS = Integral('Simpson',3.6,5.4,12)
IS =
0.26649801994399
>> IT = Integral('Trapezium',3.6,5.4,12)
IT =
0.26635817701576
>> ILR = Integral('LeftRectangles',3.6,5.4,12)
ILR =
0.26584089261870
>> IRR = Integral('RightRectangles',3.6,5.4,12)
IRR =
0.26687546141281
>> IMR = Integral('MediumRectangles',3.6,5.4,12)
IMR =
0.26656137337914
…
>> Priori_ErrorIT = Priori_Error('Trapezium',3.6,5.4,12)
Priori_ErrorIT =
1.040388407134533e-005
…
Заметим, что априорные погрешности вычисляют аналогично. Для нахождения производной k-порядка следует воспользоваться встроенными функциями для определения производной. Ниже приведен справочный материал.
Синтаксис:
y = diff(x)
y = diff(x, n)
Описание:
Функция y = diff(x) вычисляет конечные разности.
Если x – одномерный массив вида x = [x(1) x(2) ... x(n)], то diff(x) – вектор разностей соседних элементов:
diff(x) = [x(2) - x(1) x(3) - x(2) ... x(n) - x(n-1)].
Количество элементов вектора x на единицу больше количества элементов вектора diff(x). Если X – двумерный массив, то вычисляют разности столбцов diff(X) = X(2:m, :) - X(1:m-1, :).
Функция y = diff(x, n) вычисляет конечные разности порядка n, удовлетворяющие рекуррентному соотношению
diff(x, n) = diff (diff(x, n-1)).
Аппроксимация производной n порядка есть отношение
diff(y, n)./diff(x, n).
При наличии специализированного пакета Symbolic Math Toolbox можно выполнить точное дифференцирование в символьном виде, используя следующие функции пакета:
-
diff(S) – дифференцирует символьное выражение S по свободной переменной;
-
diff(S, ‘v’) – дифференцирует символьное выражение S по v;
-
diff(S, n) и diff(S, ‘v’, n) – дифференцирует n раз символьное выражение S;
diff без аргументов – дифференцирует предшествующее выражение
Пример. Вычислить вторую производную от функции sin(x2) и шестую производную от t6.
Решение
>>syms x t
>>diff(sin(x^2))
>>2*x*cos(x^2)
>>diff(t^6,6)
>>720