2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45

Вычисление определённого интеграла методом Симпсона

22.06.2015, 17:28. Показов 3135. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди добрые,помогите.Есть примерные наброски,но нужно кое-что поменять,доделать.

Условие(таблица в файлах):
-составить программу вычисления определённого интеграла при 36 отрезках разбивки интеграла.
-точное значение интеграла путём табулирования первообразной функции по формуле Ньютона-Лейбница
-значение определённого интеграла с точностью ε = 0,001

ИнтегралМетодЧисло участков
интегрирования
n
Шаг
h
Первообразная
https://www.cyberforum.ru/cgi-bin/latex.cgi?\int_2^4\frac 1{x\lg x}dxСимпсона
36
0.2https://www.cyberforum.ru/cgi-bin/latex.cgi?(\ln \,\ln \,x - \ln \,\ln \,2)\cdot \ln (10)

Программа:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Program integr;
Uses Crt;
Const eps=0.001;
Var i:integer;
h,a1,b1,s2,d1,d2,s1,SUM,plosh:real; raznica,n:real;
Function Ingr (x: real) : real; 
begin
Ingr:=1/(x*ln(x)); 
end;
Procedure Go(a,b:real); var i1:integer; 
begin
Write('Vvedite nomer uchastka integrirovania n= ');
Read(n); 
h:=(b-a)/n; 
i1:=1; 
s1:=0;
while i1<=(n-1) 
do
begin s1:=s1+Ingr(a+i1*h); 
i1:=i1+2; 
end; 
s2:=0; 
i1:=2;
While i1<=(n-2) 
do
begin
s2:=s2+Ingr(a1+i1*h); 
i1:=i1+2; 
end ;
d1:=Ingr(a); 
d2:=Ingr(b);
SUM:=h*(d1+d2+4*s1+2*s2)/3;
end;
begin
ClrScr;
write('Vvedite niznuju granizzu a=');
Read(a1);
Write('Vvedite verhnuju granizzu b=');
Read(b1);
WriteLn('Integral  Newleib   Eps    shag');
repeat
Go(a1,b1);
plosh:=(ln(ln(b1))-ln(ln(2)))*ln(10)-(ln(ln(a1))-ln(ln(2)))*ln(10); 
raznica:=(abs(plosh-sum));
WriteLn(sum:6:3,' ',plosh:8:5,' ',raznica:8:5,' ',h:7:4);
until(abs(raznica)<eps);
readln;
end.
Программа вроде как работает,но зачем выводить шаг(я хз,тут мне помогали).
Преподавателю не понравилась прога.Во-первых нужно a и b не вводить,а чтоб они уже были заданы и n тоже вводить не нужно,а надо чтоб все 36 сразу показывало.Во-вторых должно быть ε = 0,001 ,а у меня ну никак не 0,001.

Будьте добры,помогите.Спасибо за внимание.

Прогон (неправильное решение):
Code
Vvedite niznuju granizzu a=2
Vvedite verhnuju granizzu b=4
Integral  Newleib   Eps    shag
Vvedite nomer uchastka integrirovania n= 36
 0.693  1.59603  0.90288  0.0556
Vvedite nomer uchastka integrirovania n=
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2015, 17:28
Ответы с готовыми решениями:

Вычисление определенного интеграла методом Симпсона
Добрый день. Задача: Написать процедуру вычисления определенного интеграла методом Симпсона. У меня такой вопрос, если пределы...

Решение интеграла методом Симпсона
Имеется такой интеграл: интеграл 1/(1+x*x*x) от x=0 до бесконечности. Решить с помощью метода Симпсона с точностью 0.00001. Не понимаю...

Вычисление определенного интеграла с заданной точностью( метод Симпсона)
Проверьте пожалуйста программу на ошибки. 1/xlg(x) a=2 b=3 Program Simpson4; function F(x:real):real; begin ...

9
2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45
24.06.2015, 00:10  [ТС]
Мне кажется что проблема именно в подсчёте Лейбница,но вроде всё должно быть правильно,есть идеи?

