Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 01.03.2012, 13:23   #1 (permalink)
venera-8
Новичок
 
Регистрация: 04.06.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Turbo Pascal, метод Симпсона

Очень нужна помощь.. В общем суть- вычислить интеграл методом симпсона.. Я написала,всё считает,но, оказываетсЯ,еще нужен эпсилон- точность,которую надо забивать при расчете( напр. 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.
venera-8 вне форума   Ответить с цитированием

Старый 01.03.2012, 13:23
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пока участники форума дают вам ответы, вы можете почитать уже готовые темы

Turbo Pascal с Turbo Vision
Файл, файловый тип, Turbo Pascal
Cтек, Turbo Pascal
Turbo Pascal. Оператор CASE
Синтаксический анализатор. Turbo Pascal
Стек в Turbo Pascal

Старый 01.03.2012, 14:45   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Посмотрите эту тему:
Интеграл методом прямоугольников
Там программа по расчету численного интеграла тремя методами с заданной точностью. Суть: вот Вы задали число разбиений промежутка, сосчитали интеграл, запомнили результат. Потом удвоили число разбиений, снова сосчитали и сравнили результаты. Если расхождение не превышает заданной точности, то всё, задача решена, а если превышает - то снова мельчите шаг вдвое и т.д.

И еще - во избежание неприятностей, НЕ ДУБЛИРУЙТЕ ТОПИКИ! У нас это не допускается. Дубликат удален.
Vladimir_S вне форума   Ответить с цитированием
Старый 01.03.2012, 17:04   #3 (permalink)
venera-8
Новичок
 
Регистрация: 04.06.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

объясню что хочет препод..(я не знаю как реализовать,уже как только не делала). В общем вот у меня например при разбиении 100 и эпсилоне 0,1 выдает ответ -6,0325642 (это пример,ответ другой)
при 0,01 должен быть такой чтоб совпадала первая цифра после запятой, при 0,001 - две цифры после запятой и т.д. -6,0325642 потом 6,0345664 потом 6,0326456 и т.д. Я уже полгода ничего не могу сделать..и он объяснить не может... я делала с эпсилоном, но ему не понравилось, циферки там не менялись.. только в конце при больших эпсилон.. На самом деле нужна помощь...
venera-8 вне форума   Ответить с цитированием
Старый 01.03.2012, 17:16   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Девушка, мне кажется, что предложенный мною метод как раз и решает именно эту задачу. Обратите внимание - там каждая из процедур заканчивается строкой
Until ABS(Sum2-Sum1)<0.001;
Это и означает, что при измельчении шага вдвое изменяются только значащие цифры, меньшие порядка, указанного в этом самом эпсилон (там фиксированное значение 0.001, но можно, естественно, подставить любое: 0.1, 0.01, 0.0001 и т.п.). Чего же Вам еще?
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:30.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.