
56565 (2)
.docx
Лабораторная работа №5 по ЧМ
«Интегрирование функций. Формулы трапеций, Симпсона»
Выполнил: Баранов вадим
1)
function I = Trapezia(fname, a, b, N)
h=abs(b-a)/N;
IntSum = feval(fname,a)+feval(fname,b);
x0=a;
for i=1:1:(N-1)
x0=x0+h;
IntSum=IntSum+2*feval(fname,x0);
end
I=h*IntSum/2;
end
>> Trapezia(@(x)x^3,0,1,1000)
ans =
0.250000250000001
>> abs(1/4-ans)
ans =
2.500000005345449e-07
function I = Simpson(fname,a,b,N)
h=abs(b-a)/(2*N);
IntSum=feval(fname,a)+feval(fname,b);
x0=a;
for i=1:1:(2*N-1)
x0=x0+h;
if rem(i,2)==0
IntSum=IntSum+2*feval(fname,x0);
else
IntSum=IntSum+4*feval(fname,x0);
end
end
I=h*IntSum/3;
end
>> Simpson(@(x)x^3,0,1,10)
ans =
0.250000000000000
>> abs(1/4-ans)
ans =
1.665334536937735e-16
Какие бы
получились значения погрешностей для
линейной функции (предположите и
проведите численный эксперимент для
f(x) = x^2,
на отрезке [0,1]).
>> Simpson(@(x)x/2,0,1,10)
ans =
0.250000000000000
>> Trapezia(@(x)x/2,0,1,1000)
ans =
0.250000000000000
2) Используя
соотношение
найдите значение числа
с точностью
,
используя формулу трапеции и формулу
Симпсона. Из каких соображений выбирался
шаг для получения указанной точности?
Трапеция:
Симпсон:
>> pi
ans =
3.141592653589793
>> 4*Trapezia(@(x)1/(1+x^2),0,1,450)
ans =
3.141591830544522
>> 4*Simpson(@(x)1/(1+x^2),0,1,200)
ans =
3.141592653589796
3)
>> abs(4*Trapezia(@(x)1/(1+x^2),0,1,900)-pi)
ans =
2.057613071038134e-007
>> abs(4*Simpson(@(x)1/(1+x^2),0,1,40)-pi)
ans =
1.505462421391712e-013
Реализация функциями MATLAB
q = quad(fun,a,b) – вычисление интеграла от функции fun (встроенной или описанной файл-функцией) на отрезке [a,b]. Алгоритм основан на квадратурной формуле Симпсона с автоматическим подбором шага.
>> 4*quad(@(x)1./(1+x.^2),0,1)
ans =
3.141592596973042
>> quad(@(x)x.^3,0,1)
ans =
0.250000000000000
>> quad(@(x)x/2,0,1)
ans =
0.250000000000000