2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 смоделировать beta распределение
Сообщение22.05.2010, 20:48 


28/02/09
32
Санкт-Петербург
подскажите в чем ошибка-не работает

Проверка гипотез
//Проверка статистических гипотез, написано для TurboC 3.0

#include<math.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

void main()
{
char exit;
double n=100.0,N=100.0;
double d=32767.0;
double R11,R12,R21,R22;
double Ots_1,Ots_2,Err;
double s1,s2,z1,z2;
double sr=0;
double Tsr,T1,T2;
double x1[100],x2[100];

do
{cout<<"\nPress 'e' for exit or 'c' to continue: ";
cin>>exit;
if(exit=='c')
{sr=0.0;//счетчик попаданий
randomize();
clrscr();
cout<<" Beta distribution = Beta(1,T)"<<endl;
cout<<" INPUT: T1 = "; cin>>T1;
cout<<" INPUT: T2 = "; cin>>T2;

Tsr=(T1+T2)/2;
for (int k=1; k<=N; k++)
{ s1=0.0;s2=0.0; z1=0.0;z2=0.0;
for (int i=1; i<=n;i++)
{ A: R11= rand(); R12=rand();
R21= rand(); R22=rand();
if(R11==0.0||R12==0.0||R21==0.0||R22==0.0) goto A;
x1[i] =(-log(R11/d))/(T1+(-log(R12/d)));
x2[i] =(-log(R21/d))/(T2+(-log(R22/d)));
s1=s1+x1[i]; s2=s2+x2[i];
}
z1=(n-s1)/s1; z2=(n-s2)/s2;
if(z1>Tsr) sr++;
if(z2>Tsr) sr++;
}
Err=sr/(2.0*N);
cout<<"Error ="<<Err<<endl;
getch();
};
}
while(exit!='e');
cout<<"\n GOOD BYE !!! ";
}

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение25.05.2010, 04:54 
Заслуженный участник


26/07/09
1559
Алматы
Это капец. Не, ну можно для начала придраться к слишком точному сравнению вещественных чисел с нулем, ненужности массивов x1, x2... Но легче просто переписывать, пока не заработает... :)

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение25.05.2010, 05:08 
Заслуженный участник


04/05/09
4582
Circiter, не вижу сравнений именно вещественных чисел с нулём.
Функция rand() возвращает целое число от 0 до RAND_MAX.

sladkaya2311, что значит "не работает"?
Не компилируется? Не запускается? Выдаёт ошибку? Зависает? Печатает не правильный результат?

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение25.05.2010, 17:37 
Заслуженный участник


26/07/09
1559
Алматы
Я, кажется, догадался в чем дело, там не предусмотрен вывод результатов на экран. :) А то я думаю нафига там те два массива... :)

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение26.05.2010, 16:25 


28/02/09
32
Санкт-Петербург
Помогите исправить так,чтоб она работала пожалуйста.

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение26.05.2010, 16:58 
Заслуженный участник


04/05/09
4582
venco в сообщении #323651 писал(а):
sladkaya2311, что значит "не работает"?
Не компилируется? Не запускается? Выдаёт ошибку? Зависает? Печатает не правильный результат?

Вы даже не сказали, что эта программа должна делать.

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение26.05.2010, 21:31 


28/02/09
32
Санкт-Петербург
она должна моделировать бета распределение,как

Если X,Y — независимые гамма распределённые случайные величины, причём X $Х \sim \mathrm{Г}(\alpha, 1)$ , а $Y  \sim \mathrm{B}(1, \beta)$

$\frac{X}{X+Y} \sim \mathrm{B}(\alpha, \beta) $.
...вот как то так..

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение26.05.2010, 22:34 
Заслуженный участник


04/05/09
4582
Что-то гамма распределение у вас слишком просто получается. Откуда вы взяли эту формулу?

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение26.05.2010, 23:38 


28/02/09
32
Санкт-Петербург
она должна моделировать бета распределение,как

Если X,Y — независимые гамма распределённые случайные величины, причём X $Х \sim \mathrm{\Gamma}(\alpha, 1)$ , а $Y  \sim \mathrm{\Gamma}( \beta,1)$

$\frac{X}{X+Y} \sim \mathrm{B}(\alpha, \beta) $.

извините,наверно все таки так.

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 14:12 
Аватара пользователя


14/05/05
224
Баку
Кажется, так лучше?

На самом деле вопрос вовсе не в том, чтО тут: Гамма-излучение, Бета-излучение. Вопрос по программированию (физика выше), следовательно искать изъяны следует в коде.

