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

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

Войти
Регистрация
Восстановить пароль
 
KVANTA
3 / 3 / 0
Регистрация: 12.12.2011
Сообщений: 68
#1

Массив - C++

14.12.2011, 17:51. Просмотров 348. Ответов 7
Метки нет (Все метки)

Массив (у0,у1, ... ,уn) представляет собой значения некоторой функции на
отрезке [a,b], причем a=y0,b=yn. Создать класс Integral, в котором
реализовано вычисление определенного интеграла методом прямоугольников,
методом трапеций и методом Симпсона.

Добавлено через 30 секунд
Помогите пожалуйста написать эту прогу С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 17:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив (C++):

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию"Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив... - C++
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько...

Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив. - C++
Есть текстовый файл, в нем 3 столбца чисел (число строк заранее неизвестно). Напишите пожалуйста код, чтобы первый столбец записывался в...

Переписать положительные элементы массива K,кратные пяти в массив M,а остальные-в массив Q. - C++
Дан массив K(N).Переписать положительные элементы массива K,кратные пяти в массив M,а остальные-в массив Q.

Есть массив одинаковых элементов, сделать функцию делающую массив различных - C++
Дан одномерный массив, среди элементов которого есть совпадающие. Разработать функцию, создающую массив из различных элементов.

7
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
14.12.2011, 18:09 #2
Массив (у0,у1, ... ,уn) как заполняется/откуда берется?
0
KVANTA
3 / 3 / 0
Регистрация: 12.12.2011
Сообщений: 68
14.12.2011, 18:28  [ТС] #3
наверное рандом, точных указаний в задании не было
0
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
14.12.2011, 18:55 #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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cmath>
 
 
using namespace std;
 
double F(double x) {
    //Функция
}
 
double Integral(vector<double> vec) {
    double h = vec[vec.size()-1] - vec[0] / 10000000;
    return std::accumulate(vec.begin(), vec.end() - 1, 0) * h;
}
 
int main() {
    vector<double> _func;
    for(int i = 0; i <10000000; i++) {
        //тут заполняеться вектор _func (_func.push_back(value))
    }
    cout << Integral(_func) << endl;
    return 0;
}
Ну а все остальное по анологии, просто изменить функцию Integral. Вот формулы:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
0. Формула прямоугольников
   h = (b-a)/N;
   Int (f(x),a,b) = h * (f(x[0])+f(x[1])+...+f(x[N]))
 
1. Формула средних
   h = (b-a)/N;
   Int (f(x),a,b) = h * (f(x[1/2])+f(x[1+1/2])+...+f(x[N-1/2]))
   Выражение "f(x[i+1/2])" означает "значение функции f(x) в точке (x[i]+x[i+1])/2"
 
2. Формула трапеций
   h = (b-a)/N;
   Int (f(x),a,b) = h * (1/2*f(x[0])+f(x[1])+f(x[2])+...+f(x[N-1])+
                       +1/2*f(x[N]))
 
3. Формула Симпсона (N должно быть четным)
   h = (b-a)/N;
   Int (f(x),a,b) = h/3 * (f(x[0])+4*f(x[1])+2*f(x[2])+4*f(x[3])+
                    +2*f(x[4])+...+2*f(x[N-2])+4*f(x[N-1])+f(x[N]))
 
