2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Turbo Pascal метод симпсона и точность
Сообщение01.03.2012, 10:44 
Очень нужна помощь.. В общем суть- вычислить интеграл методом симпсона.. Я написала,всё считает,но, оказываетсЯ,еще нужен эпсилон- точность,которую надо забивать при расчете( напр. 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

x:=a+2*h*i;
integ:=integ + 2*F(x) + 4*F(x+h);
end;
integ:=h*integ/3;



writeln('Integral= ',integ:10:6);
readln;
end.


 
 
 
 Re: Turbo Pascal метод симпсона и точность
Сообщение01.03.2012, 11:59 
Посмотрите в Википедии оценку точности формулы Симпсона.
Её надо вычислить отдельно используя 4-ую производную.
И научите преда. Удачи, солнце.

 
 
 
 Re: Turbo Pascal метод симпсона и точность
Сообщение02.03.2012, 16:05 
oveka в сообщении #544130 писал(а):
Её надо вычислить отдельно используя 4-ую производную.

Здесь эта оценка слишком груба -- из-за периодичности фактическая погрешность будет во много раз меньше.

venera-8 в сообщении #544108 писал(а):
Я не могу сообразить как вставить эпсилон сюда

Ну надо полагать, что вставлять надо не сам эпсилон, а контроль точности.

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

И не забывайте делать отступы -- Ваш текст выглядит просто неприлично.

 
 
 
 Re: Turbo Pascal метод симпсона и точность
Сообщение03.03.2012, 16:04 
А вот моя преподавательница по численным методам (практика), несмотря на всю ее ..., ... и ..., все-таки объясняла, что надо сделать: написать процедуру Simpson, которая будет брать на вход функцию, отрезок и кол-во точек разбиения, потом SimpsonEps, которая будет брать функцию, отрезок, начальное кол-во точек разбиения и эпсилон, и будет внутри себя в цикле repeat вызывать Simpson. Все это выносится в отдельный модуль, в главной же программе объявляется функция F, которую вы будете интегрировать, вводятся данные, вызывается SimpsonEps, выводится результат. И обязательно — в экспоненциальной форме.

 
 
 
 Re: Turbo Pascal метод симпсона и точность
Сообщение03.03.2012, 21:08 
ewert сказал, что делать
Введите внешний цикл repeat, на каждом шаге которого количество узлов удваивается и интегральная сумма вычисляется заново. Вычисления следует прекратить, когда разность двух последних результатов станет меньше допустимой погрешности.

 
 
 
 Re: Turbo Pascal метод симпсона и точность
Сообщение03.03.2012, 21:15 

(Оффтоп)

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

Правда, я не в курсе, как это принято делать в приличном опчестве. И уж конечно это -- не предмет рассмотрения для учебной задачки.

 
 
 
 Re: Turbo Pascal метод симпсона и точность
Сообщение03.03.2012, 21:39 
Думаю, что скрытое замечание ewert'a в тему. И спрашивающему знать не лишне.
Может создать сюрприз при выполнении с конкретными a, b.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group