Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

Разобрать программу по теории Пирсона

27.05.2014, 13:41. Показов 811. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Сдал первую лабу по методу Монте-Карло..
Вторая лаба Цель работы: изучить методы моделирования нормально распределенных случайных величин и проверки их с помощью критерия Пирсона.
Есть прога готовая, но по тексту программы во многих местах не понимаю что, где и как делается... от части потому что саму математическую модель не понимаю ... от части некоторый код просто не понимаю...
Помогите разобратся в самом коде, я некоторые комментарии проставил но не факт что они верные... помогите проставить комментарии везде? и собственно понять саму проверку с помощью Пирсона может в более простом варианте объяснения? Просто те которые сижу читаю и пытаюсь понять , не могу осмыслить мат знаний не хватает...
mainwindows.cpp
C++ (Qt)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "stdlib.h"
#include "time.h"
#include "QDebug"
#include "math.h"
#include <QGraphicsScene>
 
float chi2inv(float a, int n);
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    n=6;
    pi=M_PI;
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
float MainWindow::r()
{
    float r= (float) rand() / RAND_MAX;
    return r;
}
 
void MainWindow::on_pushButton_clicked()
{
    srand(time(NULL));
    r_count=ui->sb_r_count->value();//количество случайных чисел
    mx=ui->dsb_mx->value();//математическое ожидание
    dx=ui->dsb_dx->value();//средне квадратичное отклонение
    z.clear();
    x.clear();
    v.clear();
    fi.clear();
    fp.clear();
    xi.clear();
    xip.clear();
    for(int i=0;i<r_count;i++)// цикл по случайным числам
        for(int j=0;j<n;j++) //цикл по количеству эксперементов
        {
            if (j==0) v.append(r()); //если первый эксперемент то записать в конец строки v значение r
            else v[i]+=r();// иначе заполнять массив увеличивая каждый раз на значение r
        }
    for(int i=0;i<r_count;i++)// цикл по случайным числам
    {
        z.append((v[i]-(n/2.0))/sqrt(n/12.0));// не понимаю формулу
    }
    for(int i=0;i<r_count;i++)// цикл по случайным числам
    {
        x.append(mx+z[i]*dx); //не понимаю формулу
    }
 
    for(int i=0;i<r_count;i++)// цикл по случайным числам
    {
        int j=fi.indexOf((int)(x[i]*10));
 
        if(j==-1)
        {
            fi.append((int)(x[i]*10));
 
            fp.append(1);
        }
        else
        {
            fp[j]+=1;
        }
    }
    for(int i=0;i<fi.count();i++)// цикл по случайным числам
    {
        qDebug()<<"значения х:"<<fi[i]<<" вероятность: "<<fp[i];
    }
    int count=0;
    for(int i=0;i<fi.count();i++)// цикл по случайным числам
    {
        count+=fp[i];
    }
    qDebug()<<"Itogo: "<<count;
    this->update();
 
    float pi2=sqrt(2.0*pi);
    for(float i=(mx-4*dx);i<=(mx+4*dx);i+=0.1)
 
 
    {
        xi.append(i*10);
 
        xip.append((1.0/(dx*pi2))*exp(-((i-mx)*(i-mx))/(2.0*dx*dx)));
    }
 
    QGraphicsScene *scena=new QGraphicsScene;
 
 
    scena->addLine(200,150,200,0,QPen(Qt::black));
    scena->addLine(0,150,600,150,QPen(Qt::black));
    for(int i=0;i<61;i++)
        {
            scena->addLine(i*10,150-5,i*10,150+5,QPen(Qt::black));
        }
    for(int i=0;i<31;i++)
        {
            scena->addLine(i*100,150-10,i*100,150+10,QPen(Qt::black));
        }
        for(int i=0;i<fi.count();i++)
        {
 
            scena->addEllipse(200+fi[i],150-10000*fp[i]/r_count,1,1,QPen(Qt::black));
 
        }
        for(int i=0;i<xi.count();i++)
        {
            scena->addEllipse(200+xi[i],150-xip[i]*1000,1,1,QPen(Qt::red));
        }
        xiexp=0.0;
        int countxi=xi.count();
        int ix=0;
        float rc=(float)r_count;
 
 
        for(ix=0;ix<countxi;ix++)
        {
            int jf=0;
            while(xi[ix]!=fi[jf] && jf<fi.count()-1){jf++;}
 
                xiexp+=0.1*((fp[jf]-xip[ix]*r_count)*(fp[jf]-xip[ix]*r_count))/((xip[ix])*r_count);
 
        }
 
        ui->label_3->setText(QString::number(xiexp));
 ui->graphicsView->setScene(scena);
 
 float min=chi2inv(1-0.01,r_count-3);
 float min25=chi2inv(1-0.25,r_count-3);
 float mid=chi2inv(1-0.5,r_count-3);
 float mid75=chi2inv(1-0.75,r_count-3);
 float max=chi2inv(1-0.999,r_count-3);
 
 
ui->label_4->setText(QString::number(mid));
 ui->label_5->setText(QString::number(max));
 ui->label_10->setText(QString::number(min));
 ui->label_12->setText(QString::number(min25));
 ui->label_14->setText(QString::number(mid75));
 
 
}
 
