• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Turbo Pascal, метод Симпсона

  • Автор темы Автор темы venera-8
  • Дата начала Дата начала

venera-8

Ученик
Регистрация
4 Июн 2011
Сообщения
3
Реакции
0
Баллы
0
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.
 
Посмотрите эту тему:
http://www.tehnari.ru/f43/t48865/
Там программа по расчету численного интеграла тремя методами с заданной точностью. Суть: вот Вы задали число разбиений промежутка, сосчитали интеграл, запомнили результат. Потом удвоили число разбиений, снова сосчитали и сравнили результаты. Если расхождение не превышает заданной точности, то всё, задача решена, а если превышает - то снова мельчите шаг вдвое и т.д.

И еще - во избежание неприятностей, НЕ ДУБЛИРУЙТЕ ТОПИКИ! У нас это не допускается. Дубликат удален.
 
объясню что хочет препод..(я не знаю как реализовать,уже как только не делала). В общем вот у меня например при разбиении 100 и эпсилоне 0,1 выдает ответ -6,0325642 (это пример,ответ другой)
при 0,01 должен быть такой чтоб совпадала первая цифра после запятой, при 0,001 - две цифры после запятой и т.д. -6,0325642 потом 6,0345664 потом 6,0326456 и т.д. Я уже полгода ничего не могу сделать..и он объяснить не может... я делала с эпсилоном, но ему не понравилось, циферки там не менялись.. только в конце при больших эпсилон.. На самом деле нужна помощь...
 
Девушка, мне кажется, что предложенный мною метод как раз и решает именно эту задачу. Обратите внимание - там каждая из процедур заканчивается строкой
Until ABS(Sum2-Sum1)<0.001;
Это и означает, что при измельчении шага вдвое изменяются только значащие цифры, меньшие порядка, указанного в этом самом эпсилон (там фиксированное значение 0.001, но можно, естественно, подставить любое: 0.1, 0.01, 0.0001 и т.п.). Чего же Вам еще?
 
Назад
Сверху