По все видимости, синтаксис здесь верный. Правда интуиция тут мне подсказывает не применять функцию goto(), а заменить ее циклом.
Небольшие подозрения на переменные n и N.

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


код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include<math.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

void main()
{
        char exit;
        double n=100.0,N=100.0;
        double d=32767.0;
        double R11,R12,R21,R22;
        double Ots_1,Ots_2,Err;
        double s1,s2,z1,z2;
        double sr=0;
        double Tsr,T1,T2;
        double x1[100],x2[100];

        do
        {
                cout<<"\nPress 'e' for exit or 'c' to continue: ";
                cin>>exit;
                if (exit=='c')
                {
                        sr = 0.0; //счетчик попаданий
                        randomize();
                        clrscr();
                        cout<<" Beta distribution = Beta(1,T)"<<endl;
                        cout<<" INPUT: T1 = "; cin>>T1;
                        cout<<" INPUT: T2 = "; cin>>T2;

                        Tsr = (T1+T2)/2;
                        for (int k=1; k<=N; k++)
                        {
                                s1=0.0; s2=0.0; z1=0.0; z2=0.0;
                                for (int i=1; i<=n;i++)
                                {
                                        A: R11 = rand(); R12 = rand();
                                        R21 = rand(); R22 = rand();
                                        if (R11==0.0||R12==0.0||R21==0.0||R22==0.0) goto A;
                                        x1[i] = (-log(R11/d)) / (T1+(-log(R12/d)));
                                        x2[i] = (-log(R21/d)) / (T2+(-log(R22/d)));
                                        s1 = s1 + x1[i]; s2 = s2 + x2[i];
                                }
                                z1 = (n-s1)/s1; z2 = (n-s2)/s2;
                                if (z1 > Tsr) sr++;
                                if (z2 > Tsr) sr++;
                        }
                        Err = sr/(2.0*N);
                        cout<<"Error ="<<Err<<endl;
                        getch();
                };
        }
        while (exit!='e');
        cout<<"\n GOOD BYE !!! ";
}
 

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 20:36 
Заслуженный участник


26/07/09
1559
Алматы
2Ринат
Цитата:
Гамма-излучение, Бета-излучение

Распределение, распределение!

Цитата:
Постарайтесь описать подробнее, что именно не выходит

Я вот ещё раз повторю, что скорее всего достаточно добавить код распечатки содержимого массивов x1, x2 и топикстартер будет доволен. Программка просто ничего не выводит...

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 22:24 
Аватара пользователя


14/05/05
224
Баку
Circiter в сообщении #324645 писал(а):
2РинатЦитата:Гамма-излучение, Бета-излучениеРаспределение, распределение!

Ах, да. Пардон. Но я так, к общему случаю =)

Circiter в сообщении #324645 писал(а):
Цитата:Постарайтесь описать подробнее, что именно не выходит Я вот ещё раз повторю, что скорее всего достаточно добавить код распечатки содержимого массивов x1, x2 и топикстартер будет доволен. Программка просто ничего не выводит...


Ну, думаю, все не так просто. sladkaya2311 указала на то, что "...ошибка, не работает", а просто придираться к тому, что программа не выводит массив...Хотя кто его (ее) знает. Пусть сама скажет. =)

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 22:42 


28/02/09
32
Санкт-Петербург
нет,она просит ввести T1 и Е2ба потом вылетает и показывает ошибку в строчке
x2[i] = (-log(R21/d)) / (T2+(-log(R22/d)));
а сейчас запустила,она вообще не работает.
говорит
[Linker Error] Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
[Linker Error] Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 23:18 
Аватара пользователя


14/05/05
224
Баку
sladkaya2311 в сообщении #324694 писал(а):
[Linker Error] Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl[Linker Error] Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl

Создавали Визардом? Создайте заново консольное приложение (File | New | Other | Console Wizard), но снимите галочку с VCL, должна быть включена опция Console Application, а опции Multi Threaded и Use CLX - отключены.

На счет
sladkaya2311 в сообщении #324694 писал(а):
нет,она просит ввести T1 и Е2ба потом вылетает и показывает ошибку в строчке x2[i] = (-log(R21/d)) / (T2+(-log(R22/d)));
, думаю:
1) либо происходит деление на нуль;
2) либо вы вводите некорректные данные для T2, попробуйте не вводить эти значения, а задать их явно в программном коде.

 Профиль  
                  
 
 Re: смоделировать beta распределение
Сообщение28.05.2010, 19:04 


28/02/09
32
Санкт-Петербург
а в остальном программа правильно написана? и она выводит именно то,что нужно?просто как то я сомневаюсь в том,что именно она выводит

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group