Очень нужна помощь.. В общем суть- вычислить интеграл методом симпсона.. Всё считает,но еще нужен эпсилон- точность,которую надо забивать при расчете( напр. 0,1 ;0,01 и т.д.). Я не могу сообразить как вставить эпсилон сюда.. Я учусь только программировать, подошла к преподу- а он даже объяснить ничего не может((надеюсь на вашу помощь.... уже долго сижу с этой проблемой и никак не могу понять... вот код:
program Simpson; uses crt; {integriruemaya funkciya} function F(x:Real):Real;
begin F:=exp(2*sin(x)) * sin(5 + 2* cos(x) ); end;
var a,b,h,x: real; i,n: integer; {n-chislo tochek na interv} integ: real;
begin clrscr; {interval integrirovaniya}
a:=0; b:=2*pi;
{osnovnaya programma}
write ('Vvedite kolichestvo razbieniy intervala (chetnoe) n= '); readln(n); if (n mod 2) > 0 then begin n:=n+1; writeln('Chislo n bilo vvedeno nechetnoe i bilo zameneno na n=',n); end; h:=(b-a)/n; integ:=F(a)+F(b)+4*F(a+h); for i:=1 to (n div 2 ) -1 do begin
Точность можно применить следующим образом: 1. Объявить функцию для вычисления интеграла методом Симпсона FUNCTION Sympson(a, b : Real; n : Integer) : Real; или TYPE TFunction = FUNCTION (x : Real) : Real; FUNCTION Sympson(a, b : Real; f:TFunction; n : Integer) : Real; в неё передавать помимо прочего количество интервалов n. 2. В основной программе функцию вызывать несколько раз, и каждый раз удваивать количество интервалов n. Разница между двумя приближёнными вычислениями и будет погрешность.
После этой вводной уже легко пристроить таинственную эпсилон: в цикле вычислять интеграл до тех пор, пока разность между приближениями не станет меньше эпсилон (не забывая удваивать n).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.