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

Методы вычисления интегралов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Считая, что оно введено в восьмеричной системе счисления, найти его десятеричное представление http://www.cyberforum.ru/cpp-beginners/thread418163.html
Задано число диапазона unsigned long. Считая, что оно введено в восьмеричной системе счисления, найти его десятеричное представление.
C++ Вложенные циклы.Нужно просто Исправить! Вот задание:Даны целые положительные числа N и K. Найти сумму 1^K + 2^K + … + N^K. Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число. Ниже код,все верно по идее,но работает лишь с некоторыми значениями(Помогите пожалуйста,если не сложно:)#include <iostream.h> #include <conio.h> #include... http://www.cyberforum.ru/cpp-beginners/thread418158.html
C++ Работа с реестром.
Итак, есть прога, которая прописывается в реестр в HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run. Но при перезагрузке прога не запускается, в реестре она не записана. Где косяк? Код: #include "stdafx.h" #include <Windows.h> #include <WinUser.h> #include <stdio.h> #include <iostream> #include <conio.h> #include <locale> using namespace std; void main() {
Найти число от 100 до 300 у кторого сумма делителей равна 50??? C++
в С++ 1) Найти число от 100 до 300 у кторого сумма делителей равна 50??? 2) Дано число n найти первое натуральное число квадрат которого больше n? 3) с начала 2000 года по некоторый день прошло n месяца и 2 дня, определить название месца этого дня? 4) Дано четырёхзначное число определить входит ли в него цифра 4? 5) Определить верно ли что при делении числа А на В получится остаток? ...
C++ Задача по с++. Массивы http://www.cyberforum.ru/cpp-beginners/thread418128.html
Задан массив точек. Определить из них точку, что круг, с центром в ней, покроет остальные при минимальном радиусе. Докажите это (т.е. выбирается точка и считается радиус покрывающего круга).
C++ Динамическая память. Разработать две функции, одна из которых вводит с клавиатуры набор данных в произвольной последовательности и размещает в памяти в переменном формате. Другая функция читает эти данные и выводит на экран. Программа запрашивает и размещает в памяти несколько наборов данных при помощи первой функции, размещает их в стек/очередь (по выбору преподавателя), а затем читает их и выводит на экран при... подробнее

Показать сообщение отдельно
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
26.12.2011, 22:01     Методы вычисления интегралов
Вот. Две варианта метода. Первый от функции (что удобнее), а второй от массива.

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
75
76
#include<iostream>
#include <string.h>
using namespace std; 
 
enum integralMethods {methRect, methTrap, methSymp};
class Integral
{
public:
    static double getIntegral(double (*fun)(double), double x1, double x2, integralMethods meth, int count = 1000)
    {
        if (count<2) return 0;
        double xx = x2 - x1, sum; 
        int c1 = count - 1; 
        switch (meth)
        {
            case methRect:
            sum = 0;
            for (int i = 0; i < c1; i++) sum += (*fun)(x1 + i * xx/c1);  
            break;
            case methTrap:
            sum = ((*fun)(x1) + (*fun)(x2))*0.5;
            for (int i = 1; i < c1; i++) sum += (*fun)(x1 + i * xx/c1);  
            break;
            case methSymp:
            sum = (*fun)(x1) + (*fun)(x2);
            c1 = (c1>>1)<<1;
            for (int i = 1; i < c1; i += 2) sum += 4 * (*fun)(x1 + i * xx/c1);  
            for (int i = 2; i < c1; i += 2) sum += 2 * (*fun)(x1 + i * xx/c1);  
            sum /= 3;
            break;
        }
        return sum * xx/c1;
    }
    static double getIntegral(double * array, double x1, double x2, integralMethods meth, int count)
    {
        if (count<2) return 0;
        double xx = x2 - x1, sum; 
        int c1 = count - 1;     
        switch (meth)
        {
            case methRect:
            sum = 0;
            for (int i = 0; i < c1; i++) sum += array[i];  
            break;
            case methTrap:
            sum = (array[0] + array[c1])*0.5;
            for (int i = 1; i < c1; i++) sum += array[i];  
            break;
            case methSymp:
            sum = array[0] + array[c1];
            for (int i = 1; i < c1; i += 2) sum += 4 * array[i];  
            for (int i = 2; i < c1; i += 2) sum += 2 * array[i];  
            sum /= 3;
            break;
        }
        return sum * xx/c1;
    }
};
 
static double parab(double x)
{
    return x*x;
}
 
int main()
{
    cout<<Integral::getIntegral(parab,0,4,methRect)<<endl;
    cout<<Integral::getIntegral(parab,0,4,methTrap)<<endl;
    
    int cnt = 1001;
    double * y = new double[cnt];
    double x1 = 0, x2 = 4;
    for (int i = 0; i<cnt; i++) y[i] = parab(x1 + i*(x2 - x1)/(cnt - 1));
    cout<<Integral::getIntegral(y,x1,x2,methRect,cnt)<<endl;
    return 0;
}
 
Текущее время: 12:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru