Форум программистов, компьютерный форум CyberForum.ru

Марковский процесс (графический вывод) - C++

Восстановить пароль Регистрация
 
bacekk
2 / 2 / 0
Регистрация: 30.11.2010
Сообщений: 89
26.12.2011, 23:16     Марковский процесс (графический вывод) #1
У меня было задание реализовать Марковский процесс. Я сделал это следующим образом: у нас есть матрица вероятностей перехода из одного состояния в другое 10x10. Сумма элементов в каждой строке не должно превышать 1. Лучше заполнить всю матрицу элементами равными 0.1, так лучше будет работать рандом состояний. Как работает: мы генерируем число x с помощью функции rand от 0 до 100, засовываем этот х в подпрограмму для ГСЧ от 0 до 1. Мы условились, что в начальный момент времени состояние равно нулю (t=0, i=0). Получаем число z (от 0 до 1), так как состояние равно 0, идем в "нулевую" строчку матрицы и сравниваем z c первым элементом в строке, если z больше первого элемента строки, то мы прибавляем к первому элементу второй, и проверяем, если опять z больше чем сумма, то идем к третьему элементу, если в какой-то момент времени z стало меньше суммы, то мы записываем следующее состояние, как номер столбца, в котором сумма элементов строки больше чем z.
На следующем шаге мы перейдем в строчку с номером этого столбца. И повторяем действия для уже другого z. Таких поисков он делает 100. Вот так работает программа.
Код программы:
Код
 #include <stdlib.h>
 #include <stdio.h>
 #include <conio.h>
 #include <time.h>
 #include <math.h>
 
 #define N 10           
 #define M 100          
 
     float rnd();
 
 main()
 {
   FILE *f, *g;
   float x,y;
   int i,j,t;
   float z,p[N][N],s[N],pp,sp;
 
     f=fopen("C:\\TC\\BIN\\ver.dat","r");
     g=fopen("C:\\TC\\BIN\\rez.dat","w");
 
   for (i=0; i<N; i++)
    {
     for (j=0; j<N-1; j++)
      {
       fscanf(f," %f ",&pp);
       p[i][j]=pp;
      }
     fscanf(f," %f \n",&pp);
     p[i][N-1]=pp;
    }
 
   for (i=0; i<N; i++)
     s[i]=i;
 
  fprintf(g," Markovskij process: \n");
  fprintf(g," ------------------- \n");
 
  t=0;
  i=0;
 
  fprintf(g," t=%d i=%d \n",t,i);
 
  srand(time(NULL)); 
 
  x=rand()%101;
 
  for (t=1; t<=M; t++)
   {
     z=rnd(x);
     x=z*65539;
     sp=0;
 
     for (j=0; i<N; j++)
      {
        sp=sp+p[i][j];
 
        if (z<sp)
         {
          i=s[j];
          break;
         }
      }
 
  fprintf(g," t=%d i=%d \n",t,i);
  fprintf(g,"z=%f",z);
 
  }
 }
 
   float rnd(x)
   float x;
    {
     float y,z1;
 
     y=25175*x+13847;
     y=fmod(y,65539);
     z1=y*1.5255773063e-5;
     x=y;
     return(z1);
   }
ver.dat:
Код
  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.1  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.1  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.1  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.1  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.1  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.1  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.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
rez.dat:
Код
 Markovskij process: 
 ------------------- 
 t=0 i=0 
 t=1 i=2 
