
6. Составление программы
/*Курсовая работа студента 4-Мд-5
Кислициной К.А. по дисциплине
"Моделирование систем" по теме
"Моделирование случайного процесса изменения давления"
вариант 8 2013г.*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>
/*объявление переменных*/
float P[5001];
float ksi, A, B, dt=2.5, alf=0.02, m=450, sig=25, z;
float m_,D_,sig_,v_,NKF[201],sum;
int i,j,L=200;
int pp, ff;
char ch[80];
/*************************************************/
main ()
{
/*инициализация графического режима*/
int gdr=DETECT, gmod;
initgraph (&gdr, &gmod, " ");
/************************************************/
/*получение массива значений давления*/
randomize ();
A=exp(-alf*dt);
B=sig*sqrt(1-A*A);
P[0]=0;
for(i=1; i<5001; i++)
{ z=0;
for(j=1; j<13; j++)
{ ksi=rand()/32767.0;
z=z+ksi;
}
z=z-6.0;
P[i]=A*P[i-1]+B*z;
}
for(i=0; i<5001; i++)
P[i]=P[i]+m;
/***********************************/
/*график реализации процесса*/
/*создание фона*/
setfillstyle(1,15);
bar(0,0,640,480);
/*нанесение сетки и надписей*/
setcolor(0);
setlinestyle(0,0,1);
for(i=0;i<7;i++)
line(70,50+20*i,570,50+20*i);
for(i=0;i<6;i++)
line(70+100*i,50,70+100*i,170);
settextjustify(2,1);
for(i=0;i<7;i++)
{ sprintf(ch,"%d",525-25*i);
outtextxy(65, 50+20*i,ch);
}
settextjustify(1,2);
for(i=0;i<6;i++)
{ sprintf(ch, "%d",2500*i);
outtextxy(70+100*i,180,ch);
}
outtextxy(320,30,"график давления");
outtextxy (600,165,"t,с");
outtextxy(70,30,"P,кПа");
/*построение графика*/
setcolor(12);
moveto(70,110);
for(i=1;i<501;i++)
{pp=110-(P[10*i]-m)*20/25+0.5;
lineto(70+i,pp);
}
/*Обработка массива значений регулируемой
величины и вывод результатов моделирования*/
/*Оценка математического ожидания P(t)*/
sum=0;
for(i=0; i<5001; i++)
sum=sum+P[i];
m_=sum/5001;
/*Оценка дисперсии и стандартного отклонения y(t)*/
sum=0;
for(i=0; i<5001; i++)
sum=sum+(P[i]-m_)*(P[i]-m_);
D_=sum/5001;
sig_=0;
sig_=sqrt(D_);
/*вычисление коэффициента вариации y(t)*/
v_=0;
v_=(sig_/m_)*100;
/*Оценка нормированной корреляционной функции НКФ y(t)*/
for(i=0;i<L+1;i++)
{sum=0;
for(j=0;j<5001-i;j++)
sum=sum+(P[j]-m_)*(P[j+i]-m_);
NKF[i]=sum/(5001-i)/D_;
}
/*нанесение сетки и надписей для графика НКФ*/
setcolor(0);
setlinestyle(0,0,1);
for(i=0; i<5; i++)
line(70, 300+25*i,270, 300+25*i);
/*сетка вертикальных линий*/
for(i=0; i<5; i++)
line(70+50*i, 300, 70+50*i,400);
/*Нанесение надписей*/
settextjustify(2, 1);
for(i=0; i<5; i++)
{ sprintf(ch, "%.1f", 1-0.5*i);
outtextxy(65, 300+25*i, ch);
}
settextjustify(1, 2);
for(i=0; i<5; i++)
{ sprintf( ch, "%.1f", 50*i*dt);
outtextxy(70+50*i, 405, ch);
}
settextjustify(1,0);
outtextxy(170, 295, "график НКФ P(t)");
outtextxy(290, 400, "t,б");
/*построение графика НКФ y(t)*/
setcolor(12);
setlinestyle(0,0,1);
moveto(70, 300);
for (i=1; i<201; i++)
{ ff=350-NKF[i]*50+0.5;
lineto(70+i,ff);
}
/*вывод числовых оценок */
setcolor(0);
settextjustify(0,1);
sprintf(ch,"математическое ожидание P(t),кПа : %.2f",m_);
outtextxy(320,300,ch);
sprintf(ch,"стандартное отклонение P(t),кПа: %.2f",sig_);
outtextxy(320,330,ch);
sprintf(ch,"коэффициент вариации P(t), процентов: %.2f",v_);
outtextxy(300,360,ch);
getch();
closegraph();
}
/*end*/