Добавлено через 6 минут
Если у кого-то проблемы с транслитом.

Code
Введите нижнюю границу интеграла a=2
Введите верхнюю границу интеграла b=4
Integral  Newleib   Eps    shag
Введите номер участка интегрирования n= 36
 0.693  1.59603  0.90288  0.0556
Введите номер участка интегрирования n=
0
2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45
25.06.2015, 19:29  [ТС]
Если кому нужно добавил блок-схему к программе:
Кликните здесь для просмотра всего текста
0
2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45
01.07.2015, 17:40  [ТС]
Ещё актуально,никак не получается.
0
Почетный модератор
 Аватар для Puporev
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,168
02.07.2015, 11:05
В целом я в этом не рублю, но функцию следует написать так.
Pascal
1
2
3
4
Function Ingr (x: real) : real;
begin
Ingr:=ln(10)/(x*ln(x));
end;
поскольку lg(x)=ln(x)/ln(10);

Добавлено через 4 часа 13 минут
Цитата Сообщение от Valet194 Посмотреть сообщение
путём табулирования первообразной функции по формуле Ньютона-Лейбница
Это что и зачем?
интеграл вычисляется по формуле Ньютона-Лейбница:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\int_{a}^{b}f(x)dx=F(b)-F(a)
1
2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45
02.07.2015, 11:29  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
В целом я в этом не рублю, но функцию следует написать так.
Код Pascal
1 Function Ingr (x: real) : real;
2 begin
3 Ingr:=ln(10)/(x*ln(x));
4 end;
поскольку lg(x)=ln(x)/ln(10);
Всё-равно получается что-то не то:

Code
1
2
3
4
5
6
7
Введите нижнюю границу интеграла a=2
Введите верхнюю границу интеграла b=4
Integral  Newleib   Eps    shag
Введите номер участка интегрирования n= 9
 1.496  1.59603  0.10000  0.2222
Введите номер участка интегрирования n=10
 1.596  1.59603  0.00011  0.2000
Теперь даже выбивать стало иногда с exe,хотя точность иногда стала подходить по условию задания.
У меня есть примеры моих одногруппников,но там на с++,поэтому и не вижу особого смысла их кидать.Но если надо скажите.
0
Почетный модератор
 Аватар для Puporev
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,168
02.07.2015, 11:53
Я не понимаю суть Вашей задачи, но вот написал программку, все сходится.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
uses crt;
function F(x:real):real;
begin
F:=ln(10)/x/ln(x);
end;
function P(x:real):real;
begin
P:=ln(10)*(ln(ln(x))-ln(ln(2)));
end;
var a,b,h,k,s:real;
    n,i:integer;
begin
clrscr;
a:=2;
b:=4;
n:=36;
h:=(b-a)/n;
s:=0;
k:=a;
for i:=1 to n-1 do
 begin
  k:=k+h;
  if i mod 2=0 then s:=s+2*f(k)
  else s:=s+4*f(k);
 end;
s:=(s+f(a)+f(b))*h/3;
writeln('Интеграл=',s:0:5);
writeln('Проверка=',P(b)-P(a):0:5);
readln
end.
Добавлено через 7 минут
Или вот чуть другой код, тоже самое.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
uses crt;
function F(x:real):real;
begin
F:=ln(10)/x/ln(x);
end;
function P(x:real):real;
begin
P:=ln(10)*(ln(ln(x))-ln(ln(2)));
end;
 
var x,a,b,h,s:real;
    n:integer;
