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

Дана аналитическая функция Найти значение определенного интеграла на интервале [a,b] с заданной точностью - C++

Восстановить пароль Регистрация
 
maks1mus
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 40
05.06.2013, 22:19     Дана аналитическая функция Найти значение определенного интеграла на интервале [a,b] с заданной точностью #1
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <StdAfx.h>
#include <fstream>
#include <math.h>
#include <iostream>
#include <iomanip>
using namespace std;
 
void main( void )
{
    // Границы интервала
    double dA, dB;
    cout << "Input interval [a,b]\n";
    // Проверка правильности ввода интервала. 
// В случае ошибки ввод повторяется
bool bKey = false;
    while ( !bKey )
    {
        cin >> dA >> dB;
        if ( dA < dB ) 
        {
            bKey = true;
        }
        else
        {
            cout << "Wrong interval [a,b]\n";
        }
    }
    
cout << "Input threshold\n";
    double dThreshold;
// Ввод заданной точности
cin >> dThreshold;
 
    // Количество частичных интервалов
int nCount = 10;
    // Расчет шага аргумента
    double dDeltaX = (dB - dA) / nCount;
    // Прерыдущее и следующее приближение значения интеграла
double dResultPrev = 0, dResultNext;
    // Расчет первого приближения интеграла
    for ( int i = 0; i < nCount; i++ )
    {
        dResultPrev = dResultPrev + 2 * ( dA + dDeltaX * i ) * dDeltaX +((( dA + dDeltaX * i ) * dDeltaX )*(( dA + dDeltaX * i ) * dDeltaX));
    }
    // Увеличения числа частичных интервалов
nCount = nCount * 2;
    // Перерасчет шага аргумента
dDeltaX = (dB - dA) / nCount;
// Изначально принимаем погрешность вычисления первого приближения 
// значения интеграла заведомо большей заданной
    double dError = dThreshold + 1;
    // Повторяем итерации до тех пор пока не достигнута заданная точность
while ( dError > dThreshold )
    {
        // Вычисляем ичередное приближение
dResultNext = 0;
        for (int i = 0; i < nCount; i++ )
        {
            dResultPrev = dResultPrev + 2 * ( dA + dDeltaX * i ) * dDeltaX +((( dA + dDeltaX * i ) * dDeltaX )*(( dA + dDeltaX * i ) * dDeltaX));
        }
        // Определяем погрешность вычисления
dError = fabs( dResultNext - dResultPrev );
        dResultPrev = dResultNext;
        // Выводим промежуточный результат на экран
cout <<"Number of interval: "<<nCount<<"\t Error: "<<dError<<"\n";
        // Увеличиваем число частичных интервалов 
// и перасчитывем шаг аргумента
nCount = nCount * 2;
        dDeltaX = (dB - dA) / nCount;
    }
    // Выводим на экран конечный результат
cout << "Result: " << dResultPrev << "\n";
system("pause");
}
подправьте листинг
Дана аналитическая функция . Вид функции выбрать в соответствии с таблицей 8.1. Найти значение определенного интеграла на интервале [a,b] с заданной точностью .формула 2Х/х
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 22:19     Дана аналитическая функция Найти значение определенного интеграла на интервале [a,b] с заданной точностью
Посмотрите здесь:

C++ Функция рассчета определенного интеграла. (Передача функции как аргумента)
Даны интегралы. Сколько достаточно взять узлов, чтобы найти значение первого интеграла с точностью 0.001 C++
C++ найти все корни уравнения на заданном интервале [a;b] с заданной точностью
C++ Найти приближенное значение определенного интеграла по методу прямоугольников с точностью e=10^-3
Использование стандартных функций (найти все корни уравнения на заданном интервале [a;b] с заданной точностью) C++
Найти значение функции sinx с заданной точностью ε, используя данное разложение C++
C++ Найти значение корня на заданном интервале с заданной точностью
C++ Найти корень уравнения на интервале [a,b] с заданной пользователем точностью

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru