C ++中的马尔可夫矩阵程序

给定一个矩阵M [r] [c],行数为'r',列数为'c',我们必须检查给定的矩阵是否为马尔可夫矩阵。如果输入矩阵是马尔可夫矩阵,则打印输出“这是一个马尔可夫矩阵”,如果不是马尔可夫矩阵,则输出“这不是马尔可夫矩阵”。

马尔可夫矩阵

现在,什么是马尔可夫矩阵?当且仅当矩阵M的每一行之和仅等于1时,它才是Markov矩阵。

像下面的例子一样-

$$\ begin {bmatrix} 0.2&0.3&0.5 \\ 0.1&0.7&0.2 \\ 0.4&0.5&0.1 \\\ end {bmatrix} \\ $$

在上面的示例中,如果我们将每一行相加-

1st row sum = 0.2+0.3+0.5 = 1.0

2nd row sum = 0.1+0.7+0.2 = 1.0

3rd row sum = 0.4+0.5+0.1 = 1.0

这里每一行的和为1.0,因此上述矩阵为Markov矩阵。

示例

Input: m[][] = { {0.2, 0.3, 0.5} ,

   {0.1, 0.7, 0.2},

   {0.4, 0.5, 0.1}}

Output: It is a Markov matrix

Input: m[][] = {  {0, 0, 1} ,

   {0, 0.7, 0.3},

   {0.5, 0.5, 0}}

Output: It is a Markov matrix

方法

我们将制作另一个1-d矩阵并将每一行的总和存储在该矩阵中。然后我们将迭代整个数组,然后查找数组中的所有元素是否为1,如果为1,则给定的矩阵为Markov矩阵,否则该矩阵不是Markov矩阵

算法

Start

Step 1 -> Define macro as #define n 3

Step 2 -> declare function to 检查马尔可夫矩阵

   bool check(double arr[][n])

      Loop For int i = 0 and i <n and i++

         Declare double sum = 0

         Loop For int j = 0 and j < n and j++

            Set sum = sum + arr[i][j]

            If (sum != 1)

               return false

            End

         End

   Return true

Step 3 -> In main ()

   Declare double arr[3][3] = { { 0, 0, 1 },

      { 0.5, 0, 0.5 },

      { 0.9, 0, 0.1 } }

   If (check(arr))

      Print its a markov matrix

   Else

      Print its not a markov matrix

Stop

示例

#include <iostream>

using namespace std;

#define n 3

//检查马尔可夫矩阵

bool check(double arr[][n]){

   for (int i = 0; i <n; i++){

      double sum = 0;

      for (int j = 0; j < n; j++)

         sum = sum + arr[i][j];

      if (sum != 1)

         return false;

   }

   return true;

}

int main(){

   double arr[3][3] = { { 0, 0, 1 },

      { 0.5, 0, 0.5 },

      { 0.9, 0, 0.1 } };

   if (check(arr))

      cout << "its a markov matrix ";

   else

      cout << "its not a markov matrix ";

}

输出结果

its a markov matrix

以上是 C ++中的马尔可夫矩阵程序 的全部内容, 来源链接: utcz.com/z/347358.html

回到顶部