Лабораторная работа №4. Численное интегрирование
Программа для вычисления интеграла при помощи формулы Симпсона.
function [y]=quadsimp(f,a,b,h)
n=round((b-a)/(h*2)); % половина от общего числа вычислений f
h=(b-a)/(2*n); % уточняем h
sum1=0;
sum2=0;
for i=1:(n-1),
sum1=sum1+feval(f,a+h*(2*i-1));
sum2=sum2+feval(f,a+h*2*i);
end;
sum1=sum1+feval(f,a+h*(2*n-1));
y=(feval(f,a)+feval(f,b)+4*sum1+2*sum2)*h/3;
Результаты работы прогрммы для различных значений шагов:
quadsimp('sin',0,pi,0.1)
ans =
2.00000103336941
>> quadsimp('sin',0,pi,0.2)
ans =
2.00001659104794
>> quadsimp('sin',0,pi,0.5)
ans =
2.00086318967354
Теоретическое значение интеграла равно двум.Соотвтственно значения погрешностей составляют:
0.00000103336941 - для шага 0.1
0.00001659104794 - для шага 0.2
0.00086318967354 - для шага 0.5
Процедура ,использующая формулу трапеций:
function I = plotTrap(fun,a,b,h)
n=round((b-a)/h);
x = a:h:b;
y = feval(fun,x);
I = h * ( 0.5*y(1) + sum(y(2:n-1)) + 0.5*y(n) )
Результаты работы прогрммы для различных значений шагов:
>> plottrap('sin',0,pi,0.1)
ans =
1.98833389306628
>> plottrap('sin',0,pi,0.2)
ans =
1.98335476185706
>> plottrap('sin',0,pi,0.5)
ans =
1.76346250444691
Теоретическое значение интеграла равно двум.Соотвтственно значения погрешностей составляют:
0.01166610693372 - для шага 0.1
0.01664523814294 - для шага 0.2
0.23653749555309 - для шага 0.5
Процедура ,использующая формулу прямоугольников:
function I = plotrect(fun,a,b,h)
n=round((b-a)/(h));
h=(b-a)/(n);
x = a:h:b;
y = feval(fun,x);
I = h *sum(y(2:n-1));
Результаты работы прогрммы для различных значений шагов:
>> plotrect('sin',0,pi,0.1)
ans =
1.98803544737928
>> plotrect('sin',0,pi,0.2)
ans =
1.95526444862032
>> plotrect('sin',0,pi,0.5)
ans =
1.69229784551456
Теоретическое значение интеграла равно двум.Соотвтственно значения погрешностей составляют:
0.01196455262072 - для шага 0.1
0.04473555137968- для шага 0.2
0.30770215448544- для шага 0.5
Вычисление определенного интеграла функции y=x^2 на отрезке [0,1] при помощи формул прямоугольников и трапеций при различных шагах:
b = 1;
a = 0;
h=0.1;
n=round((b-a)/(h));
h=(b-a)/(n);
x = a:h:b;
y = x.*x;
I1 = h * ( 0.5*y(1) + sum(y(2:n)) + 0.5*y(n+1) ) %по формуле трапеций
I2 = h *sum(y(2:n)) %по формуле прямоугольников
При h=0.1:
I1 =
0.33500000000000
I2 =
0.28500000000000
При шаге 0.2
I1 =
0.34000000000000
I2 =
0.24000000000000
При шаге 0.01
I1 =
0.33335000000000
I2 =
0.32835000000000