2014 dxdy logo

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

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




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

Проверка гипотез
//Проверка статистических гипотез, написано для 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 
Это капец. Не, ну можно для начала придраться к слишком точному сравнению вещественных чисел с нулем, ненужности массивов x1, x2... Но легче просто переписывать, пока не заработает... :)

 
 
 
 Re: смоделировать beta распределение
Сообщение25.05.2010, 05:08 
Circiter, не вижу сравнений именно вещественных чисел с нулём.
Функция rand() возвращает целое число от 0 до RAND_MAX.

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

 
 
 
 Re: смоделировать beta распределение
Сообщение25.05.2010, 17:37 
Я, кажется, догадался в чем дело, там не предусмотрен вывод результатов на экран. :) А то я думаю нафига там те два массива... :)

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

 
 
 
 Re: смоделировать beta распределение
Сообщение26.05.2010, 16:58 
venco в сообщении #323651 писал(а):
sladkaya2311, что значит "не работает"?
Не компилируется? Не запускается? Выдаёт ошибку? Зависает? Печатает не правильный результат?

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

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

Если 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 
Что-то гамма распределение у вас слишком просто получается. Откуда вы взяли эту формулу?

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

Если 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 
Аватара пользователя
Кажется, так лучше?

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

По все видимости, синтаксис здесь верный. Правда интуиция тут мне подсказывает не применять функцию 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 
2Ринат
Цитата:
Гамма-излучение, Бета-излучение

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

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

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

 
 
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 22:24 
Аватара пользователя
Circiter в сообщении #324645 писал(а):
2РинатЦитата:Гамма-излучение, Бета-излучениеРаспределение, распределение!

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

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


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

 
 
 
 Re: смоделировать beta распределение
Сообщение27.05.2010, 22:42 
нет,она просит ввести 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 
Аватара пользователя
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 
а в остальном программа правильно написана? и она выводит именно то,что нужно?просто как то я сомневаюсь в том,что именно она выводит

 
 
 [ Сообщений: 16 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group