Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Розрахункова робота з чисельних методів.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
588 Кб
Скачать
☆

3.Теоретичний висновок:

Кожен метод є по своєму унікальний. Методи з використанням інтерполяції виявилися більш точними але для пошуку інтеграла потрібно обчислювати більше значень. Загалом вибір методу залежить від поставлених задач точності та часу обчислення.

4. Алгоритми

4.1.Алгоритм пошуку визначеного інтеграла методом Сімпсона

Алгоритм розв'язку зображений на рисунку 1

В блоці 1 алгоритм починає роботу.

В блоці 2 вводяться функція та межі інтегрування.

В блоці 3 обчислюється середина відрізку.

В блоці 4 перевірка нев‘язки |f(b)-f(a)|<e.

В блоці 5 за формулою Сімпсона обчислюємо суму.

В блоці 6 повернення отриманого результату.

В блоці 7 рекурсивний виклик функції Сімпсона з параметрами f,a,c.

В блоці 8 рекурсивний виклик функції Сімпсона з параметрами f,c,b.

В блоці 9 сумування двох останніх виразів.

В блоці 10 повернення отриманого результату.

В блоці 11 алгоритм завершає свою роботу.

4.2.Алгоритм пошуку визначеного інтеграла методом Буля

Алгоритм розв'язку зображений на рисунку 2

В блоці 1 алгоритм починає роботу.

В блоці 2 вводяться функція та межі інтегрування.

В блоці 3 обчислюється середина відрізку.

В блоці 4 перевірка нев‘язки |f(b)-f(a)|<e.

В блоці 5 за формулою Буля обчислюємо суму.

В блоці 6 повернення отриманого результату.

В блоці 7 рекурсивний виклик функції Буля з параметрами f,a,c.

В блоці 8 рекурсивний виклик функції Буля з параметрами f,c,b.

В блоці 9 сумування двох останніх виразів.

В блоці 10 повернення отриманого результату.

В блоці 11 алгоритм завершає свою роботу.

5.Текст програми:

function [ S ] = average( f,a,b )

c=(a+b)/2;

if abs(f(b)-f(a))<=1.e-3

S=(b-a)*f(b);

return

end

[S1]=...

average(f,a,c);

[S2]=...

average(f,c,b);

S=S1+S2;

end

function [ S ] = trapeze( f,a,b )

c=(a+b)/2;

if abs(f(b)-f(a))<=1.e-3

S=(b-a)/2*(f(a)+f(b));

return

end

[S1]=...

trapeze(f,a,c);

[S2]=...

trapeze(f,c,b);

S=S1+S2;

end

function [ S ] = simpson( f,a,b )

c=(a+b)/2;

if abs(f(b)-f(a))<=1.e-3

S=(b-a)/6*(f(a)+4*f(c)+f(b));

return

end

[S1]=...

simpson(f,a,c);

[S2]=...

simpson(f,c,b);

S=S1+S2;

end

function [ S ] = boole( f,a,b)

c=(a+b)/2;

S=boolestep(f,a,b,c);

end

function [S]=boolestep(f,a,b,c)

x=[(a+c)/2 (c+b)/2];

y=f(x);

if abs(f(b)-f(a))<=1.e-3

S=(b-a)/90*(7*f(a)+32*y(1)+12*f(c)+32*y(2)+7*f(b));

return

end

[S1]=...

boolestep(f,a,c,x(1));

[S2]=...

boolestep(f,c,b,x(2));

S=S1+S2;

end

Скрипт програми:

Calc.m

function Calc(a,b)

Q=quad(@func,a,b); %це стандартна функція MatLab%

A=average(@func,a,b);

T=trapeze(@func,a,b);

S=simpson(@func,a,b);

B=boole(@func,a,b);

fprintf('Quad=%8.25f\n',Q)

fprintf('Average=%8.25f\n error=%8.25f\n',A,Q-A)

fprintf('Trapeze=%8.25f\n error=%8.25f\n',T,Q-T)

fprintf('Simpson=%8.25f\n error=%8.25f\n',S,Q-S)

fprintf('Boole=%8.25f\n error=%8.25f\n',B,Q-B)

end

6. Тестові приклади

6.1. Приклад

f(x)= 1./exp(x.^3)

a=0;b=2;

>> Calc(0,2)

Quad=0.8929534944257634400000000

Average=0.8922816855615781600000000

error=0.0006718088641852748600000

Trapeze=0.8929533153654341000000000

error=0.0000001790603293416737100

Simpson=0.8929535183356427400000000

error=-0.0000000239098792986780500

Boole=0.8929535142948337200000000

error=-0.0000000198690702779558140