Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
18.08.2019
Размер:
1.96 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define _USE_MATH_DEFINES
#define N 1000//количество точек в которых находился элетрон
float F(float r,float nue, int S)//функция для отбора отказа
{
    float P,Y,R,a=0.5;
    switch(S)
    {
    case 1:
    R = 2*exp(-r/a); Y = 0.5/sqrt(M_PI);//основное состояние
    break;
    case 2:
    R = (1-0.5*r/a)*exp(-0.5*r/a)/sqrt(2.); Y = 0.5/sqrt(M_PI);//S состояние n=2
    break;
    case 3:
    R = 2*(1-2*r/a/3.+2*r*r/a/a/27.)*exp(-r/a/3.)/3./sqrt(3.); Y = 0.5/sqrt(M_PI);//S состояние n=3
    break;
    case 4:
    R = 0.5*r*exp(-0.5*r/a)/a/sqrt(6.); Y = 0.5*sqrt(3.)/sqrt(2*M_PI)*sin(2*M_PI*nue);//P состояние n=2
    break;
    case 5:
    R = 4*r*r*exp(-r/a/3.)/a/a/81./sqrt(30.); Y = 0.25*sqrt(30.)/sqrt(M_PI)*sin(2*M_PI*nue)*cos(2*M_PI*nue);//D состояние n=2
    break;
    }
    P = R*R*Y*Y*(r/a)*(r/a)*sin(M_PI_2*nue);
    return P;
}

//selection-denial Neumann
int otb=0;//количество отбросов
void seleden(float *x,float *y,int S)//метод отбора-отказа для заданного распределения
{
float r2,r,nue;
int i=0;
while(i<N)
    {
    r = (1.*rand())/(RAND_MAX+0.);
    nue=(1.*rand())/(RAND_MAX+0.);
    r2 =(1.*rand())/(RAND_MAX+0.);
    if(r2 < F(r,nue,S))
        {
        x[i] = r*cos(nue*2*M_PI);//если точка прошла - считаем её координату
        y[i] = r*sin(nue*2*M_PI);
        i++;//и переходим к следующей
        }
    else otb++;//если не подошла - отбрасываем её
    }
}


int main()
{
int k,t;
float x[N],y[N];
FILE *fp = fopen("coords.txt","w");
//FILE *fp1= fopen("NT.txt","w");


fprintf(fp,"%d \n",N);
for(k=1;k<6;k++)//цикл по состояниям B S P D
{
  seleden(x,y,k);
  printf("%d\n",otb);// печатаем сколько отброшено
  for(t=0;t<N;t++)
    {
      //printf("%f %f\n",x[t],y[t]);
      fprintf(fp,"%f %f\n",x[t],y[t]);//записываем координаты в файл
    }
}


fclose(fp);
//fclose(fp1);
return 0;
}
Соседние файлы в папке Hidrogenucle
  • #
    18.08.2019100.99 Кб5coords.txt
  • #
    18.08.2019182 б4fileread.sce
  • #
    18.08.20191.13 Кб4Hidrogenucle.cbp
  • #
    18.08.2019127 б4Hidrogenucle.depend
  • #
    18.08.2019321 б4Hidrogenucle.layout
  • #
    18.08.20191.96 Кб4main.c