4. Формула Эйлера (в предположении, что известны значения производной
   f'(x) в узлах x[0] и x[N])
   h = (b-a)/N;
   Int (f(x),a,b) = h * (1/2*f(x[0])+f(x[1])+f(x[2])+...+f(x[N-1])+
                    +1/2*f(x[N])) + 1/12*h^2*(f'(x[0])-f'(x[N]))
1
KVANTA
3 / 3 / 0
Регистрация: 12.12.2011
Сообщений: 68
14.12.2011, 18:56  [ТС] #5
огромное спасибо
0
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
14.12.2011, 19:04 #6
Да незачто, если надо могу выложить примеры кода с использованием метода Монте-Карло.
0
KVANTA
3 / 3 / 0
Регистрация: 12.12.2011
Сообщений: 68
14.12.2011, 19:43  [ТС] #7
и такой есть?? а можете эту задачу только полностью написать, а то я сделал по аналогии, но компилятор ругается, буду очень признателен
0
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
14.12.2011, 20:56 #8
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
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
 
double R(const int a,const  int b) {
    return (double)rand()/(double)RAND_MAX*(b-a)+a;
}
 
int main() {
    srand(time(NULL));
    double x,y,integral;
    int p=int();
    for(int i = 0; i < 100000; i++) {
        x = R(0,5);
        y = R(0,5);
        if(pow(x,2.0/3.0) <= (pow(5,2.0/3.0) - pow(y,2.0/3.0)) && pow(y,2.0/3.0) <= (pow(5,2.0/3.0) - pow(x,2.0/3.0))) {
            p++;
        }
    }
    integral = p/100000.0*25;
    cout << integral << endl;
 
    system("pause");
    return 0;
}
Интеграл по этой фигуре ( x^(2/3)+y^(2/3) = 5^(2/3), y = 0, x = 0 (в первой четверти))
Ну какая-то теория по алгоритму:
Код
II. Метод статистических испытаний (метод Монте-Карло)

0. Неформальное введение в метод Монте-Карло интегрирования n-мерных функций

Предположим, нам надо найти объём шара с R=1, находящегося в начале системы
координат. Описываем этот шар кубом. Куб будет иметь длину ребра, равную 2, и
его центр также будет находиться в начале системы координат. Начинаем
генерировать точки со случайными координатами (x,y,z) так, чтобы они находились
внутри куба - т.е. каждая координата будет случайным числом в диапазоне [-1,1].
Для каждой точки определяем, попала она внутрь шара, или нет. Сгенерировав
достаточно большое количество точек, найдем соотношение числа точек, попавших в
шар, к общему числу точек. Это соотношение примерно равно соотношению объёма
шара к объёму куба. Умножив его на объём куба (который легко вычисляется),
получим (приближенно) искомый объём шара.

1. Формальное введение

Пусть имеется многомерный объём V. Равномерно разбросаем в нём N случайных
точек x[1], ..., x[N]. Тогда базовая теорема о приближенной оценке
интеграла от функции f() по многомерному объёму V методом Монте-Карло
утверждает, что интеграл функции f() по многомерному объёму V приближенно равен:
    Integral (f * dV) ~= V * G1,
причем ошибка оценки значения интеграла обратно пропорциональна N и равна:
    E = V * sqrt ((G2 - G1^2) / N),
где
    V  = объем многомерной области
    G1 = среднее арифметическое N значений функции g(),
    G2 = среднее арифметическое N значений функции g()^2.

Иногда требуется найти интеграл функции w() по многомерному объему W сложной
формы, который трудно заполнить равномерно. В этом случае выбирают область V,
которая включает W и может быть без труда заполнена равномерно (например,
многомерный параллелипипед), а функцию w() доопределяют в области V\W (т.е. вне
W, но внутри V) как равную нулю:
    g(x) = w(x), если x принадлежит W,
    g(x) = 0,    если x принадлежит V\W.
Затем к функции g() и области V применяют базовую теорему.

Метод предполагает, что функция g() определена в любой точке области V.

Чем "плотнее" область V облегает W (т.е. чем меньше объем V\W), тем меньше
будет ошибка оценки E. Чем больше число точек N, тем меньше будет ошибка
оценки E.

2. Приложения метода Монте-Карло

А. Нахождение объема области W: для этого полагают w(x)=1, где x принадлежит W

Б. Нахождение массы тела W: при этом предполагается, что функция w() задает
   плотность (в общем случае неравномерную в пространстве)

В. Нахождение координат центра массы тела W: при этом предполагается, что
   функция w() задает произведение координат на плотность r() (в общем случае
   неравномерную в пространстве):
     w(x,y,x) = (x * r(x,y,z), y * r(x,y,z), z * r(x,y,z)) .
   С помощью описанной выше процедуры вычисляют линейные моменты mi для каждой
   координаты, затем находят массу тела m (см. п. Б). Тогда координаты центра
   масс будут определятся как отношение соответствующих линейных моментов к
   массе тела. Например, для трехмерного пространства:
     x = mx / m
     y = my / m
     z = mz / m
0
14.12.2011, 20:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 20:56
Привет! Вот еще темы с ответами:

Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. - C++
Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. Посмотрите пожалуйста... ...

Массив: сформировать массив C[12] так, чтобы элементы располагались следующим образом: A(1) B(1) A(2) B(2) - C++
из массивов A и B сформировать массив C так, чтобы элементы массива располагались следующим образом: A(1) B(1) A(2) B(2) и т.д.

Можно ли в классе создавать массив переменной длинны. Например динамический массив? - C++
Динамические массивы привлекают больше. :)

Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька - C++
всем привет. народ помогите с прогой, конкретно с функцией sort (65 строка), она должна двухмерный массив перевести построчно в одномерный...


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

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

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