Skip to content

Вычисление интегралов различными методами

Доброго времени суток! Сегодня я хочу вам показать, как вычислять интегралы различными методами.

Сразу скажу, что пакет Matlab уже имеет набор стандартных решений интегралов, их количество достаточно для реализации разных задач, но иногда (актуально для учебных заведений) требуется реализовать метод, написав программу.

На самом деле такая реализация методов нерациональна, так как теряется смысл использования Matlab. Но не мне осуждать, мне — решать. Алгоритм реализации того или иного метода есть в интернете в свободном доступе, и сложности могут возникнуть только с синтаксисом языка в Matlab. Разберём типовую задачу решения интеграла:


Вычислить, разбив на количество отрезков n=100
Интеграл
Следующими методами:

• прямоугольники вперёд (правыми прямоугольниками);
• прямоугольники назад (левыми прямоугольниками);
• трапеций;
• трапеций MATLAB;
• Симпсона MATLAB;


Как вы наверняка догадались, MATLAB — означает, что будем реализовывать через стандартную функцию.
Для начала объявим необходимые переменные:

clear all %очищаем рабочее пространство
n = 100;
a1 = 0.4;  %Начало определённого интеграла
b1 = 0.5;  %Конец определённого интеграла
h = (b1-a1) / n;  %Находим шаг
x=a1:h:b1; %задаем шаг 

• Метод правых прямоугольников:

s=0;
for i=2:n
s=s+ (1./(1 + sin(x(i))+x(i)));
end;
s=s*h

Вывод:
s =
0.0526

• Метод левых прямоугольников:

for i=1:n-1
s=s+ (1./(1 + sin(x(i))+x(i)));
end;
s=s*h

Вывод:
s =
0.0526

• Метод трапеций:

Тут легче уже объявить функцию у.

y=(1./(1 + sin(x)+x));
F = 0;
m = 2;
while m <= n
    F = F + (x(m)-x(m-1))*0.5*(y(m)+ y(m-1));
    m = m +1;
end
F

Вывод:
F =
0.0526

• Метод трапеций MATLAB:

y=(1 ./(1 + sin(x)+ x));
trapz(x,y)

Просто, не так ли?
Вывод:
ans =
0.0531

Как видите, уже заметно, что у всех методов свои погрешности.

• Метод Симпсона MATLAB:

quad('1./(1 + sin(x)+x)',a1,b1,h)%метод Симпсона

Совсем просто, не так ли? =)
Вывод:
ans =
0.0531

Как видите, ничего страшного.
Давайте для закрепления материала, разберём ещё одну задачку:


Интегрировать с шагом 0.001
Интеграл
Следующими методами:

• прямоугольники вперёд (правыми прямоугольниками);
• прямоугольники назад (левыми прямоугольниками);
• трапеций;
• трапеций MATLAB;
• Симпсона MATLAB;


clear all 
a1 = 0.4;  %Начало определённого интеграла
b1 = 0.6;  %Конец определённого интеграла
h = 0.001;  %Находим шаг
x=a1:h:b1; %задаем шаг
n = (b1- a1)/h;

• Метод правых прямоугольников:

s=0; 
for i=2:n
s=s+ (sqrt(x(i)) .* cos( x(i).*x(i) ));
end;
s=s*h

Вывод:
s =
0.1349

• Метод левых прямоугольников:

s=0; 
for i=1:n-1
s=s+ (sqrt(x(i)) .* cos( x(i).*x(i) ));
end;
s=s*h

Вывод:
s =
0.1348

• Метод трапеций:

y=(sqrt(x) .* cos( x.*x ));
F = 0;
m = 2;
while m <= n
    F = F + (x(m)-x(m-1))*0.5*(y(m)+ y(m-1));
    m = m +1;
end
F

Вывод:
F =
0.1349

• Метод трапеций MATLAB:

trapz(x,y)

Вывод:
ans =
0.1363

• Метод Симпсона MATLAB:

quad('sqrt(x) .* cos( x.*x )',a1,b1,h)

Вывод:
ans =
0.1363

Надеюсь, теперь у вас не возникнет проблем с вычислением интегралов в Matlab.
Если у вас остались вопросы, то задавайте их в комментариях.

Исходники:
Скачать исходники задачи — 1
Скачать исходники задачи — 2

Опубликовано вMatlab

Будьте первым, кто оставит комментарий

    Добавить комментарий