z=0.709210 t=2 i=8 
z=0.582984 t=3 i=9 
z=0.835833 t=4 i=8 
z=0.314055 t=5 i=9 
z=0.554486 t=6 i=8 
z=0.404873 t=7 i=9 
z=0.887764 t=8 i=8 
z=0.668218 t=9 i=9 
z=0.602878 t=10 i=8 
z=0.654732 t=11 i=9 
z=0.089201 t=12 i=8 
z=0.833835 t=13 i=9 
z=0.000000 t=14 i=8 
z=0.211247 t=15 i=9 
z=0.346337 t=16 i=8 
z=0.234619 t=17 i=9 
z=0.732918 t=18 i=8 
z=0.418969 t=19 i=9 
z=0.764116 t=20 i=8 
z=0.830219 t=21 i=9 
z=0.978627 t=22 i=8 
z=0.155380 t=23 i=9 
z=0.903798 t=24 i=8 
z=0.319715 t=25 i=9 
z=0.042182 t=26 i=8 
z=0.148378 t=27 i=9 
z=0.618454 t=28 i=8 
z=0.785199 t=29 i=9 
z=0.606737 t=30 i=8 
z=0.825063 t=31 i=9 
z=0.164381 t=32 i=8 
z=0.501884 t=33 i=9 
z=0.150102 t=34 i=0 
z=0.017926 t=35 i=1 
z=0.486522 t=36 i=4 
z=0.399213 t=37 i=1 
z=0.400220 t=38 i=6 
z=0.748616 t=39 i=4 
z=0.619598 t=40 i=2 
z=0.590551 t=41 i=8 
z=0.332072 t=42 i=9 
z=0.133885 t=43 i=8 
z=0.757693 t=44 i=9 
z=0.138507 t=45 i=8 
z=0.128682 t=46 i=9 
z=0.791759 t=47 i=8 
z=0.753452 t=48 i=9 
z=0.367969 t=49 i=8 
z=0.836550 t=50 i=9 
z=0.364003 t=51 i=9 
z=0.979771 t=52 i=9 
z=0.958627 t=53 i=8 
z=0.645151 t=54 i=9 
z=0.896017 t=55 i=8 
z=0.447803 t=56 i=9 
z=0.643992 t=57 i=8 
z=0.708905 t=58 i=9 
z=0.901647 t=59 i=8 
z=0.165968 t=60 i=9 
z=0.444401 t=61 i=9 
z=0.998445 t=62 i=0 
z=0.052480 t=63 i=1 
z=0.391722 t=64 i=7 
z=0.824803 t=65 i=6 
z=0.635311 t=66 i=2 
z=0.176021 t=67 i=8 
z=0.542663 t=68 i=9 
z=0.755359 t=69 i=8 
z=0.377489 t=70 i=9 
z=0.493601 t=71 i=8 
z=0.604891 t=72 i=9 
z=0.353629 t=73 i=8 
z=0.815970 t=74 i=9 
z=0.264688 t=75 i=8 
z=0.723169 t=76 i=9 
z=0.000580 t=77 i=8 
z=0.805592 t=78 i=9 
z=0.979665 t=79 i=8 
z=0.271354 t=80 i=9 
z=0.559261 t=81 i=8 
z=0.617111 t=82 i=9 
z=0.986911 t=83 i=8 
z=0.702391 t=84 i=9 
z=0.905247 t=85 i=8 
z=0.804300 t=86 i=9 
z=0.453890 t=87 i=8 
z=0.885964 t=88 i=9 
z=0.348076 t=89 i=0 
z=0.017803 t=90 i=1 
z=0.414011 t=91 i=7 
z=0.942654 t=92 i=5 
z=0.530764 t=93 i=2 
z=0.186151 t=94 i=8 
z=0.561260 t=95 i=9 
z=0.928237 t=96 i=8 
z=0.590337 t=97 i=9 
z=0.954294 t=98 i=8 
z=0.572030 t=99 i=9 
z=0.078064 t=100 i=8 
z=0.467330
Вот, а весь вопрос заключается в том, как мне сделать так, чтобы выводился в файл графический вариант i(t), ну то есть график по идее. Мне сегодня преподаватель сказал сделать так, а я не знаю как это сделать. Помогите пожалуйста.
P.S. Программа сделана в Turbo C.

Добавлено через 8 минут
Помогите или скиньте ссылочку на этот вопрос, очень нужно, найти не могу, перерыл весь сайт.

Добавлено через 1 час 24 минуты
Помогите пожалуйста, хотя бы ссылкой на материал..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 23:16     Марковский процесс (графический вывод)
Посмотрите здесь:

C++ Графический вьювер
C++ графический редактор
Графический интерфейс C++
Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему? C++
Марковский процесс (разобраться в коде) C++
C++ Графический вывод информации
C++ Графический покер
C++ Процесс А инициализирует массив случайными значениями и записывает их в файл, а затем запускает процесс Б

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 17:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru