Автор: Пользователь скрыл имя, 25 Мая 2013 в 11:55, курсовая работа
Багато систем, таких як гази, рідини і тверді тіла складаються з великого числа взаємодіючих один з одним частинок. Розглянемо для прикладу дві чашки кави, що зварені в однакових умовах. В кожній чашці кави утримується приблизно 1023-1025 молекул, рух яких підкорюється законам класичної фізики. Незважаючи на те, що міжмолекулярні сили породжують складні рухи молекул, для двох однакових чашок властивості кави в кожній чашці нерозрізнені і їх легко описати. Відомо, наприклад, що температура кави, якщо її залишити у чашці, досягає кімнатної і з часом не змінюється. Як пов’язана температура кави з траєкторіями окремих молекул? Чому вона не залежить від часу, навіть якщо траєкторії окремих молекул безупинно змінюються?
Метод молекулярної динаміки також дозволяє проводити численні експерименти при постійній температурі та тиску, а не при постійній енергії та об’ємі. Також багато висновків можна зробити з траєкторій системи.
4. Перелік посилань
#include<iostream.h>
#include<math.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<dos.h>
void metod (double x[],double y[],double vx[],double vy[],double ax[],double ay[],int N,int i);
int generator (int max)
{
return random (max);
}
void setka (double mx,double my,double k)
{
char str[4];
int i;
setcolor(11);
for (i=0;i<=30;i+=5)
{
line (347,i*my+5+k,353,i*my+5+k);
}
for (i=0;i<=300;i+=50)
{
itoa (i,str,10);
outtextxy (i*mx+347,147+k,str);
}
setcolor (1);
line (320,140+k,640,140+k);
line (350,0+k,350,160+k);
}
void metod (double x[],double y[],double vx[],double vy[],double ax[],double ay[],int N,int i)
{
double axn[20],ayn[20],r[20],vxn[20],
double V,t=0.01;
axn[i]=0;
ayn[i]=0;
for (unsigned j=0;j<N;j++)
{
if (i!=j)
{
r [i]=sqrt(pow((x[i]-x[j]),2)+
V=24*((1/pow(r[i],7))-(2/pow(
axn[i]+=(-V)*(x[i]-x[j])/r[i];
ayn[i]+=(-V)*(y[i]-y[j])/r[i];
}
}
vx[i]=0.5*(axn[i]+ax[i])*t;
vy[i]=0.5*(ayn[i]+ay[i])*t;
x[i]+=vx[i]*t+0.5*ax[i]*t*t;
y[i]+=vy[i]*t+0.5*ay[i]*t*t;
ax[i]=axn[i];
ay[i]=ayn[i];
}
void main()
{
clrscr();
int driver=DETECT,mode,e;
initgraph(&driver,&mode,"c:\\
e=graphresult();
if(e!=grOk)
{
printf("%s",grapherrormsg(e));
}
else
{
double vx[20],y[20],x[20],vy[20],ax[
int i=0,N=1,max=200;
randomize();
ax[i]=0;
ay[i]=0;
vy[i]=generator(max);
vx[i]=generator(max);
y[i]=generator(max);
x[i]=generator(max);
do
{
line(40,30,600,30);
line(40,30,40,450);
line(40,450,600,450);
line(600,30,600,450);
metod(x,y,vx,vy,ax,ay,N,i);
T+=t;
fillellipse(x[i]+300,-y[i]+
if((x[i]+300>590)||(x[i]+300<
vx[i]=-vx[i];
if((-y[i]+300<40)||(-y[i]+300>
vy[i]=-vy[i];
delay(10);
cleardevice();
}
while(T<15);
N=2;
T=0;
vx[0]=0; vy[0]=0; vx[1]=0; vy[1]=0; x[0]=0; x[1]=1.5;
y[0]=60; y[1]=60; ax[0]=0; ax[1]=0; ay[0]=0; ay[1]=0;
do
{
for(i=0;i<N;i++)
{
T+=t;
metod(x,y,vx,vy,ax,ay,N,i);
fillellipse(x[i]*20+300,-y[i]+
}
delay(20);
cleardevice();
}
while(T<7);
N=12;
T=0;
t=0.1;
max=5;
double Ek=0,xs=0,ys=0,Tm,v=0,P;
double Kv=1.38;
int poly[8]={0,0,0,400,320,400,
int k=0,m=10,ydar=0;
double mx=1.8,my=4.5;
line(320,160,640,160);
line(320,320,640,320);
setka(mx,my,k);
k=160;
setka(mx,my,k);
k=320;
setka(mx,my,k);
for(i=0;i<N;i++)
{
ax[i]=0;
ay[i]=0;
vx[i]=generator(max);
vy[i]=generator(max);
}
i=0;
while(i<12)
{
k=0;
for(unsigned j=0;j<3;j++)
{
x[i]=5+k;
k+=5;
i++;
}
}
i=0;
while(i<12)
{
k=0;
for(unsigned j=0;j<4;j++)
{
y[i]=5+k;
k+=9;
i++;
}
}
do
{
for(i=0;i<N;i++)
{
metod(x,y,vx,vy,ax,ay,N,i);
setcolor(WHITE);
setfillstyle(SOLID_FILL,WHITE)
fillellipse(x[i]*m,-y[i]*m+
Ek+=(vx[i]*vx[i]+vy[i]*vy[i])/
if(T<50)
{
line(160,0,160,400);
if(x[i]*m<5) {vx[i]=-vx[i];ydar++;v+=vx[i];
if(x[i]*m>155) vx[i]=-vx[i];
if((-y[i]*m+400<5)||(-y[i]*m+
}
else
{
line(160,0,160,100);
line(160,300,160,400);
if(x[i]*m<160)
{
if(x[i]*m<5){vx[i]=-vx[i];
if((x[i]*m>155)&&((-y[i]*m+
vx[i]=-vx[i];
}
if(x[i]*m>160)
{
if(x[i]*m>315) vx[i]=-vx[i];
if((x[i]*m<165)&&((-y[i]*m+
vx[i]=-vx[i];
}
if(((x[i]*m<165)&&(x[i]*m>155)
vy[i]=-vy[i];
if((-y[i]*m+400<5)||(-y[i]*m+
vy[i]=-vy[i];
}
line(320,0,320,480);
xs+=x[i]/N;
ys+=y[i]/N;
}
P=ydar*v/10.0;
Tm=(2*Ek)/N*Kv;
T+=t;
putpixel(T*mx+350,-xs*my+150,
putpixel(T*mx+350,-ys*my+150,
putpixel(T*mx+350,-Tm*my+310,
putpixel(T*mx+350,-P*my/15+
xs=0;ys=0;Ek=0;//ydar=0;v=0;
delay(20);
setfillstyle(SOLID_FILL,BLACK)
fillpoly(4,poly);}
while(T<150);
getch(); }
}