begin
clrscr;
a:=2;
b:=4;
n:=36;
h:=(b-a)/n;
s:=0; x:=a+h;
while x<b do
begin
s:=s+4*f(x);
x:=x+h;
s:=s+2*f(x);
x:=x+h;
end;
s:=h/3*(s+f(a)-f(b));
writeln;
writeln('Интеграл = ',s:0:5);
writeln('Проверка = ',p(b)-p(a):0:5);
readkey;
end.
1
2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45
02.07.2015, 11:58  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Я не понимаю суть Вашей задачи, но вот написал программку, все сходится.
Во-первых n надо чтобы все 36 сразу показывало.Во-вторых найти точное значение интеграла путём табулирования первообразной функции по формуле Ньютона-Лейбница и должно быть значение определённого интеграла с точностью ε = 0,001.
0
Почетный модератор
 Аватар для Puporev
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,168
02.07.2015, 12:03
Цитата Сообщение от Valet194 Посмотреть сообщение
Во-первых n надо
Надо, так делайте. Я просто поправил функцию и показал что интеграл считает верно,он действительно равен 1.59603
0
2 / 2 / 1
Регистрация: 17.06.2015
Сообщений: 45
02.07.2015, 12:15  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Надо, так делайте.
Извините,если Вас обидел.Но если бы я мог - уже сделал.Вот по этому и ищу помощи на форуме.

Вот как сделал мой друг на с++,но тут метод трапеции,но может поможет кому:

Условие:
Кликните здесь для просмотра всего текста


Код с++
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>
#include <stdio.h>
#include <cmath>
#include <cstdlib>
using namespace std; 
 
int main () 
{
    {
  int n;
  int i;
  int t;
  double x=0.4,sum=0, h = 0.01, S, d, K, z;
  n=160;
  printf("  No |       x      |   Integral   |\n");
  printf("-----|--------------|---------------|\n"); 
  d=((sqrt(0.4*0.4-0.16)/0.4)+(sqrt(2*2-0.16)/2))/2;
    for (i=1; i<=n; i++)
    {
       x=x+h;
       S=S+((sqrt(pow(0.4+i*h,2)-0.16))/(0.4+i*h));
       sum =(double)(h*(d+S)+h);
       printf (" %2d  |  %.3lf  |  %.5lf |\n" , i, x,sum);
    }
    K=( (sqrt(2*2-0.16)-0.4*acos(0.4/2)-sqrt(0.84)+0.4*acos(0.4))-(sqrt(0.4*0.4-0.16)-0.4*acos(0.4/0.4)-sqrt(0.84)+0.4*acos(0.4)));
    cout<<" tochnoe znachenie integrala = " << K << endl;
    z=K-sum;
    cout << " z=  " << z << endl;
    system ("pause");
    t=0;
    do
    {
    t++ ;
     h=h/t;
     n=1.6/h;
     S=0;
    x=0.4;
     for (i=1; i<=n; i++)
     {
       x=x+h;
       S=S+((sqrt(pow(0.4+i*h,2)-0.16))/(0.4+i*h));
       sum =(double)(h*(d+S)+h);
       printf (" %2d  |  %.3lf  |  %.5lf |\n" , i, x,sum);
       z=K-sum;
    }
    cout << "t= "<< t<< endl; 
    cout << "eps = " << z <<endl;
       system ("pause");
} while (abs(z)>=0.001);
system ("pause");
}
}


Результаты:
Кликните здесь для просмотра всего текста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2015, 12:15
Помогаю со студенческими работами здесь

Вычисление интеграла методом трапеции
Помогите пожалуйста написать программу, решение функции методом трапеции=) \int_{0}^{1}cos\,\left(x^2+x \right)\,dx\\ ...

Вычисление интеграла методом Монте-Карло
5.5. Вычисление интеграла методом Монте–Карло. Вычислить значения функции в заданных точках t1,t2,..tm . Значение интеграла...

Процедура вычисление интеграла методом прямоугольников
решить интеграл с помощью метода прямоугольников. Можно любым методом прямоугольников.Полученное значение сравнить с результатом вычисления...

Вычисление интеграла методом левых прямоугольников
Народ, как можно вычислить интеграл (интеграл |1 + sin^5.5 x| dx) с точностью 0,01 методом левых прямоугольников. Очень нужно..

Вычисление определённого интеграла методом прямоугольников
Уважаемые программисты, спасите пожалуйста!!! В общем, нужно написать программу, которая вычисляет определённый интеграл методом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru