Задание было: реализовать Марковский процесс на языке С.
Теория:
Имеется некоторая система, она может находиться в нескольких состояниях: Si, i = 1,…,N (N – число таких состояний).
Для каждой пары состояний (Si,Sj) задается вероятность перехода из Si в Sj: Pij. В случае Марковского Процесса Pij не зависит от предыдущих состояний системы (предыстории). Pii – вероятность остаться в том же состоянии
Код:
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <stdlib.h>
# define N 10 // kol-vo sostoyanij sistemi
# define M 100 // kol-vo shagov po vremeni
float rnd();
main()
{ FILE *fopen(),*f,*g;
int i, j, t;
float z, p[N][N], s[N], pp, sp, x, y;
f=fopen("C:\\TC\\MP\\ver.dat","r");
g=fopen("C:\\TC\\MP\\rez.dat","w");
// f=fopen("ver.dat","r");
// g=fopen("rez.dat","w");
for (i=0; i<N; i++) // read array "p" from file "f"
{
for (j=0; j<N-1; j++)
{
fscanf(f," %f ",&pp);
/* printf("%f",pp); //sleep(2);*/
p[i][j]=pp;
}
fscanf(f," %f \n",&pp);
p[i][N-1]=pp;
}
/* for (i=0; i<N; i++) // pechat' p[i][j] dlya proverki
{
for (j=0; j<N; j++)
{
printf(" %.2e",p[i][j]);
}
printf("\n");
}
//sleep(2);
*/
// esli ne rabotaet chtenie iz faila
/* for (i=0; i<N; i++)
for (j=0; j<N-1; j++)
{
p[i][j]=0.1; // vvodim vse ravnie ver-ti
// mozhno vvesti neravnie
} */
// proverka pravilnosti zadania "p[i][j]"
/* for (i=0; i<N; i++)
{
sp=0;
for (j=0; j<N; j++)
{
sp=sp+p[i][j];
}
if (sp != 1.)
printf("Nepravilno zadan massiv p[i][j], stroka %d \n",i);
} */
for (i=0; i<N; i++)
s[i]=i; // nabor sostoyaniy sistemi
i=0; // nachalnoe sost. sist.
x=10;
y=20;
for (t=0; t<M; t++)
{
z=rnd(x,y);
sp=0;
for (j=0; j<M; j++)
{
sp=sp+p[i][j];
if (z<sp)
{
i=s[j];
// printf(" t=%d i=%d j=%d z=%.2e z1=%.2e p=%.2e \n",t,i,j,z,z1,p);
// sleep(2);
break;
}
}
fprintf(g," t=%d i=%d \n",t,i);
}
} // end of main
float rnd(x,y)
float x,y;
{
float z1;
y=25175*x+13847;
y=fmod(y,65539);
z1=y*1.5255773063e-5;
printf(" z1=%.2e \n",z1);
x=y;
return(z1);
}
файл ver.dat
Код:
0.5 0.0 0.1 0.1 0.1 0.05 0.05 0.0 0.01 0.09
0.4 0.02 0.02 0.02 0.02 0.02 0.1 0.1 0.1 0.2
0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
0.1 0.1 0.0 0.0 0.1 0.3 0.3 0.0 0.0 0.1
файл rez.dat
Код:
t=0 i=0
t=1 i=0
t=2 i=0
t=3 i=0
t=4 i=0
t=5 i=0
t=6 i=0
t=7 i=0
t=8 i=0
t=9 i=0
t=10 i=0
t=11 i=0
t=12 i=0
t=13 i=0
t=14 i=0
t=15 i=0
t=16 i=0
t=17 i=0
t=18 i=0
t=19 i=0
t=20 i=0
t=21 i=0
t=22 i=0
t=23 i=0
t=24 i=0
t=25 i=0
t=26 i=0
t=27 i=0
t=28 i=0
t=29 i=0
t=30 i=0
t=31 i=0
t=32 i=0
t=33 i=0
t=34 i=0
t=35 i=0
t=36 i=0
t=37 i=0
t=38 i=0
t=39 i=0
t=40 i=0
t=41 i=0
t=42 i=0
t=43 i=0
t=44 i=0
t=45 i=0
t=46 i=0
t=47 i=0
t=48 i=0
t=49 i=0
t=50 i=0
t=51 i=0
t=52 i=0
t=53 i=0
t=54 i=0
t=55 i=0
t=56 i=0
t=57 i=0
t=58 i=0
t=59 i=0
t=60 i=0
t=61 i=0
t=62 i=0
t=63 i=0
t=64 i=0
t=65 i=0
t=66 i=0
t=67 i=0
t=68 i=0
t=69 i=0
t=70 i=0
t=71 i=0
t=72 i=0
t=73 i=0
t=74 i=0
t=75 i=0
t=76 i=0
t=77 i=0
t=78 i=0
t=79 i=0
t=80 i=0
t=81 i=0
t=82 i=0
t=83 i=0
t=84 i=0
t=85 i=0
t=86 i=0
t=87 i=0
t=88 i=0
t=89 i=0
t=90 i=0
t=91 i=0
t=92 i=0
t=93 i=0
t=94 i=0
t=95 i=0
t=96 i=0
t=97 i=0
t=98 i=0
t=99 i=0
Помогите разобраться в задании и в коде, программа запускается но пишет бред какой-то.