Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bulavax
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 21
#1

Интеграл методом средних прямоугольников - C++

22.11.2014, 21:58. Просмотров 752. Ответов 4
Метки нет (Все метки)

Пишу прогу и что-то т не пойму в чем ошибка ( Что-то модуль разности сумм как-то некоректно считается.
Не подскажете ли в чем проблема? Заранее спасибо!
Да почему не работает((((

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
#include<iostream>
#include<math.h>
#include<conio.h>
long double IG(double);
using namespace std;
void main()
{setlocale(0,".1251");
cout<<"Метод средних прямоугольников"<<endl;
_getch();
long double F=0,h,S=0,I3=0;
long double L,K,n=10;
long double SF=2; 
long double x3=0;
for(int j=1;K<0.001;j++)
{h=(3-0)/n; 
for(int i=1;i<=n;i++)
{
I3=IG(x3+h/2);
x3=0+h*(i-1);
S=S+I3; 
}
L=SF-S*h; cout<<"L"<<L<<'\n';
K=0.333*fabs(L); cout<<"K"<<K<<'\n';
SF=S*h;
cout<<n<<'\n';
cout<<"S*h"<<S*h<<'\n';
n=n*2;
}
_getch();
}
long double IG(double x)
{
    long double I;
    I=asin(sqrt(x/(1+x)));
    return I;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2014, 21:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интеграл методом средних прямоугольников (C++):

Вычисление определенного интеграла методом средних прямоугольников для функции - C++
Вот само задание : Разработать программу для вычисления определенного интеграла методом средних прямоугольников для функции типа:...

Разработать программу для вычисления определенного интеграла методом средних прямоугольников. Проверка курсовой - C++
Будьте добры , проверьте правильно ли считает данная программа.И можно ли её доработать? Задание: Разработать программу для вычисления...

Интеграл в С++ Методом правых, средних и Симпсона - C++
Доброго времени суток. Надо написать программу, которая будет решать один интеграл 3 методами, можно все записать в 1 программе. С такого...

Вычислить интеграл методом прямоугольников - C++
Ребят помогите пожалуйста кому не трудно :( Вычислить интеграл методом прямоугольников. Начальное число шагов численного интегрирования –...

Найти интеграл методом прямоугольников - C++
использовать метод прямоугольников. Для построения прямоугольника использовать середину отрезка. y= 0, y = 5x − x2 +14. никак не...

Вычислить интеграл f(x)=5x(кв.)-x+2 методом прямоугольников - C++
Напишите программу вычисления интеграла f(x)=5x(кв.)-x+2 методом прямоугольников

4
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
22.11.2014, 22:24 #2
а что это такое вообще комментариев не будет? И что не устраивает в результате, я тоже должен угадать?

Ну, предположу, что S не обнуляется в цикле по i перед каждой попыткой посчитать интеграл. Что-то ещё?
0
bulavax
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 21
22.11.2014, 22:57  [ТС] #3
#include<iostream>
#include<math.h>
#include<conio.h>
long double IG(double);
using namespace std;
void main()
{setlocale(0,".1251");
cout<<"Метод средних прямоугольников"<<endl;
_getch();
long double F=0,h,S=0,I3=0;
long double L,K,n=10;
long double SF=2;
long double x3=0;
for(int j=1;K<0.001;j++) /*вычисление до одной тысячной по точности*/
{h=(3-0)/n; /* в цикле j меняем кол-во разбиений интервала от 0 до 3*/
for(int i=1;i<=n;i++)
{
I3=IG(x3+h/2); /* считаем сумму интегралов что бы получить приближенное значение */
x3=0+h*(i-1); /* устанавливаем новый узел*/
S=S+I3; /*меняем сумму для сложения в сл. итерации*/
}
L=SF-S*h; cout<<"L"<<L<<'\n'; /*разность приближенного значения интеграла в прохождении теперешнем и предыдущем */
K=0.333*fabs(L); cout<<"K"<<K<<'\n'; /*треть разности значения по модулю*/
SF=S*h; /*меняем значение интеграла прошлого на теперешнего*/
cout<<n<<'\n';
cout<<"S*h"<<S*h<<'\n';
n=n*2 ; /*увеличиваем кол-во разбиений отрезка в 2 раза*/
}
_getch();
}
long double IG(double x)
{
long double I;
I=asin(sqrt(x/(1+x)));
return I;
} /*проблема в цикле по j я проверял на 300000 разбиений нормально считает сумму до тысячной*/

Добавлено через 14 минут
Результат суммы там гдето 4.9144 должен быть, а в этот результат для 1 или для второго прохождения цикла по j =(
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
23.11.2014, 01:35 #4
Цитата Сообщение от bulavax Посмотреть сообщение
x3=0+h*(i-1);
почему 0?
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ну, предположу, что S не обнуляется в цикле по i перед каждой попыткой посчитать интеграл.
ты проигнорировал моё предположение.
1
bulavax
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 21
23.11.2014, 12:02  [ТС] #5
Только что проверил с S=0 в цикле по Ж и без него результат одинаковый выдает 2.4566 на 300000 разбиений
в мепле вроде значение интеграла (сумма арксин (x/(x+1))) в интервале от 0 до 3 выдает 1.7464 тоесть значение должно быть приближенно к этому наверное если мепл верно посчитал, а то может и нет((
Нуль это начало интервала по твоему вопросу. тоесть от 0 и по одному шагу расчитаному с помощью n (разбиений).

Добавлено через 56 минут
Все спасибо, я забыл что под арксинусом корень стоит проверил на мепле вроде точное значение выдает моя функция, хотя я и не совсем уверен что она верно работает)

Добавлено через 35 минут
Хотя нет бред какойто((((((((((((((((( Почему прерывется цикл по J. SF=0.04, условие меньше 0.001 и оно выходит ПОЧЕМУ((((

#include<iostream>
#include<math.h>
#include<conio.h>
long double IG(long double);
using namespace std;
void main()
{setlocale(0,".1251");
cout<<"Метод средних прямоугольников"<<endl;
_getch();
long double F=0,h,S=0,I3=0;
long double L,K=0,n=2;
long double SF=0;
long double x3=0;L=2;
for(int j=1;SF<0.001;j++)
{h=(3-0)/n; S=0;
for(int i=1;i<=n;i++)
{
I3=IG(x3+h/2);
x3=0+h*(i-1);
S=S+I3;
}
K=S*h;
cout<<'\n'<<S*h<<endl;
SF=0.333*fabs(L-K);
cout<<SF<<endl;
n=n*2;
L=K;
}
_getch();
}
long double IG(long double x)
{
long double I;
I=asin(sqrt(x/(1+x)));
return I;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 12:02
Привет! Вот еще темы с ответами:

Найти определенный интеграл методом прямоугольников - C++
программу написала, работает. но когда в черном окне ввожу пределы интегрирования и число разбиваний, сумма выходит равно нулю всегда.

Вычислить определенный интеграл методом прямоугольников - C++
Вычислить определенный интеграл методом прямоугольников Помогите!!! Вообще не пойму как делать?

Найти двойной интеграл методом прямоугольников - C++
программа для решения задачи вычисления двойного интеграла методом прямоугольников. в С++

Параллельное программирование: вычислить определенный интеграл методом прямоугольников - C++
необходимо написать программу с использованием библиотеки mpi.h Вычислить определенный интеграл от функции f(x) на отрезке методом ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
23.11.2014, 12:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru