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

Доделать задачу, требуется дописать нормальное распределение - C++

Восстановить пароль Регистрация
 
Enzzio
 Аватар для Enzzio
6 / 8 / 0
Регистрация: 29.05.2010
Сообщений: 265
05.12.2011, 00:29     Доделать задачу, требуется дописать нормальное распределение #1
Имеются методички:
http://tstu.ru/education/elib/pdf/20...7%20iuna-k.pdf
http://tstu.ru/education/elib/pdf/20...7%20iuna-k.pdf
С практическим заданием.

Имеется схема, величины характеристик элементов схемы и их разброс (плюс/минус 10%).

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
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <cstdlib>
#include <ctime>
 
int main()
{
//названия всех входных файлов содержат в начале i
//названия всех файлов с выходными данными имеют в начале o   
        FILE *in;//файл исходных дпнных
        FILE *out;// файл на запись
        FILE *ele;//запись параметров элементов
 
        FILE *tinput;//проверка считывания исходных данных
 
        int i, j, N;
        printf ("Input N (chislo ispytanij): ");
        scanf("%d", &N);        
        int x[5], x1[5], x2[5];//вводные данные, интервалы, минимумы
        float f, y[5], Sm=0, Sd=0;//F базовая, входные данные для F
        float fx[i], Me, De;//массив интервалов
        float xr0[N], xr1[N], xr2[N], xr3[N], c[N], e[N], fr[N];
 
        /*чтение исходных данных*/
        in = fopen("input.txt", "r");
        for(i=0; i < 5; i++)
        {
                 fscanf(in, "%d", &x[i]);
                 x1[i]=x[i]/5;
                 x2[i]=x[i]-x[i]/10;
        }
        fclose(in);
        in = fopen("input.txt", "r");
        for(i=0; i < 5; i++)
        {
                 fscanf(in, "%f", &y[i]);                 
        }
        fclose(in);
        
        /**/
        /*проверка интервалов*/
        tinput = fopen("tinput.txt", "w");
        for(i=0; i < 5; i++)
        {
                 fprintf(tinput, "%d %d %f %d\n", x[i], x1[i], y[i], x2[i]);
        }
        fprintf(tinput, "Завершено");        
        fclose(tinput);
        /**/
        /*подсчитываем F эталонную*/
        f=2*y[4]*(y[2]+y[3])*log((1+2*((y[1]*y[2]+y[0]*y[3])/(y[0]*(y[2]+y[3])))))/1000000;
        f=f/1000000;
        /**/
        /*Выбор из интервалов случайных 1000 значений*/
        srand(time(NULL));
        ele = fopen("o_elements.txt","w");//открытие файла на запись характеристик элементов
        for(i=0; i<N; i++)
        {
                 fprintf(ele, "%i ", rand()%x1[0] + x2[0]);                 
                 fprintf(ele, "%i ", rand()%x1[1] + x2[1]);
                 fprintf(ele, "%i ", rand()%x1[2] + x2[2]);
                 fprintf(ele, "%i ", rand()%x1[3] + x2[3]);
                 fprintf(ele, "%i \n", rand()%x1[4] + x2[4]);
        }
        fclose(ele);
        ele = fopen("o_elements.txt","r");
        for(i=0; i<N; i++)
        {
                 fscanf(ele, "%f %f %f %f %f", &xr0[i], &xr1[i], &xr2[i], &xr3[i], &c[i]);                 
        }
        fclose(ele);
        FILE *tfran; 
        tfran = fopen("o_RndmFE.txt","w");
        for(i=0; i<N; i++)
        {
                 fr[i]=2*c[i]*(xr2[i]+xr3[i])*log((1+2*((xr1[i]*xr2[i]+xr0[i]*xr3[i])/(xr0[i]*(xr2[i]+xr3[i])))))/1000000;
                 fprintf(tfran, "%f ", fr[i]=fr[i]/1000000);
                 e[i]=(f-fr[i])/f;
                 if(e[i]<0)
                 {
                 fprintf(tfran, "%f \n", e[i]);         
                 }
                 else
                 {
                 fprintf(tfran, " %f \n", e[i]);
                 }
                 Sm=Sm+e[i];
        }
        fclose(tfran);
        Me=Sm/N;
        for(i=0; i<N;i++)
        {
        Sd=Sd+((e[i]-Me)*(e[i]-Me))/(N-1);
        }         
        FILE *oMD;
        oMD = fopen("o_FMD.txt", "w");       
        fprintf(oMD, "F=%f; M(E)=%f; D(E)=%f;", f, Me, De=sqrt(Sd));
        fclose(oMD);
        in = fopen("Info about results.txt", "w");
        fprintf(in, "Случайно отобранные элементы с погрешностью +/-10 процентов содержатся в elements.txt\nПосчитанные значения F и погрешность Е записаны в RndmFE.txt\nF при базовых данных, мат. ожидание и дисперсия выведены в FMD.txt");
        fclose(in);
        return 0;
}
Вроде все замечательно,

Входные данные:
10000
100000
12000
240000
10000
Выходные: F=0.006804; M(E)=0.046888; D(E)=0.042257;

Но вот требуется нормальное распределение к случайному выбору величины элемента из интервала. Как его реализовать?

http://www.marketoracle.co.uk/images...07image001.gif

Добавлено через 1 час 0 минут
Очень надо!

Добавлено через 2 часа 18 минут
Разгреб пример программы по полочкам в методичке, прикинул, что там делается лишнее, а также убедился в большей производительности своей софтины. Успокоился. Да, согласен, что код страшноват, но сначала писалось для быстроты, а полировать потом.

Вспомнил об одном человеке, к которому можно обратиться по данному вопросу, очень надеюсь, что подскажет и по методу монте-карло и по коду. И будет все тип-топ. :dance3:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2011, 00:29     Доделать задачу, требуется дописать нормальное распределение
Посмотрите здесь:

C++ Помогите доделать задачу
Помогите доделать простую задачу C++
C++ Требуется дописать программу С++ сорировка
C++ не могу доделать задачу
дописать задачу C++
Доделать задачу. Для данного вещественного x найти значение следующей функции f, принимающей значения целого типа C++
C++ Как доделать задачу с треугольниками
Нормальное распределение C++

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

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

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