01.03.2012, 13:23 | #1 (permalink) |
Новичок
Регистрация: 04.06.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Turbo Pascal, метод Симпсона
Код:
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. |
01.03.2012, 13:23 | |
Helpmaster
Member
Регистрация: 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) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Посмотрите эту тему:
Интеграл методом прямоугольников Там программа по расчету численного интеграла тремя методами с заданной точностью. Суть: вот Вы задали число разбиений промежутка, сосчитали интеграл, запомнили результат. Потом удвоили число разбиений, снова сосчитали и сравнили результаты. Если расхождение не превышает заданной точности, то всё, задача решена, а если превышает - то снова мельчите шаг вдвое и т.д. И еще - во избежание неприятностей, НЕ ДУБЛИРУЙТЕ ТОПИКИ! У нас это не допускается. Дубликат удален. |
01.03.2012, 17:04 | #3 (permalink) |
Новичок
Регистрация: 04.06.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
объясню что хочет препод..(я не знаю как реализовать,уже как только не делала). В общем вот у меня например при разбиении 100 и эпсилоне 0,1 выдает ответ -6,0325642 (это пример,ответ другой)
при 0,01 должен быть такой чтоб совпадала первая цифра после запятой, при 0,001 - две цифры после запятой и т.д. -6,0325642 потом 6,0345664 потом 6,0326456 и т.д. Я уже полгода ничего не могу сделать..и он объяснить не может... я делала с эпсилоном, но ему не понравилось, циферки там не менялись.. только в конце при больших эпсилон.. На самом деле нужна помощь... |
01.03.2012, 17:16 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Девушка, мне кажется, что предложенный мною метод как раз и решает именно эту задачу. Обратите внимание - там каждая из процедур заканчивается строкой
Until ABS(Sum2-Sum1)<0.001; Это и означает, что при измельчении шага вдвое изменяются только значащие цифры, меньшие порядка, указанного в этом самом эпсилон (там фиксированное значение 0.001, но можно, естественно, подставить любое: 0.1, 0.01, 0.0001 и т.п.). Чего же Вам еще? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|