float chi2inv(float a, int n) {
    float d;
    if(a >= 0.001 && a < 0.5)
        d = - 2.0637 * pow((log(1.0/a) - 0.16), 0.4274) + 1.5774;
    else if(a <= 0.999)
        d = 2.0637 * pow((log(1.0/(1 - a)) - 0.16), 0.4274) - 1.5774;
    else
        return 0;
    float A = d * sqrt(2);
    float B = 2.0/3 * (d * d - 1);
    float C = d * (d * d - 7)/(9 * sqrt(2));
    float D = (6 * pow(d, 4) + 14 * d * d - 32)/405;
    float E = d * (9 * pow(d, 4) + 256 * d * d - 433) / (4860 * sqrt(2));
    return n + A * sqrt(n) + B + C/sqrt(n) + D/n + E/(n*sqrt(n));
}
main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include <QtGui/QApplication>
#include "mainwindow.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}
mainwindows.h
C++ (Qt)
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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QVector2D>
#include "QPainter"
namespace Ui {
    class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    float r();
    int r_count;
    int n;
    QVector<float> v;
    QVector<float> z;
    QVector<float> x;
    float mx;
    float dx;
    float pi;
    QVector<float> fi;
    QVector<float> fp;
    QVector<float> xi;
    QVector<float> xip;
    float xiexp;
 
private slots:
    void on_pushButton_clicked();
 
private:
    Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H
Вложения
Тип файла: rar lab2.rar (8.1 Кб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2014, 13:41
Ответы с готовыми решениями:

не могу разобрать задачу по теории
имеются три урны. в первой урон 10 белых и 3 черных, во второй 15 белых и 4 черных, в третьей - 20...

Вычисление критерия Пирсона: исправить программу
Листинг программы: // генератор-псевдочисел.cpp: определяет точку входа для консольного...

Разобрать программу
Всем доброе время суток! У меня есть такое задание: Многочлен степени n задается своими...

разобрать программу
Помогите пожалуйста с решение задач. 1)В строке символов находятся двухзначные числа, найти...

2
 Аватар для alexey_rage
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
27.05.2014, 13:55 2
Цитата Сообщение от lexflax Посмотреть сообщение
z.append((v[i]-(n/2.0))/sqrt(n/12.0));// не понимаю формулу
Вычисляется: i-й элемент массива v минус n деленное на 2, и все это разделить на квадратный корень из n деленной на 12.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
27.05.2014, 13:59  [ТС] 3
Цитата Originally Posted by lexflax View Post
z.append((v[i]-(n/2.0))/sqrt(n/12.0));// не понимаю формулу
Вычисляется: i-й элемент массива v минус n деленное на 2, и все это разделить на квадратный корень из n деленной на 12.
и записывается в конец файла z если не ошибаюсь... под комментарием "не понимаю формулу " имеется ввиду что не понимаю откуда данная формула берется и для чего она вычисляется...
0
27.05.2014, 13:59
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2014, 13:59
Помогаю со студенческими работами здесь

разобрать программу
Удалено вложение, содержащее вирус!

Необходимо разобрать программу
Добрый день . встретились такие операторы как&quot;ch+=(char) 32&quot; и &quot;ch-=(char) 32&quot; Объясните принцип...

Нужно разобрать программу по строкам
Задача: Найти количество вхождений в массив значения Х. Элементы массива и Х задаются с клавиатуры....

Разобрать программу подсчета символов
#include &lt;stdio.h&gt; main() { long c, nc; nc = 0; while ((c = getchar()) != EOF) ...

Подскажите пожалуйста подробнее разобрать и понять программу
Почему выводит сначала -199 а только потом 10

Разобрать программу перевода в различные системы счисления
Здравствуйте.Вопрос такой:Есть задача написать программу для перевода из 16сс(системы счисления) в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Преобразование полей (элементов управления содержимым) в обычный текст
РоΜа 23.01.2025
Возникла необходимость преобразовать поля в текст (те, что на вкладке разработчик добавляются) . Помучившись родил следующее: Sub ПоляВТекст() Преобразует все поля в текст (даты, текст,. . .
Как проверить существование директории в скрипте Bash
bt_guru 23.01.2025
При разработке скриптов Bash одной из ключевых задач является корректная работа с файловой системой, где особое место занимает проверка существования директорий. Эта операция становится критически. . .
Как работают срезы (slice) в Python
bytestream 23.01.2025
Python предоставляет разработчикам мощный и гибкий инструмент для работы с последовательностями данных - срезы (slices). Эта функциональность позволяет извлекать, модифицировать и управлять. . .
Как удалить подмодуль (submodule) в Git
bytestream 23.01.2025
При работе с крупными проектами в системе контроля версий Git разработчики часто сталкиваются с необходимостью управления зависимостями и внешними компонентами. Подмодули (submodules) представляют. . .
В чем разница между @staticmethod и @classmethod в Python. Декораторы методов
bytestream 23.01.2025
В Python декораторы методов представляют собой мощный инструмент, позволяющий модифицировать поведение функций и методов без изменения их исходного кода. Эта возможность является одной из. . .
Как преобразовать InputStream в String в Java
bytestream 23.01.2025
В мире Java-разработки работа с потоками данных является одной из ключевых операций при создании современных приложений. InputStream, как фундаментальный класс для обработки входных потоков данных,. . .
Как обновить форк (ответвление) репозитория в Git
bytestream 23.01.2025
Одним из наиболее мощных инструментов Git для организации совместной работы является механизм форкинга репозиториев, который позволяет создавать независимые копии проектов для дальнейшей разработки. . . .
Как работает async/await в C#. Асинхронное программировани­е в .NET
bytestream 23.01.2025
Введение в асинхронное программирование Асинхронное программирование представляет собой важнейшую концепцию современной разработки программного обеспечения, особенно в контексте создания. . .
КуМир: полное руководство
bytestream 23.01.2025
Введение в КуМир: история создания и назначение КуМир (Комплект Учебных МИров) представляет собой образовательную среду программирования, которая была создана для обучения основам алгоритмизации и. . .
Что такое OLAP. Где и как использовать многомерный анализ данных
bytestream 23.01.2025
Введение в OLAP-технологии В современном мире бизнес-аналитика и обработка больших массивов данных играют ключевую роль в принятии стратегических решений. Организации накапливают огромные объемы. . .
MongoDB: что это, для чего нужна и как использовать
bytestream 23.01.2025
Введение в MongoDB: современная документоориентированная СУБД В современном мире разработки программного обеспечения выбор правильной системы управления базами данных является критически важным. . .
Как использовать закрытый ключ шифрования в Git. Шифрование в Git
bytestream 23.01.2025
Установка и настройка закрытых ключей в Git предоставляет дополнительный уровень безопасности для работы с репозиториями. Для начала необходимо создать пару ключей, обычно это осуществляется с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru